.app-page{min-width:0}.app-root,.family-app{min-height:calc(100vh - var(--header-h));min-width:0}.family-loading,.loading-block{min-height:70vh}.grid-loading{min-height:60vh}.app-page .page-header{margin-bottom:var(--s-4)}.stack{display:flex;flex-direction:column;gap:var(--s-5);min-width:0}.panel{background:var(--card);border:1px solid var(--line-soft);border-radius:var(--r-card);padding:var(--s-5) var(--s-4);min-width:0}.panel>:last-child{margin-bottom:0}.panel h2{font-size:1.3rem}.panel h3{margin-top:var(--s-5)}.panel-warn{border-left:4px solid var(--warn)}.panel-key{border-left:4px solid var(--accent)}@media (min-width:48rem){.panel{padding:var(--s-5) var(--s-6)}}.signin-grid{display:grid;grid-gap:var(--s-5);gap:var(--s-5);grid-template-columns:minmax(0,1fr)}@media (min-width:48rem){.signin-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.signin-grid>.notice{grid-column:1/-1}}.row-between{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s-2) var(--s-4)}.meta{color:var(--muted);font-size:.9375rem;margin:0}.status-line{min-height:1.6em;margin:0;color:var(--graphite)}.copy-field{margin:0 0 var(--s-3);min-width:0}.copy-row{display:flex;gap:var(--s-2);align-items:stretch;min-width:0}.copy-row .field-input{flex:1 1;min-width:0}.chip-list,.key-list,.notice-list,.plain-list,.reader-list{list-style:none;margin:0;padding:0}.key-list li,.plain-list li{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s-2);border-top:1px solid var(--line-soft);padding:var(--s-3) 0;overflow-wrap:anywhere}.recovery-code{font-size:1.35rem;letter-spacing:.08em;padding:var(--s-3) var(--s-4);background:var(--paper);border:1px dashed var(--line);border-radius:var(--r-control);overflow-wrap:anywhere}.confirm{display:inline-flex;flex-wrap:wrap;align-items:center;gap:var(--s-2)}.dash-bar{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--s-3) var(--s-5)}.dash-title{min-width:0}.dash-h1{margin:0;overflow-wrap:anywhere}.class-select{min-width:12rem;font-family:var(--serif);font-weight:600;font-size:1.35rem}.dash-actions{margin:0}.grid-panel{min-width:0}.grid-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--s-2) var(--s-4);margin-bottom:var(--s-3)}.grid-week{margin:0;font-size:1.2rem}.week-line{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2);margin:var(--s-1) 0 0;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.grid-nav{margin:0}.term-pick select{min-height:44px}.grid-scroll{max-width:100%;overflow-x:auto;border:1px solid var(--line-soft);border-radius:var(--r-card);background:var(--card)}.reading-grid{width:100%;min-width:34rem;border-collapse:separate;border-spacing:0;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.reading-grid td,.reading-grid th{padding:0;border-bottom:1px solid var(--line-soft);text-align:center;vertical-align:middle}.reading-grid thead th{padding:var(--s-2) var(--s-1);font-size:.8125rem;color:var(--muted);font-weight:700;background:var(--card)}.reading-grid tbody tr:last-child>*{border-bottom:0}.g-name{position:-webkit-sticky;position:sticky;left:0;z-index:1;min-width:8.5rem;max-width:11rem;padding:var(--s-2) var(--s-3)!important;text-align:left!important;background:var(--card);border-right:1px solid var(--line-soft);font-weight:600;overflow-wrap:anywhere}.g-seat{display:inline-block;min-width:1.6rem;color:var(--muted);font-weight:700;font-size:.8125rem}.g-day{min-width:3rem}.g-day.is-today{color:var(--ink)!important;box-shadow:inset 0 -3px 0 var(--accent)}.g-dn,.g-wd{display:block;line-height:1.2}.g-dn{color:var(--ink);font-size:1rem}.g-cell.is-today{background:var(--raised)}.g-cell.is-skip{background:repeating-linear-gradient(45deg,var(--hatch) 0 2px,transparent 2px 7px)}.tick-cell{position:relative;display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:0;border-radius:50%;background:transparent;cursor:pointer}.tick-cell:hover{background:var(--accent-soft)}.tick-cell .night-dot{width:22px;height:22px}.tick-cell.by-teacher .night-dot.is-read,.tick-key.by-teacher .night-dot.is-read{background:var(--ink);border-color:var(--ink)}.tick-cell.by-teacher .night-dot.is-read:after,.tick-key.by-teacher .night-dot.is-read:after{border-color:var(--paper)}.by-t{position:absolute;right:2px;bottom:2px;font-size:.75rem;font-weight:800;line-height:1;color:var(--ink)}.tick-key{position:relative;display:inline-flex;width:22px;height:18px}.tick-key .by-t{right:-2px;bottom:-2px}.g-blank{display:inline-block;width:44px;height:44px}.g-cell.is-future .g-blank,.g-cell.is-out .g-blank{background:radial-gradient(circle,var(--line-soft) 2px,transparent 2.5px)}.g-num{min-width:3.5rem;padding:0 var(--s-2)!important;font-weight:700}.g-badge{display:inline-block;margin-left:4px;padding:0 5px;border:1px solid var(--accent);border-radius:var(--r-pill);color:var(--accent);font-size:.75rem;line-height:1.5;vertical-align:middle}.grid-detail{min-height:3em;margin:var(--s-2) 0 0;color:var(--graphite);font-size:.9375rem;overflow-wrap:anywhere}.grid-key{display:flex;flex-wrap:wrap;gap:var(--s-1) var(--s-5);margin:0 0 var(--s-3);padding:0;list-style:none;color:var(--muted);font-size:.875rem}.grid-key li{display:inline-flex;align-items:center;gap:var(--s-2)}.notice-list li{border-top:1px solid var(--line-soft);padding:var(--s-3) 0}.notice-list summary{display:flex;flex-wrap:wrap;gap:var(--s-2);min-height:44px;align-items:center;font-weight:700;cursor:pointer;overflow-wrap:anywhere}.notice-when{color:var(--muted);font-weight:400}.notice-state{margin:var(--s-1) 0 0;color:var(--graphite);font-size:.9375rem}.notice-text{margin:var(--s-2) 0 0;padding:var(--s-3);border-radius:var(--r-control);background:var(--paper);font-family:var(--sans);font-size:.9375rem;white-space:pre-wrap;overflow-wrap:anywhere}.new-class .field-grid{margin-bottom:var(--s-2)}.slips-ready{border:2px solid var(--accent)}.code-list{margin:0 0 var(--s-4)}.code-list summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-weight:700}.code-list ul{list-style:none;margin:0;padding:0}.code-list li{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--s-2);padding:var(--s-2) 0;border-top:1px solid var(--line-soft);overflow-wrap:anywhere}.family-code{font-size:1.05rem;letter-spacing:.06em}.reader-row{display:grid;grid-template-columns:2.25rem minmax(0,1fr);grid-gap:var(--s-2) var(--s-3);gap:var(--s-2) var(--s-3);align-items:start;padding:var(--s-3) 0;border-top:1px solid var(--line-soft)}.reader-row .seat{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:48px;color:var(--muted);font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.reader-name{margin:0}.reader-actions{grid-column:2;display:flex;flex-wrap:wrap;gap:var(--s-2)}@media (min-width:48rem){.reader-row{grid-template-columns:2.25rem minmax(0,1fr) auto}.reader-actions{grid-column:3}}.add-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:0 var(--s-3);margin:var(--s-3) 0}.add-row .field{flex:1 1 12rem}.add-row .field,.add-row>.button{margin-bottom:var(--s-2)}.form-end{align-self:end}.chip-list{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-bottom:var(--s-3)}.chip-list li{display:inline-flex;align-items:center;gap:var(--s-2);padding:0 var(--s-1) 0 var(--s-3);border:1px solid var(--line);border-radius:var(--r-pill)}.left-list,.slips-again{margin-top:var(--s-5);padding-top:var(--s-4);border-top:1px dashed var(--line-soft)}.left-list summary{min-height:44px;display:flex;align-items:center;font-weight:700;cursor:pointer}.paper-pick{max-width:12rem}.family-page{max-width:34rem;margin:0 auto}.family-week{display:flex;flex-direction:column;gap:var(--s-4)}.family-head h1{margin-bottom:var(--s-1);overflow-wrap:anywhere}.tonight{border:2px solid var(--accent)}.tonight-q{font-family:var(--serif);font-weight:600;font-size:1.25rem;margin-bottom:var(--s-3)}.big-tick{width:100%;font-size:1.2rem}.big-tick,.tonight-done{min-height:64px;margin-bottom:var(--s-4)}.tonight-done{display:flex;flex-wrap:wrap;justify-content:space-between;padding:var(--s-2) var(--s-4);border-radius:var(--r-control);background:var(--accent-soft)}.tonight-done,.tonight-mark{align-items:center;gap:var(--s-2)}.tonight-mark{display:inline-flex;margin:0;font-weight:700}.tonight-mark .night-dot{width:24px;height:24px}.chips{margin-bottom:var(--s-3)}.chips legend{margin-bottom:var(--s-2);font-weight:700}.chip-row{display:flex;flex-wrap:wrap;gap:var(--s-2)}.chip{min-width:52px;min-height:44px;padding:0 var(--s-3);border:1px solid var(--line);border-radius:var(--r-pill);background:var(--card);color:var(--ink);font:inherit;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;cursor:pointer}.chip[aria-pressed=true]{border:2px solid var(--accent);background:var(--accent-soft)}.chip[aria-pressed=true]:before{content:"\2713 "}.title-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--s-2)}.title-row>.field,.title-row>.field-input{flex:1 1 12rem;margin:0}.night-list{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-gap:var(--s-1);gap:var(--s-1);margin:0 0 var(--s-4);padding:0;list-style:none}.night{display:flex;flex-direction:column;align-items:center;gap:4px;width:100%;min-height:76px;padding:var(--s-2) 0;border:1px solid var(--line-soft);border-radius:var(--r-control);background:var(--card);color:var(--ink);font:inherit;cursor:pointer}.night:disabled{cursor:not-allowed;opacity:.6}.night.is-read{border-color:var(--accent);background:var(--accent-soft)}.night.is-skip{background-image:repeating-linear-gradient(45deg,var(--hatch) 0 2px,transparent 2px 7px)}.night.is-waiting{border-style:dashed}.night .night-dot{width:22px;height:22px}.night-day{font-size:.75rem;font-weight:700;color:var(--muted)}.night-num{font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.tallies{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));grid-gap:var(--s-3);gap:var(--s-3);margin:0}.tallies div{padding:var(--s-3);border-radius:var(--r-control);background:var(--raised)}.tallies dt{font-size:.8125rem;color:var(--muted);font-weight:700}.tallies dd{margin:0;font-weight:700}.code-input{letter-spacing:.06em;text-transform:uppercase}.hero{display:grid;grid-gap:var(--s-6);gap:var(--s-6);align-items:center;grid-template-columns:minmax(0,1fr)}@media (min-width:64rem){.hero{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr)}}.hero h1{font-size:clamp(1.9rem,1.35rem + 2.3vw,2.9rem)}.hero .week-strip,.hero h1{margin-bottom:var(--s-4)}.hero .week-strip .night-dot{width:20px;height:20px}.sample{margin:0;padding:var(--s-4);border:1px solid var(--line-soft);border-radius:var(--r-card);background:var(--card);min-width:0}.sample figcaption{margin-top:var(--s-3);color:var(--muted);font-size:.875rem}.sample .reading-grid{min-width:0}.sample .g-name{min-width:5.5rem}.sample .g-day{min-width:0}.sample-dot{display:inline-flex;width:30px;height:36px;align-items:center;justify-content:center}.home-points{display:grid;grid-gap:var(--s-4);gap:var(--s-4);grid-template-columns:minmax(0,1fr);margin:0;padding:0;list-style:none}@media (min-width:48rem){.home-points{grid-template-columns:repeat(3,minmax(0,1fr))}}.home-points li{padding:var(--s-4);border-top:3px solid var(--accent);background:var(--card);border-radius:0 0 var(--r-control) var(--r-control)}@media (max-width:47.99rem){.sample{padding:var(--s-2)}.sample .g-name{min-width:0;max-width:5.5rem;padding:var(--s-1) var(--s-2)!important;font-size:.875rem}.sample .g-seat{display:none}.sample .reading-grid thead th{padding:var(--s-1) 0;font-size:.75rem}.sample .g-num{min-width:0;padding:0 var(--s-1)!important}.sample-dot{width:22px;height:30px}.sample .night-dot{width:12px;height:12px}}.band>.hint{margin-top:var(--s-4)}