:root{--color-bg:#f5f7fa;--color-bg-subtle:#f7f7f9;--color-surface:#fff;--color-border:#e2e8f0;--color-text:#1a202c;--color-text-muted:#718096;--color-text-secondary:#4a5568;--color-primary:#4a6cf7;--color-primary-hover:#3b5bdb;--color-primary-light:#ebefff;--color-primary-soft:#4a6cf70f;--color-success:#38a169;--color-success-bg:#f0fff4;--color-danger:#e53e3e;--color-danger-bg:#fff5f5;--color-warning:#d69e2e;--color-warning-bg:#fffbe6;--color-warning-border:#ffe58f;--color-warning-text:#7c5700;--color-gray:#a0aec0;--color-gray-bg:#edf2f7;--color-nav-bg:#fff;--color-nav-border:#e2e8f0;--shadow-sm:0 1px 3px #00000014;--shadow-md:0 4px 12px #0000001a;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;--font-mono:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;--transition:.15s ease;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--color-bg:#111318;--color-bg-subtle:#16181e;--color-surface:#1b1e25;--color-border:#2e3440;--color-text:#e6e8ec;--color-text-muted:#8f97a5;--color-text-secondary:#b6bcc7;--color-primary:#5b7bfa;--color-primary-hover:#7a94fb;--color-primary-light:#5b7bfa2e;--color-primary-soft:#5b7bfa14;--color-success:#48bb78;--color-success-bg:#48bb7824;--color-danger:#f56565;--color-danger-bg:#f5656524;--color-warning:#ecc94b;--color-warning-bg:#ecc94b1f;--color-warning-border:#ecc94b59;--color-warning-text:#f6e05e;--color-gray:#8f97a5;--color-gray-bg:#272b34;--color-nav-bg:#16181e;--color-nav-border:#2e3440;--shadow-sm:0 1px 3px #0006;--shadow-md:0 4px 12px #00000080}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{overscroll-behavior:none;height:100%}body{font-family:var(--font-sans);color:var(--color-text);background-color:var(--color-bg);-webkit-font-smoothing:antialiased;font-size:20px;line-height:1.6}.app{flex-direction:column;min-height:100vh;display:flex}.main-content{flex:1;width:100%;max-width:1100px;margin:0 auto;padding:80px 16px 24px}.sticky-header{z-index:50;position:fixed;top:0;left:0;right:0}.navbar{background:var(--color-nav-bg);border-bottom:1px solid var(--color-nav-border);height:56px;box-shadow:var(--shadow-sm);align-items:center;gap:24px;padding:0 24px;display:flex}.navbar-brand{color:var(--color-primary);white-space:nowrap;flex-shrink:0;font-size:16px;font-weight:700}.navbar-links{flex:1;gap:8px;display:flex}.nav-link{border-radius:var(--radius-sm);color:var(--color-text-muted);transition:color var(--transition), background var(--transition);padding:6px 14px;font-size:14px;font-weight:500;text-decoration:none}.nav-link:hover,.nav-link.active{color:var(--color-primary);background:var(--color-primary-light)}.navbar-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}button{cursor:pointer;font-family:var(--font-sans);border-radius:var(--radius-sm);transition:background var(--transition), color var(--transition), opacity var(--transition);border:none;font-size:14px}button:disabled{opacity:.6;cursor:not-allowed}.btn{border-radius:var(--radius-md);justify-content:center;align-items:center;padding:8px 18px;font-weight:500;display:inline-flex}.btn-primary{background:var(--color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary{background:var(--color-gray-bg);color:var(--color-text);border:1px solid var(--color-border)}.btn-secondary:hover:not(:disabled){background:var(--color-border)}.btn-success{background:var(--color-success);color:#fff}.btn-success:hover:not(:disabled),.btn-danger:hover:not(:disabled){filter:brightness(.92)}.btn-danger{background:var(--color-danger);color:#fff}.btn-ghost{color:var(--color-text-muted);border-radius:var(--radius-sm);background:0 0;padding:6px 10px}.btn-ghost:hover{background:var(--color-gray-bg);color:var(--color-text)}.btn-sm{padding:4px 10px;font-size:13px}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);margin-bottom:20px;padding:20px 24px}.card-title{color:var(--color-text);margin-bottom:14px;font-size:15px;font-weight:600}.page{padding:4px 0}.empty-message{color:var(--color-text-muted);text-align:center;padding:20px 0;font-size:13px}.loading-screen{height:200px;color:var(--color-text-muted);justify-content:center;align-items:center;display:flex}.login-container{justify-content:center;align-items:center;min-height:calc(100vh - 56px);padding:32px 16px;display:flex}.login-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);text-align:center;width:100%;max-width:400px;box-shadow:var(--shadow-md);padding:36px 40px}.login-method-toggle{justify-content:center;gap:1.5rem;width:100%;margin-bottom:1.25rem;display:flex}.login-method-toggle .method-tab{all:unset;cursor:pointer;color:var(--color-text-muted);border-bottom:3px solid #0000;padding-bottom:6px;font-size:20px;font-weight:700;transition:color .2s,border-color .2s}.login-method-toggle .method-tab:hover:not(:disabled){color:var(--color-text)}.login-method-toggle .method-tab.active{color:var(--color-text);border-bottom-color:var(--color-primary)}.login-method-toggle .method-tab:disabled{opacity:.5;cursor:default}.login-note{color:var(--color-text-muted);margin-top:20px;font-size:12px;line-height:1.5}.qr-wrapper{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-bg);justify-content:center;align-items:center;width:200px;height:200px;margin:0 auto 20px;display:flex;position:relative;overflow:hidden}.qr-image{object-fit:contain;width:200px;height:200px;display:block}.qr-placeholder{color:var(--color-text-muted);flex-direction:column;justify-content:center;align-items:center;gap:12px;font-size:13px;display:flex}.qr-success{color:var(--color-success)}.qr-error{color:var(--color-danger)}.qr-error-detail{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.spinner{border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;width:28px;height:28px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.badge{text-transform:uppercase;letter-spacing:.02em;border-radius:999px;flex-shrink:0;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.badge-green{background:var(--color-success-bg);color:var(--color-success)}.badge-red{background:var(--color-danger-bg);color:var(--color-danger)}.badge-yellow{background:var(--color-warning-bg);color:var(--color-warning)}.badge-blue{background:var(--color-primary-light);color:var(--color-primary)}.badge-gray{background:var(--color-gray-bg);color:var(--color-gray)}.data-table{border-collapse:collapse;width:100%}.data-table th,.data-table td{text-align:left;border-bottom:1px solid var(--color-border);padding:10px 14px}.data-table th{text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-muted);background:var(--color-bg);font-size:12px;font-weight:600}.data-table td{font-size:14px}.data-table tr:last-child td{border-bottom:none}.data-table .cell-fill{width:100%;max-width:0}.data-table th,.data-table td:not(.cell-fill){white-space:nowrap}.truncate-middle{min-width:0;max-width:100%;display:inline-flex}.truncate-middle>span{white-space:pre}.truncate-head{text-overflow:ellipsis;overflow:hidden}.truncate-tail{flex-shrink:0}.data-table tr:hover td{background:var(--color-bg)}.activity-log{flex-direction:column;gap:6px;max-height:400px;display:flex;overflow-y:auto}.activity-entry{background:var(--color-bg);border-radius:var(--radius-sm);align-items:baseline;gap:10px;padding:8px 10px;font-size:13px;line-height:1.4;display:flex}.activity-time{font-family:var(--font-mono);color:var(--color-text-muted);flex-shrink:0;min-width:64px;font-size:11px}.activity-text{color:var(--color-text);word-break:break-word;flex:1}.activity-detail{color:var(--color-text-muted);margin-top:2px;font-size:12px;display:block}.settings-section{margin-bottom:28px}.settings-section-title{color:var(--color-text);margin-bottom:12px;font-size:16px;font-weight:600}.settings-group{border-bottom:1px solid var(--color-border);flex-direction:column;gap:8px;padding:10px 0;display:flex}.settings-group:last-child{border-bottom:none;padding-bottom:0}.settings-group-label{text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-muted);font-size:11px;font-weight:600}.course-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;display:grid}.course-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);min-width:0;box-shadow:var(--shadow-sm);flex-direction:column;display:flex}.course-card-header{border-bottom:1px solid var(--color-border);padding:16px 20px 12px}.course-card-title{color:var(--color-text);font-size:14px;font-weight:600;font-family:var(--font-mono);display:flex}.course-card-body{flex-direction:column;flex:1;gap:10px;padding:12px 20px;display:flex}.form-row-sub{border-left:2px solid var(--color-border);margin-left:16px;padding-left:12px}.input-with-unit{align-items:center;gap:6px;display:flex}.form-input,.form-input-number{border:1px solid var(--color-border);color:var(--color-text);background:var(--color-surface);border-radius:6px;font-size:14px}.form-input:focus,.form-input-number:focus{border-color:var(--color-primary);outline:none}.form-input{width:100%;padding:6px 10px}.credential-list{flex-direction:column;gap:8px;margin-bottom:16px;display:flex}.credential-item{border:1px solid var(--color-border);background:var(--color-surface);border-radius:6px;justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.credential-item.credential-active{border-color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 5%, var(--color-surface))}.credential-info{align-items:center;gap:10px;min-width:0;display:flex}.credential-name{font-size:14px;font-weight:600}.credential-meta{color:var(--color-text-muted);background:var(--color-bg);border-radius:4px;padding:1px 6px;font-size:12px}.credential-masked{color:var(--color-text-muted);font-size:13px;font-family:var(--font-mono)}.credential-actions{flex-shrink:0;gap:6px;display:flex}.credential-add-form{border-top:1px solid var(--color-border);align-items:center;gap:10px;padding-top:14px;display:flex}.credential-add-fields{flex:1;align-items:center;gap:8px;min-width:0;display:flex}.credential-add-fields .form-input{flex:1;min-width:0}.credential-add-fields .form-select{flex-shrink:0;min-width:110px}.form-input-number{text-align:center;width:70px;padding:5px 8px}.input-unit{color:var(--color-text-muted);font-size:13px}.notif-section{margin-top:4px}.notif-suboptions{background:var(--color-bg);border:1px solid var(--color-border);border-radius:6px;flex-wrap:wrap;gap:8px 16px;margin-top:6px;padding:8px 12px;display:flex}.notif-sub-item{color:var(--color-text);cursor:pointer;align-items:center;gap:6px;font-size:13px;display:flex}.notif-sub-item input[type=checkbox]{width:15px;height:15px;accent-color:var(--color-primary);cursor:pointer}.course-card-footer{border-top:1px solid var(--color-border);align-items:center;gap:8px;padding:12px 20px 16px;display:flex}.footer-spacer{flex:1}.form-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.form-label{color:var(--color-text);flex-shrink:0;font-size:13px;font-weight:500}.form-label:has(.tooltip-trigger){align-items:center;gap:4px;display:inline-flex}.tooltip-trigger{background:var(--color-border);width:16px;height:16px;color:var(--color-text-secondary);cursor:default;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:11px;font-weight:600;transition:background .15s,color .15s;display:inline-flex}.tooltip-trigger:hover{background:var(--color-text);color:var(--color-surface)}.tooltip-trigger:hover,.switch-wrap[data-tooltip]:hover{anchor-name:--tooltip}.tooltip-trigger[data-tooltip]:after{content:attr(data-tooltip);position-anchor:--tooltip;position-area:top;position-try-fallbacks:flip-block;background:var(--color-text);color:var(--color-surface);border-radius:var(--radius-sm);white-space:normal;pointer-events:none;opacity:0;z-index:100;width:max-content;max-width:280px;margin:6px 8px;padding:8px 12px;font-size:12px;font-weight:400;line-height:1.5;transition:opacity .15s;position:fixed}.tooltip-trigger[data-tooltip]:hover:after{opacity:1}.tooltip-table-popup{position-anchor:--tooltip;position-area:top;position-try-fallbacks:flip-block;background:var(--color-text);color:var(--color-surface);border-radius:var(--radius-sm);pointer-events:none;opacity:0;z-index:100;width:max-content;max-width:min(560px,100vw - 16px);margin:6px 8px;padding:10px 12px;font-size:12px;font-weight:400;line-height:1.45;transition:opacity .15s;position:fixed;box-shadow:0 4px 16px #00000040}.tooltip-trigger:hover .tooltip-table-popup{opacity:1}.tooltip-table-popup .tooltip-table-title{white-space:nowrap;margin-bottom:6px;font-weight:600}.tooltip-table-popup table{border-collapse:collapse;width:100%}.tooltip-table-popup th,.tooltip-table-popup td{text-align:left;vertical-align:top;border-bottom:1px solid color-mix(in srgb, currentColor 15%, transparent);white-space:nowrap;padding:4px 8px}.tooltip-table-popup td:last-child,.tooltip-table-popup th:last-child{white-space:normal}.tooltip-table-popup tr:last-child th,.tooltip-table-popup tr:last-child td{border-bottom:none}.tooltip-table-popup th{opacity:.85;font-weight:600}.form-select{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);font-family:var(--font-sans);color:var(--color-text);cursor:pointer;min-width:140px;transition:border-color var(--transition);padding:6px 10px;font-size:13px}.form-select:focus{border-color:var(--color-primary);outline:none}.toggle-group{border:1px solid var(--color-border);border-radius:var(--radius-sm);display:flex;overflow:hidden}.switch-wrap{display:inline-flex}.switch{appearance:none;background:var(--color-border);cursor:pointer;width:36px;height:20px;transition:background-color var(--transition);border-radius:10px;flex-shrink:0;position:relative}.switch:before{content:"";width:16px;height:16px;transition:translate var(--transition);background:#fff;border-radius:50%;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #00000040}.switch:checked{background:var(--color-primary)}.switch:checked:before{translate:16px}.switch:disabled{opacity:.5;cursor:not-allowed}.switch:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.switch-wrap[data-tooltip]{cursor:not-allowed}.switch-wrap[data-tooltip]:after{content:attr(data-tooltip);position-anchor:--tooltip;position-area:top;position-try-fallbacks:flip-block;background:var(--color-text);color:var(--color-surface);border-radius:var(--radius-sm);white-space:normal;pointer-events:none;opacity:0;z-index:100;width:max-content;max-width:280px;margin:6px 8px;padding:8px 12px;font-size:12px;font-weight:400;line-height:1.5;transition:opacity .15s;position:fixed}.switch-wrap[data-tooltip]:hover:after{opacity:1}.toggle-option{background:var(--color-surface);color:var(--color-text-muted);border:none;border-right:1px solid var(--color-border);transition:background var(--transition), color var(--transition);padding:5px 14px;font-size:13px}.toggle-option:last-child{border-right:none}.toggle-option.selected{background:var(--color-primary);color:#fff}.toggle-option:hover:not(.selected){background:var(--color-primary-light);color:var(--color-primary)}.app-footer{border-top:1px solid var(--color-border);background:0 0;justify-content:center;align-items:center;gap:12px;margin-top:8px;padding:20px 16px 24px;display:flex}.app-footer-version{color:var(--color-text-muted);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px}a.app-footer-version:hover{color:var(--color-primary);text-decoration:underline}.app-footer-link{border-radius:var(--radius-sm);color:var(--color-text-muted);transition:color var(--transition), background var(--transition);align-items:center;gap:8px;padding:6px 12px;font-size:13px;font-weight:500;text-decoration:none;display:inline-flex}.app-footer-link:hover{color:var(--color-primary);background:var(--color-primary-light)}.app-footer-icon{flex-shrink:0}@media (width<=800px){.navbar{gap:12px;padding:0 16px}.navbar-brand{font-size:14px}.main-content{padding:16px 12px}.login-card{padding:24px 20px}.course-grid{grid-template-columns:1fr}.data-table th:nth-child(3),.data-table td:nth-child(3){display:none}.credential-add-form{flex-direction:column;align-items:stretch}.credential-add-fields{flex-direction:column}.credential-add-fields .form-select{width:100%}}.account-switcher{align-items:center;display:inline-flex;position:relative}.account-switcher-trigger{align-items:center;gap:6px;display:inline-flex}.account-name{max-width:10em}.account-caret{opacity:.6;font-size:10px}.account-dropdown{background:var(--color-surface);border:1px solid var(--color-border);z-index:50;border-radius:8px;min-width:280px;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 8px 24px #0000001a}.account-dropdown-header{color:var(--color-text-muted);background:var(--color-bg-subtle);border-bottom:1px solid var(--color-border);padding:8px 12px;font-size:12px}.account-dropdown-empty{color:var(--color-text-muted);text-align:center;padding:16px;font-size:13px}.account-row{border-bottom:1px solid var(--color-border);align-items:center;gap:8px;padding:8px 10px;display:flex}.account-row:last-of-type{border-bottom:none}.account-row-active{background:var(--color-primary-soft)}.account-row-info{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.account-row-name{font-size:14px;font-weight:500}.account-row-sub{color:var(--color-text-muted);font-size:11px}.account-row-actions{gap:4px;display:flex}.account-add{border:none;border-top:1px solid var(--color-border);width:100%;color:var(--color-primary);cursor:pointer;text-align:center;background:0 0;padding:10px;font-size:13px;display:block}.account-add:hover{background:var(--color-bg-subtle)}.login-cancel{align-self:flex-start;margin-bottom:8px}.form-row-padded{margin-bottom:8px;padding:0 16px}.form-row-padded-y{padding:12px 16px}.input-with-unit-row{align-items:center;gap:8px;display:flex}.settings-card-hint{color:var(--color-text-muted);margin:0;padding:12px 16px 0;font-size:12px}.login-form-row{width:100%;margin-bottom:1rem}.login-form-label{margin-bottom:.5rem;margin-right:.5rem}.login-form-block{width:100%}.login-form-field{margin-bottom:.75rem}.login-form-input{width:100%;padding:.5rem .75rem}.login-form-error{color:var(--color-danger);overflow-wrap:anywhere;margin-bottom:.75rem;font-size:.85rem}.login-submit{width:100%}
