@font-face{font-family:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/plus-jakarta-sans-cyrillic-ext-wght-normal-lLTsRRxN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/plus-jakarta-sans-vietnamese-wght-normal-qRpaaN48.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/plus-jakarta-sans-latin-ext-wght-normal-DmpS2jIq.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Plus Jakarta Sans Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/plus-jakarta-sans-latin-wght-normal-eXO_dkmS.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--color-ink:#15143b;--color-ink-soft:#26245a;--color-indigo:#4a3fd6;--color-indigo-strong:#372db3;--color-indigo-wash:#ecebfb;--color-dawn:#f0894a;--color-dawn-wash:#fdf0e6;--color-paper:#f5f4fb;--color-surface:#fff;--color-text:#1b1a33;--color-muted:#62607c;--color-line:#e0dff0;--color-danger:#b3261e;--color-danger-bg:#fbe9e7;--color-success:#17713a;--color-success-bg:#e3f4e8;--color-warning:#8f4a06;--color-warning-bg:#fdf0d9;--gradient-dawn:linear-gradient(170deg, #fb9238 0%, #b04fc0 50%, #3148f5 100%);--ink-glow:radial-gradient(90% 130% at 100% 0%, #4a3fd69e, transparent 62%), radial-gradient(70% 110% at 0% 110%, #f0894a4d, transparent 60%), var(--color-ink);--color-heading:var(--color-ink);--color-surface-hover:#fbfbfe;--color-line-strong:#c4c2e0;--color-field-border:#cfcde6;--color-field-border-hover:#b3b0d6;--color-placeholder:#9a98b3;--color-indigo-wash-strong:#dedcf7;--color-danger-bg-strong:#f6d6d2;--color-on-ink:#fff;--color-on-ink-muted:#c7c5e6;--color-on-ink-accent:#ffc9a3;--btn-bg:var(--color-indigo);--btn-bg-hover:var(--color-indigo-strong);--btn-fg:#fff;--skeleton-a:#e8e7f4;--skeleton-b:#f3f2fa;--color-navy:var(--color-ink);--color-navy-soft:var(--color-ink-soft);--color-accent:var(--color-indigo);--color-accent-strong:var(--color-indigo-strong);--color-orange:var(--color-dawn);--color-bg:var(--color-paper);--color-border:var(--color-line);--font:"Plus Jakarta Sans Variable", "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-display:var(--font);--radius:18px;--radius-sm:12px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--appbar-height:56px;--nav-height:68px;--shadow-card:0 1px 0 #15143b0a, 0 8px 24px -18px #15143b59;--lightningcss-light:initial;--lightningcss-dark: ;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light only}:root.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--color-paper:#121212;--color-surface:#1c1c1e;--color-surface-hover:#252527;--color-text:#e4e4e6;--color-heading:#f5f5f6;--color-muted:#a2a2a8;--color-line:#2e2e31;--color-line-strong:#48484d;--color-field-border:#3a3a3e;--color-field-border-hover:#56565c;--color-placeholder:#77777d;--color-ink:#232325;--color-ink-soft:#2f2f32;--color-on-ink-muted:#b8b8be;--color-indigo:#a8a0ff;--color-indigo-strong:#c5bfff;--color-indigo-wash:#2a2a31;--color-indigo-wash-strong:#37373f;--color-dawn:#f6a06c;--color-dawn-wash:#3d2a1e;--btn-bg:#5b50ee;--btn-bg-hover:#6d63f5;--color-danger:#ff9c90;--color-danger-bg:#3a1c1b;--color-danger-bg-strong:#4c2423;--color-success:#74d9a3;--color-success-bg:#16301f;--color-warning:#f1c376;--color-warning-bg:#382a13;--skeleton-a:#202022;--skeleton-b:#2b2b2e;--shadow-card:none}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{font-family:var(--font);color:var(--color-text);background:var(--color-paper);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:1rem;line-height:1.55}h1,h2{font-family:var(--font-display);letter-spacing:-.02em;margin:0 0 var(--space-3);text-wrap:balance;font-weight:800}h1{font-size:1.6rem;line-height:1.15}h2{font-size:1.125rem;font-weight:700;line-height:1.3}h3{margin:var(--space-4) 0 var(--space-2);font-size:1rem;font-weight:700;line-height:1.3}p{margin:0 0 var(--space-3)}a{color:var(--color-indigo);text-underline-offset:3px;font-weight:600;text-decoration:none}a:hover,a:focus-visible{color:var(--color-indigo-strong);text-decoration:underline}strong{font-weight:700}.muted{color:var(--color-muted);font-size:.9rem}.eyebrow{color:var(--color-indigo);margin:0;font-size:.85rem;font-weight:700}.card--navy .eyebrow,.hero .eyebrow{color:var(--color-on-ink-accent)}.stat{letter-spacing:-.03em;font-variant-numeric:tabular-nums;font-size:2rem;font-weight:800;line-height:1.05}:focus-visible{outline:3px solid var(--color-indigo);outline-offset:2px;border-radius:6px}.card--navy :focus-visible,.hero :focus-visible,.page--dark :focus-visible,.board :focus-visible{outline-color:var(--color-on-ink)}.board:focus{outline:none}.board a.board__button:hover,.board a.board__button:focus-visible{color:var(--color-on-ink)}.page{padding:var(--space-4);padding-top:calc(var(--appbar-height) + var(--space-4));padding-bottom:calc(var(--nav-height) + var(--space-6));max-width:720px;margin:0 auto}.page--bare{padding-top:var(--space-5);padding-bottom:var(--space-7)}.stack>*+*{margin-top:var(--space-4)}.card.stack>*+*,form.stack>*+*,fieldset.stack>*+*,details .stack>*+*,.stack--tight>*+*{margin-top:var(--space-3)}.appbar{z-index:5;height:var(--appbar-height);align-items:center;gap:var(--space-3);padding:0 var(--space-4);background:color-mix(in srgb, var(--color-paper) 88%, transparent);-webkit-backdrop-filter:saturate(1.4)blur(10px);backdrop-filter:saturate(1.4)blur(10px);border-bottom:1px solid var(--color-line);display:flex;position:fixed;inset:0 0 auto}.appbar__brand{color:var(--color-heading);letter-spacing:-.01em;align-items:center;gap:10px;font-size:1rem;font-weight:800;text-decoration:none;display:inline-flex}.appbar__brand:hover{color:var(--color-heading);text-decoration:none}.logo{border-radius:50%;flex:none;display:block}.viewing-bar{top:calc(var(--appbar-height) + 8px);z-index:4;justify-content:space-between;align-items:center;gap:var(--space-2) var(--space-3);margin-bottom:var(--space-4);padding:10px var(--space-4);border-radius:var(--radius-sm);background:var(--color-heading);color:var(--color-surface);flex-wrap:wrap;font-size:.9rem;display:flex;position:sticky}.viewing-bar strong{color:inherit}.viewing-bar__exit{font:inherit;color:inherit;background:color-mix(in srgb, currentColor 14%, transparent);border:1px solid color-mix(in srgb, currentColor 35%, transparent);cursor:pointer;border-radius:999px;padding:6px 14px;font-weight:700}.viewing-bar__exit:hover:not(:disabled){background:color-mix(in srgb, currentColor 24%, transparent)}.appbar__actions{align-items:center;gap:var(--space-2);margin-left:auto;display:flex}.user-menu{position:relative}.user-menu>summary{cursor:pointer;border-radius:50%;gap:0;padding:0;list-style:none;display:flex}.user-menu>summary:before{content:none}.user-menu>summary::-webkit-details-marker{display:none}.avatar{background:var(--color-indigo-wash);color:var(--color-indigo);letter-spacing:.02em;border-radius:50%;flex:none;justify-content:center;align-items:center;font-weight:800;display:inline-flex;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%;display:block}.user-menu__panel{background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius-sm);min-width:240px;padding:var(--space-2) 0;z-index:8;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 12px 32px -12px #15143b59}.user-menu__who{padding:var(--space-2) var(--space-4) var(--space-3);border-bottom:1px solid var(--color-line);margin-bottom:var(--space-2)}.user-menu__item{text-align:left;width:100%;padding:10px var(--space-4);color:var(--color-heading);font:inherit;cursor:pointer;background:0 0;border:0;font-weight:600;text-decoration:none;display:block}.user-menu__item:hover{background:var(--color-paper);color:var(--color-heading);text-decoration:none}.user-menu>summary:has(.user-menu__role){background:var(--color-paper);border-radius:999px;align-items:center;gap:8px;padding-right:12px}.user-menu__role{color:var(--color-indigo);font-size:.8125rem;font-weight:700;display:none}@media (width>=600px){.user-menu__role{display:inline}}.user-menu__profiles{border-bottom:1px solid var(--color-line);padding-bottom:var(--space-2);margin-bottom:var(--space-2)}.user-menu__label{padding:2px var(--space-4) 6px;color:var(--color-muted);font-size:.75rem;font-weight:700;display:block}.user-menu__profile{justify-content:space-between;align-items:center;font-weight:500;display:flex}.user-menu__profile[aria-pressed=true]{color:var(--color-indigo);font-weight:700}.user-menu__profile[aria-pressed=true]:after{content:"✓"}.nav{z-index:5;height:calc(var(--nav-height) + env(safe-area-inset-bottom));padding:6px 6px env(safe-area-inset-bottom);background:var(--color-surface);border-top:1px solid var(--color-line);justify-content:space-around;gap:2px;display:flex;position:fixed;inset:auto 0 0}.nav__item{max-width:120px;color:var(--color-muted);border-radius:14px;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:3px;font-size:.72rem;font-weight:600;text-decoration:none;display:flex}.nav__item svg{width:24px;height:24px}.nav__item:hover{color:var(--color-heading);text-decoration:none}.nav__item--active{color:var(--color-indigo);background:var(--color-indigo-wash)}.nav__item[aria-disabled=true]{opacity:.45}@media (width>=900px){.page{padding-top:calc(var(--appbar-height) + var(--space-6));padding-bottom:var(--space-7)}.appbar{padding:0 max(var(--space-5), calc(50% - 520px))}.nav{inset:0 calc(max(var(--space-5), 50% - 520px) + 104px) auto auto;height:var(--appbar-height);z-index:6;background:0 0;border:0;padding:8px 0}.appbar:has(.user-menu__role)~.nav{inset-inline-end:calc(max(var(--space-5), 50% - 520px) + 198px)}.nav__item{flex-direction:row;flex:none;gap:8px;max-width:none;padding:0 14px;font-size:.9rem}.nav__item svg{width:20px;height:20px}}.card{background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius);padding:var(--space-5) var(--space-4);box-shadow:var(--shadow-card)}.card>h2:first-child,.card>form>h2:first-child{margin-bottom:var(--space-2)}.card--navy{background:var(--ink-glow);color:var(--color-on-ink);border-color:#0000}.card--navy a{color:var(--color-on-ink)}.card--navy .muted{color:var(--color-on-ink-muted)}ul.card{padding-top:var(--space-2);padding-bottom:var(--space-2)}.hero{color:var(--color-on-ink);border-radius:var(--radius);padding:var(--space-5) var(--space-5) var(--space-5);box-shadow:var(--shadow-card);background:var(--ink-glow);position:relative;overflow:hidden}.hero h2{margin:var(--space-1) 0 0;font-size:1.35rem;line-height:1.22}@media (width<=599px){.hero:not(.hero--quiet){gap:var(--space-3);padding:var(--space-4);grid-template-columns:58px 1fr;grid-template-areas:"eyebrow eyebrow""date title""facts facts""action action";align-items:center}.hero__body{display:contents}.hero__body>.eyebrow{grid-area:eyebrow}.hero__body>h2{grid-area:title;margin:0;font-size:1.22rem}.hero__body>.hero__facts{grid-area:facts;margin:0}.hero__date{border-radius:14px;grid-area:date;align-self:start;height:62px}.hero__day{font-size:1.85rem}.hero__month{font-size:.78rem}.hero__action{grid-area:action}}.hero{gap:var(--space-4);grid-template-columns:88px 1fr;align-items:center;display:grid}.hero__date{background:#ffffff1f;border:1px solid #ffffff2e;border-radius:18px;align-content:center;justify-items:center;height:92px;display:grid}.hero__day{letter-spacing:-.04em;font-size:2.7rem;font-weight:800;line-height:.95}.hero__month{color:var(--color-on-ink-accent);font-size:.92rem;font-weight:700}.hero .btn{min-height:46px;margin:0}.hero__action{grid-column:1/-1}.hero__body{min-width:0}.hero p{color:var(--color-on-ink-muted);margin:0}.hero .eyebrow{color:var(--color-on-ink-accent)}.hero__facts{margin:var(--space-3) 0 0;gap:var(--space-2);flex-wrap:wrap;padding:0;list-style:none;display:flex}.hero__facts li{background:#ffffff1a;border:1px solid #ffffff29;border-radius:999px;align-items:center;gap:7px;padding:6px 12px;font-size:.88rem;font-weight:600;display:inline-flex}.hero__facts svg{flex:none;width:17px;height:17px}@media (width>=600px){.hero{gap:var(--space-5);grid-template-columns:128px 1fr auto}.hero__date{height:120px}.hero__day{font-size:3.6rem}.hero__action{width:auto;min-width:150px;padding:0 var(--space-5);grid-column:auto;align-self:center}}.hero--quiet{display:block}.greeting{margin:var(--space-2) 0 var(--space-1)}.greeting p{color:var(--color-muted);margin:0}.greeting h1{margin:0;font-size:1.75rem}.btn{justify-content:center;align-items:center;gap:var(--space-2);min-height:48px;padding:0 var(--space-5);border-radius:var(--radius-sm);width:100%;font:inherit;cursor:pointer;text-align:center;border:1px solid #0000;font-weight:700;text-decoration:none;transition:background-color .12s,transform 80ms;display:inline-flex}.btn:active:not(:disabled){transform:translateY(1px)}.btn--primary{background:var(--btn-bg);color:var(--btn-fg)}.btn:hover,.btn:focus-visible{text-decoration:none}.btn--primary:hover{background:var(--btn-bg-hover);color:var(--btn-fg)}.hero .btn--primary,.card--navy .btn--primary,.landing__hero .btn--primary{color:#15143b;background:#fff}.hero .btn--primary:hover,.card--navy .btn--primary:hover,.landing__hero .btn--primary:hover{color:#15143b;background:#ecebfb}.btn--secondary{background:var(--color-surface);color:var(--color-heading);border-color:var(--color-line)}.btn--secondary:hover{border-color:var(--color-line-strong);background:var(--color-surface-hover);color:var(--color-heading)}.google-btn--pending{visibility:hidden;height:0;margin:0;overflow:hidden}.divider{align-items:center;gap:var(--space-3);color:var(--color-muted);font-size:.85rem;display:flex}.divider:before,.divider:after{content:"";border-top:1px solid var(--color-line);flex:1}.google-btn__box{margin-top:var(--space-4);position:relative}.google-btn__box:hover .google-btn__face{border-color:var(--color-line-strong);background:var(--color-surface-hover)}.google-btn__official{opacity:0;transform-origin:0;position:absolute;inset:0;overflow:hidden}.google-btn__official>div{height:100%}.google-btn__official iframe{height:100%!important}.btn--danger{background:var(--color-danger-bg);color:var(--color-danger)}.btn--danger:hover{background:var(--color-danger-bg-strong)}.btn--inline{width:auto;min-height:40px;padding:0 var(--space-4);font-size:.92rem}.btn:disabled{opacity:.55;cursor:default}.link-button{font:inherit;color:var(--color-indigo);text-underline-offset:3px;cursor:pointer;background:0 0;border:0;padding:0;font-weight:600}.link-button:hover{color:var(--color-indigo-strong);text-decoration:underline}.back{min-height:32px;color:var(--color-muted);align-items:center;font-size:.9rem;display:inline-flex}.back:hover{color:var(--color-heading);text-decoration:none}.menu{flex-direction:column;display:flex}.menu__item{justify-content:space-between;align-items:center;gap:var(--space-3);min-height:52px;padding:var(--space-3) 0;color:var(--color-heading);display:flex}.menu__item+.menu__item{border-top:1px solid var(--color-line)}.menu__item:after{content:"";border-right:2px solid var(--color-field-border-hover);border-top:2px solid var(--color-field-border-hover);flex:none;width:8px;height:8px;margin-right:4px;transform:rotate(45deg)}.menu__item:hover{color:var(--color-indigo-strong);text-decoration:none}.card>.menu:last-child{margin-bottom:calc(var(--space-3) * -1)}.tiles{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));display:grid}.tile{padding:var(--space-4);background:var(--color-surface);border:1px solid var(--color-line);border-radius:var(--radius);box-shadow:var(--shadow-card);color:var(--color-heading);flex-direction:column;gap:6px;font-weight:400;transition:border-color .12s;display:flex}.tile:hover{border-color:var(--color-line-strong);color:var(--color-heading);text-decoration:none}.tile__label{color:var(--color-muted);font-size:.82rem;font-weight:600}.tile__title{color:var(--color-heading);margin:0}.tile__note{color:var(--color-muted);font-size:.82rem;font-weight:700}.tile__note--success{color:var(--color-success)}.tile__note--warning{color:var(--color-warning)}.tile__note--danger{color:var(--color-danger)}.field{display:block}.field__label{color:var(--color-heading);margin-bottom:6px;font-size:.9rem;font-weight:700;display:block}.field__input{width:100%;min-height:48px;padding:0 var(--space-3);border:1px solid var(--color-field-border);border-radius:var(--radius-sm);font:inherit;background:var(--color-surface);color:var(--color-text);display:block}.field__input::placeholder{color:var(--color-placeholder)}.field__input:hover{border-color:var(--color-field-border-hover)}.field__input:focus{outline:3px solid color-mix(in srgb, var(--color-indigo) 28%, transparent);outline-offset:0;border-color:var(--color-indigo)}.field__input[aria-invalid=true]{border-color:var(--color-danger)}.field__input--area{min-height:104px;padding:var(--space-3);resize:vertical;line-height:1.45}.field .muted{margin-top:6px;display:block}.field__error{color:var(--color-danger);margin-top:6px;font-size:.88rem;font-weight:600;display:block}input[type=checkbox]{width:20px;height:20px;accent-color:var(--color-indigo);flex:none}input[type=file].field__input{padding:10px var(--space-3);min-height:0}.file{align-items:center;gap:var(--space-3);min-height:72px;padding:var(--space-3) var(--space-4);border:1.5px dashed var(--color-field-border-hover);border-radius:var(--radius-sm);background:var(--color-surface);transition:border-color .12s,background-color .12s;display:flex;position:relative}.file:hover,.file--over{border-color:var(--color-indigo);background:var(--color-indigo-wash)}.file:focus-within{outline:3px solid color-mix(in srgb, var(--color-indigo) 28%, transparent);border-color:var(--color-indigo)}.file--chosen{border-style:solid;border-color:var(--color-field-border)}.file--invalid{border-color:var(--color-danger)}.file--disabled{opacity:.55}.file__icon{background:var(--color-indigo-wash);width:44px;height:44px;color:var(--color-indigo);border-radius:12px;flex:none;place-items:center;display:grid}.file:hover .file__icon,.file--over .file__icon{background:var(--color-surface)}.file--chosen .file__icon{background:var(--color-success-bg);color:var(--color-success)}.file__icon svg{width:22px;height:22px}.file__text{min-width:0;color:var(--color-heading);line-height:1.3;display:grid}.file__name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file__note{color:var(--color-muted);font-size:.85rem}.file__input{opacity:0;cursor:pointer;width:100%;height:100%;font-size:0;position:absolute;inset:0}.file--disabled .file__input{cursor:default}.check{color:var(--color-muted);cursor:pointer;align-items:center;gap:10px;font-size:.92rem;display:flex}fieldset{min-width:0}.inline-form{gap:var(--space-3);flex-wrap:wrap;align-items:flex-end;display:flex}.inline-form>*{flex:150px}.inline-form>.btn{flex:none}.banner{padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);border-left:4px solid;font-size:.95rem}.banner--error{background:var(--color-danger-bg);color:var(--color-danger)}.banner--success{background:var(--color-success-bg);color:var(--color-success)}.banner--warning{background:var(--color-warning-bg);color:var(--color-warning)}.banner a{color:inherit;font-weight:700}.chip{white-space:nowrap;background:var(--color-indigo-wash);color:var(--color-heading);border-radius:999px;padding:3px 10px;font-size:.78rem;font-weight:700;line-height:1.4;text-decoration:none;display:inline-block}.chip--active{background:var(--color-heading);color:var(--color-surface)}.presence-ok{margin:0;font-size:1.25rem;font-weight:700;line-height:1.3}.board{z-index:60;background:var(--ink-glow);color:var(--color-on-ink);flex-direction:column;display:flex;position:fixed;inset:0;overflow:auto}.board__bar{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-5);flex-wrap:wrap;display:flex}.board__brand{align-items:center;gap:10px;font-weight:700;display:flex}.board__actions{gap:var(--space-2);flex-wrap:wrap;display:flex}.board__button{font:inherit;color:var(--color-on-ink);cursor:pointer;background:#ffffff1a;border:1px solid #ffffff38;border-radius:999px;padding:8px 16px;font-size:.9rem;font-weight:600;text-decoration:none}.board__button:hover{color:var(--color-on-ink);background:#ffffff2e;text-decoration:none}.board__main{gap:var(--space-6);padding:var(--space-4) var(--space-5) var(--space-6);flex:1;grid-template-columns:1fr;align-items:start;display:grid}.board__scan{text-align:center;justify-items:center;gap:var(--space-3);display:grid}.board__scan h1{color:var(--color-on-ink);margin:0;font-size:clamp(1.6rem,3.4vw,3rem);line-height:1.1}.board__lesson{color:var(--color-on-ink-muted);margin:0;font-size:clamp(1rem,1.5vw,1.35rem)}.board__qr{background:#fff;border-radius:28px;width:min(78vw,58vh,620px);padding:clamp(12px,1.6vw,24px)}.board__qr-wait{aspect-ratio:1;background:#eeeef4;border-radius:12px;width:100%}.board__hint{margin:0;font-size:clamp(1rem,1.5vw,1.35rem)}.board__validity{gap:6px var(--space-4);width:min(78vw,58vh,620px);color:var(--color-on-ink-muted);font-variant-numeric:tabular-nums;grid-template-columns:1fr 1fr;font-size:clamp(.95rem,1.3vw,1.2rem);display:grid}.board__validity>span:first-child{text-align:left}.board__validity>span:nth-child(2){text-align:right}.board__validity strong{color:var(--color-on-ink);letter-spacing:.08em}.board__meter{background:#ffffff29;border-radius:999px;grid-column:1/-1;height:6px;overflow:hidden}.board__meter>span{border-radius:inherit;background:linear-gradient(90deg,#fb9238,#8f84ff);height:100%;transition:width 1s linear;display:block}.board__error{color:#ffd0c2;margin:0}.board__note{color:var(--color-on-ink-muted);max-width:28em;margin:0;font-size:clamp(1rem,1.4vw,1.25rem)}.board__list{gap:var(--space-4);align-content:start;min-width:0;display:grid}.board__count{align-items:center;gap:var(--space-4);color:var(--color-on-ink-muted);margin:0;font-size:clamp(1rem,1.4vw,1.3rem);line-height:1.3;display:flex}.board__count strong{color:var(--color-on-ink);font-variant-numeric:tabular-nums;font-size:clamp(3.5rem,8vw,7rem);line-height:1}.board__head{justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.board__button--solid{color:#15143b;background:#fff;border-color:#fff;padding:10px 20px;font-size:clamp(.95rem,1.2vw,1.15rem)}.board__button--solid:hover{color:#15143b;background:#ecebfb}.board__button:disabled{opacity:.6;cursor:default}.board__names{gap:var(--space-2);margin:0;padding:0;list-style:none;display:grid}.board__name{justify-content:space-between;align-items:center;gap:var(--space-3);border-radius:var(--radius-sm);background:#ffffff14;padding:clamp(10px,1.1vw,16px) clamp(14px,1.6vw,24px);font-size:clamp(1.1rem,2vw,1.9rem);font-weight:600;animation:.5s cubic-bezier(.2,.8,.2,1) board-in;display:flex}.board__who{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.board__state{font:inherit;color:#ffd7b5;background:#fb923838;border:0;border-radius:999px;flex:none;padding:4px 12px;font-size:clamp(.8rem,1vw,1rem);font-weight:700}.board__state--ok{color:#b9f2cf;background:#46c97e38}.board__state--action{color:#15143b;cursor:pointer;background:#fb9238}.board__state--action:disabled{opacity:.6;cursor:default}.board__name--latest .board__state{color:#9a4a06;background:#fff1e4}.board__name--latest .board__state--ok{color:#17713a;background:#e3f7eb}.board__name--latest .board__state--action{color:#15143b;background:#fb9238}.board__name--latest{color:#15143b;background:#fff}@keyframes board-in{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}@media (width>=900px){.board__main{gap:var(--space-7);padding:var(--space-4) var(--space-7) var(--space-7);grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr)}.board__qr,.board__validity{width:min(44vw,62vh,760px)}}@media (prefers-reduced-motion:reduce){.board__name{animation:none}.board__meter>span{transition:none}}.class-tabs{gap:var(--space-2);flex-wrap:wrap;display:flex}.class-tabs .chip{padding:8px 16px;font-size:.95rem;text-decoration:none}.materials+.materials{border-top:1px solid var(--color-line);padding-top:var(--space-4)}.materials__lesson{margin:0;font-size:1.05rem}.materials .list{margin-top:var(--space-2)}a.chip:hover{background:var(--color-indigo-wash-strong);color:var(--color-heading)}a.chip--active:hover{background:var(--color-heading);color:var(--color-surface);opacity:.88}.chip--warning{background:var(--color-warning-bg);color:var(--color-warning)}.chip--success{background:var(--color-success-bg);color:var(--color-success)}.chip--danger{background:var(--color-danger-bg);color:var(--color-danger)}.list{margin:0;padding:0;list-style:none}.list>li+li{border-top:1px solid var(--color-line)}.list.card{padding:var(--space-2) var(--space-4)}.row{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-3) 0;flex-wrap:wrap;display:flex}.row>:first-child{flex:60%;min-width:0}.roster__actions{gap:var(--space-2);flex-wrap:wrap;justify-content:flex-end;display:flex}.topbar{justify-content:space-between;align-items:center;gap:var(--space-3);display:flex}.class-select{align-items:center;gap:var(--space-3);display:flex}.class-select select{flex:1}.timeline{margin:var(--space-2) 0 0;padding:0;list-style:none}.timeline>li{position:relative}.timeline>li:before{content:"";background:var(--color-line);width:2px;position:absolute;top:0;bottom:0;left:75px}.timeline>li:first-child:before{top:38px}.timeline>li:last-child:before{height:38px;bottom:auto}.timeline>li:only-child:before{display:none}.lesson{color:inherit;border-radius:12px;grid-template-columns:56px 16px 1fr;align-items:start;column-gap:12px;padding:14px 0;font-weight:400;text-decoration:none;display:grid}.lesson:hover{color:inherit;text-decoration:none}.lesson:hover .lesson__topic{color:var(--color-indigo-strong)}.lesson__date{text-align:right;color:var(--color-muted);font-size:.8rem;line-height:1.15}.lesson__date strong{letter-spacing:-.02em;color:var(--color-heading);font-size:1.5rem;font-weight:800;line-height:1;display:block}.lesson__mark{z-index:1;background:var(--color-surface);border:2px solid var(--color-field-border-hover);border-radius:50%;width:16px;height:16px;margin-top:16px;position:relative}.lesson--held .lesson__mark{background:var(--color-indigo);border-color:var(--color-indigo)}.lesson--today .lesson__mark{border-color:var(--color-dawn);box-shadow:0 0 0 4px var(--color-dawn-wash)}.lesson--today.lesson--held .lesson__mark{background:var(--color-dawn)}.lesson--cancelled .lesson__mark{border-style:dashed}.lesson__body{min-width:0}.lesson__topic{color:var(--color-heading);font-size:1rem;font-weight:700;line-height:1.25;display:block}.lesson__meta{color:var(--color-muted);margin-top:2px;font-size:.9rem;display:block}.lesson__chips{flex-wrap:wrap;gap:6px;margin-top:6px;display:flex}.lesson--cancelled .lesson__topic{color:var(--color-muted);text-decoration:line-through}.bar{background:var(--color-indigo-wash);border-radius:999px;height:10px;margin:6px 0 4px;overflow:hidden}.bar__fill{border-radius:inherit;min-width:0;height:100%;transition:width .6s cubic-bezier(.2,.8,.2,1)}.bar__fill--attended{background:linear-gradient(90deg,#4a3fd6,#8f84ff);box-shadow:0 0 10px #4a3fd666}.bar__fill--minimum{background:linear-gradient(90deg,#fb9238 0%,#b04fc0 55%,#3148f5 100%);box-shadow:0 0 10px #b04fc066}.bar__fill--done{background:linear-gradient(90deg,#17913f,#46c97e);box-shadow:0 0 10px #17913f66}.bar__fill--stuck{background:var(--color-line-strong)}.counts{gap:var(--space-2);margin:0 0 var(--space-1);grid-template-columns:repeat(3,1fr);display:grid}.counts>div{background:var(--color-paper);border-radius:var(--radius-sm);padding:var(--space-3)}.counts dd{font-variant-numeric:tabular-nums;margin:0;font-size:1.25rem;font-weight:800;line-height:1.2}.counts dt{color:var(--color-muted);font-size:.8rem}.indicators{gap:var(--space-4);grid-template-columns:1fr;display:grid}.indicator{align-content:start;min-width:0;display:grid}.indicator__label{color:var(--color-heading);font-size:.85rem;font-weight:700}.indicator .stat{font-size:2rem}.indicator__count{color:var(--color-heading);font-size:.9rem;font-weight:600}.indicator .muted{font-size:.82rem}@media (width>=520px){.indicators{gap:var(--space-5);grid-template-columns:1fr 1fr}}.tile--wide{gap:var(--space-3)}.tile--wide .chip{align-self:flex-start}.lesson-row{align-items:center;gap:var(--space-3);min-height:52px;padding:var(--space-3) 0;color:var(--color-heading);grid-template-columns:52px 1fr auto;font-weight:400;display:grid}.lesson-row:hover{text-decoration:none}.lesson-row:hover .lesson-row__topic{color:var(--color-indigo-strong)}.lesson-row__date{font-variant-numeric:tabular-nums;font-weight:700}.lesson-row__topic{min-width:0;font-weight:600}.chip--quiet{color:var(--color-muted);background:0 0;padding-right:0;font-weight:600}.video{aspect-ratio:16/9;border-radius:var(--radius-sm);background:#000;width:100%;position:relative;overflow:hidden}.video iframe{border:0;width:100%;height:100%;position:absolute;inset:0}.announcement+.announcement{border-top:1px solid var(--color-line);padding-top:var(--space-4)}.announcement h3{margin-top:0;font-size:1rem;font-weight:700}.announcement__body{white-space:pre-wrap;overflow-wrap:anywhere}.contribute__how{background:var(--color-paper);border:1px solid var(--color-line);border-radius:var(--radius-sm);padding:var(--space-4)}.contribute__notes{border-top:1px solid var(--color-line);padding-top:var(--space-4)}.contribute__notes p{margin:0}.contribute__notes p+p{margin-top:var(--space-3)}.table{border-collapse:collapse;width:100%;font-size:.92rem}.table th,.table td{text-align:left;padding:var(--space-3) var(--space-1);border-top:1px solid var(--color-line);vertical-align:top}.table th{color:var(--color-muted);border-top:0;padding-top:0;font-size:.8rem;font-weight:700}.table td.num,.table th.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}summary{cursor:pointer;color:var(--color-indigo);align-items:center;gap:10px;font-weight:700;list-style:none;display:flex}summary::-webkit-details-marker{display:none}summary:before{content:"";border-bottom:2px solid;border-right:2px solid;flex:none;width:8px;height:8px;margin-left:2px;transition:transform .12s;transform:rotate(-45deg)}details[open]>summary:before{transform:rotate(45deg)}summary>h2,summary>h3{margin:0}summary.muted{font-weight:600}details.card>summary{color:var(--color-heading)}details[open]>summary{margin-bottom:var(--space-3)}pre{background:var(--color-paper);padding:var(--space-3);border-radius:var(--radius-sm);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.page--dark{background:var(--ink-glow);color:var(--color-on-ink);max-width:none;min-height:100dvh;padding:var(--space-6) var(--space-4) var(--space-7);background-attachment:fixed;position:relative;overflow:hidden}.page--dark>*{max-width:460px;margin-left:auto;margin-right:auto;position:relative}.page--dark h1{margin-top:var(--space-5);font-size:1.9rem;line-height:1.12}.page--dark .lede{color:var(--color-on-ink-muted)}.page--dark .card{color:var(--color-text);margin-top:var(--space-6)}.landing{background:var(--color-paper);min-height:100dvh}.landing__bar{z-index:5;justify-content:space-between;align-items:center;gap:var(--space-3);height:var(--appbar-height);padding:0 var(--space-4);background:color-mix(in srgb, var(--color-paper) 92%, transparent);-webkit-backdrop-filter:saturate(1.4)blur(10px);backdrop-filter:saturate(1.4)blur(10px);border-bottom:1px solid var(--color-line);display:flex;position:sticky;top:0}.landing__inner{max-width:720px;padding:0 var(--space-4);margin:0 auto}.landing__hero{background:var(--ink-glow);color:var(--color-on-ink);padding:var(--space-7) 0;position:relative;overflow:hidden}.landing__hero .landing__inner{position:relative}.landing__hero h1{max-width:15em;font-size:1.9rem;line-height:1.12}.landing__hero .lede{color:var(--color-on-ink-muted);max-width:30em;font-size:1.05rem}.landing__actions{gap:var(--space-3);margin-top:var(--space-5);flex-wrap:wrap;display:flex}.landing__actions .btn{flex:200px;width:auto}.btn--ghost{color:var(--color-on-ink);background:0 0;border-color:#fff6}.btn--ghost:hover{color:var(--color-on-ink);background:#ffffff1a}.landing main{padding-top:var(--space-5);padding-bottom:var(--space-7)}.landing__heading{margin:var(--space-2) 0 0}.places{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(240px,1fr));display:grid}.place h3{margin:0 0 var(--space-2);font-size:1.125rem}.place p{margin:0}.place{transition:border-color .12s,transform 80ms;position:relative}.place:hover{border-color:var(--color-line-strong)}.place__link{color:inherit;text-decoration:none;display:block}.place__link:hover,.place__link:focus-visible{color:inherit;text-decoration:none}.place__link h3{color:var(--color-indigo)}.place__apps{margin-top:var(--space-3);font-size:.85rem}.landing details p{margin:0}.faq{border-top:1px solid var(--color-line)}.faq details{border-bottom:1px solid var(--color-line)}.faq details:last-child{border-bottom:0}.faq summary{justify-content:space-between;gap:var(--space-4);padding:var(--space-4) 0;color:var(--color-heading);font-weight:600;line-height:1.35}.faq summary:before{color:var(--color-indigo);order:2;margin:0 4px 0 0;transform:rotate(45deg)}.faq details[open]>summary:before{transform:rotate(-135deg)}.faq details[open]>summary{padding-bottom:var(--space-2);margin-bottom:0}.faq summary:hover{color:var(--color-indigo)}.faq details p{padding:0 var(--space-6) var(--space-4) 0;color:var(--color-muted);line-height:1.6}.landing a{overflow-wrap:anywhere}.landing{overflow-x:clip}.partners{margin:var(--space-2) 0 0;gap:var(--space-3);grid-template-columns:1fr 1fr;padding:0;list-style:none;display:grid}.partners__wide{grid-column:1/-1}.partners__wide .partner{aspect-ratio:auto;min-height:96px}@media (width>=620px){.partners{grid-template-columns:repeat(3,1fr)}.partners__wide{grid-column:auto}.partners__wide .partner{aspect-ratio:3/2;min-height:0}}.partner{aspect-ratio:3/2;padding:var(--space-4);border-radius:var(--radius);border:1px solid var(--color-line);background:#fff;justify-content:center;align-items:center;transition:opacity .12s,transform 80ms;display:flex}.partner:hover{opacity:.85}.partner:active{transform:scale(.99)}.partner img{object-fit:contain;width:auto;max-width:100%;height:auto;max-height:100%}.landing__footer{text-align:center}@media (width>=600px){.landing__hero{padding:72px 0}.landing__hero h1{font-size:2.4rem}.landing__actions .btn{flex:none;min-width:200px}}.splash{background:var(--color-paper);place-items:center;min-height:100dvh;display:grid}.skeleton{border-radius:var(--radius);background:linear-gradient(90deg, var(--skeleton-a) 0%, var(--skeleton-b) 50%, var(--skeleton-a) 100%);background-size:200% 100%;animation:1.4s ease-in-out infinite skeleton}@keyframes skeleton{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton--hero{background-color:var(--color-ink);background-image:linear-gradient(90deg, var(--color-ink) 0%, var(--color-ink-soft) 50%, var(--color-ink) 100%)}.btn--busy{position:relative}.spinner{border:2px solid;border-right-color:#0000;border-radius:50%;flex:none;width:16px;height:16px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.confirm{padding:var(--space-3) var(--space-4);border:1px solid var(--color-line);border-radius:var(--radius-sm);background:var(--color-paper);flex-basis:100%}.confirm__question{margin:0;font-weight:700}.toasts{left:0;right:0;bottom:calc(var(--nav-height) + env(safe-area-inset-bottom) + 12px);pointer-events:none;z-index:9;padding:0 var(--space-4);flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed}.toast{background:var(--color-heading);color:var(--color-surface);border-radius:999px;max-width:100%;padding:10px 16px;font-size:.95rem;font-weight:600;animation:.18s ease-out toast-in;box-shadow:0 10px 30px -12px #15143b80}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.dialog{border-radius:var(--radius);padding:var(--space-5) var(--space-4);background:var(--color-surface);width:min(420px,100% - 32px);color:var(--color-text);border:0;box-shadow:0 24px 60px -20px #15143b80}.dialog::backdrop{background:#16163f99}.skip-link{z-index:20;background:var(--color-heading);color:var(--color-surface);border-radius:8px;padding:8px 12px;font-weight:700;position:absolute;top:-48px;left:8px}.skip-link:focus{top:8px}main:focus{outline:none}.nav__inner{display:contents}@media (width>=900px){.toasts{bottom:24px}}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}:root.dark .card--navy,:root.dark .hero{border:1px solid var(--color-line)}.theme-toggle{border:1px solid var(--color-line);width:40px;height:40px;color:var(--color-heading);cursor:pointer;background:0 0;border-radius:50%;flex:none;place-items:center;display:inline-grid}.theme-toggle:hover{background:var(--color-surface-hover);border-color:var(--color-line-strong)}.theme-toggle svg{width:20px;height:20px}.page--dark .theme-toggle{color:var(--color-on-ink);border-color:color-mix(in srgb, var(--color-on-ink) 30%, transparent);z-index:2;position:absolute;top:0;right:0}.page--dark .theme-toggle:hover{background:color-mix(in srgb, var(--color-on-ink) 12%, transparent)}.landing__bar-actions{align-items:center;gap:var(--space-2);display:flex}.appbar .theme-toggle{width:36px;height:36px}.bell{border:1px solid var(--color-line);width:36px;height:36px;color:var(--color-heading);border-radius:50%;flex:none;place-items:center;text-decoration:none;display:inline-grid;position:relative}.bell:hover{background:var(--color-surface-hover);border-color:var(--color-line-strong);color:var(--color-heading);text-decoration:none}.bell svg{width:20px;height:20px}.bell__count{background:var(--color-indigo);color:#fff;border:2px solid var(--color-paper);border-radius:999px;place-items:center;min-width:19px;height:19px;padding:0 5px;font-size:.7rem;font-weight:800;line-height:1;display:grid;position:absolute;top:-5px;right:-6px}.announcement--new{border-left:3px solid var(--color-indigo);padding-left:var(--space-3)}.chip--accent{background:var(--color-indigo);color:#fff;vertical-align:middle}.card-title-link{color:inherit;text-decoration:none}.manual h1{font-size:1.6rem}.manual h2{margin-top:var(--space-5)}.manual p,.manual li{line-height:1.6}.manual ul,.manual ol{padding-left:22px}.manual__table{overflow-x:auto}.manual table{border-collapse:collapse;width:100%;margin:var(--space-2) 0 var(--space-4)}.manual th,.manual td{border:1px solid var(--color-line);text-align:left;vertical-align:top;padding:8px 10px}.manual th{background:var(--color-paper)}.card-title-link:hover{color:var(--color-indigo)}.info-row{justify-content:space-between;align-items:center;gap:var(--space-3);display:flex}.info-row>h2,.info-row>h3,.info-row>p{margin:0}.info-btn{width:28px;height:28px;color:var(--color-muted);font:inherit;cursor:pointer;background:0 0;border:1.5px solid;border-radius:50%;flex:none;place-items:center;font-family:Georgia,Times New Roman,serif;font-size:.9rem;font-style:italic;font-weight:800;line-height:1;display:inline-grid}.info-btn:hover,.info-btn[aria-expanded=true]{color:var(--color-indigo)}.card--navy .info-btn{color:var(--color-on-ink-muted)}.card--navy .info-btn:hover,.card--navy .info-btn[aria-expanded=true]{color:var(--color-on-ink)}.info-panel{padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);background:var(--color-paper);border:1px solid var(--color-line);font-size:.92rem}.info-panel p{margin:0}.info-panel p+p{margin-top:var(--space-2)}.card--navy .info-panel{color:var(--color-on-ink);background:#ffffff14;border-color:#ffffff29}
