:root,[data-theme=light]{--brand: #94070a;--brand-hover: #a3282b;--brand-soft: rgba(148, 7, 10, .1);--brand-ring: rgba(148, 7, 10, .28);--brand-gradient: linear-gradient(135deg, #94070a 0%, #a3282b 100%);--bg: #f8fafc;--bg-warm: #f1f5f9;--surface: #ffffff;--surface-hover: #f8fafc;--text: #0f172a;--text-secondary: #475569;--muted: #94a3b8;--border: #e2e8f0;--border-strong: #cbd5e1;--shadow-xs: 0 1px 2px rgba(15, 23, 42, .06);--shadow-sm: 0 1px 3px rgba(15, 23, 42, .08), 0 1px 2px rgba(15, 23, 42, .04);--shadow-md: 0 4px 12px rgba(15, 23, 42, .08), 0 2px 4px rgba(15, 23, 42, .04);--shadow-lg: 0 12px 32px rgba(15, 23, 42, .1), 0 4px 8px rgba(15, 23, 42, .04);--shadow-xl: 0 20px 48px rgba(15, 23, 42, .14), 0 8px 16px rgba(15, 23, 42, .06);--radius-xs: 6px;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--radius-xl: 20px;--danger: #ef4444;--danger-soft: rgba(239, 68, 68, .1);--success: #10b981;--success-soft: rgba(16, 185, 129, .1);--warning: #f59e0b;--transition-fast: .15s cubic-bezier(.4, 0, .2, 1);--transition: .2s cubic-bezier(.4, 0, .2, 1);--transition-slow: .3s cubic-bezier(.4, 0, .2, 1)}[data-theme=dark]{--brand: #f0b8b9;--brand-hover: #f6d0d1;--brand-soft: rgba(240, 184, 185, .16);--brand-ring: rgba(148, 7, 10, .45);--brand-gradient: linear-gradient(135deg, #94070a 0%, #a3282b 100%);--bg: #0b0f1a;--bg-warm: #111827;--surface: #151a2b;--surface-hover: #1c2235;--text: #f1f5f9;--text-secondary: #cbd5e1;--muted: #64748b;--border: #1e293b;--border-strong: #334155;--shadow-xs: 0 1px 2px rgba(0, 0, 0, .4);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .45), 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 12px rgba(0, 0, 0, .5), 0 2px 4px rgba(0, 0, 0, .35);--shadow-lg: 0 12px 32px rgba(0, 0, 0, .6), 0 4px 8px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 48px rgba(0, 0, 0, .7), 0 8px 16px rgba(0, 0, 0, .5);--danger: #f87171;--danger-soft: rgba(248, 113, 113, .15);--success: #34d399;--success-soft: rgba(52, 211, 153, .15);--warning: #fbbf24}*,*:before,*:after{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{margin:0;min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,Inter,Roboto,sans-serif;color:var(--text);background:var(--bg);background-image:radial-gradient(at 0% 0%,var(--brand-soft) 0,transparent 50%);background-attachment:fixed;font-size:15px;line-height:1.6;transition:background-color var(--transition-slow),color var(--transition-slow)}[data-theme=dark] body{background-image:radial-gradient(at 0% 0%,rgba(129,140,248,.08) 0,transparent 50%),radial-gradient(at 100% 100%,rgba(167,139,250,.05) 0,transparent 50%)}.app-shell{min-height:100vh}.loading-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;color:var(--text-secondary);gap:.85rem;font-size:.95rem}.loading-screen:before{content:"";width:20px;height:20px;border:2px solid var(--border);border-top-color:var(--brand);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.hint{color:var(--muted);font-size:.85rem;margin:.25rem 0 0}.brand-kicker{margin:0;font-size:.7rem;letter-spacing:.18em;text-transform:uppercase;color:var(--brand);font-weight:700}.btn-primary{padding:.65rem 1.25rem;border:0;border-radius:var(--radius-md);background:var(--brand-gradient);color:#fff;font-size:.9rem;font-weight:600;cursor:pointer;box-shadow:0 2px 8px #94070a47,inset 0 1px #ffffff26;transition:transform var(--transition-fast),box-shadow var(--transition),filter var(--transition);position:relative;overflow:hidden}.btn-primary:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 14px #94070a61,inset 0 1px #ffffff26;filter:brightness(1.05)}.btn-primary:active:not(:disabled){transform:translateY(0);box-shadow:0 1px 4px #94070a47}.btn-primary:disabled{opacity:.5;cursor:not-allowed;filter:grayscale(.3)}.btn-ghost{padding:.5rem .9rem;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-secondary);font-size:.85rem;font-weight:500;cursor:pointer;transition:all var(--transition-fast)}.btn-ghost:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}.btn-ghost:active{transform:translateY(0)}.login-page{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);min-height:100vh}.login-brand{position:relative;background:var(--brand-gradient);color:#fff;display:flex;align-items:center;padding:clamp(1.5rem,5vw,3.5rem);overflow:hidden}.login-brand:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse 60% 50% at 100% 0%,rgba(255,255,255,.15),transparent),radial-gradient(ellipse 40% 40% at 0% 100%,rgba(255,255,255,.1),transparent);pointer-events:none}.login-brand:after{content:"";position:absolute;top:-50%;right:-30%;width:80%;height:80%;background:radial-gradient(circle,rgba(255,255,255,.08) 0%,transparent 60%);border-radius:50%;pointer-events:none}.login-brand-inner{position:relative;z-index:1}.login-brand-inner h1{margin:.5rem 0 1rem;font-size:clamp(1.8rem,4vw,2.6rem);font-weight:700;letter-spacing:-.02em;line-height:1.15}.login-brand .brand-kicker{color:#ffffffbf}.brand-copy{margin:0;max-width:28rem;line-height:1.7;opacity:.88;font-size:.95rem}.login-form-panel{display:flex;flex-direction:column;justify-content:center;padding:clamp(1.5rem,5vw,3rem);background:var(--bg);position:relative}.login-form-toolbar{display:flex;justify-content:flex-end;margin-bottom:1rem}.login-form{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);padding:2rem 1.75rem;max-width:22rem;width:100%;margin:0 auto;display:flex;flex-direction:column;gap:.5rem;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.login-form h2{margin:0 0 .25rem;font-size:1.4rem;font-weight:700;letter-spacing:-.01em}.login-form label{font-size:.8rem;font-weight:600;margin-top:.5rem;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em}.login-form input{padding:.7rem .85rem;border:1.5px solid var(--border);border-radius:var(--radius-md);font-size:.95rem;background:var(--bg-warm);color:var(--text);transition:border-color var(--transition),box-shadow var(--transition),background var(--transition);outline:none}.login-form input:hover{border-color:var(--border-strong)}.login-form input:focus{border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-ring);background:var(--surface)}.login-form .btn-primary{margin-top:1rem;padding:.75rem 1.25rem;font-size:.92rem}@media (max-width: 768px){.login-page{grid-template-columns:1fr}.login-brand{min-height:auto;padding:2.5rem 1.5rem}}.materials-page{max-width:1200px;margin:0 auto;padding:1.5rem clamp(1rem,3vw,2rem) 3rem}.materials-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.5rem;padding:1.25rem 1.5rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.materials-header h1{margin:.25rem 0 0;font-size:1.5rem;font-weight:700;letter-spacing:-.01em}.materials-header-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.kbd-hint{font-size:.7rem;color:var(--muted);border:1px solid var(--border);border-radius:var(--radius-xs);padding:.25rem .5rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--bg-warm)}.materials-toolbar{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:1.25rem}.search-input{flex:1 1 16rem;min-width:0;padding:.7rem .9rem .7rem 2.25rem;border:1.5px solid var(--border);border-radius:var(--radius-md);font-size:.95rem;background:var(--surface);color:var(--text);transition:border-color var(--transition),box-shadow var(--transition);outline:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%2394a3b8' viewBox='0 0 16 16'%3E%3Cpath d='M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85zm-5.242.156a5 5 0 1 1 0-10 5 5 0 0 1 0 10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:.75rem center}.search-input:focus{border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-ring)}.view-toggle{display:inline-flex;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;background:var(--surface);box-shadow:var(--shadow-xs)}.view-toggle button{border:0;background:var(--surface);color:var(--muted);padding:.55rem 1rem;cursor:pointer;font-size:.85rem;font-weight:500;transition:all var(--transition-fast)}.view-toggle button:not(:last-child){border-right:1px solid var(--border)}.view-toggle button.active{background:var(--brand-gradient);color:#fff}.view-toggle button:hover:not(.active){color:var(--brand)}.upload-panel{background:var(--surface);border:2px dashed var(--border-strong);border-radius:var(--radius-lg);padding:1.25rem 1.5rem;margin-bottom:1.5rem;transition:border-color var(--transition),background var(--transition)}.upload-panel:hover{border-color:var(--brand);background:var(--brand-soft)}.upload-panel label{font-size:.85rem;font-weight:600;color:var(--text-secondary)}.upload-row{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;margin-top:.75rem}.upload-row input[type=file]{flex:1 1 12rem;min-width:0;font-size:.85rem;padding:.4rem;border-radius:var(--radius-sm);color:var(--text-secondary)}.upload-row input[type=file]::file-selector-button{margin-right:.75rem;padding:.4rem .8rem;border:0;border-radius:var(--radius-sm);background:var(--brand-soft);color:var(--brand);font-weight:600;font-size:.8rem;cursor:pointer;transition:background var(--transition-fast)}.upload-row input[type=file]::file-selector-button:hover{background:var(--brand);color:#fff}.progress-wrap{margin-top:.85rem;display:flex;align-items:center;gap:.75rem}.progress{flex:1;height:6px;background:var(--bg-warm);border-radius:999px;overflow:hidden}.progress.indeterminate{position:relative}.progress.indeterminate:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--brand-gradient);animation:indeterminate 1.2s infinite}@keyframes indeterminate{0%{transform:translate(-100%)}to{transform:translate(100%)}}.progress-bar{height:100%;background:var(--brand-gradient);border-radius:999px;transition:width .15s ease}.progress-label{font-size:.8rem;color:var(--muted);min-width:2.5rem;font-variant-numeric:tabular-nums}.materials-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:1.5rem}@media (min-width: 900px){.materials-layout{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr)}}.materials-list-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:.5rem;min-height:8rem;box-shadow:var(--shadow-sm)}.materials-list{list-style:none;margin:0;padding:.25rem}.materials-list li{border-bottom:1px solid var(--border)}.materials-list li:last-child{border-bottom:0}.material-link{width:100%;text-align:left;border:0;background:transparent;padding:.85rem .6rem;margin:.25rem 0;border-radius:var(--radius-md);cursor:pointer;display:flex;flex-direction:column;gap:.2rem;transition:background var(--transition-fast),transform var(--transition-fast)}.material-link:hover{background:var(--brand-soft)}.material-link:hover .material-title{color:var(--brand)}.material-title{font-size:.95rem;font-weight:600;color:var(--text);transition:color var(--transition-fast)}.meta{color:var(--muted);font-size:.78rem}.materials-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));gap:.75rem;padding:.5rem}.material-card{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-warm);padding:1rem;text-align:left;cursor:pointer;display:flex;flex-direction:column;gap:.4rem;min-height:6rem;transition:all var(--transition);position:relative;overflow:hidden}.material-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--brand-gradient);opacity:0;transition:opacity var(--transition)}.material-card:hover{border-color:var(--brand);box-shadow:var(--shadow-md);transform:translateY(-2px);background:var(--surface)}.material-card:hover:before{opacity:1}.detail-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.5rem 1.5rem 2rem;box-shadow:var(--shadow-sm);position:relative}.detail-header{display:flex;justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.5rem}.detail-header h2{margin:0;font-size:1.25rem;font-weight:700;letter-spacing:-.01em}.plain-body{white-space:pre-wrap;background:var(--bg-warm);border-radius:var(--radius-md);padding:1rem;font-size:.85rem;overflow-x:auto;max-width:100%;border:1px solid var(--border);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;line-height:1.7}.markdown-body{font-size:.92rem;line-height:1.75;overflow-x:auto;max-width:100%}.markdown-body h1,.markdown-body h2,.markdown-body h3{margin-top:1.25rem;margin-bottom:.5rem;font-weight:700;letter-spacing:-.01em}.markdown-body h1{font-size:1.5rem}.markdown-body h2{font-size:1.25rem}.markdown-body h3{font-size:1.1rem}.markdown-body pre{background:var(--bg-warm);padding:1rem;border-radius:var(--radius-md);overflow-x:auto;border:1px solid var(--border)}.markdown-body code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em;background:var(--bg-warm);padding:.15em .4em;border-radius:var(--radius-xs);border:1px solid var(--border)}.markdown-body pre code{background:none;padding:0;border:0}.markdown-body a{color:var(--brand);text-decoration:none;border-bottom:1px dashed var(--brand);transition:border-color var(--transition-fast)}.markdown-body a:hover{border-bottom-style:solid}.download-line{margin-top:1.25rem;font-size:.9rem}.download-line a{color:var(--brand);font-weight:600;text-decoration:none;border-bottom:1px dashed var(--brand);transition:border-color var(--transition-fast)}.download-line a:hover{border-bottom-style:solid}.empty-hint{padding:2rem 1rem;text-align:center;color:var(--muted);font-size:.9rem}.toast-stack{position:fixed;right:1.25rem;bottom:1.25rem;z-index:2000;display:flex;flex-direction:column;gap:.6rem;max-width:min(22rem,calc(100vw - 2.5rem))}.toast{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;padding:.85rem 1rem;border-radius:var(--radius-md);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-lg);font-size:.88rem;animation:toast-slide-in .3s cubic-bezier(.21,1.02,.73,1) both;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}@keyframes toast-slide-in{0%{opacity:0;transform:translate(24px) scale(.96)}to{opacity:1;transform:translate(0) scale(1)}}.toast-success{border-left:4px solid var(--success);background-image:linear-gradient(to right,var(--success-soft),transparent)}.toast-error{border-left:4px solid var(--danger);background-image:linear-gradient(to right,var(--danger-soft),transparent)}.toast-close{border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:1.1rem;line-height:1;padding:.1rem .3rem;border-radius:var(--radius-xs);transition:all var(--transition-fast)}.toast-close:hover{background:var(--border);color:var(--text)}.cmd-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a80;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);z-index:3000;display:flex;align-items:flex-start;justify-content:center;padding:12vh 1rem;animation:overlay-fade-in .2s ease both}@keyframes overlay-fade-in{0%{opacity:0}to{opacity:1}}.cmd-panel{width:min(32rem,100%);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);padding:.85rem;animation:panel-slide-down .25s cubic-bezier(.21,1.02,.73,1) both}@keyframes panel-slide-down{0%{opacity:0;transform:translateY(-8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.cmd-input{width:100%;padding:.75rem .9rem;border:1.5px solid var(--border);border-radius:var(--radius-md);font-size:.95rem;background:var(--bg-warm);color:var(--text);outline:none;transition:border-color var(--transition),box-shadow var(--transition)}.cmd-input:focus{border-color:var(--brand);box-shadow:0 0 0 4px var(--brand-ring)}.cmd-list{list-style:none;margin:.6rem 0 0;padding:0;max-height:18rem;overflow-y:auto}.cmd-list button{width:100%;text-align:left;border:0;background:transparent;padding:.6rem .65rem;border-radius:var(--radius-sm);cursor:pointer;color:var(--text);font-size:.88rem;transition:all var(--transition-fast)}.cmd-list button:hover{background:var(--brand-soft);color:var(--brand)}.cmd-empty{padding:1rem .75rem;color:var(--muted);font-size:.85rem;text-align:center}.cmd-hint{margin:.6rem 0 0;font-size:.72rem;color:var(--muted);text-align:center;padding-top:.5rem;border-top:1px solid var(--border)}
