:root{--squircle:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpolygon points='100.0,50.0 99.9,54.3 99.8,57.6 99.5,60.7 99.1,63.5 98.6,66.2 98.0,68.8 97.2,71.3 96.4,73.6 95.4,75.9 94.4,78.1 93.2,80.1 91.9,82.1 90.5,84.0 89.0,85.8 87.5,87.5 85.8,89.0 84.0,90.5 82.1,91.9 80.1,93.2 78.1,94.4 75.9,95.4 73.6,96.4 71.3,97.2 68.8,98.0 66.2,98.6 63.5,99.1 60.7,99.5 57.6,99.8 54.3,99.9 50.0,100.0 45.7,99.9 42.4,99.8 39.3,99.5 36.5,99.1 33.8,98.6 31.2,98.0 28.7,97.2 26.4,96.4 24.1,95.4 21.9,94.4 19.9,93.2 17.9,91.9 16.0,90.5 14.2,89.0 12.5,87.5 11.0,85.8 9.5,84.0 8.1,82.1 6.8,80.1 5.6,78.1 4.6,75.9 3.6,73.6 2.8,71.3 2.0,68.8 1.4,66.2 0.9,63.5 0.5,60.7 0.2,57.6 0.1,54.3 0.0,50.0 0.1,45.7 0.2,42.4 0.5,39.3 0.9,36.5 1.4,33.8 2.0,31.2 2.8,28.7 3.6,26.4 4.6,24.1 5.6,21.9 6.8,19.9 8.1,17.9 9.5,16.0 11.0,14.2 12.5,12.5 14.2,11.0 16.0,9.5 17.9,8.1 19.9,6.8 21.9,5.6 24.1,4.6 26.4,3.6 28.7,2.8 31.2,2.0 33.8,1.4 36.5,0.9 39.3,0.5 42.4,0.2 45.7,0.1 50.0,0.0 54.3,0.1 57.6,0.2 60.7,0.5 63.5,0.9 66.2,1.4 68.8,2.0 71.3,2.8 73.6,3.6 75.9,4.6 78.1,5.6 80.1,6.8 82.1,8.1 84.0,9.5 85.8,11.0 87.5,12.5 89.0,14.2 90.5,16.0 91.9,17.9 93.2,19.9 94.4,21.9 95.4,24.1 96.4,26.4 97.2,28.7 98.0,31.2 98.6,33.8 99.1,36.5 99.5,39.3 99.8,42.4 99.9,45.7' fill='black'/%3E%3C/svg%3E");--font-mono:'IBM Plex Mono', monospace;--sidebar-w:228px;--sidebar-w-collapsed:78px;--font:'Noto Sans Thai', system-ui, sans-serif;--font-head:'IBM Plex Sans Thai', 'Noto Sans Thai', system-ui, sans-serif;--radius-xs:12px;--radius-s:16px;--radius-m:24px;--radius-l:28px;--radius-xl:32px;--radius-pill:999px;--bg:#F4F4F4;--card-glass:rgb(255 255 255 / 35%);--card-glass-hover:rgb(255 255 255 / 50%);--on-bg:var(--ink);--on-bg-soft:var(--ink-soft);--on-bg-hover:var(--sidebar-hover);--on-bg-halo:transparent;--on-bg-accent:var(--primary-dark);--on-brand:var(--ink);--on-brand-halo:transparent;--page-bg:var(--bg);--bgp-lemon:#FFF0A3;--bgp-sky:#C4DAFF;--bgp-lilac:#E4D0FF;--bgp-mint:#CDEFD9;--bgp-ocean:linear-gradient(180deg, #B9D2FF, #C9F2C4);--bgp-aurora:radial-gradient(circle at 50% 24%, #C8F0B8 0, transparent 58%), linear-gradient(180deg, #9FDCF5, #B8DDF8);--bgp-sunny:linear-gradient(180deg, #FFF3A0, #E4FF8F);--bgp-dusk:linear-gradient(180deg, #BBD1FF, #D9C4FF);--surface:#FFFFFF;--card:#FFFFFF;--surface-sunken:#ECECEF;--primary:#3E91FF;--primary-solid:#0381FE;--primary-dark:#1B67D6;--primary-tint:#E3EFFF;--on-primary:#FFFFFF;--white:#FFFFFF;--shadow-ink-sm:rgba(0, 0, 0, .10);--shadow-ink-md:rgba(0, 0, 0, .18);--shadow-ink-lg:rgba(0, 0, 0, .30);--ink:#111111;--ink-soft:#666666;--border:#E5E6EA;--paper-rule:#E5E6EA;--success:#12935F;--success-tint:#DDF4E8;--warning:#C77A00;--warning-tint:#FFEFD0;--danger:#E5484D;--danger-tint:#FFE3E4;--shadow:0 8px 28px rgba(16, 17, 20, .10);--scrim:rgba(16, 17, 20, .40);--hover-wash:rgba(16, 17, 20, .05);--tip-bg:#101114;--sidebar-bg:#FFFFFF;--sidebar-hover:#F0F1F4;--login-b:#F4F4F4;--on-w:#FFFFFF;--hue-blue:#0381FE;--hue-violet:#7B52E6;--hue-teal:#0F9F88;--hue-orange:#F0731F;--hue-pink:#E83E7A;--hue-amber:#D98E00;--hue-gray:#666666;--hue-red:#E5484D;--wmix:38%;--wmix-main:38%;--wmix-head:24%;--wmix-soft:15%;--sky-shade:.08;--viz-blue:#0381FE;--viz-green:#12A87A;--viz-purple:#7B52E6;--viz-sky:#1A9FD0;--viz-mint:#3FB86B;--viz-orchid:#A25BE0;--th-bg:#EBEEF3;--th-ink:#1B2130;--th-line:#C9D0DB;--tbl-total-bg:color-mix(in srgb, var(--primary-solid) 34%, var(--card));--tbl-total-ink:var(--ink);--col-collect-strong:#8A919E;--col-collect:#F7F7F8;--col-mid-strong:#8A919E;--col-mid:#F3F3F4;--col-final-strong:#8A919E;--col-final:#EFEFF0;--grp-collect-h:#ECECED;--grp-mid-h:#E7E7E8;--grp-final-h:#E2E2E4;--zebra:#F7F8FA;--row-on:#E8F0FE;--viz-track:#E3E6EC;--viz-bar:var(--viz-blue);--chev:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23666666' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E");--glass:30%;--glass-blur:30px;--island-bg:#111111;--island-fg:#EEEEEE;--island-shadow:rgba(0, 0, 0, .35);color-scheme:light}*{box-sizing:border-box;scrollbar-width:none}::-webkit-scrollbar{display:none;width:0;height:0}html,body{height:100%;-webkit-text-size-adjust:100%;text-size-adjust:100%;overflow-x:clip;margin:0;font-family:var(--font);-webkit-font-smoothing:antialiased;font-size:16px;line-height:1.6;background:var(--page-bg);background-attachment:fixed;color:var(--ink)}button{font-family:inherit}h1,h3{margin:0;font-family:var(--font-head)}h2{margin:0;font-family:var(--font-head);font-weight:700;color:var(--ink)}a{color:inherit}#app{display:flex;min-height:100vh;position:relative;line-height:1.6;color:var(--ink)}.sidebar{width:var(--sidebar-w);flex-shrink:0;display:flex;flex-direction:column;padding:14px 8px;transition:width .2s ease,padding .2s ease;color:var(--ink);box-shadow:none;background:color-mix(in srgb,var(--sidebar-bg) var(--glass, 60%),transparent);border-right:none;-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.6);backdrop-filter:blur(var(--glass-blur)) saturate(1.6)}#app.sidebar-collapsed .sidebar{width:var(--sidebar-w-collapsed);padding:14px 12px}.sidebar-toggle{display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;transition:background .15s ease,color .15s ease;border-radius:50%;border:0;width:36px;height:36px;background:var(--surface-sunken);color:var(--primary-dark)}.sidebar-toggle svg{width:16px;height:16px;transition:transform .2s ease}.sidebar-toggle:hover{color:var(--ink);background:var(--primary-tint)}#app.sidebar-collapsed .sidebar-toggle svg{transform:rotate(180deg)}.brand{display:flex;align-items:center;font-weight:700;white-space:nowrap;letter-spacing:.2px;flex:1;min-width:0;gap:12px;font-family:var(--font-head);overflow:visible;color:var(--on-brand);font-size:18px}#app.sidebar-collapsed .brand{display:none}.brand .mark{flex-shrink:0;width:46px;height:46px;padding:2px;border-radius:50%;object-fit:contain;border:0;background:var(--primary-tint)}.nav-list{position:relative;display:flex;flex-direction:column;overflow:visible;gap:4px}.nav-pill{position:absolute;left:0;top:0;z-index:0;border-radius:var(--radius-m);pointer-events:none;opacity:0;background:color-mix(in srgb,var(--on-bg) 10%,transparent);transition:transform .3s cubic-bezier(.3,.9,.3,1),width .3s cubic-bezier(.3,.9,.3,1),height .3s cubic-bezier(.3,.9,.3,1),background-color .3s ease,opacity .2s ease}.nav-pill.no-anim{transition:none}.nav-item{position:relative;z-index:1;display:flex;align-items:center;cursor:pointer;background:0 0;text-align:left;width:100%;transition:background .15s ease,color .15s ease;font-family:var(--font-head);color:var(--on-bg);border:0;border-radius:var(--radius-pill);font-size:15px;font-weight:500;--w:var(--hue-blue);gap:14px;padding:5px 10px;min-height:52px;-webkit-tap-highlight-color:transparent}.nav-item .nav-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:38px;height:38px;border-radius:var(--radius-xs);position:relative;isolation:isolate;color:var(--on-w);transition:transform .15s ease}.nav-item .nav-label{white-space:nowrap;overflow:hidden;text-shadow:0 0 6px var(--on-bg-halo)}.nav-item:hover{color:var(--on-bg)}.nav-item.active::after{content:"";position:absolute;right:-14px;top:50%;transform:translateY(-50%);width:3px;height:60%;border-radius:3px;background:var(--primary);display:none}#app.sidebar-collapsed .nav-item{justify-content:center;padding:11px;gap:0;padding-left:14px;padding-right:14px}#app.sidebar-collapsed .nav-label{display:none}#app.sidebar-collapsed .nav-item.active::after{right:-12px}#app.sidebar-collapsed .nav-item:hover::before,#app.sidebar-collapsed .user-chip:hover::before{content:attr(data-tip);position:absolute;left:calc(100% + 14px);top:50%;transform:translateY(-50%);padding:6px 11px;font-size:12px;font-weight:600;white-space:nowrap;box-shadow:var(--shadow);z-index:70;pointer-events:none;font-family:var(--font-head);border-radius:var(--radius-xs);background:var(--tip-bg);color:var(--white)}.sidebar-footer{position:relative;margin-top:auto;padding-top:14px;border-top:none;display:flex;flex-direction:column;gap:6px}.user-chip{position:relative;z-index:1;display:flex;align-items:center;gap:14px;width:100%;min-height:52px;text-align:left;cursor:pointer;font:inherit;color:inherit;padding:5px 10px;border:0;border-radius:var(--radius-pill);background:0 0;transition:background .15s ease,color .15s ease,transform .15s ease;-webkit-tap-highlight-color:transparent}.user-chip:hover{background:var(--on-bg-hover)}.user-chip:active{transform:scale(.97)}.user-chip.active{background:color-mix(in srgb,var(--on-bg) 10%,transparent)}.user-chip.active .name{font-weight:700;color:var(--on-bg-accent)}.user-chip-text{display:block;min-width:0}.user-chip img{width:38px;height:38px;flex-shrink:0;object-fit:cover;-webkit-mask:var(--squircle) center/100% 100%no-repeat;mask:var(--squircle) center/100% 100%no-repeat}.user-chip .name{display:block;font-family:var(--font-head);font-size:14px;font-weight:600;color:var(--on-bg)}.user-chip .email{display:block;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:130px;color:var(--ink-soft)}#app.sidebar-collapsed .user-chip{justify-content:center;padding:5px;gap:0}#app.sidebar-collapsed .user-chip>.user-chip-text{display:none}.crumb{font-size:12.5px;margin-bottom:4px;font-weight:600;font-style:normal;color:var(--on-bg-soft)}.crumb b{color:var(--primary)}.hamburger-btn{display:none;position:fixed;top:14px;left:14px;z-index:60;align-items:center;justify-content:center;flex-direction:column;gap:4px;cursor:pointer;border:0;transition:left .25s ease;border-radius:50%;width:46px;height:46px;box-shadow:var(--shadow);background:var(--card)}.hamburger-btn span{display:block;width:18px;height:2px;border-radius:2px;background:var(--primary-dark)}.nav-overlay{display:none;position:fixed;inset:0;z-index:45;background:var(--scrim)}.stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:24px}.stat-card .label{font-size:12.5px;color:var(--ink-soft);font-weight:600}.stat-card .value{font-size:30px;font-weight:600;margin-top:6px;color:var(--ink);font-family:var(--font-head)}.card{background:var(--surface);border-radius:var(--radius-m)}.course-list{display:flex;flex-direction:column;gap:10px}.course-row{display:flex;align-items:center;gap:14px;padding:15px 18px;background:var(--surface);border-radius:var(--radius-m);cursor:pointer;border:2px solid transparent}.course-dot{width:10px;height:10px;border-radius:50%;background:var(--c, var(--primary));flex-shrink:0;box-shadow:0 4px 10px -5px currentColor}.course-row .info{flex:1;min-width:0}.course-row .name{font-weight:700;font-size:14.5px}.course-row .meta{font-size:12.5px;color:var(--ink-soft);margin-top:2px}.chart-row{display:grid;grid-template-columns:1.3fr 1fr;gap:12px;margin:10px 0 18px}.chart-card{padding:18px 18px 14px}.donut-wrap{display:flex;align-items:center;gap:18px;flex-wrap:wrap}.donut-legend{display:flex;flex-direction:column;gap:8px}.donut-legend-item{font-size:12px;font-weight:600;display:flex;align-items:center;gap:7px;color:var(--ink-soft)}.donut-legend-item .dot{border-radius:50%;flex-shrink:0;background:var(--c);width:11px;height:11px}.donut-legend-item b{color:var(--ink);font-weight:700}@media (max-width:860px){.chart-row{grid-template-columns:1fr}}.section-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}.section-card{padding:16px;cursor:pointer;transition:border-color .15s,box-shadow .15s;border-radius:var(--radius-m);box-shadow:none;border:2px solid transparent;background:var(--card-glass)}.section-card-top{display:flex;align-items:center;gap:8px;margin-bottom:10px}.section-card-room{font-size:12px;font-weight:700;color:var(--ink-soft);background:var(--surface-sunken);padding:3px 9px;border-radius:var(--radius-pill)}.section-card-name{font-weight:700;color:var(--ink);margin-bottom:3px;font-size:16px}.section-card-meta{font-size:12px;color:var(--ink-soft);margin-bottom:12px}.section-card-pct{font-size:11.5px;font-weight:600;margin-top:6px;color:var(--ink)}.progress-bar{width:140px;height:7px;background:var(--surface-sunken);overflow:hidden;border-radius:var(--radius-pill)}.progress-bar .fill{height:100%;width:var(--p, 0%);background:var(--c, var(--primary));transition:width .25s ease;border-radius:var(--radius-pill)}.progress-pct{font-family:var(--font-mono);font-size:12px;color:var(--ink-soft);width:34px;text-align:right}.progress-chart-list{display:flex;flex-direction:column;gap:16px}.progress-chart-row{display:flex;align-items:center;gap:14px}.progress-chart-label{flex:1 1 42%;min-width:0;display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ink);font-weight:700}.progress-chart-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;background:var(--c, var(--primary))}.progress-chart-label-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.progress-chart-row .progress-bar{flex:1 1 auto;width:auto;border-radius:var(--radius-pill);height:12px;background:var(--viz-track)}.progress-chart-row .progress-pct{flex:0 0 auto;font-weight:700;color:var(--c, var(--primary));width:44px;font-size:14px;text-align:right;filter:none}.btn{display:inline-flex;align-items:center;gap:7px;cursor:pointer;transition:background .15s ease,color .15s ease,transform .12s ease;border:0;border-radius:var(--radius-pill);min-height:44px;padding:10px 22px;font-size:15px;font-weight:600;letter-spacing:0;box-shadow:none;justify-content:center;-webkit-tap-highlight-color:transparent}.btn-danger:hover{filter:brightness(.92)}.btn:disabled{opacity:.5;cursor:not-allowed}.field{margin-bottom:14px}.field label{display:block;margin-bottom:5px;color:var(--ink-soft);font-weight:600;font-size:13.5px}.field input,.field textarea,.doc-l-name,.doc-l-hours{width:100%;min-width:0;resize:vertical;font-size:14px;line-height:1.6;border:1.5px solid transparent;border-radius:var(--radius-s);font-family:var(--font);padding:12px 14px;background:var(--surface-sunken);color:var(--ink);transition:border-color .15s ease,background-color .15s ease,box-shadow .15s ease}.field input:hover,.field textarea:hover,.doc-l-name:hover,.doc-l-hours:hover{border-color:var(--border)}.field input:focus,.field textarea:focus,.doc-l-name:focus,.doc-l-hours:focus{outline:0;border-color:var(--primary);box-shadow:0 0 0 4px var(--primary-tint);background:var(--card);color:var(--ink)}.field input::placeholder,.field textarea::placeholder,.doc-l-name::placeholder,.doc-l-hours::placeholder{color:var(--ink-soft);opacity:.65}.field select{width:100%}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}.field-hint{font-size:11.5px;color:var(--ink-soft);margin-top:6px}select{-webkit-appearance:none;appearance:none;min-width:0;max-width:100%;min-height:46px;padding:10px 40px 10px 14px;font-family:var(--font);font-size:14px;line-height:1.5;color:var(--ink);border:1.5px solid transparent;border-radius:var(--radius-s);cursor:pointer;text-overflow:ellipsis;background-color:var(--surface-sunken);background-image:var(--chev);background-repeat:no-repeat;background-position:right 14px center;background-size:16px 16px;transition:border-color .15s ease,background-color .15s ease,box-shadow .15s ease}select:hover{border-color:var(--border)}select:focus{outline:0;border-color:var(--primary);box-shadow:0 0 0 4px var(--primary-tint);background-color:var(--card)}select:disabled{opacity:.55;cursor:not-allowed}option{background:var(--card);color:var(--ink)}@supports (appearance:base-select){select{appearance:base-select;display:inline-flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 14px;background-image:none}select::picker-icon{content:"";flex:none;width:8px;height:8px;border:solid var(--ink-soft);border-width:0 2px 2px 0;rotate:45deg;translate:0-2px;transition:rotate .2s ease,translate .2s ease}select:open::picker-icon{rotate:225deg;translate:0 2px}::picker(select){appearance:base-select;max-height:min(340px,60vh);margin-block:6px;padding:6px;border:1.5px solid var(--border);border-radius:var(--radius-s);background:var(--card);color:var(--ink);box-shadow:var(--shadow);opacity:1;translate:0 0;transition:opacity .16s ease-out,translate .16s ease-out,display .16s allow-discrete,overlay .16s allow-discrete}@starting-style{::picker(select){opacity:0;translate:0-6px}}option{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius-xs);font-size:14px;line-height:1.5;color:var(--ink);background:0 0;cursor:pointer;transition:background-color .12s ease}option:hover,option:focus-visible{outline:0;background:var(--hover-wash)}option:checked{background:var(--primary-tint);color:var(--primary-dark);font-weight:600}option:disabled{color:var(--ink-soft);opacity:.55;cursor:not-allowed}option::checkmark{order:1;margin-inline-start:auto;color:var(--primary)}}.room-mode-toggle{display:flex;gap:6px;margin-bottom:10px}.room-mode-btn{flex:1;padding:9px 10px;font-size:12.5px;font-weight:700;border:1.5px solid var(--border);background:var(--surface);color:var(--ink-soft);cursor:pointer;border-radius:var(--radius-s)}#room-mode-count input,#room-mode-list input{width:100%;padding:10px 12px;border:1.5px solid var(--border);border-radius:var(--radius-s);font-size:14px;font-family:inherit}.room-number-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.room-pick-btn{padding:9px 0;font-size:13px;font-weight:700;text-align:center;border:1.5px solid var(--border);background:var(--surface);color:var(--ink-soft);cursor:pointer;border-radius:var(--radius-s)}.room-pick-btn:hover{border-color:var(--primary);color:var(--ink)}@media (max-width:480px){.room-number-grid{grid-template-columns:repeat(5,1fr)}}.room-pills{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px;align-items:center;position:relative;--seg-pill-bg:var(--primary);--seg-pill-shadow:none}.room-pill-wrap{position:relative;display:inline-flex;align-items:center}.room-pill{padding:8px 28px 8px 15px;border-radius:var(--radius-pill);font-size:13px;font-weight:700;cursor:pointer;border:0;position:relative;z-index:1;transition:transform .12s ease,color .2s ease;background:var(--card-glass);color:var(--ink-soft)}.room-pill:hover{border-color:var(--primary)}.room-pill.active{border-color:var(--primary);background:0 0;color:var(--on-primary)}.room-pill-add{padding:8px 15px;color:var(--ink-soft);border:1.5px dashed var(--border);background:var(--surface-sunken)}.room-pill-del{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:17px;height:17px;border-radius:50%;border:0;background:0 0;color:inherit;opacity:.55;font-size:14px;line-height:1;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}.room-pill-del:hover{opacity:1;background:var(--danger);color:var(--white)}.struct-groups{display:flex;flex-direction:column;gap:22px}.struct-group-header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px;letter-spacing:0;padding:10px 20px;font-size:15px;font-weight:800;border:0;border-radius:var(--radius-xs);color:var(--c);background:color-mix(in oklab,currentColor var(--wmix-head),var(--card))}.struct-group-count{font-size:12px;font-weight:600;opacity:.8}.struct-row{justify-content:space-between}.struct-row.is-archived .struct-code{color:var(--ink-soft)}.struct-row.is-archived .struct-course-name,.struct-row.is-archived .struct-level-badge{opacity:.6}.struct-code{font-family:var(--font-mono);font-weight:700;color:var(--c, var(--primary));margin-right:6px}.struct-course-name{font-weight:700}.struct-level-badge{margin-right:8px;vertical-align:middle;color:var(--c);border-radius:var(--radius-pill);background:var(--card)}.struct-status-tag{margin-left:8px;color:var(--ink-soft);font-weight:700}.struct-status-tag.is-active{color:var(--success)}.struct-row-actions{display:flex;gap:8px;flex-shrink:0}.switch{position:relative;display:inline-flex;width:40px;height:23px;flex-shrink:0;cursor:pointer}.switch input{opacity:0;width:0;height:0;position:absolute}.switch-slider{position:absolute;inset:0;background:var(--border);border-radius:var(--radius-pill);transition:background .18s ease;cursor:pointer}.switch-slider::before{content:"";position:absolute;height:17px;width:17px;left:3px;top:3px;border-radius:50%;transition:transform .18s ease;box-shadow:0 1px 3px var(--shadow-ink-lg);background:var(--white)}.switch input:checked+.switch-slider{background:var(--success)}.switch input:checked+.switch-slider::before{transform:translateX(17px)}.switch input:focus-visible+.switch-slider{box-shadow:0 0 0 3px var(--primary-tint)}@media (max-width:640px){.struct-row{flex-wrap:wrap}.struct-row-actions{width:100%;justify-content:flex-end}}.scores-subject-list{display:flex;flex-direction:column;gap:12px}.scores-subject-block{display:flex;flex-direction:column;gap:8px}.scores-subject-title{padding:4px 0 4px 12px;border-left:5px solid var(--c, currentColor);background:0 0}.scores-subject-title .struct-course-name{margin-left:2px;font-size:16px}.tabs{display:flex;margin-bottom:22px;overflow-x:auto;background:var(--surface-sunken);padding:4px;border-radius:var(--radius-pill);width:fit-content;max-width:100%;gap:2px;position:relative}.tab{font-size:13.5px;font-weight:700;cursor:pointer;white-space:nowrap;border:0;border-radius:var(--radius-pill);margin:0;padding:9px 18px;position:relative;z-index:1;transition:transform .12s ease,color .28s ease;background:0 0;color:var(--ink-soft);-webkit-tap-highlight-color:transparent}.tab.active{border-bottom-color:var(--primary);color:var(--primary-dark)}.sheet-legend{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin:0 0 12px}.sheet-legend .lg-item{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-soft);font-weight:600}.sheet-legend .lg-dot{width:10px;height:10px;flex-shrink:0;border-radius:50%}.sheet-legend .lg-dot.collect{background:var(--col-collect-strong)}.sheet-legend .lg-dot.mid{background:var(--col-mid-strong)}.sheet-legend .lg-dot.final{background:var(--col-final-strong)}.sheet-scroll-hint{display:none;align-items:center;gap:6px;font-size:12px;color:var(--ink-soft);font-weight:600;margin-bottom:8px}.sheet-scroll-hint svg{width:14px;height:14px;flex-shrink:0}.sheet-wrap{overflow:auto;-webkit-overflow-scrolling:touch;max-height:74vh;border-radius:var(--radius-l);box-shadow:inset 0 0 0 1px var(--border);background:var(--card)}table.sheet{border-collapse:separate;border-spacing:0;width:100%;font-size:13.5px;--c1-w:44px;--c2-w:80px;--c3-w:176px;--r1-w:64px;--r2-w:58px}table.sheet th{position:sticky;top:0;z-index:2;text-align:center;padding:0 8px;font-size:12px;line-height:1.3;white-space:nowrap;height:32px;transform:translateZ(0);font-family:var(--font);background:var(--th-bg);color:var(--th-ink);font-weight:700;border-bottom:2px solid var(--th-line);text-shadow:none}table.sheet th span.max{display:block;font-weight:500;font-size:10px;opacity:.8}table.sheet:not(.sheet-simple) thead tr:first-child th{top:0;height:26px}table.sheet:not(.sheet-simple) thead tr:last-child th{top:26px;height:38px}table.sheet.sheet-simple thead th{top:0;height:34px}table.sheet td{padding:0;min-width:52px;text-align:center;vertical-align:middle;border-bottom:1px solid var(--border);background:var(--card)}table.sheet td.name-cell{padding:9px 12px;min-width:168px;max-width:200px;font-weight:700;text-align:left;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:var(--font)}table.sheet td.name-cell.no-cell{text-align:center;font-weight:700;color:var(--ink-soft);padding:9px 6px;min-width:unset;max-width:unset}table.sheet td.name-cell.code-cell{text-align:center;font-weight:600;color:var(--ink-soft);font-family:var(--font-mono);font-size:12px;padding:9px 6px;min-width:unset;max-width:unset}table.sheet td input.score-input{width:100%;height:100%;border:0;text-align:center;font-family:var(--font-mono);font-size:13px;font-weight:700;padding:6px 3px;background:0 0;-moz-appearance:textfield;border-radius:var(--radius-xs);min-height:40px;color:var(--ink)}table.sheet td input.score-input::-webkit-outer-spin-button,table.sheet td input.score-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}table.sheet td input.score-input::placeholder{color:var(--ink-soft);opacity:.45}table.sheet td input.score-input:focus{outline:2.5px solid var(--primary);outline-offset:-2.5px;border-radius:var(--radius-xs);box-shadow:0 0 0 3px var(--primary-tint);background:var(--card);color:var(--ink)}table.sheet td.total-cell.sticky-right-1{font-family:var(--font-mono);font-weight:700;text-align:center;padding:10px 6px;background:var(--tbl-total-bg);color:var(--tbl-total-ink)}table.sheet td.total-cell.sticky-right-2{padding:10px 6px;text-align:center;background:var(--card)}table.sheet td.over-max input{color:var(--danger)}table.sheet td.grp-collect-total{font-family:var(--font-mono);background:var(--grp-collect-h);color:var(--th-ink);font-weight:700}table.sheet th.grp-label{text-align:center;font-size:11.5px;padding:8px 8px;color:var(--white);font-weight:700}.sheet .sticky-col-1,.sheet .sticky-col-2,.sheet .sticky-col-3,.sheet .sticky-right-1,.sheet .sticky-right-2{position:sticky;z-index:1;transform:translateZ(0)}table.sheet thead th.sticky-col-1,table.sheet thead th.sticky-col-2,table.sheet thead th.sticky-col-3,table.sheet thead th.sticky-right-1,table.sheet thead th.sticky-right-2{z-index:3}table.sheet :is(th,td).sticky-col-1{left:0;width:var(--c1-w);min-width:var(--c1-w);max-width:var(--c1-w)}table.sheet :is(th,td).sticky-col-2{left:var(--c1-w);width:var(--c2-w);min-width:var(--c2-w);max-width:var(--c2-w)}table.sheet :is(th,td).sticky-col-3{left:calc(var(--c1-w) + var(--c2-w));width:var(--c3-w);min-width:var(--c3-w);max-width:var(--c3-w);box-shadow:2px 0 8px var(--shadow-ink-sm)}table.sheet :is(th,td).sticky-right-1{right:var(--r2-w);width:var(--r1-w);min-width:var(--r1-w);max-width:var(--r1-w);box-shadow:-2px 0 8px var(--shadow-ink-sm)}table.sheet :is(th,td).sticky-right-2{right:0;width:var(--r2-w);min-width:var(--r2-w);max-width:var(--r2-w)}.badge-grade-good{background:var(--success-tint);color:var(--success)}.badge-grade-mid{background:var(--warning-tint);color:var(--warning)}.badge-grade-low{background:var(--danger-tint);color:var(--danger)}.struct-summary-row{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:18px}.struct-summary-box{border-radius:var(--radius-s);padding:13px 15px;background:var(--card)}.struct-summary-box .lbl{font-size:12px;color:var(--ink-soft);font-weight:600;margin-bottom:6px}.struct-summary-box input{width:100%;border:0;font-size:22px;font-weight:700;font-family:var(--font-mono);color:var(--ink);padding:0;text-align:left;background:0 0}.struct-summary-box input:focus{outline:0}.struct-summary-box.readonly{background:var(--primary-tint)}.struct-summary-box.readonly input{color:var(--primary)}.struct-panel-header{display:flex;align-items:center;gap:8px;padding:13px 18px;font-weight:700;font-size:13.5px;border-radius:var(--radius-m) var(--radius-m)0 0;background:var(--th-bg);color:var(--th-ink);border-bottom:2px solid var(--th-line)}.struct-table{width:100%;border-collapse:collapse;font-size:13px}.struct-table th{text-align:left;padding:9px 10px;font-size:11.5px;background:var(--th-bg);color:var(--th-ink);font-weight:700;border-bottom:2px solid var(--th-line);text-shadow:none}.struct-table td{padding:7px 10px;border-bottom:1px solid var(--border);vertical-align:middle;border-color:var(--border)}.struct-table td.num-col{width:90px}.struct-table td.del-col{width:40px}.struct-table input.row-name{width:100%;border:0;font-size:13px;font-weight:500;background:0 0;padding:4px 2px}.struct-table input.row-detail{width:100%;border:0;font-size:12.5px;color:var(--ink-soft);background:0 0;padding:4px 2px}.struct-table input.row-max{width:70px;border:1.5px solid var(--border);padding:6px 8px;font-family:var(--font-mono);font-weight:600;text-align:right;border-radius:var(--radius-xs);border-width:1.5px}.struct-table tr.dragging{opacity:.4}.struct-table td.handle-col{width:24px;color:var(--ink-soft);cursor:grab;text-align:center}.save-status{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--ink-soft);font-weight:600;padding:7px 14px;border-radius:var(--radius-pill);background:var(--card-glass)}.save-status .dot{width:7px;height:7px;border-radius:50%;background:var(--success)}.save-status.saving .dot{background:var(--warning)}.save-status .dot.dot-danger{background:var(--danger)}.save-status.is-clickable{cursor:pointer}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;flex-wrap:wrap}.toolbar-left{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.search-box{position:relative}.search-box input{font-size:13px;width:200px;border:1.5px solid transparent;border-radius:var(--radius-pill);padding:10px 18px;font-family:var(--font);background:var(--card-glass)}.badge{display:inline-flex;padding:4px 10px;font-size:12px;font-weight:700;border-radius:var(--radius-pill)}.badge-success{background:var(--success-tint);color:var(--success)}.badge-neutral{background:var(--surface-sunken);color:var(--ink-soft)}.dist-row{display:flex;align-items:center;gap:10px;margin-bottom:8px;font-size:13px}.dist-row .g-label{width:34px;font-family:var(--font-mono);font-weight:700;color:var(--ink)}.dist-row .g-bar-track{flex:1;height:17px;overflow:hidden;border-radius:var(--radius-pill);background:var(--viz-track)}.dist-row .g-bar-fill{height:100%;width:var(--p, 0%);background:var(--viz-bar);filter:none}.dist-row .g-count{width:24px;text-align:right;font-weight:700;font-family:var(--font-mono);color:var(--ink)}.empty-state{text-align:center;padding:60px 20px;color:var(--ink-soft)}.login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;background:var(--login-b)}.login-card{width:360px;max-width:100%;text-align:center;border-radius:var(--radius-xl);padding:52px 36px;background:var(--card);box-shadow:var(--shadow)}.login-card .mark-lg{background:var(--surface-sunken);object-fit:contain;padding:8px;margin:0 auto 18px;border-radius:var(--radius-m);width:72px;height:72px}.login-card h1{margin-bottom:7px;font-size:24px}.login-card p{color:var(--ink-soft);font-size:13.5px;margin-bottom:28px}.google-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:10px;padding:12px;font-weight:700;font-size:14px;cursor:pointer;border:1.5px solid var(--border);border-radius:var(--radius-pill);min-height:48px;background:var(--card);color:var(--ink);border-color:var(--border)}.hidden{display:none!important}.modal-backdrop{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;z-index:50;padding:16px;background:var(--scrim)}.modal{width:480px;max-width:100%;max-height:86vh;overflow-y:auto;border-radius:var(--radius-xl);padding:30px 30px 26px;box-shadow:var(--shadow);background:var(--card)}.modal h2{margin-bottom:4px;font-size:20px}.modal .modal-sub{font-size:13px;color:var(--ink-soft);margin-bottom:20px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px;flex-wrap:wrap}@keyframes modal-backdrop-out{to{opacity:0}}@keyframes modal-out{to{opacity:0;transform:scale(.96) translateY(6px)}}.modal-backdrop.closing{pointer-events:none;animation:modal-backdrop-out .15s ease forwards}.modal-backdrop.closing .modal{animation:modal-out .15s ease forwards}.check-row{display:flex;align-items:center;gap:7px;font-size:13px;margin-bottom:5px;font-weight:500}.check-row.ok{color:var(--success)}.check-row.warn{color:var(--danger)}.island{--island-h:30px;--island-t:.55s cubic-bezier(.3, 1.4, .5, 1);--island-dock:0px;--island-shift:0px;position:fixed;bottom:var(--island-dock);left:calc(50% + var(--island-shift));z-index:80;display:flex;align-items:center;justify-content:center;overflow:hidden;width:var(--iw, 132px);max-width:calc(100vw - 2*var(--island-shift) - 24px);height:var(--island-h);border-radius:calc(var(--island-h)/2) calc(var(--island-h)/2)0 0;transform:translateX(-50%);background:var(--island-bg);color:var(--island-fg);pointer-events:none;box-shadow:0-6px 20px var(--island-shadow);transition:width var(--island-t),left .2s ease,background-color .2s ease,opacity .2s ease}.island.open{width:var(--ow, 240px)}.island.open[data-kind=success]{background:var(--success-tint);color:var(--ink)}.island.open[data-kind=warn],.island.open[data-kind=offline]{background:var(--warning-tint);color:var(--ink)}.island.open[data-kind=error],.island.open[data-kind=trash]{background:var(--danger-tint);color:var(--ink)}.island.island-instant,.island.island-instant .island-idle,.island.island-instant .island-idle-page,.island.island-instant .island-idle-page .pg,.island.island-instant .island-body{transition:none}.island-idle{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max-content;display:flex;align-items:center;white-space:nowrap;font-family:var(--font-head);font-size:12.5px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums;color:inherit;transition:opacity .18s ease}.island.open .island-idle{opacity:0}.island-idle-main{flex:none;display:flex;align-items:center}.island-idle-date,.island-idle-sep{color:color-mix(in srgb,currentColor 65%,transparent);margin:0 6px}.island-idle-page{position:relative;flex:none;display:block;height:18px;width:var(--pw, 0px);overflow:hidden;transition:width var(--island-t)}.island-idle-page .pg{position:absolute;left:0;top:0;height:100%;width:max-content;display:flex;align-items:center;opacity:0;transform:translateY(7px);transition:opacity .22s ease,transform .5s cubic-bezier(.3,1.2,.5,1)}.island-idle-page .pg.on{opacity:1;transform:none}.island-idle-page .pg.out{opacity:0;transform:translateY(-7px)}.island-idle-page .pg.no-t{transition:none}.pg-div{flex:none;width:1px;height:12px;margin:0 9px;background:color-mix(in srgb,currentColor 22%,transparent)}.pg-ico{flex:none;display:flex;align-items:center;margin-right:6px}.pg-ico svg{display:block;width:14px;height:14px;color:var(--primary-dark)}.pg-name{flex:none;font-weight:700;color:inherit}.island-idle-off{display:none;align-items:center;gap:7px;color:var(--warning)}.island-idle-off i{width:7px;height:7px;border-radius:50%;background:currentColor}.island.is-offline .island-idle-off{display:inline-flex}.island.is-offline .island-idle-date,.island.is-offline .island-idle-sep,.island.is-offline .island-idle-time{display:none}.island-idle-timer{display:none;align-items:center;gap:5px;margin-left:12px;font-weight:700}.island.has-timer .island-idle-timer{display:inline-flex}.island.timer-warn .island-idle-timer{color:var(--danger)}.island-idle-timer-ico{flex:none;display:flex;width:13px;height:13px}.island-idle-timer-ico svg{display:block;width:100%;height:100%}@media (max-width:640px){.island-idle-sep,.island-idle-time,.island.has-timer .island-idle-date{display:none}}.island-body{flex:none;box-sizing:border-box;display:flex;align-items:center;gap:8px;width:max-content;max-width:min(calc(100vw - 24px),520px);height:100%;padding:0 16px;font-family:var(--font-head);font-size:13.5px;font-weight:600;line-height:1;white-space:nowrap;opacity:0;transition:opacity .15s ease}.island.open .island-body{opacity:1}.island-body.pop{animation:island-pop .4s cubic-bezier(.3,1.3,.5,1) .08s backwards}.island-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}.island[data-mode=progress] .island-body{min-width:220px}.island-icon{flex:none;display:flex;align-items:center;justify-content:center;width:18px;height:18px;color:inherit}.island-icon svg{display:block;width:100%;height:100%}.island[data-kind=success] .island-icon{color:var(--success)}.island[data-kind=warn] .island-icon,.island[data-kind=offline] .island-icon{color:var(--warning)}.island[data-kind=error] .island-icon,.island[data-kind=trash] .island-icon{color:var(--danger)}.island-check{stroke-dasharray:14;stroke-dashoffset:14;animation:island-check .35s .15s ease forwards}.island-spin{width:16px;height:16px;border-radius:50%;border:2.5px solid color-mix(in srgb,currentColor 18%,transparent);border-top-color:var(--primary-dark);animation:island-spin .8s linear infinite}.island-action{pointer-events:auto;flex:none;appearance:none;border:0;border-radius:999px;margin:0-8px 0 0;padding:4px 12px;background:color-mix(in srgb,currentColor 10%,transparent);color:inherit;font:inherit;font-size:12.5px;font-weight:700;line-height:1.4;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .15s ease}.island-action:hover{background:color-mix(in srgb,currentColor 18%,transparent)}.island-action:focus-visible{outline:2px solid var(--primary-solid);outline-offset:2px}.island-action[hidden]{display:none}.island-bar{position:absolute;left:0;right:0;bottom:0;height:2px;background:color-mix(in srgb,currentColor 10%,transparent);opacity:0;transition:opacity .2s ease}.island-bar i{display:block;height:100%;width:100%;background:var(--primary-dark);transform-origin:left center;transform:scaleX(0)}.island[data-bar=progress] .island-bar,.island[data-bar=indeterminate] .island-bar,.island[data-bar=countdown] .island-bar{opacity:1}.island[data-bar=progress] .island-bar i{transform:scaleX(var(--p, 0));transition:transform .3s ease}.island[data-bar=countdown] .island-bar i{background:color-mix(in srgb,currentColor 40%,transparent);transform:scaleX(1);animation:island-countdown var(--cd, 5000ms) linear forwards}.island[data-bar=indeterminate] .island-bar i{width:38%;transform:none;animation:island-slide 1.1s ease-in-out infinite}@keyframes island-pop{0%{opacity:0;transform:scale(.86)}to{opacity:1;transform:none}}@keyframes island-spin{to{transform:rotate(360deg)}}@keyframes island-check{to{stroke-dashoffset:0}}@keyframes island-countdown{to{transform:scaleX(0)}}@keyframes island-slide{0%{transform:translateX(-100%)}to{transform:translateX(263%)}}@media print{.island{display:none}}@media (min-width:861px){body:has(#app:not(.hidden)) .island{--island-shift:calc(var(--sidebar-w) / 2)}body:has(#app:not(.hidden).sidebar-collapsed) .island{--island-shift:calc(var(--sidebar-w-collapsed) / 2)}}@media (max-width:860px){.sidebar-toggle{display:none}.sidebar,#app.sidebar-collapsed .sidebar{position:fixed;top:0;left:0;bottom:0;z-index:50;width:240px;padding:22px 14px;transform:translateX(-100%);transition:transform .25s ease;box-shadow:var(--shadow);--on-bg:var(--ink);--on-bg-soft:var(--ink-soft);--on-bg-hover:var(--sidebar-hover);--on-bg-halo:transparent;--on-bg-accent:var(--primary-dark);--on-brand:var(--ink);--on-brand-halo:transparent}:root[data-bg=custom] .sidebar{background:color-mix(in srgb,var(--sidebar-bg) 86%,transparent)}#app.nav-open .sidebar{transform:translateX(0)}#app.nav-open .nav-overlay{display:block}#app.sidebar-collapsed .brand,.brand{display:flex}#app.sidebar-collapsed .sidebar-top{justify-content:flex-start}#app.sidebar-collapsed .nav-item{justify-content:flex-start;padding:5px 10px;gap:14px}#app.sidebar-collapsed .nav-label,.nav-label{display:inline}#app.sidebar-collapsed .nav-item.active::after{right:-14px}#app.sidebar-collapsed .user-chip{justify-content:flex-start;padding:5px 10px;gap:14px}#app.sidebar-collapsed .user-chip>.user-chip-text{display:block}.stat-row{grid-template-columns:1fr}.field-row{grid-template-columns:1fr}.course-row{flex-wrap:wrap}.progress-bar{width:100%;order:3}.toolbar{flex-direction:column;align-items:stretch}.search-box input{width:100%}.sheet-scroll-hint{display:flex}.sheet-wrap{touch-action:pan-x pan-y;border-radius:var(--radius-m);max-height:70vh}.sheet .sticky-col-1{display:none}table.sheet{--c1-w:0px;--c2-w:48px;--c3-w:92px;--r1-w:52px;--r2-w:46px}table.sheet td.name-cell.sticky-col-3{white-space:normal;overflow-wrap:anywhere;line-height:1.25}table.sheet td.name-cell{padding:6px 5px;font-size:11px}table.sheet td{min-width:56px}table.sheet th{padding:0 3px;font-size:9.5px}table.sheet th span.max{font-size:8.5px}table.sheet td input.score-input{font-size:12px;padding:8px 2px;min-height:40px;touch-action:manipulation}table.sheet td.total-cell{font-size:12px}.sheet .badge{font-size:10.5px;padding:3px 7px}}@media (max-width:480px){.page-header h1{font-size:20px}.login-card{padding:34px 24px}.modal{padding:22px 18px}}.gs-select,.grade-room-filter{font-size:13px;min-height:40px;padding-block:8px}.gs-wrap{overflow-x:auto;border:0;border-radius:var(--radius-l);box-shadow:inset 0 0 0 1px var(--border);background:var(--card)}.gs-table{border-collapse:collapse;width:100%;min-width:760px;font-size:13.5px}.gs-table th,.gs-table td{text-align:center;line-height:1.35;background:var(--card);border:0;border-bottom:1px solid var(--border);padding:9px 8px;color:var(--ink);font-family:var(--font-mono);font-variant-numeric:tabular-nums}.gs-table thead th{white-space:nowrap;padding:8px 6px;font-family:var(--font);background:var(--th-bg);color:var(--th-ink);font-weight:700;border-bottom:2px solid var(--th-line);text-shadow:none;border-right:1px solid var(--th-line)}.gs-table td.gs-n{font-weight:700}.gs-table .gs-no{width:30px;color:var(--ink-soft)}.gs-table tr.gs-course td{text-align:left;font-family:var(--font);font-size:15px;font-weight:800;padding:10px 14px;border-left:none;background:color-mix(in oklab,var(--cc, var(--viz-blue)) 16%,var(--card));color:var(--ink)}.gs-table tr.gs-course .course-dot{display:inline-block;vertical-align:middle;width:12px;height:12px;margin-right:9px}.gs-table .gs-code{color:var(--ink-soft);font-weight:400}.gs-table tr.gs-row{cursor:pointer}.gs-details{margin-top:10px;border-top:1px solid var(--border);padding-top:8px}.gs-details>summary{cursor:pointer;padding:2px 0;list-style-position:inside;font-style:normal;font-weight:700;color:var(--ink);font-size:14px}.gs-details[open]>summary{margin-bottom:8px}.grade-stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px}.grade-stat-card{padding:8px 10px;border:0;border-radius:var(--radius-m);box-shadow:none;background:var(--card-glass)}.gsc-head{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:4px}.gsc-title{display:flex;align-items:center;gap:6px;min-width:0;font-size:12.5px;font-weight:600}.gsc-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.grade-stat-card .grade-room-filter{padding:2px 5px;font-size:11.5px;max-width:110px}.gsc-meta{font-size:11.5px;color:var(--ink-soft);margin-bottom:4px}.grade-stat-card .dist-row{gap:6px;margin-bottom:2px;font-size:11.5px}.grade-stat-card .dist-row .g-label{width:24px}.grade-stat-card .dist-row .g-bar-track{height:8px;border-radius:var(--radius-pill)}.grade-stat-card .dist-row .g-count{width:20px}.modal.modal-wide{width:880px}.ns-table-wrap{max-height:320px;overflow:auto;border:1px solid var(--border);margin-top:8px;border-color:var(--border);border-radius:var(--radius-m);background:var(--card)}.ns-table{width:100%;border-collapse:collapse;font-size:13px}.ns-table th{position:sticky;top:0;padding:8px 8px;text-align:center;white-space:nowrap;background:var(--th-bg);color:var(--th-ink);font-weight:700;border-bottom:2px solid var(--th-line);text-shadow:none}.ns-table th span{display:block;font-size:10px;font-weight:500;opacity:.8}.ns-table td{padding:6px 8px;text-align:center;border-top:1px solid var(--border);white-space:nowrap;color:var(--ink);border-color:var(--border)}.ns-table .ns-left{text-align:left}.group-creator{padding:12px 14px;margin-bottom:14px;border:0;border-radius:var(--radius-m);box-shadow:none;background:var(--card-glass)}.group-creator-label{font-size:13px;font-weight:700;margin-bottom:8px}.group-creator-label span{font-weight:400;font-size:12px;color:var(--ink-soft);margin-left:6px}.group-creator-row{display:flex;gap:8px}.group-creator-row input{flex:1;min-width:0;font-size:13.5px;border:1.5px solid transparent;border-radius:var(--radius-s);font-family:var(--font);padding:12px 14px;background:var(--surface-sunken);color:var(--ink)}.group-quick{margin-top:8px;font-size:12px;color:var(--ink-soft);display:flex;flex-wrap:wrap;gap:6px;align-items:center}.chip{border:1px dashed var(--col-collect-strong);color:var(--col-collect-strong);padding:3px 10px;font-size:12px;font-weight:600;cursor:pointer;font-family:var(--font);border-radius:var(--radius-pill);background:var(--card)}.chip:hover{background:var(--col-collect)}.struct-table-wrap{overflow-x:auto}.struct-table tr.group-row td{padding:0;background:var(--col-collect);border-bottom:1px solid var(--border)}.struct-table tr.group-row.ungrouped td{background:var(--surface-sunken)}.struct-table tr.group-row.drop-target td{outline:2px solid var(--primary);outline-offset:-2px;background:var(--primary-tint)}.group-bar{display:flex;align-items:center;gap:10px;padding:8px 10px;flex-wrap:wrap}.group-icon{font-size:15px;display:inline-flex;color:var(--primary)}.group-title{font-weight:700;font-size:13px}.group-title.muted{color:var(--ink-soft)}.struct-table input.group-name{flex:1 1 180px;min-width:120px;border:1.5px solid transparent;border-radius:6px;background:0 0;font-size:14px;font-weight:700;color:var(--col-collect-strong);padding:4px 6px}.struct-table input.group-name:hover{border-color:var(--border);background:var(--card);color:var(--ink)}.struct-table input.group-name:focus{outline:0;border-color:var(--primary);background:var(--card);color:var(--ink)}.group-stat{font-size:12px;color:var(--ink-soft)}.group-actions{margin-left:auto;display:flex;gap:6px}.struct-table td.group-col{width:170px}.struct-table select.row-group{width:100%;font-size:13px;min-height:40px;padding-block:8px}.struct-table tr[data-type=item] td.handle-col:active{cursor:grabbing}.struct-table.has-groups tr[data-type=item] td:first-child{border-left:3px solid var(--col-collect-strong)}@media (max-width:860px){.group-creator-label span{display:block;margin:2px 0 0}.group-actions{margin-left:0;width:100%}}table.sheet th.grp-sub{font-size:11.5px;font-weight:700;padding:6px 8px;text-align:center;border-left:2px solid var(--col-collect-strong);border-right:2px solid var(--col-collect-strong);background:var(--grp-collect-h);color:var(--th-ink)}table.sheet th.grp-sub-total{opacity:.85;background:var(--grp-collect-h);color:var(--th-ink)}table.sheet td.grp-sub-total{font-family:var(--font-mono);text-align:center;border-right:2px solid var(--col-collect-strong);background:var(--grp-collect-h);color:var(--th-ink);font-weight:700}table.sheet tbody tr:nth-child(even) td.grp-sub-total{background:var(--col-collect)}.main{flex:1;min-width:0;max-width:1060px;margin:28px auto 48px;min-height:calc(100vh - 76px);background:0 0;border:0;border-radius:0;box-shadow:none;overflow:visible;padding:40px 48px 64px;overflow-x:clip}.main .card{margin-bottom:22px;border:0;border-radius:var(--radius-m);box-shadow:none;background:var(--card-glass)}.main .card-pad{padding:20px 22px}.main .struct-panel-header{background:0 0;border-bottom:1px solid var(--paper-rule);font-family:var(--font-head);font-weight:700;color:var(--ink)}.main .group-creator{border-radius:4px}.main .sheet-wrap{border:1px solid var(--paper-rule);border-radius:var(--radius-l);box-shadow:none;max-width:100%}@media (min-width:861px) and (max-width:1100px){.main{margin:18px 18px 40px;padding:32px 28px 56px}}@media (max-width:860px){.main{max-width:100%;border:0;border-radius:0;min-height:100vh;box-shadow:none;margin:0;padding:calc(52px + env(safe-area-inset-top,0)) 16px calc(104px + env(safe-area-inset-bottom,0))}}@media print{.main{margin:0;box-shadow:none;border:0;max-width:none;padding:0}}@media (min-width:861px){.sidebar{position:sticky;top:0;z-index:40;height:100vh;align-self:flex-start}#app:not(.sidebar-collapsed) .sidebar{overflow-y:auto;overscroll-behavior:contain}}.report-room-list{display:flex;flex-direction:column;border:1px solid var(--border);border-radius:var(--radius-m);overflow:hidden;box-shadow:none;background:var(--card-glass)}.report-room-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:0 0;border-bottom:1px solid var(--border);padding:12px 18px}.report-room-row:last-child{border-bottom:none}.report-room-info{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}.report-room-name{font-weight:700;font-size:16px;color:var(--ink)}.report-room-meta{font-size:12.5px;font-style:normal;color:var(--ink-soft)}.report-room-actions{display:flex;gap:8px;flex-wrap:wrap}.report-room-empty{font-size:12.5px;color:var(--ink-soft)}@media (max-width:640px){.report-room-actions{width:100%}.report-room-actions .btn{flex:1}}.report-section{margin-bottom:34px}.chart-title{font-family:var(--font-head);margin-bottom:12px;border-bottom:none;padding-bottom:0;font-size:16px;font-weight:800;color:var(--ink)}.btn:hover{filter:none}.btn:active{transform:scale(.97)}.btn:disabled:active,table .btn:active{transform:none}.btn-primary{border-color:var(--ink);background:var(--primary-solid);color:var(--on-primary)}.btn-ghost{border-color:var(--ink);background:var(--primary-tint);color:var(--primary-dark)}.btn-danger-ghost{border-color:var(--danger);background:var(--danger-tint);color:var(--danger)}.btn-danger{border-color:var(--danger);background:var(--danger);color:var(--white)}.sidebar-top{gap:8px;margin-bottom:8px;border-bottom:none;display:flex;align-items:center;justify-content:flex-start;padding:2px 0 6px}.brand-text{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis}@media (min-width:861px){#app.sidebar-collapsed .brand{display:flex;flex:0 0 auto;justify-content:center}#app.sidebar-collapsed .brand-text{display:none}#app.sidebar-collapsed .sidebar-top{flex-direction:column;justify-content:center;gap:12px}#app.sidebar-collapsed .nav-item.active{box-shadow:none;padding-left:5px}}#app.nav-open .hamburger-btn{left:254px}@media (max-width:860px){.book-inside{margin-top:0;border:0;border-radius:0;padding:30px 16px 40px;box-shadow:none}}.book-inside{margin-top:0;border:0;border-radius:0;background:0 0;box-shadow:none;padding:24px 0 0;padding-top:10px}.nav-item.active,#app.sidebar-collapsed .nav-item.active{font-weight:700;box-shadow:none;color:var(--on-bg-accent)}.page-header{text-align:left;border-bottom:none;padding:20px 0 0;margin-bottom:24px}.page-header h1{font-size:34px;font-weight:700;line-height:1.35;letter-spacing:0;color:var(--on-bg);text-shadow:0 0 8px var(--on-bg-halo)}.page-header .sub{font-style:normal;font-size:15px;color:var(--on-bg-soft);margin-top:6px}.section-title{font-size:20px;border-bottom:none;padding-bottom:0;margin:0 0 14px;color:var(--on-bg);text-shadow:0 0 8px var(--on-bg-halo)}.card-title{font-size:14.5px}.main .struct-summary-box{border:0;border-radius:var(--radius-m);box-shadow:none;background:var(--card-glass)}.stat-card{border:0;box-shadow:none;padding:20px 22px;border-radius:var(--radius-m);background:var(--card-glass);--w:var(--hue-blue);--wmix:var(--wmix-soft)}.card-pad{padding:24px 26px}.course-row:hover,.section-card:hover{border:2px solid var(--primary-tint);box-shadow:none;border-color:var(--primary-tint)}.progress-chart-row .progress-bar .fill{border-radius:var(--radius-pill);filter:none;box-shadow:none}.btn-sm{min-height:36px;padding:6px 16px;font-size:14px}.btn-danger-ghost:hover{color:var(--danger);background:var(--danger-tint);filter:brightness(.96)}.btn:focus-visible,.nav-item:focus-visible,.tab:focus-visible,.room-pill:focus-visible{outline:3px solid var(--primary);outline-offset:2px;outline-color:var(--primary)}@media (max-width:1100px){.book-inside{padding:28px 0 0}}@media (max-width:860px){.page-header{padding-top:4px}.page-header h1{font-size:28px}.modal{border-radius:var(--radius-l)}.card-pad{padding:14px 12px}.main .card-pad{padding:14px 12px}.main .doc-section{padding:14px 12px;--ai-bleed:12px}}@media print{body,#app{background:var(--white)}}@media (prefers-reduced-motion:reduce){*{transition:none!important}.pa-wgroup>summary::after{transition:none!important}select::picker-icon,::picker(select){transition:none!important}}@keyframes view-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes view-enter-dim{0%{opacity:.5;transform:translateY(6px)}to{opacity:1;transform:none}}#doc-tab-body.tab-swap-dim{animation:view-enter-dim .22s ease-out}#view.view-enter,#rc-body.rc-swap,#course-tab-body.tab-swap,#profile-tab-body.tab-swap,#doc-tab-body.tab-swap{animation:view-enter .22s ease-out}@keyframes view-in-fwd{0%{opacity:0;transform:translateX(24px)}to{opacity:1;transform:none}}@keyframes view-in-back{0%{opacity:0;transform:translateX(-24px)}to{opacity:1;transform:none}}@keyframes view-in-fade{0%{opacity:0}to{opacity:1}}#view.view-enter-fwd{animation:view-in-fwd .18s ease-out}#view.view-enter-back{animation:view-in-back .18s ease-out}.is-ios #view.view-enter-back{animation:view-in-fade .18s ease-out}#course-tab-body.is-switching,#profile-tab-body.is-switching,#doc-tab-body.is-switching{opacity:.5;pointer-events:none;transition:opacity .15s ease}#view.view-pending{opacity:.55;pointer-events:none;transition:opacity .15s ease}@keyframes sk-shimmer{0%{background-position:200%0}to{background-position:-200%0}}@keyframes loader-bob{0%,to{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-8px) rotate(3deg)}}@keyframes loader-dot{0%,80%,to{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}.loader{display:flex;flex-direction:column;align-items:center;gap:10px;padding:56px 16px;color:var(--ink-soft);font-size:14px;font-weight:600;animation:view-enter .2s ease-out}.loader-sm{padding:28px 16px}.loader-cat{display:block;width:84px;height:auto;transform-origin:50% 100%;animation:loader-bob 1.3s ease-in-out infinite}.loader-sm .loader-cat{width:56px}.loader-dots{display:inline-flex;gap:3px;margin-left:4px}.loader-dots i{width:5px;height:5px;border-radius:50%;background:currentColor;animation:loader-dot 1.2s ease-in-out infinite}.loader-dots i:nth-child(2){animation-delay:.15s}.loader-dots i:nth-child(3){animation-delay:.3s}.sk{display:block;border-radius:var(--radius-s);background:linear-gradient(90deg,var(--surface-sunken) 25%,color-mix(in srgb,var(--surface-sunken) 50%,var(--card)) 50%,var(--surface-sunken) 75%);background-size:200% 100%;animation:sk-shimmer 1.5s linear infinite}.sk-list,.sk-dash{display:flex;flex-direction:column;gap:12px;animation:view-enter .2s ease-out}.sk-row{display:flex;align-items:center;gap:16px;padding:16px 20px;border-radius:var(--radius-l);background:var(--card-glass)}.sk-chip{width:44px;height:44px;flex:none;border-radius:50%}.sk-lines{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}.sk-line{width:55%;height:14px}.sk-short{width:32%;height:11px}.sk-btn{width:88px;height:36px;flex:none;border-radius:var(--radius-pill)}.sk-banner{height:170px;border-radius:var(--radius-l)}.sk-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}.sk-card{height:110px;border-radius:var(--radius-l)}.sk-card-lg{height:220px}.theme-seg,.rc-tabs{position:relative;display:flex;gap:6px;padding:4px;margin-top:10px;background:var(--surface-sunken);border-radius:var(--radius-pill);width:fit-content;max-width:100%;margin:2px -4px 12px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}.theme-opt,.rc-tab{position:relative;z-index:1;transition:transform .12s ease,color .2s ease;display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:8px 18px;border:0;border-radius:var(--radius-pill);background:0 0;color:var(--ink-soft);font:inherit;font-size:14.5px;font-weight:600;cursor:pointer;flex:none;max-width:70vw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-tap-highlight-color:transparent}.tab:active,.room-pill:active,.theme-opt:active,.rc-tab:active{transform:scale(.96)}.rc-pill{--seg-pill-bg:var(--w, var(--primary));--seg-pill-shadow:none}.seg-pill{position:absolute;left:0;top:0;z-index:0;border-radius:var(--radius-pill);pointer-events:none;opacity:0;background:var(--seg-pill-bg, var(--card));box-shadow:var(--seg-pill-shadow, 0 1px 6px var(--shadow-ink-md));transition:transform .28s cubic-bezier(.3,.9,.3,1),width .28s cubic-bezier(.3,.9,.3,1),height .28s cubic-bezier(.3,.9,.3,1),background-color .28s ease,opacity .2s ease}.seg-pill.no-anim{transition:none}@media (prefers-reduced-motion:reduce){.bg-opt{transition:none}#view.view-enter,#rc-body.rc-swap,#course-tab-body.tab-swap,#profile-tab-body.tab-swap,#doc-tab-body.tab-swap,#doc-tab-body.tab-swap-dim{animation:none}#view.view-pending{transition:none}.loader,.loader-cat,.loader-dots i,.sk,.sk-list,.sk-dash{animation:none}#view.view-enter-fwd,#view.view-enter-back,.is-ios #view.view-enter-back{animation:none}}.ico{width:24px;height:24px;flex-shrink:0}.empty-state .icon{display:grid;place-items:center;width:72px;height:72px;margin:0 auto 16px;font-size:0;border-radius:var(--radius-m);background:var(--hue-blue);color:var(--on-w)}.empty-state .icon .ico{width:32px;height:32px}.group-icon .ico{width:20px;height:20px}table.sheet th.grp-collect,table.sheet th.grp-mid,table.sheet th.grp-final{border-bottom:none;background:var(--grp-collect-h);color:var(--th-ink)}table.sheet tbody td{border-bottom:1px solid var(--border);padding-top:2px;padding-bottom:2px}table.sheet tbody tr:last-child td{border-bottom:none}.search-box input:focus{outline:0;border-color:var(--primary);box-shadow:0 0 0 4px var(--primary-tint)}.prog-section{margin:4px 0 28px}.prog-section .section-title{margin:0 0 12px 4px}.prog-row{display:grid;grid-template-columns:12px minmax(0,1fr) minmax(0,1.3fr) 110px 44px;align-items:center;gap:14px;width:100%;padding:14px 20px;background:0 0;border:0;border-bottom:1px solid var(--border);font:inherit;color:var(--ink);text-align:left;cursor:pointer}.prog-row:last-child{border-bottom:none}.prog-row:focus-visible{outline:3px solid var(--primary);outline-offset:-3px;outline-color:var(--primary)}.prog-dot{width:12px;height:12px;border-radius:50%;background:var(--c, var(--primary))}.prog-title{font-weight:600;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prog-item{font-size:14px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.prog-row .progress-bar{width:100%;display:block}.prog-row .progress-bar .fill{display:block}.prog-pct{text-align:right;font-weight:700;font-size:14px;color:var(--primary-dark)}@media (max-width:860px){.prog-row{grid-template-columns:12px minmax(0,1fr) 80px 44px;grid-template-areas:"dot title title pct"". item bar bar";gap:6px 10px;padding:12px 16px}.prog-dot{grid-area:dot}.prog-title{grid-area:title}.prog-pct{grid-area:pct}.prog-item{grid-area:item;font-size:13px}.prog-row .progress-bar{grid-area:bar}}:root[data-theme=dark]{color-scheme:dark;--bg:#121212;--island-bg:#FFFFFF;--island-fg:#111111;--island-shadow:rgba(255, 255, 255, .2);--card-glass:rgb(70 70 78 / 40%);--card-glass-hover:rgb(70 70 78 / 56%);--bgp-lemon:#2E2A0A;--bgp-sky:#0B1B33;--bgp-lilac:#1E1230;--bgp-mint:#0C2418;--bgp-ocean:linear-gradient(180deg, #0F2347, #12301E);--bgp-aurora:radial-gradient(circle at 50% 24%, #1C4A2C 0, transparent 58%), linear-gradient(180deg, #0A2A3C, #0B1E33);--bgp-sunny:linear-gradient(180deg, #332E08, #1F2A06);--bgp-dusk:linear-gradient(180deg, #0F1F3E, #25163F);--surface:#212121;--card:#212121;--surface-sunken:#2A2A2E;--primary:#3E91FF;--primary-solid:#3E91FF;--primary-dark:#8DBDFF;--primary-tint:#16304F;--on-primary:#04122A;--ink:#F5F5F5;--ink-soft:#A0ABB1;--border:#2E2E33;--paper-rule:#2E2E33;--success:#3DD598;--success-tint:#12301F;--warning:#FFB84D;--warning-tint:#3A2A0C;--danger:#FF6B70;--danger-tint:#3D1B1E;--shadow:0 8px 28px rgba(0, 0, 0, .6);--scrim:rgba(0, 0, 0, .65);--hover-wash:rgba(255, 255, 255, .07);--tip-bg:#3A3A40;--sidebar-bg:#191919;--sidebar-hover:#222226;--login-b:#121212;--on-w:#0B0B0D;--hue-blue:#5AA2FF;--hue-violet:#B79BFF;--hue-teal:#2FC9AE;--hue-orange:#FF9A5C;--hue-pink:#FF7BA5;--hue-amber:#FFC247;--hue-gray:#A0ABB1;--hue-red:#FF6B70;--wmix:34%;--wmix-main:34%;--wmix-head:26%;--wmix-soft:19%;--sky-shade:.28;--viz-blue:#5AA2FF;--viz-green:#2FD1A0;--viz-purple:#B79BFF;--viz-sky:#4CC3F0;--viz-mint:#6FD98C;--viz-orchid:#CF9BFF;--th-bg:#2A2D38;--th-ink:#F1F3F8;--th-line:#444A5A;--tbl-total-bg:color-mix(in srgb, var(--primary-solid) 45%, var(--card));--tbl-total-ink:var(--ink);--col-collect-strong:#9AA0AE;--col-collect:#222428;--col-mid-strong:#9AA0AE;--col-mid:#1F2126;--col-final-strong:#9AA0AE;--col-final:#1C1E24;--grp-collect-h:#2A2D38;--grp-mid-h:#272A35;--grp-final-h:#242730;--zebra:#1D1F28;--row-on:#28324A;--viz-track:#343848;--viz-bar:var(--viz-blue);--chev:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23A0ABB1' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E")}.nav-item:not(.active):hover{background:var(--on-bg-hover)}.btn-primary:hover{background:var(--primary-dark);color:var(--on-primary)}:root[data-theme=dark] .btn-primary:hover{background:var(--hue-blue);color:var(--on-primary)}.btn-ghost:hover{background:var(--primary-tint);color:var(--primary-dark);filter:brightness(.96)}:root[data-theme=dark] .btn-ghost:hover{filter:brightness(1.25)}.google-btn:hover{background:var(--surface-sunken)}.room-pill:not(.active):hover{background:var(--primary-tint);color:var(--ink)}.room-mode-btn.active,.room-pick-btn.active{background:var(--primary-solid);border-color:var(--primary-solid);color:var(--on-primary)}.prog-row:hover{background:var(--surface-sunken)}:root[data-theme=dark] .brand .mark,:root[data-theme=dark] .login-card .mark-lg{filter:invert(1) hue-rotate(180deg);background:var(--white)}:root[data-theme=dark] table.sheet td{color:var(--ink)}.theme-opt:hover{color:var(--ink)}.theme-opt[aria-pressed=true]{color:var(--primary-dark)}.theme-opt:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.theme-opt .ico{width:20px;height:20px}@media (max-width:480px){.theme-opt{padding:8px 12px}}@media print{:root[data-theme=dark]{--bg:#fff;--card-glass:#fff;--card:#fff;--surface:#fff;--ink:#000;--ink-soft:#444;--border:#ccc}}.tab:hover{background:0 0;color:var(--ink)}.tab.active:hover{color:var(--primary-dark)}.main .course-row,.main .section-card,.prog-list .prog-row,.chart-row .chart-card{border:0;box-shadow:none;transition:transform .12s ease,filter .15s ease;border-radius:var(--radius-m);padding:16px 20px;gap:16px;background:var(--card-glass);--wmix:var(--wmix-soft)}.main .course-row:hover,.main .section-card:hover,.prog-list .prog-row:hover{border:0;background:var(--card-glass-hover);filter:none}:root[data-theme=dark] .main .course-row:hover,:root[data-theme=dark] .main .section-card:hover,:root[data-theme=dark] .prog-list .prog-row:hover{filter:brightness(1.15)}.section-card:active,.prog-row:active,.course-row:active{transform:scale(.98)}.course-chip{display:grid;place-items:center;flex-shrink:0;background:var(--w, var(--primary));color:var(--on-w);box-shadow:0 4px 10px -5px currentColor;width:50px;height:50px;border-radius:var(--radius-s)}.course-chip .ico{width:24px;height:24px}.prog-list{background:0 0;border-radius:0;overflow:visible;display:grid;gap:8px}.main .course-row .name{font-size:16px}.main .course-row .meta{font-size:13.5px}.course-row .btn-ghost{background:var(--card);color:var(--ink)}.section-card .section-card-room{color:var(--ink);background:var(--card)}.section-card .course-dot{width:14px;height:14px;box-shadow:0 4px 10px -5px currentColor}.stat-card:nth-child(2){background:var(--card-glass);--w:var(--hue-teal)}.stat-card:nth-child(3){background:var(--card-glass);--w:var(--hue-orange)}.stat-card:nth-child(4){background:var(--card-glass);--w:var(--hue-violet)}.nav-item[data-route=dashboard]{--w:var(--hue-blue)}.nav-item[data-route=structure-page]{--w:var(--hue-violet)}.nav-item[data-route=courses]{--w:var(--hue-teal)}.nav-item[data-route=scores-page]{--w:var(--hue-orange)}.nav-item[data-route=report-page]{--w:var(--hue-pink)}.nav-item[data-route=archive-page]{--w:var(--hue-amber)}.nav-item[data-route=settings]{--w:var(--hue-gray)}#logout-btn{--w:var(--hue-red)}.nav-item .nav-icon svg{width:28px;height:28px}.tools-ico::before{content:"";position:absolute;inset:5px 2px -4px;z-index:-1;border-radius:42%;background:var(--w);opacity:.6;filter:blur(6px);transition:opacity .15s ease}.nav-item .nav-icon::after,.tab-ico::after,.more-ico::after,.tools-ico::after,.doc-ai-item-ico::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(145deg,oklch(from var(--w) calc(l + .06) calc(c*1.18) h),oklch(from var(--w) calc(l - .05) calc(c*1.25) h));-webkit-mask:var(--squircle) center/100% 100%no-repeat;mask:var(--squircle) center/100% 100%no-repeat}.nav-item.active .nav-icon{transform:scale(1.08)}@media (min-width:861px){#app.sidebar-collapsed .nav-item{padding:5px;justify-content:center;gap:0}}@media (max-width:860px){.prog-list .prog-row{border-radius:var(--radius-m);padding:12px 16px}.main .course-row,.main .section-card{border-radius:var(--radius-m)}}.stat-card:nth-child(n){background:var(--card-glass)}.chart-row .chart-card:nth-child(1){--wmix:26%;--w:var(--viz-blue)}.chart-row .chart-card:nth-child(2){--wmix:26%;--w:var(--viz-purple)}:root[data-theme=dark] .chart-row .chart-card{--wmix:30%}.chart-row .chart-card h3{color:var(--ink);font-weight:700}.donut-wrap svg circle{stroke-width:18;filter:none;stroke-linecap:butt}table.sheet tbody tr:nth-child(even) td,table.sheet tbody tr:nth-child(even) td.total-cell.sticky-right-2,table.sheet tbody tr:nth-child(even) td.sticky-col-1,table.sheet tbody tr:nth-child(even) td.sticky-col-2,table.sheet tbody tr:nth-child(even) td.sticky-col-3{background:var(--zebra)}table.sheet tbody tr:hover td,table.sheet tbody tr:hover td.total-cell.sticky-right-2,table.sheet tbody tr:hover td.sticky-col-1,table.sheet tbody tr:hover td.sticky-col-2,table.sheet tbody tr:hover td.sticky-col-3{background:var(--row-on)}table.sheet tbody td.sticky-col-1,table.sheet tbody td.sticky-col-2,table.sheet tbody td.sticky-col-3{background:var(--card)}table.sheet td input.score-input:hover{background:var(--hover-wash)}.cw-row{display:grid;grid-template-columns:1fr;gap:clamp(10px,1.1vw,20px);margin-bottom:clamp(12px,1.2vw,22px)}.cw-card{display:flex;align-items:center;gap:18px;background:color-mix(in oklab,var(--w) var(--wmix),var(--card));color:var(--ink);border-radius:var(--radius-l);box-shadow:none;--wmix:var(--wmix-main);min-height:136px;padding:18px 26px}.cw-wx-ico{display:grid;place-items:center;flex-shrink:0;width:68px;height:68px;border-radius:var(--radius-m);font-size:36px;background:var(--w);box-shadow:0 6px 14px -6px var(--w)}.cw-wx-main{min-width:0}.cw-temp{font-family:var(--font-head);line-height:1.2;font-size:46px;font-weight:800}.cw-weather{--w:var(--hue-amber)}.cw-wx-meta{color:var(--ink-soft);font-size:14px;font-weight:600}.cw-wx-desc{font-size:16px;font-weight:800}:root:not([data-theme=dark]) .progress-chart-row .progress-pct{filter:none}@media (max-width:640px){.cw-card{border-radius:var(--radius-m);min-height:104px;padding:14px 18px}.cw-temp{font-size:36px}.cw-wx-ico{width:58px;height:58px;font-size:30px}}.struct-row.is-archived{--wmix:12%;background:color-mix(in oklab,var(--w) 12%,var(--card))}.struct-row.is-archived .info{opacity:.75}.main .course-row .badge{background:var(--card)}.gs-table thead th:last-child{border-right:none}.gs-table td.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.gs-table td:nth-child(2),.gs-table td:nth-child(3){font-family:var(--font)}.gs-table td:nth-child(4),.gs-table td:nth-child(5),.gs-table td:nth-child(13){border-left:1px solid var(--border);font-weight:800}.gs-table tr.gs-row td:first-child{box-shadow:inset 4px 0 0 var(--cc, transparent)}.gs-table tr.gs-total td{font-weight:800;background:var(--th-bg);border-top:2px solid var(--th-line);color:var(--th-ink)}.gs-table tr.gs-total td:first-child{text-align:right;box-shadow:none;font-family:var(--font)}.chart-row .chart-card:nth-child(n),:root[data-theme=dark] .chart-row .chart-card:nth-child(n){--wmix:var(--wmix-soft)}.prog-list .prog-row .prog-pct,.section-card .section-card-pct{color:color-mix(in oklab,var(--w) 82%,var(--ink));font-weight:800}.main .course-row .btn-ghost{background:var(--card)}button.brand{display:flex;align-items:center;gap:12px;flex:0 1 auto;min-width:0;max-width:100%;padding:6px 12px 6px 6px;border:0;border-radius:var(--radius-pill);background:0 0;color:var(--on-brand);text-shadow:0 0 6px var(--on-brand-halo),0 0 2px var(--on-brand-halo);font:inherit;font-family:var(--font-head);font-size:18px;font-weight:800;cursor:pointer;transition:background .15s ease,transform .12s ease}button.brand:hover{background:var(--on-bg-hover)}button.brand:active{transform:scale(.97)}button.brand:focus-visible{outline:3px solid var(--primary);outline-offset:2px}button.brand .mark{width:46px;height:46px;border-radius:var(--radius-s);padding:4px;background:var(--surface-sunken);flex-shrink:0;transition:transform .25s ease}button.brand:hover .mark{transform:rotate(-6deg) scale(1.04)}#app.sidebar-collapsed button.brand{display:flex;padding:6px;margin:0 auto}#app.sidebar-collapsed .brand-text{display:none}#app.sidebar-collapsed .sidebar-top{justify-content:center;flex-direction:row}.nav-divider{height:1px;background:var(--border);border:0;margin:10px 14px}#app.sidebar-collapsed .nav-divider{margin:10px 18px}@media (max-width:860px){#app.sidebar-collapsed button.brand{margin:0;padding:6px 12px 6px 6px}#app.sidebar-collapsed .brand-text{display:block}#app.sidebar-collapsed .nav-divider{margin:10px 14px}}.tabbar,.more-scrim,.more-sheet{display:none}@media (max-width:860px){.hamburger-btn{display:none}body:has(#app:not(.hidden)) .island{--island-dock:calc(72px + env(safe-area-inset-bottom, 0px))}body:has(#app.more-open) .island{opacity:0}.tabbar{display:flex;position:fixed;z-index:45;left:12px;right:12px;bottom:calc(8px + env(safe-area-inset-bottom,0));gap:4px;padding:4px;border-radius:var(--radius-l);background:color-mix(in srgb,var(--card) var(--glass, 60%),transparent);box-shadow:0 10px 30px var(--shadow-ink-md);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.6);backdrop-filter:blur(var(--glass-blur)) saturate(1.6)}.tab-item{--w:var(--hue-blue);flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;position:relative;z-index:1;min-height:56px;padding:6px 2px;border:0;border-radius:var(--radius-m);background:0 0;color:var(--on-bg-soft);font:inherit;font-size:11.5px;font-weight:700;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:color .25s ease}.tab-item[data-route=courses]{--w:var(--hue-teal)}.tab-item[data-route=scores-page]{--w:var(--hue-orange)}.tab-item[data-route=report-page]{--w:var(--hue-pink)}.tab-item[data-route=more]{--w:var(--hue-violet)}.tab-ico{display:grid;place-items:center;width:40px;height:40px;position:relative;isolation:isolate;color:var(--on-w)}.tab-ico svg{width:28px;height:28px;display:block}.tab-item:active{transform:scale(.95)}.tab-label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.more-scrim{display:block;position:fixed;inset:0;z-index:46;background:var(--scrim);opacity:0;pointer-events:none;transition:opacity .2s ease}.more-sheet{display:block;position:fixed;z-index:47;left:0;right:0;bottom:0;padding:10px 16px calc(96px + env(safe-area-inset-bottom,0));border-radius:var(--radius-xl) var(--radius-xl)0 0;background:color-mix(in srgb,var(--card) var(--glass, 60%),transparent);box-shadow:0-10px 40px var(--shadow-ink-md);transform:translateY(105%);transition:transform .26s cubic-bezier(.2,.8,.2,1);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.6);backdrop-filter:blur(var(--glass-blur)) saturate(1.6)}#app.more-open .more-scrim{opacity:1;pointer-events:auto}#app.more-open .more-sheet{transform:translateY(0)}.more-grip{width:40px;height:5px;margin:0 auto 14px;border-radius:3px;background:var(--border)}.more-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.more-tile{--w:var(--hue-violet);display:flex;align-items:center;gap:12px;min-height:72px;padding:12px 14px;border:0;border-radius:var(--radius-m);text-align:left;background:color-mix(in oklab,var(--w) var(--wmix-soft, 16%),var(--card));color:var(--ink);font:inherit;font-size:14.5px;font-weight:800;cursor:pointer}.more-tile[data-route=pa-page]{--w:var(--hue-violet)}.more-tile[data-route=archive-page]{--w:var(--hue-amber)}.more-tile[data-route=profile]{--w:var(--hue-blue)}.more-tile[data-route=settings]{--w:var(--hue-gray)}.more-tile[data-route=logout-btn]{--w:var(--hue-red)}.more-tile:active{transform:scale(.97)}.more-ico{display:grid;place-items:center;flex-shrink:0;width:44px;height:44px;position:relative;isolation:isolate;color:var(--on-w)}.more-ico svg{width:31px;height:31px}.more-divider{grid-column:1/-1;height:1px;background:color-mix(in srgb,var(--on-bg) 10%,transparent);border-radius:1px;margin:2px 0}}@media (max-width:860px){.tab-item:focus,.tab-item:focus-visible,.more-tile:focus,.more-tile:focus-visible{outline:0}.tab-item.active{color:var(--on-bg)}.tab-pill{position:absolute;left:0;top:0;z-index:0;border-radius:var(--radius-m);pointer-events:none;opacity:0;background:color-mix(in srgb,var(--on-bg) 10%,transparent);transition:transform .3s cubic-bezier(.3,.9,.3,1),width .3s cubic-bezier(.3,.9,.3,1),background-color .3s ease,box-shadow .3s ease,opacity .2s ease}.tab-pill.no-anim{transition:none}.tab-item.active .tab-label{font-weight:800}.tab-item:not(.active){background:0 0}}.book-inside:has(*){padding-top:10px}@media (max-width:640px){.cw-row{margin-bottom:8px;gap:10px}.chart-row{gap:10px;margin:8px 0 14px}.prog-list{gap:6px}.prog-list .prog-row{padding:12px 16px}}.main .rc-card{margin:4px 0 22px;padding:18px 20px 12px;border-radius:var(--radius-l);position:relative;border:0;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:none;--rc-max:var(--viz-green);--rc-avg:var(--viz-blue);--rc-min:var(--viz-purple);background:var(--card-glass)}:root[data-theme=dark] .main .rc-card{--rc-max:#199e70;--rc-avg:#3987e5;--rc-min:#d95926}.rc-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px}.rc-head .chart-title{margin:0}.rc-legend{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:6px;font-size:12.5px;font-weight:600;color:var(--ink-soft)}.rc-leg{display:inline-flex;align-items:center;gap:7px}.rc-leg i{width:18px;height:0;border-top:2.5px solid currentColor;border-radius:2px}.rc-leg.rc-s-max i,.rc-tip-row.rc-s-max i{border-color:var(--rc-max);background:var(--rc-max)}.rc-leg.rc-s-avg i,.rc-tip-row.rc-s-avg i{border-color:var(--rc-avg);background:var(--rc-avg)}.rc-leg.rc-s-min i{border-color:var(--rc-min);background:0 0;border-top-style:dashed}.rc-tip-row.rc-s-min i{border-color:var(--rc-min);background:var(--rc-min)}.rc-note{margin-left:auto;font-weight:500;font-size:12px}.rc-plot{position:relative;touch-action:pan-y}.rc-plot svg{display:block;width:100%;height:auto;overflow:visible}.rc-grid{stroke:color-mix(in srgb,var(--ink) 10%,transparent);stroke-width:1}.rc-grid.base{stroke:color-mix(in srgb,var(--ink) 22%,transparent)}.rc-tick{fill:var(--ink-soft);font-size:11.5px;font-weight:600;font-variant-numeric:tabular-nums}.rc-xlab{fill:var(--ink-soft);font-weight:600;font-variant-numeric:tabular-nums;font-size:12.5px}.rc-cross{stroke:color-mix(in srgb,var(--ink) 28%,transparent);stroke-width:1;stroke-dasharray:3 3}.rc-line{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.rc-dot{stroke:var(--card);stroke-width:2}.rc-s-max .rc-line{stroke:var(--rc-max)}.rc-s-max .rc-dot{fill:var(--rc-max)}.rc-s-avg .rc-line{stroke:var(--rc-avg);stroke-width:3}.rc-s-avg .rc-dot{fill:var(--rc-avg)}.rc-s-min .rc-line{stroke:var(--rc-min);stroke-dasharray:6 5}.rc-s-min .rc-dot{fill:var(--rc-min)}.rc-val{fill:var(--ink);font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;paint-order:stroke;stroke:var(--card);stroke-width:3px;stroke-linejoin:round}.rc-tip{position:absolute;top:6px;transform:translateX(14px);min-width:118px;padding:9px 12px;border-radius:var(--radius-xs);font-size:12px;pointer-events:none;z-index:2;background:color-mix(in srgb,var(--card) 88%,transparent);border:1px solid color-mix(in srgb,var(--ink) 12%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 8px 24px -12px var(--shadow-ink-lg)}.rc-tip.flip{transform:translateX(calc(-100% - 14px))}.rc-tip>b{color:var(--ink);font-size:13px}.rc-tip small{margin-left:8px;color:var(--ink-soft)}.rc-tip-row{display:flex;align-items:center;gap:7px;margin-top:4px;color:var(--ink-soft)}.rc-tip-row i{width:9px;height:9px;border-radius:50%;flex:none}.rc-tip-row span{flex:1}.rc-tip-row b{color:var(--ink);font-variant-numeric:tabular-nums}.rc-table{margin-top:6px;font-size:12px;color:var(--ink-soft)}.rc-table summary{cursor:pointer;padding:4px 0;font-weight:600}.rc-table table{width:100%;border-collapse:collapse;margin-top:6px;font-variant-numeric:tabular-nums}.rc-table th,.rc-table td{padding:5px 8px;text-align:right;background:var(--th-bg);color:var(--th-ink);font-weight:700;text-shadow:none;border-bottom:1px solid var(--border)}.rc-table th:first-child,.rc-table td:first-child{text-align:left}@media (max-width:640px){.main .rc-card{padding:14px 12px 8px;border-radius:var(--radius-m)}.rc-note{margin-left:0}}.rc-tabs::-webkit-scrollbar{display:none}.rc-tab:not(.is-on):hover{background:color-mix(in srgb,var(--tc) 16%,transparent);color:var(--ink)}.rc-tab.is-on{background:0 0;color:var(--white);box-shadow:none}.rc-tab:focus-visible{outline:2px solid var(--tc);outline-offset:2px}.rc-course{margin:0 0 8px;font-size:13px;font-weight:700;color:var(--ink-soft)}.site-banner{display:flex;align-items:center;justify-content:space-between;gap:clamp(8px,3vw,28px);margin:0 0 10px;padding:4px 0 0}.banner-title{margin:0 0 0 auto;min-width:0;font-size:clamp(34px,9.5vw,56px);font-weight:800;line-height:1.2;letter-spacing:-.01em;overflow-wrap:anywhere;text-align:right;color:var(--on-bg);text-shadow:0 0 8px var(--on-bg-halo)}.banner-dot-blink{animation:banner-dot 1s step-end infinite}@keyframes banner-dot{0%{visibility:visible}50%{visibility:hidden}}@media (prefers-reduced-motion:reduce){.banner-dot-blink{animation:none}}.site-banner picture{flex:none;display:block}.site-banner img{display:block;width:auto;height:clamp(170px,36vw,240px);aspect-ratio:252/350;user-select:none;-webkit-user-drag:none}:root[data-theme=dark] .site-banner img{filter:invert(1) hue-rotate(180deg)}@media (max-width:640px){.site-banner{margin-bottom:4px}.site-banner img{height:170px}}@media (min-width:1700px){.dash{column-gap:32px}}.cw-row .cw-card{container-type:inline-size;min-height:clamp(132px,10.5vw,230px);padding:clamp(18px,1.7vw,34px) clamp(20px,2vw,40px);border-radius:clamp(26px,2.2vw,40px);border:0;box-shadow:none}.cw-row .cw-weather{color:var(--white);position:relative;overflow:hidden;display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:16px;transition:background .4s ease;background:color-mix(in srgb,rgb(0 18 60) calc(var(--sky-shade, 0)*100%),var(--sky-solid, #5AA9FA))}.cw-weather[data-sky=clear-day]{--sky-solid:#4A9AF7}.cw-weather[data-sky=part-day]{--sky-solid:#6C9FDB}.cw-weather[data-sky=cloud-day]{--sky-solid:#7E92AB}.cw-weather[data-sky=rain-day]{--sky-solid:#58779B}.cw-weather[data-sky=fog-day]{--sky-solid:#8A9CAD}.cw-weather[data-sky=snow]{--sky-solid:#86AAD0}.cw-weather[data-sky=storm]{--sky-solid:#464C78}.cw-weather[data-sky=clear-night]{--sky-solid:#172A5E}.cw-weather[data-sky=part-night]{--sky-solid:#27385F}.cw-weather[data-sky=cloud-night]{--sky-solid:#384359}.cw-weather[data-sky=rain-night]{--sky-solid:#2A3B57}.cw-weather[data-sky=fog-night]{--sky-solid:#465160}.cw-row .cw-wx-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:.12em;text-shadow:0 1px 8px rgba(0,20,60,.22)}.cw-row .cw-temp{font-size:clamp(40px,15cqi,112px);line-height:1.05;font-weight:700;color:var(--white);letter-spacing:-.02em}.cw-row .cw-wx-desc{font-size:clamp(16px,4.6cqi,28px);font-weight:800;color:var(--white)}.cw-row .cw-wx-meta{font-size:clamp(12.5px,3.1cqi,18px);font-weight:600;color:rgba(255,255,255,.92);line-height:1.45}.cw-row .cw-wx-ico{order:2;flex:none;width:clamp(60px,22cqi,140px);height:clamp(60px,22cqi,140px);border-radius:32%;font-size:clamp(32px,11.5cqi,74px);background:rgba(255,255,255,.2);box-shadow:inset 0 0 0 1px rgba(255,255,255,.22);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}@media (max-width:640px){.cw-row .cw-card{min-height:118px;padding:16px 20px;border-radius:var(--radius-m)}.cw-row .cw-temp{font-size:clamp(38px,14cqi,60px)}.cw-row .cw-wx-desc{font-size:16px}.cw-row .cw-wx-meta{font-size:12.5px}.cw-row .cw-wx-ico{width:60px;height:60px;font-size:32px}}@media (min-width:861px){.main{max-width:none;margin:0;padding:52px clamp(24px,3vw,72px) 64px}.banner-title{font-size:clamp(44px,5vw,64px)}}@media (min-width:1360px){.dash{--hero-h:clamp(200px, 14.5vw, 380px);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:auto auto auto auto;column-gap:clamp(24px,2vw,44px);align-items:start}.dash>.cw-row{grid-column:1;grid-row:1;align-self:stretch;margin-bottom:clamp(12px,1.2vw,22px)}.dash>.cw-row .cw-card{min-height:var(--hero-h)}.dash>.site-banner{grid-column:2;grid-row:1;align-self:stretch;justify-content:center;gap:clamp(16px,2.4vw,48px);margin:0 0 clamp(12px,1.2vw,22px);padding:0 clamp(8px,2vw,36px)}.dash>.site-banner .banner-title{font-size:clamp(48px,4.2vw,88px)}.dash>.site-banner img{height:var(--hero-h)}.dash>.tt-widget{grid-column:1;grid-row:2;align-self:stretch;margin-bottom:clamp(12px,1.2vw,22px)}.dash>.rc-card{grid-column:1;grid-row:3;margin-bottom:0;padding:clamp(20px,1.6vw,34px) clamp(22px,1.9vw,40px) 14px;display:flex;flex-direction:column;align-self:stretch}.dash>.book-inside{grid-column:1/-1;grid-row:4}.chart-row{gap:clamp(14px,1.4vw,28px)}.dash>.prog-section{grid-column:2;grid-row:2/span 2;align-self:stretch;margin:0}.dash>.prog-section .section-title{margin:0 0 10px 4px}.dash>.prog-section .prog-list{display:flex;flex-direction:column;gap:8px;background:0 0;overflow:visible}.dash>.prog-section .prog-row{grid-template-columns:12px minmax(0,1.15fr) minmax(0,1fr) 84px 42px;grid-template-areas:none;gap:12px;padding:9px 18px;border-radius:var(--radius-m);min-height:0}.dash>.prog-section .prog-dot,.dash>.prog-section .prog-title,.dash>.prog-section .prog-item,.dash>.prog-section .progress-bar,.dash>.prog-section .prog-pct{grid-area:auto;font-size:14px}.dash>.rc-card #rc-body{flex:1 1 auto;display:flex;flex-direction:column;min-height:0}.dash>.rc-card .rc-plot{flex:1 1 auto;min-height:240px}.dash>.rc-card .rc-plot svg{position:absolute;inset:0;width:100%;height:100%}}@media (min-width:1360px) and (max-width:1699px){.dash>.prog-section .prog-row{grid-template-columns:12px minmax(0,1.3fr) minmax(0,1fr) 64px 40px;gap:10px;padding:9px 16px}}table.sheet th.grp-label.grp-collect{background:var(--grp-collect-h);color:var(--th-ink)}table.sheet th.grp-label.grp-mid{background:var(--grp-mid-h);color:var(--th-ink)}table.sheet th.grp-label.grp-final{background:var(--grp-final-h);color:var(--th-ink)}table.sheet th.grp-collect-total{background:var(--grp-collect-h);color:var(--th-ink);box-shadow:inset 0-3px 0 var(--col-collect-strong)}table.sheet td.grp-collect,table.sheet tbody tr:nth-child(even) td.grp-collect{background:var(--col-collect)}table.sheet td.grp-mid,table.sheet tbody tr:nth-child(even) td.grp-mid{background:var(--col-mid)}table.sheet td.grp-final,table.sheet tbody tr:nth-child(even) td.grp-final{background:var(--col-final)}table.sheet tbody tr:nth-child(even) td.grp-collect-total,table.sheet tbody tr:hover td.grp-collect-total,table.sheet tbody tr:hover td.grp-sub-total{background:var(--grp-collect-h);color:var(--th-ink);font-weight:700}table.sheet tbody tr:hover td.total-cell.sticky-right-1{background:var(--tbl-total-bg);color:var(--tbl-total-ink)}table.sheet tbody tr:nth-child(n) td.over-max{background:var(--danger-tint)}.ns-table tbody tr:nth-child(even) td,.report-room-row:nth-child(even){background:var(--zebra)}.ns-table tbody tr:hover td,.struct-table tbody tr:hover td,.gs-table tr.gs-row:hover td,.report-room-row:hover,.report-room-row:nth-child(even):hover{background:var(--row-on)}.ns-table tr.ns-bad td{background:var(--danger-tint);color:var(--danger)}.prog-list .prog-row .progress-bar,.section-card .progress-bar{background:var(--viz-track)}.prog-list .prog-row .progress-bar .fill{filter:none;box-shadow:none}.rc-table tbody tr:nth-child(even) td{background:var(--zebra)}@media print{table.sheet th,.gs-table thead th,.ns-table th{-webkit-print-color-adjust:exact;print-color-adjust:exact}}.login-note{margin:18px 0 0;font-size:12px;line-height:1.6;color:var(--ink-soft)}.struct-group:has(.scores-subject-list) .struct-group-header{padding:8px 16px;border-radius:var(--radius-s)}.struct-group:has(.scores-subject-list) .struct-group-title{font-size:15px}.scores-subject-block .scores-subject-title{padding:0 0 0 10px;border-left-width:4px}.scores-subject-block .struct-course-name{font-size:14px}.scores-subject-block .section-card-grid{grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:8px}.scores-subject-block .section-card,.main .scores-subject-block .section-card{padding:9px 12px 10px;border-radius:var(--radius-s)}.scores-subject-block .section-card-top{margin-bottom:4px;gap:6px}.scores-subject-block .section-card .course-dot{width:10px;height:10px}.scores-subject-block .section-card-room{font-size:12px;padding:2px 8px}.scores-subject-block .section-card-name{display:none}.scores-subject-block .section-card-meta{font-size:12px;margin-bottom:6px}.scores-subject-block .section-card .progress-bar{width:100%;height:5px}.scores-subject-block .section-card-pct{font-size:11px;margin-top:4px}.tools-stage{--w:var(--hue-violet);flex:1;display:flex;flex-direction:column;min-height:0}.tools-stage[data-stage=group]{--w:var(--hue-teal)}.tools-stage[data-stage=timer]{--w:var(--hue-orange)}.tools-tabs{margin:0 0 16px;flex-wrap:wrap}.tools-tabs .theme-opt[data-tool=pick][aria-pressed=true]{color:var(--hue-violet)}.tools-tabs .theme-opt[data-tool=group][aria-pressed=true]{color:var(--hue-teal)}.tools-tabs .theme-opt[data-tool=timer][aria-pressed=true]{color:var(--hue-orange)}.tools-grid{display:grid;flex:1;align-items:stretch;grid-template-columns:minmax(260px,28%) minmax(0,1fr);gap:18px}@media (max-width:860px){.tools-tabs{width:100%}.tools-tabs .theme-opt{flex:1;justify-content:center;padding:8px 10px}}.tools-card{padding:20px 22px;border:0;border-radius:var(--radius-l);--wmix:var(--wmix-soft);background:var(--card-glass);display:flex;flex-direction:column;min-width:0}.tools-card-head{display:flex;align-items:center;gap:12px;margin-bottom:14px}.tools-ico{display:grid;place-items:center;width:46px;height:46px;border-radius:var(--radius-s);flex:none;position:relative;isolation:isolate;color:var(--on-w)}.tools-ico .ico{width:31px;height:31px}.tools-title{font-weight:700;font-size:16px}.tools-label{font-weight:600;font-size:13.5px;color:var(--ink-soft)}.tools-muted{color:var(--ink-soft);font-size:13px}.tools-pill{display:inline-block;margin-top:2px;padding:2px 10px;border-radius:var(--radius-pill);font-size:12px;font-weight:700;background:var(--card);color:color-mix(in oklab,var(--w) 82%,var(--ink))}.tools-group-title .tools-pill{margin:0 0 0 auto}.tools-names select{width:100%;margin-top:10px}.tools-names textarea,.tools-input{background:var(--surface-sunken);border:1.5px solid transparent;border-radius:var(--radius-s);color:var(--ink);font:inherit;padding:11px 14px;width:100%;margin-top:10px;line-height:1.6;flex:1 1 0;min-height:200px;resize:none}.tools-names select:focus,.tools-names textarea:focus,.tools-input:focus{outline:0;background:var(--card);border-color:var(--w);box-shadow:0 0 0 4px color-mix(in oklab,var(--w) 20%,transparent)}.tools-display{display:grid;place-items:center;min-height:150px;margin-bottom:16px;border-radius:var(--radius-m);background:var(--card);box-shadow:inset 0 0 0 1.5px color-mix(in oklab,var(--w) 22%,transparent)}.tools-big{font-size:clamp(32px,6.5vw,54px);font-weight:700;text-align:center;padding:16px 12px;line-height:1.3;word-break:break-word;font-variant-numeric:tabular-nums;color:color-mix(in oklab,var(--w) 80%,var(--ink))}.tools-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.tools-btn{background:var(--w);color:var(--on-w);box-shadow:0 8px 18px -9px var(--w)}.tools-btn:hover{filter:brightness(1.07)}.tools-btn:active{transform:scale(.97)}.tools-check{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;font-weight:600;color:var(--ink-soft)}.tools-check input{accent-color:var(--w);width:17px;height:17px}.tools-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.tools-chip{display:inline-flex;align-items:center;gap:6px;background:var(--card);border-radius:var(--radius-pill);padding:4px 12px 4px 5px;font-size:13px}.tools-chip b{display:grid;place-items:center;min-width:20px;height:20px;border-radius:var(--radius-pill);font-size:11px;background:color-mix(in oklab,var(--w) var(--wmix-head),var(--card));color:color-mix(in oklab,var(--w) 85%,var(--ink))}.tools-preset{border:0;border-radius:var(--radius-pill);padding:7px 14px;font:inherit;font-size:13.5px;font-weight:600;cursor:pointer;background:var(--card);color:var(--ink-soft);transition:transform .12s ease}.tools-preset:active{transform:scale(.96)}.tools-preset[aria-pressed=true]{background:var(--w);color:var(--on-w)}.tools-groups{display:grid;gap:10px;margin-top:16px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));align-content:start}.tools-group{border-radius:var(--radius-m);padding:12px 14px;background:color-mix(in oklab,var(--w) var(--wmix-head),var(--card));--wmix:var(--wmix-soft)}.tools-group-title{display:flex;align-items:center;gap:8px;font-weight:700;font-size:14px;margin-bottom:8px}.tools-dot{width:11px;height:11px;border-radius:50%;background:var(--w);flex:none}.tools-name{padding:5px 10px;margin-top:4px;border-radius:var(--radius-xs);font-size:13.5px;background:var(--card)}.tools-empty{margin-top:16px;padding:28px 12px;text-align:center;border-radius:var(--radius-m);color:var(--ink-soft);background:var(--card)}.tools-timer{text-align:center;max-width:none;margin:0;flex:1;align-items:center;justify-content:center;gap:22px}.tools-timer[data-state=done]{--w:var(--danger)}.tools-timer[data-state=run][data-warn="1"]{--w:var(--warning)}.tools-ring{position:relative;isolation:isolate;aspect-ratio:1;width:clamp(240px,min(52vh,70vw),560px);container-type:inline-size;margin:0 auto}.tools-ring::before{content:"";position:absolute;inset:-6%;z-index:-1;border-radius:50%;opacity:.55;transition:opacity .3s ease;background:radial-gradient(circle,color-mix(in oklab,var(--w) 30%,transparent),transparent 68%)}.tools-timer[data-state=run] .tools-ring::before{opacity:1}.tools-timer[data-state=done] .tools-ring{animation:tools-pulse 1s ease-in-out infinite}.tools-ring svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}.tools-ring circle{fill:none}.tools-ring-tick{stroke:color-mix(in oklab,var(--ink-soft) 40%,transparent);stroke-width:2.4}.tools-ring-track{stroke:color-mix(in oklab,var(--w) 18%,var(--card));stroke-width:8}.tools-ring-bar{stroke:url(#timer-grad);stroke-width:8;stroke-linecap:round;transition:stroke-dashoffset .3s linear,opacity .2s ease}.tools-timer[data-state=done] .tools-ring-bar{opacity:0}.tools-stop-a{stop-color:oklch(from var(--w) calc(l + .1) c h)}.tools-stop-b{stop-color:var(--w)}.tools-ring-face{position:absolute;inset:14%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2.4cqw;border-radius:50%;background:var(--card);box-shadow:0 24px 48px -28px var(--w),inset 0 0 0 1.5px color-mix(in oklab,var(--w) 18%,transparent)}.tools-ring .tools-big{padding:0;font-family:var(--font-head);font-size:19cqw;line-height:1;letter-spacing:-.02em;transition:opacity .2s ease}.tools-timer[data-state=pause] .tools-big{opacity:.6}.tools-state{display:inline-flex;align-items:center;gap:6px;padding:3px 12px;border-radius:var(--radius-pill);font-size:max(12px,3.6cqw);font-weight:700;background:color-mix(in oklab,var(--w) var(--wmix-head),var(--card));color:color-mix(in oklab,var(--w) 82%,var(--ink))}.tools-state::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--w)}.tools-timer[data-state=run] .tools-state::before{animation:tools-blink 1.2s ease-in-out infinite}.tools-ring-sub{font-size:max(12px,3.6cqw);font-weight:600;color:var(--ink-soft)}@keyframes tools-blink{50%{opacity:.25}}@keyframes tools-pulse{50%{transform:scale(1.025)}}.tools-dock{display:flex;align-items:center;justify-content:center;gap:14px;flex-wrap:wrap}.tools-stepper{display:inline-flex;align-items:center;gap:2px;padding:4px 14px 4px 4px;border-radius:var(--radius-pill);background:var(--surface-sunken)}.tools-step{display:grid;place-items:center;width:40px;height:40px;padding:0;border:0;border-radius:50%;background:var(--card);color:var(--ink);cursor:pointer;transition:transform .12s ease}.tools-step:active{transform:scale(.92)}.tools-step:disabled{opacity:.45;cursor:not-allowed}.tools-step:disabled:active{transform:none}.tools-step:focus-visible,.tools-preset:focus-visible{outline:3px solid var(--w);outline-offset:2px}.tools-step .ico{width:18px;height:18px}.tools-num{width:3em;padding:0;border:0;border-radius:var(--radius-xs);background:0 0;color:var(--ink);font:inherit;font-size:18px;font-weight:700;text-align:center;font-variant-numeric:tabular-nums;appearance:textfield}.tools-num::-webkit-inner-spin-button,.tools-num::-webkit-outer-spin-button{appearance:none;margin:0}.tools-num:focus-visible{outline:2px solid var(--w)}.tools-play{min-width:156px;min-height:56px;padding:0 28px;gap:10px;border-radius:var(--radius-pill);font-size:17px;font-weight:700}.tools-play .ico{width:22px;height:22px}.tools-reset{display:grid;place-items:center;width:56px;height:56px;padding:0;border-radius:50%}.tools-reset .ico{width:22px;height:22px}@media (prefers-reduced-motion:reduce){.tools-ring-bar,.tools-ring::before,.tools-ring .tools-big,.tools-step{transition:none}.tools-timer[data-state=done] .tools-ring,.tools-timer[data-state=run] .tools-state::before{animation:none}}.more-tile[data-route=tools]{--w:var(--hue-blue)}.main:has(.tools-stage){display:flex;flex-direction:column}.main:has(.tools-stage)>#view{flex:1;display:flex;flex-direction:column;min-height:0}.tools-main .tools-display{flex:1;min-height:180px}.tools-main .tools-big{font-size:clamp(36px,7vw,110px)}.tools-timer .tools-preset{padding:9px 18px;font-size:15px}@media (max-width:860px){.tools-grid{grid-template-columns:1fr;gap:14px}.tools-names textarea{flex:none;min-height:160px}.tools-ring{width:min(280px,78vw)}}.struct-panel-header .is-ok{color:var(--success)}.struct-panel-header .is-bad{color:var(--danger)}:root .u-flex{display:flex}:root .u-col{flex-direction:column}:root .u-wrap{flex-wrap:wrap}:root .u-between{justify-content:space-between}:root .u-center-x{justify-content:center}:root .u-items-center{align-items:center}:root .u-items-start{align-items:flex-start}:root .u-grow{flex:1;width:auto}:root .u-gap-8{gap:8px}:root .u-gap-10{gap:10px}:root .u-gap-12{gap:12px}:root .u-gap-16{gap:16px}:root .u-mt-4{margin-top:4px}:root .u-mt-6{margin-top:6px}:root .u-mt-12{margin-top:12px}:root .u-mt-16{margin-top:16px}:root .u-mt-18{margin-top:18px}:root .u-mb-0{margin-bottom:0}:root .u-mb-4{margin-bottom:4px}:root .u-mb-10{margin-bottom:10px}:root .u-mb-12{margin-bottom:12px}:root .u-mb-14{margin-bottom:14px}:root .u-mb-16{margin-bottom:16px}:root .u-m-0{margin:0}:root .u-my-12{margin:12px 0}:root .u-ml-auto{margin-left:auto}:root .u-hint-up-6{margin:-6px 0 14px}:root .u-hint-up-8{margin:-8px 0 12px}:root .u-p-0{padding:0}:root .u-p-20{padding:20px}:root .u-py-12{padding:12px 0}:root .u-py-16{padding:16px 0}:root .u-py-20{padding:20px 0}:root .u-pt-10{padding:10px 0 0}:root .u-pad-7-14{padding:7px 14px}:root .u-pad-6-12{padding:6px 12px}:root .u-w-24{width:24px}:root .u-w-70{width:70px}:root .u-w-80{width:80px}:root .u-w-84{width:84px}:root .u-fs-13{font-size:13px}:root .u-fs-135{font-size:13.5px}:root .u-note{font-size:13px;color:var(--ink-soft)}:root .u-note-sm{font-size:12.5px;color:var(--ink-soft)}:root .u-soft{color:var(--ink-soft)}:root .u-lh-165{line-height:1.65}:root .u-semibold{font-weight:600}:root .u-text-left{text-align:left}:root .u-cursor-default{cursor:default}:root .u-link-plain{text-decoration:none;color:inherit}:root .u-badge-inline{vertical-align:middle;margin-left:6px}:root .u-avatar-48{width:48px;height:48px;border-radius:50%}:root .u-input-sm{padding:7px;border:1px solid var(--border);border-radius:6px}.bg-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(72px,1fr));gap:10px;margin-top:10px}.bg-opt{position:relative;aspect-ratio:3/4;padding:0;border:2px solid var(--border);border-radius:var(--radius-m);background:var(--sw);cursor:pointer;transition:transform .12s ease,border-color .2s ease}.bg-opt:active{transform:scale(.96)}.bg-opt:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.bg-opt[aria-pressed=true]{border-color:var(--primary)}.bg-opt .bg-check{position:absolute;right:8px;bottom:8px;display:none;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:var(--primary-solid);color:var(--on-primary)}.bg-opt[aria-pressed=true] .bg-check{display:flex}.bg-opt .bg-check .ico{width:16px;height:16px}.bg-opt-default{--sw:var(--bg)}.bg-preview{height:84px;margin-top:12px;border:2px solid var(--border);border-radius:var(--radius-m);background:var(--page-bg)}.bg-field{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;font-size:14px;font-weight:600}.bg-color-wrap{display:flex;align-items:center;gap:8px}.bg-color{-webkit-appearance:none;appearance:none;width:52px;height:36px;padding:0;border:2px solid var(--border);border-radius:var(--radius-pill);background:0 0;overflow:hidden;cursor:pointer}.bg-color::-webkit-color-swatch-wrapper{padding:0}.bg-color::-webkit-color-swatch{border:0;border-radius:var(--radius-pill)}.bg-color::-moz-color-swatch{border:0;border-radius:var(--radius-pill)}.bg-color:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.bg-hex{width:64px;font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--ink-soft);text-transform:uppercase}.bg-slider{margin-top:12px;font-size:14px;font-weight:600}.bg-slider-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.bg-slider-val{font-family:var(--font-mono);font-size:12px;font-weight:500;color:var(--ink-soft)}.bg-range{width:100%;margin:6px 0 0;accent-color:var(--primary-solid);cursor:pointer}.bg-opt-pat{aspect-ratio:1/1}.bg-opt-pat .bg-check{top:6px;right:6px;bottom:auto;width:20px;height:20px}.bg-cap{position:absolute;left:6px;bottom:6px;max-width:calc(100% - 12px);padding:0 8px;border-radius:var(--radius-pill);background:var(--card);color:var(--ink);font-size:11px;font-weight:600;line-height:1.7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.settings-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;align-items:start}.look-swatches{display:flex;flex-wrap:wrap;gap:10px;padding:4px;margin-top:6px}.look-sw{position:relative;width:38px;height:38px;padding:0;border:2px solid var(--border);border-radius:50%;background:var(--sw);cursor:pointer;transition:transform .12s ease,border-color .2s ease}.look-sw:active{transform:scale(.92)}.look-sw:focus-visible{outline:3px solid var(--primary);outline-offset:3px}.look-sw[aria-pressed=true]{border-color:var(--ink)}.look-sw .bg-check{position:absolute;inset:0;display:none;align-items:center;justify-content:center;color:var(--white)}.look-sw[aria-pressed=true] .bg-check{display:flex}.look-sw .bg-check .ico{width:18px;height:18px}.settings-grid>.card{margin:0;min-width:0}.settings-grid .card-title{margin:0 0 4px}.settings-profile{display:flex;align-items:center;gap:12px;margin:10px 0 14px;min-width:0}.settings-profile>div{min-width:0;overflow-wrap:anywhere}.settings-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.about-list{margin:8px 0 0;display:grid;gap:6px}.about-list>div{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:2px 12px;min-width:0}.about-list dt{margin:0}.about-list dd{margin:0;min-width:0;overflow-wrap:anywhere;text-align:right;font-size:14px}.about-list a{color:var(--primary-dark, var(--primary));text-decoration:underline;text-underline-offset:2px}@media (min-width:861px){.settings-grid{grid-template-columns:minmax(0,5fr) minmax(0,6fr);grid-template-rows:auto auto auto auto auto 1fr;grid-template-areas:"about bg""acct bg""theme bg""look bg""preset bg""priv bg";gap:16px}.set-about{grid-area:about}.set-acct{grid-area:acct}.set-theme{grid-area:theme}.set-bg{grid-area:bg}.set-look{grid-area:look}.set-preset{grid-area:preset}.set-priv{grid-area:priv}}@media (max-width:480px){.settings-grid .theme-seg{width:100%;margin-inline:0}.settings-grid .theme-opt{flex:1 1 0;justify-content:center;padding-inline:8px}.settings-actions .btn{flex:1 1 100%;justify-content:center}.bg-grid{grid-template-columns:repeat(auto-fill,minmax(64px,1fr))}}.profile-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;align-items:start}.profile-grid>.card{margin:0;min-width:0}.profile-grid .card-title{margin:0 0 4px}.field-row-3{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr) minmax(0,2fr);gap:12px}.profile-opt{font-weight:400;color:var(--ink-soft)}.profile-preview{margin-top:10px;padding:12px 14px;border-radius:var(--radius-s);background:var(--surface-sunken);line-height:1.8;overflow-wrap:anywhere}.profile-preview.is-empty{color:var(--ink-soft)}.profile-actions{display:flex;flex-wrap:wrap;align-items:center;gap:12px}@media (min-width:861px){.profile-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.profile-wide{grid-column:1/-1}}@media (max-width:860px){.field-row-3{grid-template-columns:minmax(0,1fr)}}.pf-logo{margin-top:4px}.pf-logo-h{margin-bottom:8px;color:var(--ink-soft);font-weight:600;font-size:13.5px}.pf-logo-box{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.pf-logo-thumb{display:flex;align-items:center;justify-content:center;width:84px;height:84px;border:1.5px dashed var(--border);border-radius:var(--radius-s);background:var(--surface-sunken);color:var(--ink-soft);font-size:12px;overflow:hidden}.pf-logo-thumb img{max-width:100%;max-height:100%;object-fit:contain}.pf-logo-act{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.pf-logo-act [hidden]{display:none}.pf-edu{container:pf-edu/inline-size}.pf-edu-rows{display:flex;flex-direction:column;gap:12px;margin-top:10px}.pf-edu-row{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1.4fr) minmax(0,1.8fr) minmax(0,.8fr) auto;gap:10px;align-items:end;padding-bottom:12px;border-bottom:1px solid var(--border)}.pf-edu-row .field{margin:0}@container pf-edu (max-width: 700px){.pf-edu-row{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.pf-edu-row .pf-edu-del{grid-column:1/-1;justify-self:end}}@container pf-edu (max-width: 440px){.pf-edu-row{grid-template-columns:minmax(0,1fr)}}@media (max-width:480px){.profile-actions .btn{flex:1 1 100%;justify-content:center}}@media (max-width:860px){.main .sheet-wrap{border-radius:var(--radius-m)}}.tt-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:14px}.tt-stats .stat-card{padding:14px 18px}.tt-stats .stat-card .value{font-size:26px}.tt-term-bar{margin-bottom:12px}.tt-term-bar .theme-seg{margin:0}.tt-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;margin-bottom:8px}.tt-toolbar .card-title{margin:0}.tt-toolbar-actions{display:flex;flex-wrap:wrap;gap:8px}.tt-wrap{overflow:auto;-webkit-overflow-scrolling:touch;max-height:76vh;border-radius:var(--radius-l);box-shadow:inset 0 0 0 1px var(--border);background:var(--card)}table.tt{border-collapse:separate;border-spacing:0;width:100%;min-width:1040px;table-layout:fixed;font-size:13px}table.tt th{position:sticky;top:0;z-index:2;padding:10px 6px;font-size:12.5px;font-weight:700;line-height:1.4;text-align:center;white-space:nowrap;background:var(--th-bg);color:var(--th-ink);border-bottom:2px solid var(--th-line)}table.tt th small{display:block;font-size:11px;font-weight:500;opacity:.85}table.tt th.is-now{box-shadow:inset 0-4px 0 var(--hue-orange)}table.tt th.tt-corner{left:0;z-index:3;width:96px}table.tt td.tt-day{position:sticky;left:0;z-index:1;width:96px;padding:8px 12px;text-align:left;background:var(--card);border-bottom:1px solid var(--border);border-right:1px solid var(--border)}table.tt td.tt-day b{display:block;font-size:14px;color:var(--ink)}table.tt td.tt-day span{font-size:12px;color:var(--ink-soft)}table.tt tr.is-today td.tt-day{background:color-mix(in srgb,var(--hue-orange) 14%,var(--card));box-shadow:inset 4px 0 0 var(--hue-orange)}table.tt td.tt-cell{height:92px;padding:4px;vertical-align:top;border-bottom:1px solid var(--border);border-right:1px solid var(--border)}table.tt tr.is-today td.tt-cell{background:color-mix(in srgb,var(--hue-orange) 6%,transparent)}.tt-item{display:flex;flex-direction:column;align-items:flex-start;gap:3px;width:100%;min-height:84px;padding:8px 10px;border:0;border-radius:var(--radius-s);background:var(--w);color:var(--on-w);font:inherit;text-align:left;cursor:pointer;overflow:hidden}.tt-item:hover{filter:brightness(1.08)}.tt-item:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.tt-item.is-link{position:relative}.tt-item.is-link .tt-title{padding-right:22px}.tt-edit{position:absolute;top:6px;right:6px;display:grid;place-items:center;width:26px;height:26px;padding:0;border:0;border-radius:50%;background:color-mix(in srgb,var(--on-w) 22%,var(--w));color:var(--on-w);cursor:pointer}.tt-edit:hover{background:color-mix(in srgb,var(--on-w) 38%,var(--w))}.tt-edit:focus-visible{outline:3px solid var(--on-w);outline-offset:1px}.tt-edit .ico{width:14px;height:14px}.tt-code{padding:1px 8px;border-radius:var(--radius-pill);background:color-mix(in srgb,var(--on-w) 22%,var(--w));color:var(--on-w);font-size:11.5px;font-weight:700}.tt-title{font-size:13px;font-weight:700;line-height:1.35;overflow-wrap:anywhere}.tt-meta{display:flex;flex-wrap:wrap;gap:2px 8px;font-size:12px;color:color-mix(in srgb,var(--on-w) 78%,var(--w))}.tt-add{display:grid;place-items:center;width:100%;min-height:84px;border:1.5px dashed transparent;border-radius:var(--radius-s);background:0 0;color:var(--ink-soft);cursor:pointer;opacity:.35}.tt-add .ico{width:20px;height:20px}.tt-add:hover{opacity:1;border-color:var(--border);background:var(--surface-sunken)}.tt-add:focus-visible{opacity:1;outline:3px solid var(--primary);outline-offset:2px}.tt-legend{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}.tt-legend-item{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:var(--radius-pill);background:var(--surface-sunken);color:var(--ink);font-size:13px}.tt-legend-item::before{content:"";flex-shrink:0;width:10px;height:10px;border-radius:50%;background:var(--w)}.tt-legend-item small{color:var(--ink-soft);font-size:12px}.tt-modal-row3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.tt-hues{display:flex;flex-wrap:wrap;gap:10px;padding:4px}.tt-hue{display:grid;place-items:center;width:34px;height:34px;border:0;border-radius:var(--radius-s);background:var(--w);color:var(--on-w);cursor:pointer}.tt-hue .ico{width:18px;height:18px;opacity:0}.tt-hue[aria-pressed=true]{box-shadow:0 0 0 3px var(--card),0 0 0 5px var(--w)}.tt-hue[aria-pressed=true] .ico{opacity:1}.tt-hue:focus-visible{outline:3px solid var(--primary);outline-offset:4px}.tt-del{margin-right:auto}.tt-period-row{display:grid;grid-template-columns:52px minmax(0,1fr) minmax(0,1fr) 44px;align-items:center;gap:8px;margin-bottom:8px}.tt-period-row input{width:100%;padding:10px 12px;border:1.5px solid transparent;border-radius:var(--radius-s);background:var(--surface-sunken);color:var(--ink);font:inherit;font-size:14px}.tt-period-row input:focus{outline:0;border-color:var(--primary);box-shadow:0 0 0 4px var(--primary-tint);background:var(--card)}@media (max-width:860px){.tt-stats{gap:8px}.tt-stats .stat-card{padding:12px 14px}.tt-stats .stat-card .value{font-size:22px}.tt-modal-row3{grid-template-columns:minmax(0,1fr);gap:0}table.tt td.tt-day,table.tt th.tt-corner{width:84px}}.ttw-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.ttw-head .card-title{margin:0 0 2px}.ttw-days{width:100%;min-height:48px;margin:4px 0 12px}.ttw-days .theme-opt{flex:1 1 0;justify-content:center;padding-inline:8px}.ttw-days .theme-opt.is-today::after{content:"";position:absolute;bottom:5px;left:50%;width:5px;height:5px;margin-left:-2.5px;border-radius:50%;background:var(--hue-orange)}.ttw-list{display:flex;flex-direction:column;gap:8px}.ttw-item{display:grid;grid-template-columns:96px minmax(0,1fr) auto auto;align-items:center;gap:12px;padding:10px 14px;border-radius:var(--radius-m);background:var(--w);color:var(--on-w)}.ttw-item.is-now{box-shadow:0 0 0 2px var(--card),0 0 0 4px var(--w)}.ttw-item .badge{background:var(--card)}.ttw-item.is-act{cursor:pointer}.ttw-item.is-act:hover{filter:brightness(1.08)}.ttw-item.is-act:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.ttw-go{grid-column:4;width:18px;height:18px;color:color-mix(in srgb,var(--on-w) 78%,var(--w))}.ttw-time{display:flex;flex-direction:column;line-height:1.4}.ttw-time b{font-size:13.5px;color:var(--on-w)}.ttw-time span{font-size:12px;color:color-mix(in srgb,var(--on-w) 78%,var(--w))}.ttw-info{display:flex;flex-direction:column;gap:2px;min-width:0}.ttw-title{font-size:14px;font-weight:700;color:var(--on-w);overflow-wrap:anywhere}.ttw-meta{font-size:12.5px;color:color-mix(in srgb,var(--on-w) 78%,var(--w))}.ttw-empty{padding:20px 8px;text-align:center;font-size:13.5px;color:var(--ink-soft)}@media (max-width:480px){.ttw-item{position:relative;grid-template-columns:84px minmax(0,1fr)}.ttw-item .badge{grid-column:2;justify-self:start}.ttw-go{position:absolute;top:12px;right:10px}}.rec-stats{grid-template-columns:repeat(4,minmax(0,1fr))}.rec-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}.rec-grid>.card{grid-column:1/-1}.rec-card{display:flex;flex-direction:column;padding:0;border:0;border-radius:var(--radius-l);background:var(--card);box-shadow:inset 0 0 0 1px var(--border);color:var(--ink);font:inherit;text-align:left;cursor:pointer;overflow:hidden}.rec-card:hover{box-shadow:inset 0 0 0 2px var(--w)}.rec-card:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.rec-thumb{display:grid;place-items:center;aspect-ratio:4/3;background:var(--surface-sunken);color:var(--ink-soft);font-size:13px;font-weight:700;overflow:hidden}.rec-thumb img{width:100%;height:100%;object-fit:cover}.rec-body{display:flex;flex-direction:column;gap:4px;padding:10px 12px 12px;min-width:0}.rec-type{align-self:flex-start;padding:2px 10px;border-radius:var(--radius-pill);background:var(--w);color:var(--on-w);font-size:11.5px;font-weight:700}.rec-title{font-size:14px;font-weight:700;line-height:1.35;overflow-wrap:anywhere}.rec-meta{font-size:12.5px;color:var(--ink-soft);overflow-wrap:anywhere}.rec-big{display:block;width:100%;max-height:55vh;margin:0 auto 10px;border-radius:var(--radius-m);background:var(--surface-sunken);object-fit:contain}.rec-nopic{display:grid;place-items:center;min-height:120px;color:var(--ink-soft);font-weight:700}.rec-note{padding:10px 12px;border-radius:var(--radius-s);background:var(--surface-sunken);font-size:13.5px;white-space:pre-wrap;overflow-wrap:anywhere}.rec-pick{display:block;width:120px;max-width:100%;margin-top:8px;border-radius:var(--radius-s);box-shadow:inset 0 0 0 1px var(--border)}@media (max-width:860px){.rec-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.rec-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}}.pa-form-head{display:flex;align-items:center;gap:12px;margin-bottom:18px}.pa-form-head .pa-dup-btn{margin-left:auto;flex-shrink:0}.pa-form-title{font-size:20px;font-weight:700;margin:0 0 2px;color:var(--ink)}.pa-form .doc-section{margin-bottom:16px}.pa-pf{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px;margin:0 0 12px}.pa-pf-item{min-width:0;margin:0;padding:10px 12px;border-radius:var(--radius-s);background:var(--surface-sunken)}.pa-pf-item dt{font-size:12px;font-weight:600;color:var(--ink-soft)}.pa-pf-item dd{margin:2px 0 0;font-weight:600;overflow-wrap:anywhere}.pa-pf-note{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 12px;margin-bottom:16px;font-size:13px;color:var(--ink-soft)}.pa-pf-auto{grid-template-columns:repeat(auto-fill,minmax(min(100%,210px),1fr))}@media (max-width:540px){.pa-pf.pa-pf-auto{grid-template-columns:1fr 1fr;gap:8px}.pa-pf.pa-pf-auto .pa-pf-item{padding:8px 10px}}.doc-subsec+.u-note{margin-bottom:16px}.sar-sub-title{margin:20px 0 10px;font-size:15px;font-weight:700;color:var(--ink)}.sar-grades{table-layout:fixed}.sar-grades th:nth-child(1){width:18%}.sar-grades th:nth-child(2){width:8%}.sar-grades th:nth-child(14){width:13%}.sar-grades th:nth-child(15){width:52px}.sar-grades th:nth-child(n+3):nth-child(-n+13){text-align:center}.sar-grades td:nth-child(n+3):nth-child(-n+13) .input-sm{padding-inline:4px;text-align:center}.sar-att{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,170px),1fr));gap:10px 12px}.sar-att-item{padding:10px 12px;border-radius:var(--radius-s);background:var(--surface-sunken)}.sar-att-t{margin-bottom:6px;font-size:13px;font-weight:600;color:var(--ink)}.sar-att-in{display:grid;grid-template-columns:1fr 1fr;gap:8px}.sar-att-in .field{margin-bottom:0}.sar-att-in .field span{display:block;margin-bottom:3px;font-size:12px;font-weight:600;color:var(--ink-soft)}.sar-att-item .input-sm{background:var(--card)}.doc-check{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:500}.doc-check input{width:18px;height:18px;accent-color:var(--primary-solid)}.doc-checks{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px}.doc-checks .doc-check{padding:11px 14px;border:1.5px solid transparent;border-radius:var(--radius-s);background:var(--surface-sunken);cursor:pointer;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.doc-checks .doc-check:hover{border-color:var(--border)}.doc-checks .doc-check:has(input:checked){border-color:var(--primary);background:var(--primary-tint);color:var(--primary-dark);font-weight:600}.doc-checks-auto{grid-template-columns:repeat(auto-fill,minmax(min(100%,210px),1fr))}@media (max-width:540px){.doc-checks-auto{grid-template-columns:1fr 1fr}.doc-checks-auto .doc-check{padding:10px 12px;font-size:13.5px}}.doc-checks .doc-check:has(input:focus-visible){box-shadow:0 0 0 4px var(--primary-tint)}.pa-field-date{max-width:260px;margin-top:14px}.doc-lblock{--doc-cols:minmax(0, 1fr) 92px 44px;margin-top:22px}.doc-lblock.no-hours{--doc-cols:minmax(0, 1fr) 44px}.doc-lhead{display:grid;grid-template-columns:var(--doc-cols);gap:8px;margin:0 0 6px;padding:0 2px;font-size:12px;font-weight:600;color:var(--ink-soft)}.doc-lhead span:nth-child(2){text-align:center;white-space:nowrap}.doc-lblock:has(.doc-lrows:empty) .doc-lhead{display:none}.doc-lrows{display:grid;gap:8px}.doc-lrow{display:grid;grid-template-columns:var(--doc-cols);gap:8px;align-items:center}.doc-lrow .doc-l-hours{text-align:center;font-weight:600;font-variant-numeric:tabular-nums}.doc-l-del{width:44px;min-height:44px;padding:0;justify-content:center}.doc-l-add{margin-top:10px}.doc-lrows:empty+.doc-l-add{margin-top:0}.doc-total{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px;margin:20px 0 0;padding:12px 16px;border-radius:var(--radius-s);background:var(--primary-tint);color:var(--primary-dark);font-size:14px;font-weight:600}.doc-total b{font-family:var(--font-head);font-size:22px;line-height:1.2;font-variant-numeric:tabular-nums}.pa-legacy{margin-bottom:14px}.pa-legacy-text{white-space:pre-wrap;font-size:13.5px;padding:10px 12px;border-radius:var(--radius-s);background:var(--surface-sunken);color:var(--ink-soft)}.pa-wgroup{margin-bottom:10px;border:1.5px solid var(--border);border-radius:var(--radius-s);overflow:hidden}.pa-wgroup>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 16px;list-style:none;cursor:pointer;font-weight:700;background:var(--surface-sunken);transition:background-color .15s ease}.pa-wgroup>summary::-webkit-details-marker{display:none}.pa-wgroup>summary:hover{background:color-mix(in srgb,var(--surface-sunken) 75%,var(--primary-tint))}.pa-wgroup>summary::after{content:"";flex:none;width:8px;height:8px;border:solid var(--ink-soft);border-width:0 2px 2px 0;rotate:45deg;translate:0-2px;transition:rotate .2s ease,translate .2s ease}.pa-wgroup[open]>summary::after{rotate:225deg;translate:0 2px}.pa-witem{--ai-bleed:16px;padding:16px;border-top:1px solid var(--border);border-left:3px solid var(--primary-tint)}.pa-witem-h{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:8px 10px;margin-bottom:10px;font-weight:700;color:var(--ink)}.pa-witem .field:last-child{margin-bottom:0}.pa-aifield{--ai-bleed-l:calc(var(--ai-bleed, 0px) + 3px);padding-left:12px;border-left:3px solid var(--primary-tint)}.pa-field-h{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:6px 10px;margin-bottom:6px}.pa-form-footer{display:flex;justify-content:flex-end;gap:10px;padding-bottom:32px}.pa-form-footer .btn-danger-ghost{margin-right:auto}@media (max-width:540px){.pa-pf{grid-template-columns:1fr}.pa-form-footer{flex-direction:column-reverse}.doc-checks{grid-template-columns:1fr}.doc-lblock{--doc-cols:minmax(0, 1fr) 80px 44px}.doc-lblock.no-hours{--doc-cols:minmax(0, 1fr) 44px}}.empty-title{margin-bottom:8px;font-size:17px;font-weight:600}.empty-sub{margin-bottom:20px;color:var(--ink-soft)}.empty-state .icon-violet{background:var(--hue-violet)}.to-top{position:fixed;right:24px;bottom:calc(24px + env(safe-area-inset-bottom,0));z-index:44;display:grid;place-items:center;width:46px;height:46px;padding:0;border:0;border-radius:50%;color:var(--primary-dark);background:color-mix(in srgb,var(--card) var(--glass, 60%),transparent);box-shadow:0 10px 30px var(--shadow-ink-md),inset 0 0 0 1px var(--border);-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(1.6);backdrop-filter:blur(var(--glass-blur)) saturate(1.6);cursor:pointer;-webkit-tap-highlight-color:transparent;opacity:0;visibility:hidden;transform:translateY(10px);transition:opacity .2s ease,transform .2s ease,visibility .2s ease,background-color .2s ease,color .2s ease}.to-top svg{display:block;width:22px;height:22px}.to-top.is-show{opacity:1;visibility:visible;transform:none}.to-top.is-show:active{transform:scale(.94)}.to-top:focus-visible{outline:2px solid var(--primary);outline-offset:3px}@media (hover:hover){.to-top:hover{background:var(--primary-solid);color:var(--on-primary)}}@media (max-width:860px){.to-top{right:16px;bottom:calc(82px + env(safe-area-inset-bottom,0))}}@media (prefers-reduced-motion:reduce){.to-top{transition:none}}@media print{.to-top{display:none}}.preset-save{display:flex;align-items:flex-start;gap:8px;margin-top:12px}.preset-save .field{flex:1 1 auto;min-width:0;margin:0}.preset-save .btn{flex:none;min-height:44px}.preset-list{display:flex;flex-direction:column;gap:8px;margin-top:12px}.preset-empty{padding:12px 4px}.preset-item{display:flex;align-items:center;gap:12px;padding:10px;border:2px solid var(--border);border-radius:var(--radius-m);min-width:0}.preset-sw{position:relative;flex:none;width:48px;height:48px;border:2px solid var(--border);border-radius:var(--radius-s, 10px);background:var(--sw);overflow:hidden}.preset-dot{position:absolute;right:4px;bottom:4px;width:14px;height:14px;border:2px solid var(--white);border-radius:50%;background:var(--dot, var(--primary-solid));box-shadow:0 0 0 1px rgb(0 0 0/25%)}.preset-info{flex:1 1 auto;min-width:0}.preset-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.preset-actions{display:flex;flex:none;flex-wrap:wrap;justify-content:flex-end;gap:6px}@media (max-width:560px){.preset-item{flex-wrap:wrap}.preset-info{flex-basis:calc(100% - 64px)}.preset-actions{flex:1 1 100%;justify-content:flex-start}}