*{box-sizing:border-box}
[hidden]{display:none!important}
html{scroll-behavior:smooth;background:#e9eef0;color-scheme:light}
html[data-mode="dark"]{background:#071522;color-scheme:dark}
body{margin:0;min-width:0;min-height:100vh;color:var(--tl-ink);font:var(--tl-text-body)/1.55 "Be Vietnam Pro",var(--tl-font-ui);background:
  radial-gradient(72% 48% at 0 0,rgba(31,112,135,.14),transparent 72%),
  radial-gradient(54% 40% at 100% 4%,rgba(165,59,46,.11),transparent 74%),
  linear-gradient(150deg,#eef3f3,#e8edef 58%,#f2ece3)}
html[data-mode="dark"] body{background:
  radial-gradient(76% 50% at 0 0,rgba(40,111,145,.25),transparent 70%),
  radial-gradient(52% 38% at 100% 3%,rgba(165,59,46,.17),transparent 74%),
  linear-gradient(150deg,#061421,#0b1f30 58%,#101a24)}
a{color:inherit}
button,input,select,textarea{font:inherit}
button,a{touch-action:manipulation}
.skip{position:absolute;left:18px;top:-80px;z-index:10;padding:12px 18px;border-radius:var(--tl-radius-control);background:var(--tl-focus);color:#fff}.skip:focus{top:12px}
.site-header{position:static;border-bottom:1px solid var(--tl-hair);background:color-mix(in srgb,var(--tl-glass-strong) 88%,transparent);backdrop-filter:blur(var(--tl-blur));-webkit-backdrop-filter:blur(var(--tl-blur))}
.header-inner{width:min(1160px,calc(100% - 36px));min-height:68px;margin:auto;display:flex;align-items:center;gap:var(--tl-space-3)}
.brand{display:flex;align-items:center;gap:var(--tl-space-3);min-height:var(--tl-control-min);text-decoration:none}.brand img{border-radius:10px}.brand span{display:grid;line-height:1.12}.brand b{font:700 19px/1.1 "Be Vietnam Pro",var(--tl-font-ui)}.brand small{margin-top:4px;color:var(--tl-ink-soft);font:600 9px/1.25 "Be Vietnam Pro",var(--tl-font-ui);letter-spacing:.09em;text-transform:uppercase}
.demo-mark{margin-left:auto;padding:5px 9px;border:1px solid var(--tl-seal);border-radius:999px;color:var(--tl-seal);font:700 10px/1 var(--tl-font-mono);letter-spacing:.08em}
.settings-button,.icon-button{min-width:var(--tl-control-min);min-height:var(--tl-control-min);border:1px solid var(--tl-hair);border-radius:var(--tl-radius-control);background:var(--tl-glass-strong);color:var(--tl-ink);font-weight:700;cursor:pointer}.settings-button{padding:0 16px;margin-left:var(--tl-space-2)}
.page-shell{width:min(1160px,calc(100% - 36px));margin:0 auto;padding:var(--tl-space-5) 0 var(--tl-space-7)}
.paper{overflow:hidden;border:1px solid var(--tl-glass-border);border-radius:var(--tl-radius-surface);background:var(--tl-paper);box-shadow:var(--tl-shadow);backdrop-filter:blur(var(--tl-blur));-webkit-backdrop-filter:blur(var(--tl-blur))}
.board-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--tl-space-5);padding:var(--tl-space-5) var(--tl-space-6);border-bottom:1px solid var(--tl-hair)}
.eyebrow,.section-kicker{margin:0;color:var(--tl-seal);font:700 10px/1.45 "Be Vietnam Pro",var(--tl-font-ui);letter-spacing:.1em;text-transform:uppercase}
.board-heading h1{margin:4px 0 0;font:600 clamp(29px,3.4vw,40px)/1.12 "Be Vietnam Pro",var(--tl-font-ui);letter-spacing:-.025em}
.identity{color:var(--tl-ink-soft);font:600 11px/1.5 "Be Vietnam Pro",var(--tl-font-ui)}
.locked{display:flex;align-items:center;justify-content:space-between;gap:var(--tl-space-4);padding:var(--tl-space-6)}.locked>div{display:flex;align-items:center;gap:var(--tl-space-3)}.locked h2{margin:0;font:600 25px/1.2 "Be Vietnam Pro",var(--tl-font-ui)}.seal{display:grid;place-items:center;width:48px;height:48px;border:2px solid var(--tl-seal);border-radius:13px;color:var(--tl-seal);font:700 24px/1 var(--tl-font-shodo)}
.today-strip{padding:var(--tl-space-5) var(--tl-space-6);background:var(--tl-wash);border-bottom:1px solid var(--tl-hair)}
.today-row{display:grid;grid-template-columns:120px minmax(0,1fr) auto;align-items:center;gap:var(--tl-space-5)}
.today-time{font:600 34px/1 "Be Vietnam Pro",var(--tl-font-ui)}.today-time small{display:block;margin-top:7px;color:var(--tl-ink-soft);font:600 9px/1.35 "Be Vietnam Pro",var(--tl-font-ui);letter-spacing:.05em}
.today-main b{display:block;font-size:19px}.today-main span{display:block;margin-top:3px;color:var(--tl-ink-soft);font-size:13px}
.today-status{display:inline-flex!important;align-items:center;gap:6px;margin-top:6px!important;color:var(--tl-seal)!important;font-size:12px!important}.today-status i{width:8px;height:8px;border-radius:50%;background:currentColor}
.today-status.done{color:var(--tl-success)!important}
.class-bar{display:flex;align-items:center;justify-content:space-between;gap:var(--tl-space-4);padding:var(--tl-space-3) var(--tl-space-6);border-bottom:1px solid var(--tl-hair)}
.class-picker{display:flex;gap:var(--tl-space-2);overflow:auto;scrollbar-width:thin}.class-choice{min-height:var(--tl-control-min);padding:0 14px;border:1px solid var(--tl-hair);border-radius:var(--tl-radius-control);background:transparent;color:var(--tl-ink);font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer}.class-choice[aria-current="true"]{border-color:var(--tl-seal);background:var(--tl-wash);color:var(--tl-seal)}
.class-meta{color:var(--tl-ink-soft);font:600 10px/1.45 "Be Vietnam Pro",var(--tl-font-ui);text-align:right;white-space:nowrap}
.board-section{padding:var(--tl-space-6)}.board-section+.board-section{border-top:1px solid var(--tl-hair)}
.section-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--tl-space-4);margin-bottom:var(--tl-space-4)}.section-heading h2,.dialog-heading h2{margin:3px 0 0;font:600 clamp(24px,2.4vw,30px)/1.2 "Be Vietnam Pro",var(--tl-font-ui);letter-spacing:-.02em}
.section-actions{display:flex;align-items:center;gap:var(--tl-space-2);flex-wrap:wrap;justify-content:flex-end}
.primary-action,.secondary-action{display:inline-flex;align-items:center;justify-content:center;min-height:var(--tl-control-primary);padding:0 18px;border-radius:var(--tl-radius-control);font-weight:700;text-decoration:none;cursor:pointer}.primary-action{border:1px solid var(--tl-seal);background:var(--tl-seal);color:#fff}.secondary-action{border:1px solid var(--tl-hair);background:var(--tl-glass-strong);color:var(--tl-ink)}
.primary-action:disabled,.secondary-action:disabled{opacity:.5;cursor:not-allowed}
.member-summary{display:flex;align-items:center;gap:var(--tl-space-5);flex-wrap:wrap;padding:var(--tl-space-3) 0;border-block:1px solid var(--tl-hair);color:var(--tl-ink-soft);font-size:12px}.member-summary b{color:var(--tl-ink);font-size:14px}
.member-list{min-width:0}.member-row{display:grid;grid-template-columns:minmax(180px,1.4fr) minmax(130px,.8fr) minmax(160px,1fr) auto;align-items:center;gap:var(--tl-space-4);min-height:66px;padding:9px 0;border-bottom:1px solid var(--tl-hair)}.member-row:last-child{border-bottom:0}.member-person{display:flex;align-items:center;min-width:0;gap:var(--tl-space-3)}.member-avatar{display:grid;place-items:center;flex:0 0 40px;width:40px;height:40px;border:1px solid color-mix(in srgb,var(--tl-seal) 45%,transparent);border-radius:50%;background:var(--tl-wash);color:var(--tl-seal);font-weight:700}.member-person span{min-width:0}.member-person b,.member-person small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.member-person b{font-size:14px}.member-person small{margin-top:2px;color:var(--tl-ink-soft);font-size:10px}.member-detail{color:var(--tl-ink-soft);font-size:12px}.member-detail b{display:block;color:var(--tl-ink);font-size:12px}.member-status{display:inline-flex;align-items:center;gap:6px;color:var(--tl-ink-soft);font-size:11px}.member-status i{width:8px;height:8px;border-radius:50%;background:var(--tl-success)}.member-status.paused i{background:var(--tl-sepia)}.member-status.inactive i{background:var(--tl-ink-soft)}.member-edit{min-width:var(--tl-control-min);min-height:var(--tl-control-min);padding:0 12px;border:0;background:transparent;color:var(--tl-seal);font-weight:700;cursor:pointer}
.progress-summary{display:flex;gap:var(--tl-space-5);flex-wrap:wrap;margin-bottom:var(--tl-space-4);padding:var(--tl-space-3) 0;border-block:1px solid var(--tl-hair)}.progress-summary span{color:var(--tl-ink-soft);font:600 11px/1.4 "Be Vietnam Pro",var(--tl-font-ui)}.progress-summary b{color:var(--tl-ink);font-size:14px}
.matrix-wrap{overflow:auto;max-width:100%;border-bottom:1px solid var(--tl-hair);scrollbar-width:thin}.progress-matrix{width:100%;min-width:760px;border-collapse:collapse}.progress-matrix th,.progress-matrix td{padding:13px 12px;border-bottom:1px solid var(--tl-hair);text-align:left;vertical-align:middle}.progress-matrix th{color:var(--tl-ink-soft);font:600 10px/1.45 "Be Vietnam Pro",var(--tl-font-ui);letter-spacing:.015em}.progress-matrix th:first-child,.progress-matrix td:first-child{position:sticky;left:0;z-index:2;min-width:180px;background:color-mix(in srgb,var(--tl-paper) 94%,transparent)}.progress-matrix tbody tr:last-child td{border-bottom:0}.progress-matrix .student b{display:block;font-size:14px}.progress-matrix .student small{color:var(--tl-ink-soft);font-size:10px}
.assignment-head{display:grid;gap:3px;min-width:160px}.assignment-head b{color:var(--tl-ink);font-size:12px;line-height:1.45}.assignment-head small{color:var(--tl-ink-soft);font:500 9px/1.4 "Be Vietnam Pro",var(--tl-font-ui)}
.assignment-head .due-today,.assignment-head .due-soon{color:var(--tl-sepia);font-weight:700}.assignment-head .due-overdue{color:var(--tl-danger);font-weight:700}
.state{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:4px 9px;border:1px solid var(--tl-hair);border-radius:999px;white-space:nowrap;color:var(--tl-ink-soft);font:700 10px/1.3 "Be Vietnam Pro",var(--tl-font-ui)}.state.opened{color:var(--tl-sepia)}.state.completed{color:var(--tl-success);border-color:color-mix(in srgb,var(--tl-success) 42%,transparent);background:color-mix(in srgb,var(--tl-success) 8%,transparent)}
html[data-mode="dark"] .state.completed{color:color-mix(in srgb,var(--tl-success) 42%,white);border-color:color-mix(in srgb,var(--tl-success) 58%,white 10%)}html[data-mode="dark"] .state.opened{color:var(--tl-sepia)}
.mobile-progress{display:none}.mobile-student{padding:var(--tl-space-3) 0;border-bottom:1px solid var(--tl-hair)}.mobile-student:last-child{border-bottom:0}.mobile-student>strong{display:block;margin-bottom:6px}.mobile-task{display:flex;align-items:center;justify-content:space-between;gap:var(--tl-space-3);min-height:42px}.mobile-task span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}
.reminder-row{display:grid;grid-template-columns:minmax(160px,1fr) minmax(220px,2fr) auto;align-items:center;gap:var(--tl-space-4);min-height:56px;border-bottom:1px solid var(--tl-hair)}.reminder-row:last-child{border-bottom:0}.reminder-row p{margin:0;color:var(--tl-ink-soft);font-size:13px}.reminder-row button{min-height:var(--tl-control-min);border:0;background:transparent;color:var(--tl-seal);font-weight:700;cursor:pointer}
.community-row{padding:var(--tl-space-3) 0;border-bottom:1px solid var(--tl-hair)}.community-row:last-child{border-bottom:0}.community-head{display:flex;align-items:center;justify-content:space-between;gap:var(--tl-space-3)}.community-head b{font-size:14px}.community-head span{color:var(--tl-ink-soft);font-size:12px}.community-bar{height:8px;margin:8px 0;border-radius:999px;overflow:hidden;background:color-mix(in srgb,var(--tl-ink) 10%,transparent)}.community-bar i{display:block;height:100%;border-radius:inherit;background:var(--tl-success)}.community-names{color:var(--tl-ink-soft);font-size:12px}.community-names b{color:var(--tl-ink);font-weight:600}
.quick-actions{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--tl-hair)}.quick-actions a,.quick-actions button{display:flex;align-items:center;justify-content:center;gap:var(--tl-space-2);min-height:74px;padding:var(--tl-space-3);border:0;border-right:1px solid var(--tl-hair);background:transparent;color:var(--tl-ink);text-decoration:none;cursor:pointer}.quick-actions>*:last-child{border-right:0}.quick-actions span{color:var(--tl-seal);font:700 20px/1 var(--tl-font-jp)}.quick-actions b{font-size:13px}
.local-status{margin:var(--tl-space-3) 0 0;text-align:center;color:var(--tl-ink-soft);font:600 9px/1.45 "Be Vietnam Pro",var(--tl-font-ui);letter-spacing:.06em;text-transform:uppercase}
.panel-dialog,.settings-dialog{width:min(520px,calc(100% - 28px));max-height:calc(100dvh - 28px);overflow:auto;padding:0;border:1px solid var(--tl-glass-border);border-radius:var(--tl-radius-panel);background:var(--tl-glass-strong);color:var(--tl-ink);box-shadow:var(--tl-shadow);backdrop-filter:blur(var(--tl-blur))}.panel-dialog::backdrop,.settings-dialog::backdrop{background:rgba(4,15,24,.58)}
.panel-dialog form,.settings-dialog form{padding:var(--tl-space-5)}.dialog-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--tl-space-4);margin-bottom:var(--tl-space-4)}.icon-button{font-size:25px}
.panel-dialog label{display:block;margin:12px 0 5px;color:var(--tl-ink-soft);font:700 10px/1.45 "Be Vietnam Pro",var(--tl-font-ui);letter-spacing:.05em;text-transform:uppercase}.panel-dialog input,.panel-dialog textarea,.panel-dialog select{width:100%;min-height:var(--tl-control-min);padding:10px 12px;border:1px solid var(--tl-hair);border-radius:var(--tl-radius-control);background:var(--tl-paper-soft);color:var(--tl-ink);font:inherit}.panel-dialog textarea{resize:vertical;line-height:1.55}.dialog-lead{margin:-4px 0 var(--tl-space-3);color:var(--tl-ink-soft);font-size:13px}.form-pair{display:grid;grid-template-columns:1fr 1fr;gap:var(--tl-space-3)}.dialog-feedback{min-height:24px;margin-top:var(--tl-space-3);color:var(--tl-ink-soft);font-size:12px}.dialog-feedback.success{color:var(--tl-success)}.dialog-feedback.error{color:var(--tl-danger)}.assignment-preview{min-height:28px;margin-top:var(--tl-space-3);color:var(--tl-ink-soft);font-size:13px}.assignment-preview.ready{padding:var(--tl-space-3);border-left:3px solid var(--tl-seal);background:var(--tl-wash);color:var(--tl-ink)}.dialog-actions{display:flex;justify-content:flex-end;gap:var(--tl-space-2);margin-top:var(--tl-space-4)}.split-actions{justify-content:space-between}
.class-code-box{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:var(--tl-space-3);padding:var(--tl-space-3) 0;border-block:1px solid var(--tl-hair)}.class-code-box span{color:var(--tl-ink-soft);font-size:11px}.class-code-box b{color:var(--tl-seal);font:700 20px/1 var(--tl-font-mono);letter-spacing:.08em}.class-code-box button{min-height:var(--tl-control-min);padding:0 12px;border:0;background:transparent;color:var(--tl-seal);font-weight:700;cursor:pointer}
.settings-dialog fieldset{margin:0;padding:var(--tl-space-3) 0;border:0;border-block:1px solid var(--tl-hair)}.settings-dialog legend{padding-right:8px;color:var(--tl-ink-soft);font:700 10px/1.45 "Be Vietnam Pro",var(--tl-font-ui);letter-spacing:.06em;text-transform:uppercase}.settings-dialog fieldset label{display:flex;align-items:center;gap:10px;min-height:var(--tl-control-min)}.settings-dialog input[type="radio"]{width:20px;height:20px;accent-color:var(--tl-seal)}.settings-links{display:grid;margin-top:var(--tl-space-3)}.settings-links a{display:flex;align-items:center;min-height:var(--tl-control-min);border-bottom:1px solid var(--tl-hair);text-decoration:none}.settings-links a:last-child{border-bottom:0}
.muted{margin:0;color:var(--tl-ink-soft)}.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
:focus-visible{outline:3px solid var(--tl-focus);outline-offset:3px}
@media(max-width:760px){
  .header-inner,.page-shell{width:min(100% - 24px,1160px)}.page-shell{padding-top:var(--tl-space-3)}
  .board-heading{padding:var(--tl-space-4)}.board-heading h1{font-size:29px}.identity{max-width:130px;text-align:right}
  .today-strip,.board-section{padding:var(--tl-space-4)}.today-row{grid-template-columns:88px 1fr;gap:var(--tl-space-3)}.today-time{font-size:29px}.today-row>a,.today-row>button{grid-column:2;width:100%}
  .class-bar{align-items:flex-start;flex-direction:column;padding:var(--tl-space-3) var(--tl-space-4)}.class-meta{text-align:left;white-space:normal}
  .member-row{grid-template-columns:minmax(0,1fr) auto;gap:5px 10px}.member-person{grid-column:1}.member-detail{grid-column:1;padding-left:52px}.member-status{grid-column:1;padding-left:52px}.member-edit{grid-column:2;grid-row:1/4}.section-actions{width:100%;justify-content:flex-start}.section-actions .primary-action,.section-actions .secondary-action{flex:1}
  .members-section .section-heading{flex-direction:column;align-items:stretch;gap:var(--tl-space-3)}
  .members-section .section-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%;gap:var(--tl-space-2)}
  .members-section .section-actions .primary-action,.members-section .section-actions .secondary-action{min-width:0;flex:none}
  .members-section .section-actions .primary-action{grid-column:1/-1;min-height:var(--tl-control-primary)}
  .matrix-wrap{display:none}.mobile-progress{display:block}.progress-summary{gap:var(--tl-space-3)}.progress-summary span{flex:1;min-width:72px}
  .section-heading h2{font-size:24px}.section-heading .primary-action{padding-inline:13px}
  .reminder-row{grid-template-columns:1fr auto;gap:5px 12px;padding:10px 0}.reminder-row p{grid-column:1}.reminder-row button{grid-column:2;grid-row:1/3}
  .quick-actions{grid-template-columns:1fr 1fr}.quick-actions a,.quick-actions button{min-height:66px;border-bottom:1px solid var(--tl-hair)}.quick-actions>*:nth-child(2){border-right:0}.quick-actions>*:nth-child(3),.quick-actions>*:nth-child(4){border-bottom:0}
}
@media(max-width:520px){.form-pair{grid-template-columns:1fr}.split-actions{align-items:stretch;flex-direction:column-reverse}.split-actions>*{width:100%}}
@media(max-width:430px){.brand small{display:none}.demo-mark{margin-left:auto}.settings-button{padding-inline:12px}.board-heading{align-items:flex-start}.identity{font-size:9px}.today-main b{font-size:16px}.quick-actions b{font-size:12px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important;animation:none!important}}
@media(prefers-reduced-transparency:reduce){.site-header,.paper,.panel-dialog,.settings-dialog{backdrop-filter:none;-webkit-backdrop-filter:none;background:var(--tl-glass-strong)}}
html[data-mode="dark"] .members-section .section-actions .primary-action{color:#172833}
