:root{color:var(--ink);background:var(--bg);--ink:#16213a;--ink-soft:#515c75;--ink-faint:#7d869c;--bg:#f4f6fb;--panel:#fff;--line:#dfe4ee;--line-strong:#c5cdde;--accent:#2f5fd0;--accent-deep:#1f47a8;--accent-soft:#e7edfc;--danger:#b3213a;--danger-soft:#fbe9ec;--ok:#1c7c4a;--ok-soft:#e3f4ea;--warn:#935d00;--warn-soft:#fdf2dd;--radius-s:.55rem;--radius-m:.85rem;--radius-l:1.15rem;--shadow-s:0 1px 2px #16213a0f, 0 2px 8px #16213a0f;--shadow-m:0 4px 10px #16213a14, 0 12px 32px #16213a1f;--tap:44px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,sans-serif}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{flex-direction:column;min-height:100dvh;margin:0;line-height:1.5;display:flex}header.site{z-index:20;background:color-mix(in srgb, var(--panel) 88%, transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:.75rem;padding:.65rem clamp(1rem,4vw,2.5rem);display:flex;position:sticky;top:0}.brand{letter-spacing:-.01em;color:var(--ink);align-items:center;gap:.55rem;font-size:1.12rem;font-weight:800;text-decoration:none;display:inline-flex}.brand .mark{background:linear-gradient(135deg, var(--accent), #6d8ef0);color:#fff;width:2.1rem;height:2.1rem;box-shadow:var(--shadow-s);border-radius:.65rem;place-items:center;font-size:1.05rem;display:grid}.head-tools{align-items:center;gap:.5rem;display:flex}footer.site{padding:1.25rem clamp(1rem, 4vw, 2.5rem) calc(1.25rem + env(safe-area-inset-bottom));color:var(--ink-faint);text-align:center;margin-top:auto;font-size:.9rem}footer.site a{color:var(--ink-soft)}main{width:100%;max-width:74rem;padding:clamp(1rem,4vw,2.5rem);padding-bottom:calc(clamp(1rem, 4vw, 2.5rem) + env(safe-area-inset-bottom));flex:1;margin:0 auto}main.narrow{max-width:34rem}h1{letter-spacing:-.02em;margin:0 0 .35em;font-size:clamp(1.45rem,3.5vw,1.9rem);font-weight:800}h2{margin:1.6rem 0 .6rem;font-size:1.15rem;font-weight:700}p{margin:.35rem 0}.meta{color:var(--ink-soft);font-size:.95rem}.muted{color:var(--ink-faint)}nav.zone{background:var(--panel);border-bottom:1px solid var(--line)}nav.zone ul{scrollbar-width:none;gap:.3rem;max-width:74rem;margin:0 auto;padding:.5rem clamp(1rem,4vw,2.5rem);list-style:none;display:flex;overflow-x:auto}nav.zone ul::-webkit-scrollbar{display:none}nav.zone a{min-height:var(--tap);white-space:nowrap;color:var(--ink-soft);border-radius:999px;align-items:center;gap:.4rem;padding:.55rem .85rem;font-size:.95rem;font-weight:600;text-decoration:none;transition:background .15s,color .15s;display:inline-flex}nav.zone a:hover{background:var(--accent-soft);color:var(--accent-deep)}nav.zone a[aria-current=page]{background:var(--accent);color:#fff}.tabbar{display:none}@media (width<=720px){nav.zone[data-zone=student]{display:none}.tabbar{z-index:30;background:color-mix(in srgb, var(--panel) 94%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-top:1px solid var(--line);padding:.3rem .25rem calc(.3rem + env(safe-area-inset-bottom));justify-content:space-around;display:flex;position:fixed;bottom:0;left:0;right:0}.tabbar a{min-height:var(--tap);color:var(--ink-faint);border-radius:var(--radius-s);flex:1;justify-items:center;gap:.1rem;padding:.4rem .2rem;font-size:.68rem;font-weight:650;text-decoration:none;display:grid}.tabbar a .icon{font-size:1.35rem;line-height:1}.tabbar a[aria-current=page]{color:var(--accent-deep);background:var(--accent-soft)}body:has(.tabbar) main{padding-bottom:calc(5.2rem + env(safe-area-inset-bottom))}body:has(.tabbar) .offline-banner{bottom:calc(4.8rem + env(safe-area-inset-bottom))}}button,select,input,a{font:inherit}:focus-visible{outline-offset:2px;border-radius:.3rem;outline:3px solid #1a4fd8}.skip{position:absolute;left:-9999px}.skip:focus{z-index:50;background:var(--panel);color:var(--ink);border-radius:var(--radius-s);box-shadow:var(--shadow-m);padding:.75rem 1rem;text-decoration:none;top:1rem;left:1rem}.actions{flex-wrap:wrap;align-items:center;gap:.65rem;display:flex}.button,button{min-height:var(--tap);border-radius:var(--radius-m);background:var(--accent);color:#fff;cursor:pointer;box-shadow:var(--shadow-s);border:1px solid #0000;justify-content:center;align-items:center;gap:.45rem;padding:.7rem 1.15rem;font-size:.98rem;font-weight:700;text-decoration:none;transition:background .15s,transform 50ms,box-shadow .15s;display:inline-flex}.button:hover,button:hover{background:var(--accent-deep)}.button:active,button:active{transform:translateY(1px)}.button.secondary,button.secondary{background:var(--panel);border-color:var(--line-strong);color:var(--ink);box-shadow:none}.button.secondary:hover,button.secondary:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-deep)}.button.danger,button.danger{background:var(--danger)}.button.danger:hover,button.danger:hover{background:#8f1a2f}.button.ghost,button.ghost{color:var(--accent-deep);box-shadow:none;background:0 0;border-color:#0000}a.button:hover{color:#fff}a.button.secondary:hover{color:var(--accent-deep)}.button.big{border-radius:var(--radius-l);padding:.95rem 1.5rem;font-size:1.05rem}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-l);box-shadow:var(--shadow-s);padding:1.25rem}.card+.card{margin-top:1rem}.grid-cards{grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:1rem;display:grid}.tile{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-l);color:var(--ink);box-shadow:var(--shadow-s);gap:.45rem;padding:1.35rem 1.15rem;text-decoration:none;transition:border-color .15s,transform .1s,box-shadow .15s;display:grid}.tile:hover{border-color:var(--accent);box-shadow:var(--shadow-m);transform:translateY(-2px)}.tile .icon{border-radius:var(--radius-m);background:var(--accent-soft);place-items:center;width:2.7rem;height:2.7rem;font-size:1.35rem;display:grid}.tile strong{font-size:1.05rem}.tile span.desc{color:var(--ink-soft);font-size:.92rem}.hero{background:radial-gradient(1200px 400px at 85% -10%, #dce7ff 0%, transparent 60%), var(--panel);border:1px solid var(--line);border-radius:var(--radius-l);box-shadow:var(--shadow-s);gap:1.1rem;padding:clamp(1.5rem,5vw,3rem);display:grid}.hero h1{max-width:30ch;margin:0}.hero p.lead{color:var(--ink-soft);max-width:52ch;font-size:1.05rem}.feature-list{grid-template-columns:repeat(auto-fill,minmax(13.5rem,1fr));gap:.85rem;margin:0;padding:0;list-style:none;display:grid}.feature-list li{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-m);color:var(--ink-soft);grid-template-columns:auto 1fr;align-items:start;gap:.6rem;padding:.85rem;font-size:.93rem;display:grid}.feature-list .icon{font-size:1.2rem}.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-m);gap:.2rem;padding:1.05rem 1.15rem;display:grid}.stat .value{letter-spacing:-.02em;font-size:1.7rem;font-weight:800}.stat .label{color:var(--ink-soft);font-size:.88rem}.badge{background:var(--accent-soft);color:var(--accent-deep);white-space:nowrap;border-radius:999px;align-items:center;gap:.3rem;padding:.18rem .6rem;font-size:.8rem;font-weight:700;display:inline-flex}.badge.ok{background:var(--ok-soft);color:var(--ok)}.badge.warn{background:var(--warn-soft);color:var(--warn)}.badge.danger{background:var(--danger-soft);color:var(--danger)}.badge.neutral{color:var(--ink-soft);background:#edf0f6}form.stack{gap:1rem;display:grid}.form-grid{grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));align-items:end;gap:1rem;margin-bottom:1.5rem;display:grid}.form-grid label,.create-form label,.filters label{color:var(--ink-soft);gap:.3rem;font-size:.92rem;font-weight:650;display:grid}input,select{min-height:var(--tap);border:1px solid var(--line-strong);border-radius:var(--radius-s);background:var(--panel);color:var(--ink);padding:.55rem .75rem}input::placeholder{color:var(--ink-faint)}.filters{grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:.75rem;margin-bottom:1rem;display:grid}.create-form input,td input,td select{min-height:var(--tap);padding:.5rem}.status{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-m);align-items:center;gap:.75rem;padding:1rem;display:flex}.status.error{border-left:6px solid var(--danger);background:var(--danger-soft)}.feedback,#status,#scan-status,#chat-status,#inbox-status,#history-status,#sheets-state,#sheets-feedback,#manual-feedback,#student-feedback{min-height:1.4em;color:var(--ink-soft);font-size:.95rem}.offline-banner{z-index:40;background:var(--ink);color:#fff;box-shadow:var(--shadow-m);border-radius:999px;padding:.7rem 1.1rem;font-weight:600;position:fixed;bottom:1rem;left:50%;transform:translate(-50%)}.pwa-notice{right:1rem;bottom:calc(1rem + env(safe-area-inset-bottom));z-index:35;border:1px solid var(--line);border-radius:var(--radius-l);background:var(--panel);width:min(25rem,100% - 2rem);box-shadow:var(--shadow-m);padding:1rem;position:fixed}.pwa-notice p{color:var(--ink-soft);margin:.5rem 0 1rem}.table-wrap{border:1px solid var(--line);border-radius:var(--radius-m);background:var(--panel);box-shadow:var(--shadow-s);overflow:auto}table{border-collapse:collapse;background:var(--panel);width:100%;font-size:.95rem}thead th{color:var(--ink-soft);text-transform:uppercase;letter-spacing:.04em;background:#f0f3fa;font-size:.8rem;position:sticky;top:0}th,td{border-bottom:1px solid var(--line);text-align:left;vertical-align:middle;padding:.7rem .85rem}tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:#f7f9fe}td.actions{flex-wrap:wrap;gap:.4rem;display:flex}td.actions .button,td.actions button{min-height:36px;padding:.4rem .7rem;font-size:.85rem}dialog{border-radius:var(--radius-l);background:var(--panel);border:0;max-width:min(96vw,44rem);padding:0}dialog::backdrop{background:#091021c7}.qr-dialog{color:#fff;background:#0d1526;border-radius:0;width:100vw;max-width:none;height:100dvh;max-height:none;margin:0}.qr-screen{text-align:center;padding:1.5rem 1rem calc(1.5rem + env(safe-area-inset-bottom));place-items:center;gap:1.1rem;min-height:100dvh;display:grid}.qr-screen .qr-title{margin:0;font-size:1.25rem}.qr-screen .qr-frame{border-radius:var(--radius-l);background:#fff;padding:.9rem;box-shadow:0 0 60px #608cff59}.qr-screen canvas{width:min(78vw,380px);height:auto;image-rendering:pixelated;display:block}.qr-screen .timer{font-variant-numeric:tabular-nums;letter-spacing:.02em;font-size:clamp(2rem,9vw,3.2rem);font-weight:800}.qr-screen .hint{color:#b9c4dd;font-size:.95rem}#scan video{aspect-ratio:3/4;object-fit:cover;border-radius:var(--radius-l);border:1px solid var(--line);background:#0d1526;width:100%;max-height:62vh}.scan-status-card{border-radius:var(--radius-m);background:var(--panel);border:1px solid var(--line);gap:.5rem;margin-top:1rem;padding:1.1rem;display:grid}.scan-status-card.ok{background:var(--ok-soft);border-color:color-mix(in srgb, var(--ok) 35%, white)}.scan-status-card.danger{background:var(--danger-soft);border-color:color-mix(in srgb, var(--danger) 30%, white)}#window-timer{font-variant-numeric:tabular-nums;color:var(--ink-soft);min-height:1.4em}#chat-messages,#dialog-messages{gap:.55rem;margin:0 0 1rem;padding:0;list-style:none;display:grid;overflow-y:auto}#chat-messages{max-height:58vh}#dialog-messages{max-height:46vh}#chat-messages li,#dialog-messages li{border-radius:var(--radius-m);background:var(--panel);border:1px solid var(--line);max-width:min(78%,30rem);box-shadow:var(--shadow-s);word-break:break-word;gap:.15rem;padding:.6rem .85rem;display:grid}#chat-messages li time,#dialog-messages li time{color:var(--ink-faint);font-size:.72rem}#chat-messages li[data-author=other],#dialog-messages li[data-author=other]{justify-self:start}#chat-messages li[data-author=me],#dialog-messages li[data-author=me]{background:var(--accent-soft);border-color:color-mix(in srgb, var(--accent) 25%, white);justify-self:end}#chat-messages li strong:first-child,#dialog-messages li strong:first-child{clip:rect(0, 0, 0, 0);width:1px;height:1px;position:absolute;overflow:hidden}#chat-form,#dialog-form{align-items:stretch;gap:.5rem;display:flex}#chat-form input,#dialog-form input{flex:1}#chat-form button,#dialog-form button{min-width:3.2rem}.inbox-grid{grid-template-columns:minmax(15rem,22rem) 1fr;align-items:start;gap:1.25rem;display:grid}#conversation-list{gap:.45rem;margin:0;padding:0;list-style:none;display:grid}#conversation-list button{text-align:left;background:var(--panel);border:1px solid var(--line);width:100%;color:var(--ink);box-shadow:none;justify-content:space-between;font-weight:600}#conversation-list button:hover{border-color:var(--accent);color:var(--accent-deep);background:var(--accent-soft)}#dialog-pane{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-l);box-shadow:var(--shadow-s);padding:1.1rem}#dialog-pane[hidden]{display:none}#dialog-name{justify-content:space-between;align-items:center;gap:.75rem;margin:0 0 .9rem;display:flex}@media (width<=720px){.inbox-grid{grid-template-columns:1fr}}.auth-card{gap:1.1rem;max-width:24rem;margin:0 auto;padding:1.75rem 1.5rem;display:grid}.auth-card form{gap:.9rem;display:grid}.auth-card label{color:var(--ink-soft);gap:.3rem;font-size:.92rem;font-weight:650;display:grid}.auth-card .alt-action{color:var(--ink-soft);text-align:center;font-size:.9rem}.auth-card .alt-action a{color:var(--accent-deep);font-weight:650}[hidden]{display:none!important}.visually-hidden{clip:rect(0, 0, 0, 0);width:1px;height:1px;position:absolute;overflow:hidden}.section-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:1rem;display:flex}.page-title-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;display:flex}.sessions-list{gap:.5rem;margin:.5rem 0 1.25rem;padding:0;list-style:none;display:grid}.sessions-list li{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius-m);color:var(--ink-soft);justify-content:space-between;gap:.5rem;padding:.7rem .9rem;font-size:.93rem;display:flex}@media (width<=600px){header.site{padding:.6rem 1rem}main{padding:1rem}.form-grid{grid-template-columns:1fr}}
