@import"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Manrope:wght@400;500;600;700&display=swap";:root{--bg: #0b1220;--panel: #0f1629;--card: #121c33;--card-strong: #0d1628;--border: rgba(255, 255, 255, .08);--muted: #8ea0bf;--text: #e6edf5;--text-strong: #f8fbff;--accent: #3dd6a5;--accent-2: #f3b432;--danger: #ff6b6b;--success: #3dd6a5;--warning: #f3b432;--error: #ff6b6b;--info: #5ba4f5;--bg-success: rgba(61, 214, 165, .12);--bg-warning: rgba(243, 180, 50, .12);--bg-error: rgba(255, 107, 107, .12);--bg-info: rgba(91, 164, 245, .12);--bg-hover: rgba(255, 255, 255, .04);--bg-active: rgba(255, 255, 255, .08);--glass-opacity-thin: .05;--glass-opacity-regular: .08;--glass-opacity-thick: .15;--blur-subtle: 12px;--blur-regular: 20px;--blur-strong: 40px;--blur-ultra: 60px;--highlight-white: rgba(255, 255, 255, .35);--highlight-subtle: rgba(255, 255, 255, .15);--glass-tint-neutral: rgba(15, 22, 41, .6);--glass-tint-accent: rgba(61, 214, 165, .08);--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-7: 32px;--space-8: 40px;--space-9: 48px;--space-10: 64px;--font-xs: .75rem;--font-sm: .875rem;--font-base: 1rem;--font-lg: 1.125rem;--font-xl: 1.25rem;--font-2xl: 1.5rem;--font-3xl: 1.875rem;--font-4xl: 2.25rem;--font-sans: "Manrope", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-display: "Space Grotesk", var(--font-sans);--radius-sm: 10px;--radius-md: 14px;--radius-lg: 22px;--radius-xl: 28px;--radius-full: 9999px;--shadow-foreground: 0 20px 60px rgba(0, 0, 0, .45), 0 0 0 .5px rgba(255, 255, 255, .05);--shadow-1: 0 15px 60px rgba(0, 0, 0, .35);--shadow-2: 0 10px 40px rgba(0, 0, 0, .28);--shadow-background: 0 4px 12px rgba(0, 0, 0, .15);--shadow-soft: 0 12px 30px rgba(61, 214, 165, .12);--shadow-inner: inset 0 1px 2px rgba(255, 255, 255, .03);--shadow-glass: 0 8px 32px rgba(0, 0, 0, .25), inset 0 1px 1px rgba(255, 255, 255, .05);--focus-ring: 0 0 0 4px rgba(61, 214, 165, .32);--focus-outline: 2px solid #d2ffe9;--transition-micro: .1s ease-out;--transition-fast: .15s ease-out;--transition-base: .15s ease-out;--transition-slow: .3s ease;--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--touch-target: 44px;--breakpoint-sm: 640px;--breakpoint-md: 1024px;--breakpoint-lg: 1440px}*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:var(--font-sans);font-size:var(--font-base);background:radial-gradient(ellipse at 20% 10%,rgba(61,214,165,.12),transparent 40%),radial-gradient(ellipse at 80% 20%,rgba(91,164,245,.08),transparent 35%),radial-gradient(ellipse at 60% 80%,rgba(243,180,50,.06),transparent 40%),linear-gradient(160deg,#0a0f1c,#0d1628 40%,#0a1020);background-attachment:fixed;color:var(--text);min-height:100vh;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}h1,h2,h3,h4,h5{font-family:var(--font-display);margin:0;letter-spacing:-.01em}h1{font-weight:700;line-height:1.1}h2{font-weight:600;line-height:1.2}h3{font-weight:500;line-height:1.3}h4,h5{font-weight:500;line-height:1.4}p{margin:0;color:var(--muted)}input,select,textarea,button{font:inherit;color:inherit}.app-shell{min-height:100vh}.glass{position:relative;background:var(--glass-tint-neutral);backdrop-filter:blur(var(--blur-regular)) saturate(1.5);-webkit-backdrop-filter:blur(var(--blur-regular)) saturate(1.5);border:.5px solid rgba(255,255,255,.12);border-radius:var(--radius-lg);box-shadow:var(--shadow-glass)}.glass:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.25) 0%,transparent 40%);border-radius:inherit;pointer-events:none;opacity:.6}.glass-thin{background:rgba(15,22,41,var(--glass-opacity-thin))}.glass-thick{background:rgba(15,22,41,var(--glass-opacity-thick));backdrop-filter:blur(var(--blur-strong)) saturate(1.6);-webkit-backdrop-filter:blur(var(--blur-strong)) saturate(1.6)}.topbar{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;padding:16px 22px;background:#0b122066;backdrop-filter:blur(var(--blur-ultra)) saturate(1.8);-webkit-backdrop-filter:blur(var(--blur-ultra)) saturate(1.8);border-bottom:.5px solid rgba(255,255,255,.1);box-shadow:0 1px 3px #0000001f}.topbar:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.2) 20%,rgba(255,255,255,.3) 50%,rgba(255,255,255,.2) 80%,transparent 100%);pointer-events:none}.brand{display:flex;align-items:center;gap:12px;font-weight:700;color:var(--text-strong)}.top-actions{display:flex;align-items:center;gap:12px}.pill{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:999px;background:#ffffff0f;backdrop-filter:blur(8px) saturate(1.2);-webkit-backdrop-filter:blur(8px) saturate(1.2);border:1px solid rgba(255,255,255,.1);color:var(--text)}.pill[data-tone=accent]{background:#3dd6a526;border-color:#3dd6a559;color:#b8ffe6}.nav{display:inline-flex;gap:8px;padding:6px;border-radius:var(--radius-md);background:#ffffff0d;backdrop-filter:blur(var(--blur-subtle)) saturate(1.3);-webkit-backdrop-filter:blur(var(--blur-subtle)) saturate(1.3);border:1px solid rgba(255,255,255,.1)}.nav a{padding:10px 14px;border-radius:var(--radius-sm);color:var(--muted);transition:all .2s ease}.nav a.active{background:linear-gradient(120deg,#3dd6a52e,#f3b43224);color:var(--text-strong);border:1px solid rgba(61,214,165,.35);box-shadow:0 2px 8px #3dd6a526}.page{max-width:1260px;margin:0 auto;padding:24px 18px 56px}.grid{display:grid;gap:16px}.grid.two{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}.grid.three{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.card{position:relative;background:#121c3366;backdrop-filter:blur(var(--blur-regular)) saturate(1.4);-webkit-backdrop-filter:blur(var(--blur-regular)) saturate(1.4);border:.5px solid rgba(255,255,255,.1);border-radius:var(--radius-lg);padding:var(--space-5) var(--space-5);box-shadow:var(--shadow-glass);transition:transform var(--transition-fast),box-shadow var(--transition-fast),border-color var(--transition-fast);will-change:transform;transform:translateZ(0)}.card:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.15) 0%,transparent 50%);border-radius:inherit;pointer-events:none;opacity:.7;transition:opacity var(--transition-base)}.card:after{content:"";position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.2) 50%,transparent 100%);border-radius:var(--radius-lg) var(--radius-lg) 0 0;pointer-events:none}.card:hover{background:#121c3380;box-shadow:0 12px 40px #0000004d,inset 0 1px 1px #ffffff14;transform:translateY(-2px)}.card:hover:before{opacity:.9}.card.elevated{box-shadow:var(--shadow-foreground),inset 0 1px 1px #ffffff14;border-color:#ffffff24}.card.inset{box-shadow:inset 0 2px 4px #00000040;background:#0b122080;backdrop-filter:blur(var(--blur-subtle)) saturate(1.2);-webkit-backdrop-filter:blur(var(--blur-subtle)) saturate(1.2)}.card.inset:before{opacity:.3}.card-strong{background:#0d162880;border-color:#ffffff14;backdrop-filter:blur(var(--blur-regular)) saturate(1.5);-webkit-backdrop-filter:blur(var(--blur-regular)) saturate(1.5)}.card-header{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-3)}.card-header.centered{justify-content:center;text-align:center}.muted{color:var(--muted)}.badge{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);background:#ffffff0f;backdrop-filter:blur(8px) saturate(1.2);-webkit-backdrop-filter:blur(8px) saturate(1.2);border:1px solid rgba(255,255,255,.1);color:var(--text);font-weight:600;font-size:var(--font-xs);letter-spacing:.01em}.badge[data-tone=accent]{background:#3dd6a526;border-color:#3dd6a566;color:#c9ffe9}.badge[data-tone=warn]{background:#f3b43226;border-color:#f3b43266;color:#ffecc5}.badge[data-tone=danger]{background:#ff6b6b26;border-color:#ff6b6b73;color:#ffd0d0}@keyframes panelIntro{0%{opacity:0;transform:translate(42px) scale(1.12)}to{opacity:1;transform:translate(0) scale(1)}}@keyframes badgePop{0%{opacity:0;transform:scale(1.18) translateY(10px)}50%{opacity:1;transform:scale(1.02) translateY(0)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes textLift{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes cardRise{0%{opacity:0;transform:translateY(22px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes glassSlideIn{0%{opacity:0;transform:translateY(-8px) scale(.98);backdrop-filter:blur(0px);-webkit-backdrop-filter:blur(0px)}to{opacity:1;transform:translateY(0) scale(1);backdrop-filter:blur(var(--blur-strong)) saturate(1.5);-webkit-backdrop-filter:blur(var(--blur-strong)) saturate(1.5)}}@keyframes glassShimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.glass-shimmer{position:relative;overflow:hidden}.glass-shimmer:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.1) 50%,transparent 100%);background-size:200% 100%;animation:glassShimmer 2s ease-in-out infinite;pointer-events:none}.btn{position:relative;border:none;border-radius:var(--radius-md);padding:var(--space-3) var(--space-4);min-height:var(--touch-target);background:#ffffff14;backdrop-filter:blur(8px) saturate(1.3);-webkit-backdrop-filter:blur(8px) saturate(1.3);color:var(--text);cursor:pointer;transition:background var(--transition-fast),border-color var(--transition-fast),transform var(--transition-fast),box-shadow var(--transition-fast);border:1px solid rgba(255,255,255,.12);display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);font-weight:600;font-size:var(--font-sm);overflow:hidden;will-change:transform;transform:translateZ(0);backface-visibility:hidden}.btn:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.15) 0%,transparent 50%);border-radius:inherit;pointer-events:none;opacity:.6;transition:opacity var(--transition-base)}.btn:hover{background:#ffffff1f;border-color:#ffffff2e;transform:translateY(-1px)}.btn:hover:before{opacity:.8;background:linear-gradient(135deg,rgba(255,255,255,.2) 0%,transparent 60%)}.btn:active{background:#ffffff26;transform:scale(.98) translateY(0)}.btn.icon{width:var(--touch-target);height:var(--touch-target);min-width:var(--touch-target);min-height:var(--touch-target);padding:0;border-radius:var(--radius-md)}.btn.icon svg{width:18px;height:18px}.btn.icon:hover{background:#ffffff1a;border-color:#3dd6a559}.btn.icon.plain{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border-color:var(--border)}.btn.icon.plain:before{display:none}.btn.icon.plain:hover{background:#ffffff14;border-color:#ffffff24}.btn.primary{background:linear-gradient(120deg,var(--accent),#2ac493);color:#0a0f1c;border-color:#3dd6a54d;box-shadow:var(--shadow-soft),0 0 20px #3dd6a533;backdrop-filter:none;-webkit-backdrop-filter:none}.btn.primary:before{background:linear-gradient(135deg,rgba(255,255,255,.3) 0%,transparent 50%)}.btn.primary:hover{background:linear-gradient(120deg,#4ae0af,#35d09e);box-shadow:0 14px 36px #3dd6a540,0 0 30px #3dd6a54d;transform:translateY(-2px)}.btn.soft{background:#3dd6a526;border-color:#3dd6a559;color:#b3ffe2}.btn.soft:hover{background:#3dd6a538;border-color:#3dd6a580}.btn.ghost{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}.btn.ghost:before{display:none}.btn.ghost:hover{background:#ffffff0f}.btn.danger{background:#ff6b6b26;border-color:#ff6b6b59;color:#ffb2b2}.btn.danger:hover{background:#ff6b6b38;border-color:#ff6b6b80}.btn.warning{background:#f3b43226;border-color:#f3b43259;color:#ffe0a0}.btn.warning:hover{background:#f3b43238;border-color:#f3b43280}.btn:disabled{opacity:.55;cursor:not-allowed;pointer-events:none}.btn.sm{min-height:36px;padding:var(--space-2) var(--space-3);font-size:var(--font-xs)}.btn.compact{min-height:36px;padding:var(--space-2) var(--space-3);font-size:var(--font-xs);gap:var(--space-2)}.input-group{display:flex;flex-direction:column;gap:var(--space-2)}.input-group.center{align-items:center}.input-group.center .input{text-align:center}.input,.select,.textarea{width:100%;border-radius:var(--radius-md);border:1px solid rgba(255,255,255,.1);background:#ffffff0a;backdrop-filter:blur(8px) saturate(1.2);-webkit-backdrop-filter:blur(8px) saturate(1.2);color:var(--text);padding:var(--space-3);min-height:var(--touch-target);font-size:var(--font-base);outline:none;transition:all var(--transition-base);box-shadow:inset 0 1px 3px #00000026}.input:focus,.select:focus,.textarea:focus{border-color:#3dd6a573;background:#ffffff0f;box-shadow:inset 0 1px 3px #0000001a,0 0 0 3px #3dd6a526}.input:focus-visible,.select:focus-visible,.textarea:focus-visible{outline:var(--focus-outline);outline-offset:3px;box-shadow:var(--focus-ring),inset 0 1px 3px #0000001a;border-color:var(--accent);background:#3dd6a514}.btn:focus-visible,button:focus-visible,a:focus-visible,.pill:focus-visible,.pill-switch button:focus-visible{outline:var(--focus-outline);outline-offset:3px;box-shadow:var(--focus-ring)}.input.error,.select.error{border-color:var(--danger);background:var(--bg-error)}.input.error:before,.select.error:before{content:"⚠";position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--danger);font-size:16px;pointer-events:none}.label{font-weight:600;color:var(--text-strong)}.helper{color:var(--muted);font-size:var(--font-sm);line-height:1.5}.helper.error-text{color:var(--danger)}.table{width:100%;border-collapse:collapse;border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-md);overflow:hidden;background:#ffffff05;backdrop-filter:blur(8px) saturate(1.1);-webkit-backdrop-filter:blur(8px) saturate(1.1)}.table thead{background:#ffffff0d}.table th,.table td{text-align:left;padding:12px 14px;border-bottom:1px solid rgba(255,255,255,.06)}.table tbody tr{transition:background var(--transition-fast)}.table tbody tr:hover{background:#ffffff0a}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}.stat{padding:12px 14px;border-radius:var(--radius-md);border:1px solid rgba(255,255,255,.1);background:#ffffff0a;backdrop-filter:blur(8px) saturate(1.2);-webkit-backdrop-filter:blur(8px) saturate(1.2);transition:all var(--transition-fast)}.stat:hover{background:#ffffff0f;border-color:#ffffff24}.stat h4{margin:0 0 4px;font-size:14px;color:var(--muted)}.stat .value{font-size:20px;font-weight:700}.empty{border:1px dashed rgba(255,255,255,.15);padding:16px;border-radius:var(--radius-md);text-align:center;color:var(--muted);background:#ffffff05}.modal-backdrop{position:fixed;inset:0;background:#080b1299;display:flex;align-items:center;justify-content:center;z-index:100;backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);padding:16px;overflow:hidden;animation:modalBackdropIn .25s ease-out}@keyframes modalBackdropIn{0%{opacity:0;backdrop-filter:blur(0px);-webkit-backdrop-filter:blur(0px)}to{opacity:1;backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2)}}.modal-card{position:relative;width:min(560px,100%);max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);background:#0f1629bf;backdrop-filter:blur(var(--blur-strong)) saturate(1.6);-webkit-backdrop-filter:blur(var(--blur-strong)) saturate(1.6);border-radius:var(--radius-xl);border:.5px solid rgba(255,255,255,.12);box-shadow:0 25px 80px #00000080,inset 0 1px 1px #ffffff14;display:flex;flex-direction:column;overflow:hidden;animation:modalGlassIn .3s var(--ease-spring);will-change:transform,opacity;transform:translateZ(0);backface-visibility:hidden}.modal-card:before{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(ellipse at 30% 20%,rgba(255,255,255,.08) 0%,transparent 50%);pointer-events:none}.modal-card:after{content:"";position:absolute;top:0;left:15%;right:15%;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.25) 50%,transparent 100%);pointer-events:none}@keyframes modalGlassIn{0%{opacity:0;transform:scale(.95) translateY(20px);backdrop-filter:blur(0px);-webkit-backdrop-filter:blur(0px)}to{opacity:1;transform:scale(1) translateY(0);backdrop-filter:blur(var(--blur-strong)) saturate(1.6);-webkit-backdrop-filter:blur(var(--blur-strong)) saturate(1.6)}}.modal-header{flex-shrink:0;padding:18px 18px 0}.modal-content{flex:1;overflow-y:auto;overflow-x:hidden;padding:12px 18px;overscroll-behavior:contain}.modal-footer{flex-shrink:0;padding:0 18px 18px}body.modal-open,html.modal-open{overflow:hidden}@media(max-width:640px){.modal-backdrop{padding:8px}.modal-card{max-height:calc(100vh - 16px);max-height:calc(100dvh - 16px);border-radius:12px}.modal-header,.modal-content,.modal-footer{padding-left:14px;padding-right:14px}}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.chip{display:inline-flex;align-items:center;gap:6px;padding:8px 10px;background:#ffffff0f;backdrop-filter:blur(8px) saturate(1.2);-webkit-backdrop-filter:blur(8px) saturate(1.2);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-md);color:var(--text);transition:all var(--transition-fast)}.chip.active{background:#3dd6a52e;border-color:#3dd6a573}.pill-switch{display:inline-flex;background:#ffffff0d;backdrop-filter:blur(var(--blur-subtle)) saturate(1.2);-webkit-backdrop-filter:blur(var(--blur-subtle)) saturate(1.2);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-md);padding:var(--space-1);gap:var(--space-1)}.pill-switch button{background:transparent;border:none;color:var(--muted);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);cursor:pointer;font-weight:500;font-size:var(--font-sm);transition:all var(--transition-base);min-height:var(--touch-target);display:inline-flex;align-items:center;justify-content:center}.pill-switch button:hover:not(.active){background:#ffffff0f;color:var(--text)}.pill-switch button.active{background:#3dd6a533;color:var(--text);border-color:#3dd6a559;box-shadow:0 2px 8px #3dd6a526}.dropdown{position:relative}.dropdown-menu{position:absolute;top:calc(100% + 8px);right:0;background:#0f182ccc;backdrop-filter:blur(var(--blur-strong)) saturate(1.5);-webkit-backdrop-filter:blur(var(--blur-strong)) saturate(1.5);border-radius:var(--radius-lg);border:.5px solid rgba(255,255,255,.12);box-shadow:0 15px 50px #0006,inset 0 1px 1px #ffffff0f;min-width:240px;padding:8px;z-index:15;animation:glassSlideIn .2s var(--ease-spring)}.dropdown-menu:before{content:"";position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.2) 50%,transparent 100%);pointer-events:none}.dropdown-menu button,.dropdown-menu a{width:100%;background:transparent;border:none;text-align:left;padding:10px 12px;border-radius:var(--radius-sm);color:var(--text);cursor:pointer;transition:all var(--transition-fast)}.dropdown-menu button:hover,.dropdown-menu a:hover{background:#ffffff14}.tag{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--radius-sm);background:#ffffff14;backdrop-filter:blur(8px) saturate(1.2);-webkit-backdrop-filter:blur(8px) saturate(1.2);color:var(--text);border:1px solid rgba(255,255,255,.1);font-weight:600}.tag[data-tone=success]{background:#3dd6a52e;color:#c9ffe9;border-color:#3dd6a559}.tag[data-tone=warn]{background:#f3b4322e;color:#ffe7b8;border-color:#f3b43259}.tag[data-tone=muted]{color:var(--muted)}.list{display:flex;flex-direction:column;gap:8px}.list-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border-radius:var(--radius-md);background:#ffffff0d;backdrop-filter:blur(8px) saturate(1.2);-webkit-backdrop-filter:blur(8px) saturate(1.2);border:1px solid rgba(255,255,255,.1);transition:all var(--transition-fast)}.list-row:hover{background:#ffffff14;border-color:#ffffff24}.danger-text{color:#ffb2b2}.success-text{color:#b6ffd9}.hero{position:relative;padding:18px;border-radius:var(--radius-lg);border:1px solid rgba(61,214,165,.3);background:linear-gradient(120deg,#3dd6a52e,#f3b43224);backdrop-filter:blur(var(--blur-regular)) saturate(1.4);-webkit-backdrop-filter:blur(var(--blur-regular)) saturate(1.4);box-shadow:var(--shadow-soft),inset 0 1px 1px #ffffff1a}.hero:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.12) 0%,transparent 50%);border-radius:inherit;pointer-events:none}.skeleton{background:linear-gradient(90deg,#ffffff0a,#ffffff1a,#ffffff0a);background-size:200% 100%;animation:skeleton-shimmer 1.2s ease-in-out infinite;border-radius:var(--radius-sm);will-change:background-position;transform:translateZ(0)}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton-card{pointer-events:none;background:#ffffff08;backdrop-filter:blur(8px) saturate(1.1);-webkit-backdrop-filter:blur(8px) saturate(1.1)}.fade-in{animation:fadeIn .2s ease-out}@keyframes fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@media(max-width:1024px){.topbar{padding:14px 16px}.main-content{padding:20px 16px 48px}.grid.two,.grid.three{grid-template-columns:1fr}.stat-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:640px){:root{--radius-lg: 16px;--radius-md: 12px;--radius-sm: 8px;--blur-subtle: 8px;--blur-regular: 12px;--blur-strong: 24px;--blur-ultra: 40px}body{font-size:15px}h1{font-size:1.6rem}h2{font-size:1.35rem}h3{font-size:1.15rem}.topbar{padding:12px 14px;gap:8px}.brand{gap:8px;font-size:14px}.brand-mark{width:34px;height:34px;border-radius:10px}.top-actions{gap:8px}.pill{padding:6px 10px;font-size:13px}.main-content{padding:16px 12px 40px}.grid{gap:12px}.grid.two,.grid.three{grid-template-columns:1fr}.card{padding:14px 16px;border-radius:var(--radius-md)}.card-header{flex-wrap:wrap;gap:8px}.hero{padding:14px;border-radius:14px}.stat-grid{grid-template-columns:1fr;gap:10px}.stat{padding:12px 14px}.table{font-size:13px}.table th,.table td{padding:10px 8px}.table th:nth-child(4),.table td:nth-child(4){display:none}.toolbar{gap:8px}.pill-switch{flex-wrap:wrap;width:100%}.pill-switch button{flex:1;min-width:0;padding:8px 10px;font-size:13px;text-align:center}.btn{padding:10px 14px;font-size:14px}.btn.icon{padding:8px}.input,.select,textarea{padding:10px 12px;font-size:15px}.list-row{padding:10px;flex-wrap:wrap}.dropdown-menu{min-width:200px;right:-10px}}@media(max-width:380px){.topbar{padding:10px 12px}.brand-mark{width:30px;height:30px}.main-content{padding:12px 10px 36px}.card{padding:12px}.pill-switch button{padding:6px 8px;font-size:12px}}@media(pointer:coarse){.btn,.pill-switch button,.chip,.list-row{min-height:44px}.btn.icon{min-width:44px;min-height:44px}}@media(max-height:500px)and (orientation:landscape){.modal-card{max-height:calc(100vh - 20px)}.modal-content{max-height:50vh}}@supports (padding: env(safe-area-inset-bottom)){.main-content{padding-bottom:calc(40px + env(safe-area-inset-bottom))}.modal-backdrop{padding-bottom:env(safe-area-inset-bottom)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media(prefers-contrast:high){:root{--glass-tint-neutral: rgba(15, 22, 41, .95);--glass-opacity-thin: .9;--glass-opacity-regular: .95;--glass-opacity-thick: .98}.glass,.card,.card-strong,.modal-card,.dropdown-menu,.toast,.topbar,.nav,.pill-switch,.chip,.badge,.tag,.stat,.list-row,.btn,.input,.select,.textarea{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}.card,.card-strong{background:#121c33f2}.modal-card{background:#0f1629fa}.dropdown-menu{background:#0f182cfa}.toast{background:#121c33f2}.topbar{background:#0b1220f2}.btn{background:#ffffff1f}.input,.select,.textarea{background:#ffffff14}}.canvas-timeline{display:flex;flex-direction:column;height:calc(100vh - 80px);background:linear-gradient(135deg,#0a0f1c99,#0f141999);backdrop-filter:blur(var(--blur-subtle)) saturate(1.2);-webkit-backdrop-filter:blur(var(--blur-subtle)) saturate(1.2);border-radius:var(--radius-lg);border:.5px solid rgba(255,255,255,.08);overflow:hidden;position:relative}.canvas-header{position:relative;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:20px 28px;background:#0b122080;backdrop-filter:blur(var(--blur-regular)) saturate(1.4);-webkit-backdrop-filter:blur(var(--blur-regular)) saturate(1.4);border-bottom:1px solid rgba(255,255,255,.08);flex-wrap:wrap;z-index:10}.canvas-header:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.15) 30%,rgba(255,255,255,.2) 50%,rgba(255,255,255,.15) 70%,transparent 100%);pointer-events:none}.canvas-title{font-size:22px;font-weight:700;color:var(--text-strong);margin:0;line-height:1.2}.canvas-subtitle{font-size:14px;color:var(--muted);margin:4px 0 0;line-height:1.4}.canvas-viewport{flex:1;overflow-x:auto;overflow-y:hidden;padding:32px 28px;scroll-behavior:smooth;scroll-snap-type:x proximity;position:relative}.canvas-viewport::-webkit-scrollbar{height:10px}.canvas-viewport::-webkit-scrollbar-track{background:#ffffff05;border-radius:5px;margin:0 28px}.canvas-viewport::-webkit-scrollbar-thumb{background:#3dd6a54d;border-radius:5px;transition:background .2s ease}.canvas-viewport::-webkit-scrollbar-thumb:hover{background:#3dd6a580}.canvas-loading,.canvas-error,.canvas-empty{display:flex;align-items:center;justify-content:center;min-height:400px}.error-content{display:flex;flex-direction:column;align-items:center;gap:16px}.timeline-canvas{display:flex;flex-direction:column;gap:24px;min-width:max-content;padding-bottom:20px}.grade-swimlane{display:flex;gap:20px;position:relative;padding:20px;border-radius:var(--radius-lg);background:#ffffff08;backdrop-filter:blur(var(--blur-subtle)) saturate(1.2);-webkit-backdrop-filter:blur(var(--blur-subtle)) saturate(1.2);border:1px solid rgba(255,255,255,.08);transition:all var(--transition-base)}.grade-swimlane:hover{background:#ffffff0d;border-color:#ffffff1a}.grade-swimlane.current{background:#3dd6a50f;border-color:#3dd6a540;box-shadow:0 4px 24px #3dd6a51f,inset 0 1px 1px #ffffff0d}.grade-label{display:flex;flex-direction:column;gap:10px;min-width:140px;padding-right:20px;border-right:2px solid rgba(255,255,255,.08)}.grade-name-wrapper{display:flex;flex-direction:column;gap:4px}.grade-name{font-weight:700;font-size:18px;color:var(--text-strong);line-height:1.2}.grade-year{font-size:13px;color:var(--muted);font-weight:500}.current-badge{align-self:flex-start}.semesters-track{display:flex;gap:24px;flex:1;align-items:stretch}.semester-column{display:flex;flex-direction:column;align-items:center;gap:12px;position:relative;scroll-snap-align:center}.current-indicator-line{position:absolute;top:-20px;bottom:-20px;left:50%;transform:translate(-50%);width:3px;background:linear-gradient(180deg,transparent 0%,rgba(61,214,165,.6) 20%,rgba(61,214,165,.9) 50%,rgba(61,214,165,.6) 80%,transparent 100%);box-shadow:0 0 20px #3dd6a599;border-radius:2px;pointer-events:none;z-index:5}.semester-card{min-width:240px;max-width:300px;padding:18px;border-radius:var(--radius-md);background:#ffffff0d;backdrop-filter:blur(var(--blur-regular)) saturate(1.4);-webkit-backdrop-filter:blur(var(--blur-regular)) saturate(1.4);border:.5px solid rgba(255,255,255,.1);box-shadow:0 8px 32px #0000004d,inset 0 1px 1px #ffffff0d;transition:all var(--transition-base);position:relative;z-index:1}.semester-card:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.1) 0%,transparent 50%);border-radius:inherit;pointer-events:none;opacity:.7;transition:opacity var(--transition-base)}.semester-card:hover{background:#ffffff14;box-shadow:0 12px 48px #0006,inset 0 1px 1px #ffffff14;transform:translateY(-2px)}.semester-card:hover:before{opacity:.9}.semester-column.current .semester-card{background:#3dd6a51a;border-color:#3dd6a559;box-shadow:0 8px 32px #3dd6a52e,inset 0 1px 1px #ffffff14}.semester-column.current .semester-card:hover{box-shadow:0 12px 48px #3dd6a547,inset 0 1px 1px #ffffff1a}.semester-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:10px}.semester-name{font-weight:600;font-size:15px;color:var(--text);line-height:1.3}.current-badge-pill{padding:3px 10px;border-radius:10px;background:var(--accent);color:#0a0f1c;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.03em}.semester-connector{width:24px;height:2px;background:linear-gradient(90deg,#3dd6a566,#3dd6a51a);align-self:center;margin-top:80px;position:relative}.semester-connector:after{content:"";position:absolute;right:-4px;top:50%;transform:translateY(-50%);width:6px;height:6px;border-radius:50%;background:#3dd6a566}.assessments-flow{display:flex;flex-direction:column;gap:10px}.assessment-card{display:flex;align-items:center;gap:12px;padding:12px;border-radius:var(--radius-sm);background:#ffffff12;backdrop-filter:blur(8px) saturate(1.2);-webkit-backdrop-filter:blur(8px) saturate(1.2);border:2px solid transparent;cursor:pointer;transition:all var(--transition-base);text-align:left;width:100%}.assessment-card:hover{background:#ffffff1a;transform:translateY(-2px);box-shadow:0 6px 20px #0000004d,inset 0 1px 1px #ffffff0d}.assessment-icon{width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-weight:700;font-size:16px;transition:all var(--transition-base)}.assessment-info{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0}.assessment-subject{font-weight:600;font-size:13px;color:var(--text);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.assessment-type{font-size:11px;font-weight:500;opacity:.7;line-height:1.2}.assessment-card.status-submitted{background:#3dd6a51f;border-color:#3dd6a54d}.assessment-card.status-submitted:hover{background:#3dd6a52e;border-color:#3dd6a580}.assessment-card.status-submitted .assessment-icon{background:#3dd6a533;color:#b8ffe6}.assessment-card.status-in_progress{background:#f3b4321f;border-color:#f3b4324d}.assessment-card.status-in_progress:hover{background:#f3b4322e;border-color:#f3b43280}.assessment-card.status-in_progress .assessment-icon{background:#f3b43233;color:#ffe7b8}.assessment-card.status-not_started{background:#ffffff0a;border-color:#ffffff1a}.assessment-card.status-not_started:hover{background:#ffffff14;border-color:#ffffff26}.assessment-card.status-not_started .assessment-icon{background:#ffffff14;color:var(--muted)}.no-assessments{padding:20px;text-align:center;border-radius:10px;background:#ffffff05;border:1px dashed rgba(255,255,255,.1)}.helper-text{font-size:13px;color:var(--muted)}.canvas-legend{display:flex;align-items:center;gap:20px;flex-wrap:wrap}.legend-item{display:flex;align-items:center;gap:8px}.legend-dot{width:14px;height:14px;border-radius:4px;flex-shrink:0}.legend-label{font-size:13px;color:var(--text);font-weight:500}.legend-dot.status-submitted{background:#3dd6a580;border:2px solid rgba(61,214,165,.8)}.legend-dot.status-in_progress{background:#f3b43280;border:2px solid rgba(243,180,50,.8)}.legend-dot.status-not_started{background:#ffffff26;border:2px solid rgba(255,255,255,.3)}@media(max-width:1024px){.canvas-header{padding:16px 20px}.canvas-viewport{padding:24px 20px}.grade-label{min-width:120px}.semester-card{min-width:200px}}@media(max-width:768px){.canvas-timeline{height:auto;min-height:500px}.canvas-header{flex-direction:column;align-items:flex-start;padding:16px}.canvas-viewport{padding:20px 16px}.timeline-canvas{gap:20px}.grade-swimlane{flex-direction:column;gap:16px}.grade-label{border-right:none;border-bottom:2px solid rgba(255,255,255,.08);padding-right:0;padding-bottom:12px;min-width:unset}.semesters-track{flex-direction:column;gap:16px}.semester-column{width:100%}.semester-card{min-width:unset;width:100%}.semester-connector{display:none}.current-indicator-line{inset:50% -16px auto;width:auto;height:3px;transform:translateY(-50%);background:linear-gradient(90deg,transparent 0%,rgba(61,214,165,.6) 20%,rgba(61,214,165,.9) 50%,rgba(61,214,165,.6) 80%,transparent 100%)}.canvas-legend{gap:12px}}.subject-journey-container{display:flex;flex-direction:column;height:calc(100vh - 120px);background:#080c15;border-radius:var(--radius-lg);border:1px solid rgba(255,255,255,.06);overflow:hidden}.journey-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 20px;background:#0c121ce6;border-bottom:1px solid rgba(255,255,255,.08);flex-wrap:wrap;flex-shrink:0;z-index:10}.journey-title-section{display:flex;align-items:center;gap:10px}.journey-title{font-size:16px;font-weight:700;color:var(--text-strong);margin:0}.journey-subtitle{display:none}.subject-selector{display:flex;align-items:center;gap:6px;position:relative}.subject-nav-arrow{width:28px;height:28px;border-radius:50%;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);color:var(--text);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.subject-nav-arrow:hover:not(:disabled){background:#ffffff1a}.subject-nav-arrow:disabled{opacity:.3;cursor:not-allowed}.subject-selector-pill{display:flex;align-items:center;gap:8px;padding:6px 14px;background:#3dd6a514;border:1px solid rgba(61,214,165,.25);border-radius:var(--radius-full);color:var(--text-strong);font-weight:600;font-size:13px;cursor:pointer;transition:all var(--transition-fast)}.subject-selector-pill:hover{background:#3dd6a526;border-color:#3dd6a566}.subject-icon{font-size:14px}.subject-name{white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}.subject-selector-pill .chevron{transition:transform var(--transition-fast)}.subject-selector-pill .chevron.open{transform:rotate(180deg)}.subject-dropdown{position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%);min-width:220px;max-height:280px;overflow-y:auto;background:#121a2afa;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-md);box-shadow:0 12px 40px #00000080;z-index:100;padding:4px}.subject-option{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;border:none;background:transparent;color:var(--text);font-size:13px;cursor:pointer;border-radius:var(--radius-sm);text-align:left}.subject-option:hover{background:#ffffff14}.subject-option.selected{background:#3dd6a51f;color:var(--accent)}.option-name{font-weight:500}.option-code{font-size:11px;color:var(--muted);margin-left:6px}.option-empty{font-size:10px;color:var(--muted)}.journey-legend{display:flex;align-items:center;gap:12px}.journey-legend .legend-item{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)}.journey-legend .legend-dot{width:8px;height:8px;border-radius:50%}.journey-legend .legend-dot.submitted{background:var(--accent)}.journey-legend .legend-dot.in-progress{background:var(--warning)}.journey-legend .legend-dot.not-started{background:#fff3}.journey-canvas-wrapper{flex:1;position:relative;overflow:hidden;display:flex;flex-direction:column}.canvas-controls{position:absolute;bottom:12px;right:12px;display:flex;align-items:center;gap:4px;z-index:20;background:#0a0f19e6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-full);padding:4px 8px}.zoom-btn{width:26px;height:26px;border-radius:50%;background:#ffffff0d;border:1px solid rgba(255,255,255,.1);color:var(--text);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--transition-fast)}.zoom-btn:hover:not(:disabled){background:#ffffff1f;color:var(--text-strong)}.zoom-btn:disabled{opacity:.3;cursor:not-allowed}.zoom-btn.reset{font-size:14px;margin-left:4px}.zoom-level{font-size:11px;color:var(--muted);min-width:40px;text-align:center;font-family:var(--font-mono)}.journey-viewport{flex:1;overflow:hidden;cursor:grab;outline:none;position:relative;background:var(--bg)}.journey-viewport.panning{cursor:grabbing;-webkit-user-select:none;user-select:none}.journey-canvas{position:absolute;top:0;left:0;min-width:max-content;min-height:max-content;padding:80px 200px 300px;will-change:transform}.canvas-grid{position:absolute;inset:-5000px;background-image:linear-gradient(rgba(61,214,165,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(61,214,165,.03) 1px,transparent 1px);background-size:40px 40px;pointer-events:none}.timeline-line{position:absolute;top:138px;left:60px;right:60px;height:4px;background:linear-gradient(90deg,#3dd6a51a,#3dd6a566 10%,#3dd6a580,#3dd6a566 90%,#3dd6a51a);border-radius:2px;pointer-events:none;z-index:1;min-width:calc(100% - 120px)}.year-marker{position:absolute;top:60px}.year-label-float{position:absolute;top:78px;left:12px;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;white-space:nowrap;min-width:110px;width:110px;text-align:center;z-index:2}.grade-text{font-size:13px;font-weight:700;color:var(--text-strong);padding:4px 12px;background:#0a0f19f2;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid rgba(255,255,255,.1);border-radius:var(--radius-sm)}.now-badge{font-size:8px;font-weight:700;color:var(--muted);letter-spacing:.5px;text-transform:uppercase}.year-anchor{position:relative;width:24px;height:24px;margin-left:-12px}.anchor-ring{width:24px;height:24px;border-radius:50%;background:#0a0f18;border:4px solid rgba(61,214,165,.5);box-sizing:border-box}.year-marker.current .anchor-ring{background:var(--accent);border-color:var(--accent)}.anchor-glow{position:absolute;inset:-8px;border-radius:50%;background:radial-gradient(circle,rgba(61,214,165,.3) 0%,transparent 70%);animation:glow-pulse 2s ease-in-out infinite}@keyframes glow-pulse{0%,to{opacity:.6;transform:scale(1)}50%{opacity:1;transform:scale(1.1)}}.period-stack{display:flex;flex-direction:column;gap:20px;margin-top:110px;padding-left:12px;position:relative}.period-vertical-line{position:absolute;left:67px;top:-40px;bottom:0;width:3px;background:linear-gradient(180deg,#3dd6a580,#3dd6a54d,#3dd6a526);border-radius:2px;z-index:0}.period-row{display:flex;flex-direction:column;gap:12px;position:relative;z-index:1}.period-row.current .period-label-box{background:#0a121efa;border-color:#3dd6a566;box-shadow:0 0 12px #3dd6a526}.period-label-box{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px 16px;background:#0c121cf2;border:1px solid rgba(255,255,255,.12);border-radius:8px;min-width:110px;min-height:60px;flex-shrink:0;align-self:flex-start;position:relative;z-index:2}.period-dot-small{width:10px;height:10px;border-radius:50%;background:#fff3;border:2px solid rgba(255,255,255,.3);position:relative;flex-shrink:0}.period-row.current .period-dot-small{background:var(--accent);border-color:var(--accent)}.pulse-small{position:absolute;inset:-4px;border-radius:50%;border:2px solid var(--accent);animation:pulse-ring 2s ease-out infinite}@keyframes pulse-ring{0%{transform:scale(.7);opacity:1}to{transform:scale(1.5);opacity:0}}.period-name{font-size:13px;font-weight:600;color:var(--text);white-space:nowrap}.period-row.current .period-name{color:var(--accent)}.assessment-row{display:flex;flex-direction:column;align-items:flex-start;gap:10px;margin-left:130px;position:relative}.assessment-row-item:before{content:"";position:absolute;top:50%;transform:translateY(-50%);right:100%;width:63px;height:3px;background:#3dd6a559;border-radius:2px}.empty-period{font-size:12px;color:var(--muted);opacity:.5;padding:8px 12px;background:#ffffff05;border-radius:6px;border:1px dashed rgba(255,255,255,.1)}.assessment-row-item{display:flex;align-items:center;flex-wrap:nowrap;gap:12px;position:relative;animation:card-appear .3s ease-out backwards;animation-delay:var(--node-delay)}.assessment-row-item.expanded{z-index:10}@keyframes card-appear{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:translate(0)}}.journey-canvas .assessment-card{display:flex;background:#0c121ce6;border:1px solid rgba(91,164,245,.3);border-radius:8px;overflow:hidden;cursor:default;transition:all var(--transition-fast);width:80px;min-width:80px;flex-shrink:0;white-space:nowrap}.journey-canvas .assessment-card.status-submitted{background:#0c121ce6;border-color:#5ba4f559;cursor:pointer}.journey-canvas .assessment-card.status-in_progress{background:#0c121ce6;border-color:#5ba4f533;cursor:pointer}.journey-canvas .assessment-card.status-submitted:hover,.journey-canvas .assessment-card.status-in_progress:hover{border-color:#5ba4f580;box-shadow:0 4px 20px #0000004d}.card-score-bar{width:4px;flex-shrink:0}.journey-canvas .card-score-bar{display:none}.card-content{flex:1;padding:10px 12px;display:flex;flex-direction:column;gap:6px}.journey-canvas .card-content{padding:6px 8px;align-items:center;justify-content:center}.card-header{display:flex;align-items:center;gap:8px}.journey-canvas .card-header{justify-content:center}.card-type{font-size:10px;font-weight:700;text-transform:uppercase;color:var(--muted);background:#ffffff0f;padding:2px 6px;border-radius:3px;letter-spacing:.3px}.card-name{font-size:13px;font-weight:600;color:var(--text);flex:1}.card-avg{width:24px;height:24px;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#0a0f18}.card-status-row{display:flex;gap:6px}.card-badge{font-size:9px;font-weight:600;padding:2px 6px;border-radius:4px}.card-badge.progress{color:var(--warning);background:#f3b43226}.card-badge.awaiting{color:#5ba4f5;background:#5ba4f526}.criteria-column{display:grid;grid-template-columns:max-content auto;gap:4px 8px;align-self:center}.criteria-row{display:contents}.crit-letter-box{display:flex;align-items:center;justify-content:center;min-width:24px;height:24px;font-size:12px;font-weight:700;border:2px solid rgba(255,255,255,.2);border-radius:4px;background:#ffffff08;color:var(--text-strong);flex-shrink:0}.crit-level-info{display:flex;align-items:center;gap:4px;white-space:nowrap}.crit-level-info .crit-value{font-size:13px;font-weight:700;min-width:16px;text-align:center}.crit-level-info .crit-range{font-size:11px;color:var(--muted);font-family:var(--font-mono)}.criteria-row.pending .crit-value{color:var(--muted)}.criteria-row .crit-has-comment{font-size:10px;flex-shrink:0}.crit-full-name{font-size:12px;font-weight:500;color:var(--muted);padding:4px 8px;background:#ffffff0a;border-radius:4px;border:1px solid rgba(255,255,255,.08);white-space:nowrap}.crit-right{display:flex;align-items:center;gap:6px}.crit-grade-badge{display:inline-flex;align-items:center;justify-content:center;min-width:22px;height:22px;padding:0 6px;border-radius:6px;font-size:11px;font-weight:700;color:#0a0f1c}.crit-grade-badge.crit-grade-pending{background:#ffffff14;color:var(--muted);font-weight:500}.crit-target-label{display:inline-flex;align-items:center;gap:4px;font-size:10px;color:#d4a017;font-weight:600;margin-left:6px}.crit-strands-list{display:flex;flex-direction:column;gap:2px}.crit-strand-chip{display:flex;align-items:center;gap:8px;font-size:10px;line-height:1.2;padding:2px 6px;border-radius:4px;white-space:nowrap;min-width:var(--strand-chip-width, 0px);border:1px solid;background:transparent}.strand-text{overflow:hidden;text-overflow:ellipsis}.strand-response{font-size:9px;font-weight:600;opacity:.7;margin-left:auto}.crit-remark{padding:6px 10px;background:#ffffff0a;border-radius:4px;border:1px solid rgba(255,255,255,.06);display:flex;flex-direction:column;gap:4px;align-self:center;max-width:240px;min-width:140px}.crit-remark-label{font-size:9px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}.crit-remark-text{font-size:11px;color:#ccc;line-height:1.4;white-space:normal;word-break:break-word}.crit-not-submitted{font-size:12px;font-style:italic;color:var(--muted);opacity:.7}.card-expanded{background:#0003}.card-remark-hint{font-size:10px;color:var(--muted);font-style:italic}.card-expanded{position:absolute;top:100%;left:0;margin-top:8px;width:300px;background:#0f1623fa;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.12);border-radius:var(--radius-md);box-shadow:0 16px 48px #00000080;padding:14px;z-index:50;animation:expand-appear .2s ease-out;cursor:default}@keyframes expand-appear{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.expanded-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid rgba(255,255,255,.08)}.exp-title{font-size:13px;font-weight:600;color:var(--text-strong)}.exp-date{font-size:10px;color:var(--muted)}.exp-status{font-size:10px;color:var(--warning);background:#f3b43226;padding:2px 8px;border-radius:4px;font-weight:600}.expanded-criteria{display:flex;flex-direction:column;gap:8px}.exp-criterion{background:#ffffff08;border-radius:6px;padding:8px}.crit-header{display:flex;align-items:center;gap:8px}.crit-letter{width:22px;height:22px;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#0a0f18}.crit-name{flex:1;font-size:11px;color:var(--text)}.crit-scores{display:flex;gap:8px;align-items:center}.crit-score{font-size:11px;font-weight:600;font-family:var(--font-mono);padding:2px 6px;border-radius:4px}.crit-score.teacher{background:#5ba4f526;color:#5ba4f5}.crit-score.student{background:#f3b43226;color:#f3b432}.crit-score.pending{color:var(--muted)}.crit-pip.student-sel{opacity:.7;border:1px dashed rgba(255,255,255,.3)}.node-status-badge.awaiting{background:#5ba4f526;color:#5ba4f5}.crit-comment{font-size:10px;color:var(--muted);margin:6px 0 0 30px;line-height:1.4;font-style:italic}.exp-remark{font-size:11px;padding:8px 10px;border-radius:6px;margin-top:8px;line-height:1.5}.exp-remark strong{display:block;margin-bottom:3px;font-size:10px;text-transform:uppercase;letter-spacing:.3px}.exp-remark.teacher{background:#5ba4f514;border-left:2px solid rgba(91,164,245,.4);color:var(--text)}.exp-remark.student{background:#f3b43214;border-left:2px solid rgba(243,180,50,.4);color:var(--text)}.journey-loading-state,.journey-error-state,.journey-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;min-height:300px;text-align:center;gap:12px;color:var(--muted);padding:40px}.loading-spinner{width:32px;height:32px;border:3px solid rgba(255,255,255,.1);border-top-color:var(--accent);border-radius:50%;animation:spin 1s linear infinite}.error-icon,.empty-icon{font-size:32px}.error-message{color:var(--danger);font-size:13px}.journey-empty-state h3{color:var(--text);margin:0;font-size:16px}.journey-empty-state p{max-width:300px;font-size:13px;line-height:1.5}.canvas-hints{position:absolute;bottom:8px;left:50%;transform:translate(-50%);padding:6px 14px;background:#0a0f19d9;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-full);font-size:10px;color:var(--muted);z-index:10;white-space:nowrap}.journey-hint{display:none}@media(max-width:768px){.journey-header{padding:10px 14px;gap:10px}.journey-title{font-size:14px}.journey-legend{display:none}.canvas-controls{bottom:8px;right:8px}.zoom-btn{width:24px;height:24px;font-size:14px}.zoom-level{display:none}.journey-canvas{padding:60px 100px 200px}.period-branch{min-width:140px}.canvas-hints{display:none}}.toast-container{position:fixed;bottom:20px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:10px;max-width:380px}.toast{position:relative;display:flex;align-items:center;gap:12px;padding:14px 18px;background:#121c33b3;backdrop-filter:blur(var(--blur-regular)) saturate(1.5);-webkit-backdrop-filter:blur(var(--blur-regular)) saturate(1.5);border:.5px solid rgba(255,255,255,.12);border-radius:var(--radius-md);box-shadow:0 10px 40px #00000059,inset 0 1px 1px #ffffff0f;cursor:pointer;animation:toastSlideIn .3s var(--ease-spring);overflow:hidden}.toast:before{content:"";position:absolute;top:0;left:10%;right:10%;height:1px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.2) 50%,transparent 100%);pointer-events:none}.toast:hover{background:#121c33cc}.toast-icon{font-size:16px;flex-shrink:0}.toast-message{font-size:14px;color:var(--text)}.toast-success{border-color:#3dd6a54d}.toast-success .toast-icon{color:var(--accent)}.toast-error{border-color:#ff6b6b4d}.toast-error .toast-icon{color:var(--danger)}.toast-warning{border-color:#f3b4324d}.toast-warning .toast-icon{color:var(--accent-2)}.toast-info{border-color:#5ba4f54d}.toast-info .toast-icon{color:var(--info)}.toast-close{background:transparent;border:none;color:var(--muted);font-size:20px;line-height:1;padding:4px 8px;cursor:pointer;transition:var(--transition-fast);margin-left:auto}.toast-close:hover{color:var(--text)}.toast:focus-visible{outline:var(--focus-outline);outline-offset:2px}@keyframes toastSlideIn{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.table-wrapper{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width:640px){.toast-container{left:10px;right:10px;bottom:10px;max-width:100%}.table-wrapper{margin:0 -12px;padding:0 12px}.table th:nth-child(4),.table td:nth-child(4){display:table-cell}}.btn .btn-icon{font-size:16px;line-height:1}.btn .btn-text{font-size:var(--font-sm)}.btn.loading{pointer-events:none;opacity:.7}.btn.loading .btn-text{opacity:.6}.btn .spinner{width:16px;height:16px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.error-boundary-container{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--space-6);background:radial-gradient(ellipse at 20% 10%,rgba(255,107,107,.08),transparent 40%),radial-gradient(ellipse at 80% 80%,rgba(91,164,245,.06),transparent 35%),linear-gradient(160deg,#0a0f1c,#0d1628 40%,#0a1020);background-attachment:fixed}.error-boundary-card{max-width:600px;width:100%;background:#121c3380;backdrop-filter:blur(var(--blur-regular)) saturate(1.4);-webkit-backdrop-filter:blur(var(--blur-regular)) saturate(1.4);border:.5px solid rgba(255,255,255,.1);box-shadow:var(--shadow-glass)}.error-boundary-title{color:var(--error);margin-bottom:var(--space-4);display:flex;align-items:center;gap:var(--space-3)}.error-boundary-icon{font-size:var(--font-2xl)}.error-boundary-message{margin-bottom:var(--space-6);color:var(--muted);font-size:var(--font-base);line-height:1.6}.error-boundary-details{margin-bottom:var(--space-6);padding:var(--space-4);background:#f3b43226;backdrop-filter:blur(8px) saturate(1.2);-webkit-backdrop-filter:blur(8px) saturate(1.2);border-radius:var(--radius-sm);border:1px solid rgba(243,180,50,.4)}.error-boundary-details summary{cursor:pointer;font-weight:600;margin-bottom:var(--space-2);color:var(--text)}.error-boundary-stack{font-size:var(--font-xs);font-family:monospace;overflow:auto;max-height:300px;margin:var(--space-2) 0 0 0;padding:var(--space-2);background:#0003;border-radius:var(--radius-sm);color:var(--text)}.google-login-wrapper{display:grid;gap:var(--space-3);justify-items:center}.google-login-label{opacity:.8}.google-login-btn{position:relative;padding:var(--space-3) var(--space-7);font-size:var(--font-base);font-weight:600;color:var(--text);background:#ffffff1a;backdrop-filter:blur(var(--blur-regular)) saturate(1.4);-webkit-backdrop-filter:blur(var(--blur-regular)) saturate(1.4);border:1px solid rgba(255,255,255,.15);border-radius:var(--radius-md);min-width:180px;box-shadow:0 4px 16px #0003,inset 0 1px 1px #ffffff14;overflow:hidden}.google-login-btn:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(255,255,255,.15) 0%,transparent 50%);border-radius:inherit;pointer-events:none;opacity:.6}.google-login-btn:hover:not(:disabled){background:#ffffff24;border-color:#ffffff40;transform:translateY(-1px);box-shadow:0 6px 20px #00000040,inset 0 1px 1px #ffffff1a}.google-login-btn:active:not(:disabled){background:#ffffff2e;transform:translateY(0)}.google-login-btn.disabled,.google-login-btn:disabled{color:#ffffff80;background:#ffffff0a;border-color:#ffffff1a;cursor:not-allowed}.google-login-btn.disabled svg,.google-login-btn:disabled svg{opacity:.5}.loading-screen{min-height:60vh;display:grid;place-items:center}.loading-screen-content{text-align:center;animation:fadeIn .3s ease-out}.loading-screen-spinner{width:54px;height:54px;border-radius:50%;margin:0 auto var(--space-3);border:4px solid rgba(255,255,255,.12);border-top-color:var(--accent);animation:spin .8s linear infinite;will-change:transform;transform:translateZ(0)}.loading-screen-message{color:var(--muted);font-weight:600;font-size:var(--font-base)}.year-selector-label{font-weight:700}.year-selector-chevron{margin-left:var(--space-1);transition:transform var(--transition-base)}.year-selector-chevron.open{transform:rotate(180deg)}.year-selector-menu{min-width:320px;max-width:400px}.year-selector-card{margin:var(--space-1);background:#ffffff08;backdrop-filter:blur(8px) saturate(1.2);-webkit-backdrop-filter:blur(8px) saturate(1.2)}.year-selector-list{max-height:300px;overflow-y:auto}.year-selector-empty{padding:var(--space-3) 0}.year-selector-row{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) 0;border-bottom:1px solid rgba(255,255,255,.06);gap:var(--space-2)}.year-selector-row:last-child{border-bottom:none}.year-selector-row-info{display:flex;align-items:center;gap:var(--space-2);flex:1;min-width:0}.year-selector-row-text{min-width:0}.year-selector-row-label{font-weight:700;font-size:var(--font-sm)}.year-selector-row-range{font-size:var(--font-xs)}.year-selector-actions{display:flex;gap:var(--space-1)}.btn.icon.sm{width:36px;height:36px;min-width:36px;min-height:36px}.btn.icon.sm svg{width:16px;height:16px}.page-enter{opacity:0;transform:translateY(8px)}.page-enter-active{opacity:1;transform:translateY(0);transition:opacity .2s ease-out,transform .25s var(--ease-spring)}.btn:after{content:"";position:absolute;inset:0;background:radial-gradient(circle at var(--ripple-x, 50%) var(--ripple-y, 50%),rgba(255,255,255,.3) 0%,transparent 60%);opacity:0;transform:scale(0);transition:transform .4s ease-out,opacity .3s ease-out;pointer-events:none;border-radius:inherit}.btn:active:after{opacity:1;transform:scale(2.5);transition:transform 0s,opacity 0s}.btn{transition:background var(--transition-fast),border-color var(--transition-fast),transform .1s ease-out,box-shadow var(--transition-fast)}.btn:active{transition:transform .05s ease-out}.btn.primary{position:relative}.btn.primary:after{background:radial-gradient(circle at var(--ripple-x, 50%) var(--ripple-y, 50%),rgba(255,255,255,.4) 0%,transparent 60%)}@keyframes spinPulse{0%,to{transform:rotate(0);opacity:1}50%{opacity:.7}to{transform:rotate(360deg)}}.btn.loading .spinner{animation:spin .6s linear infinite}.skeleton{background:linear-gradient(110deg,#ffffff08 0% 35%,#ffffff1f 50%,#ffffff08 65% 100%);background-size:300% 100%;animation:skeleton-shimmer-smooth 1.8s ease-in-out infinite}@keyframes skeleton-shimmer-smooth{0%{background-position:100% 0}to{background-position:-100% 0}}.skeleton-fade-out{animation:skeletonFadeOut .2s ease-out forwards}@keyframes skeletonFadeOut{0%{opacity:1}to{opacity:0;transform:scale(.98)}}.content-fade-in{animation:contentFadeIn .25s ease-out}@keyframes contentFadeIn{0%{opacity:0;transform:translateY(4px) scale(.99)}to{opacity:1;transform:translateY(0) scale(1)}}.input,.select,.textarea{transition:border-color .15s ease-out,background .15s ease-out,box-shadow .2s ease-out,transform .1s ease-out}.input:focus,.select:focus,.textarea:focus{transform:translateY(-1px)}.input:not(:placeholder-shown):focus{box-shadow:inset 0 1px 3px #0000001a,0 0 0 3px #3dd6a51f,0 4px 12px #3dd6a514}.input.success,.select.success{border-color:var(--success);background:var(--bg-success)}.input.success:focus{box-shadow:inset 0 1px 3px #0000001a,0 0 0 3px #3dd6a533}.card{transition:transform .2s var(--ease-spring),box-shadow .2s ease-out,border-color .15s ease-out,background .15s ease-out}.card:hover{transform:translateY(-3px) scale(1.005)}.card:active{transform:translateY(-1px) scale(1.002);transition:transform .1s ease-out}.card.interactive{cursor:pointer}.card.interactive:active{transform:scale(.99)}@keyframes modalSlideUp{0%{opacity:0;transform:translateY(20px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}.modal-content{animation:modalSlideUp .25s var(--ease-spring)}.loading-screen{display:flex;align-items:center;justify-content:center;min-height:100vh;background:var(--bg)}.loading-screen-content{display:flex;flex-direction:column;align-items:center;gap:var(--space-4);animation:loadingPulse 2s ease-in-out infinite}@keyframes loadingPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(.98)}}.loading-screen-spinner{width:48px;height:48px;border:3px solid rgba(61,214,165,.15);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}.loading-screen-message{color:var(--muted);font-size:var(--font-sm);font-weight:500}.table tbody tr{transition:background .1s ease-out}.table tbody tr:hover{background:#3dd6a50a}.dropdown-menu{animation:dropdownSlideIn .15s var(--ease-spring);transform-origin:top center}@keyframes dropdownSlideIn{0%{opacity:0;transform:translateY(-8px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.toast{animation:toastSlideIn .3s var(--ease-spring)}.nav a{position:relative;transition:color .15s ease-out,background .15s ease-out}.nav a:not(.active):hover{color:var(--text);background:#ffffff0f}.pill-switch button{transition:background .15s ease-out,color .15s ease-out,border-color .15s ease-out,box-shadow .2s ease-out}.badge{animation:badgeAppear .2s var(--ease-spring)}@keyframes badgeAppear{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.stagger-item{opacity:0;transform:translateY(8px);animation:staggerFadeIn .3s ease-out forwards}.stagger-item:nth-child(1){animation-delay:0s}.stagger-item:nth-child(2){animation-delay:.03s}.stagger-item:nth-child(3){animation-delay:.06s}.stagger-item:nth-child(4){animation-delay:.09s}.stagger-item:nth-child(5){animation-delay:.12s}.stagger-item:nth-child(6){animation-delay:.15s}.stagger-item:nth-child(7){animation-delay:.18s}.stagger-item:nth-child(8){animation-delay:.21s}.stagger-item:nth-child(9){animation-delay:.24s}.stagger-item:nth-child(10){animation-delay:.27s}@keyframes staggerFadeIn{to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.skeleton{animation:none;background:#ffffff0f}}.optimistic-update{animation:optimisticFlash .4s ease-out}@keyframes optimisticFlash{0%{background:#3dd6a526}to{background:transparent}}.action-success{animation:actionSuccess .5s ease-out}@keyframes actionSuccess{0%{box-shadow:0 0 #3dd6a566}50%{box-shadow:0 0 0 8px #3dd6a500}to{box-shadow:0 0 #3dd6a500}}
