:root{--bg:#fffaf7;--surface:#fff;--ink:#2b2230;--accent:#b8304b;--on-accent:#fff;--muted:#5f5364;--border:#d9ccd3;color:var(--ink);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}@media (prefers-color-scheme:dark){:root{--bg:#16111a;--surface:#231b29;--ink:#f6eef4;--accent:#d64560;--on-accent:#fff;--muted:#c3b6c8;--border:#4a3d52}}html{font-size:clamp(16px,.5vw + 9.6px,32px)}*{box-sizing:border-box}body{background:var(--bg);min-height:100vh;margin:0}h1{color:var(--accent);margin:0 0 .5rem;font-size:clamp(2rem,4vw,3.25rem)}.sub{color:var(--muted);margin:0 0 1.5rem;font-size:1.25rem}button{font:inherit;border:2px solid var(--accent);background:var(--accent);min-width:4rem;min-height:4rem;color:var(--on-accent);cursor:pointer;touch-action:manipulation;border-radius:.5rem;padding:0 1.5rem;font-size:1.25rem}button.secondary{color:var(--accent);background:0 0}button:disabled{opacity:.5;cursor:default}button:focus-visible,input:focus-visible{outline:4px solid var(--ink);outline-offset:2px}button.link{color:var(--accent);background:0 0;border:none;text-decoration:underline}.text-input{font:inherit;border:2px solid var(--border);background:var(--surface);min-height:4rem;color:var(--ink);border-radius:.5rem;width:12rem;margin:0 1rem 1rem 0;padding:0 1rem;font-size:1.5rem}.app{flex-direction:column;height:100dvh;display:flex}.topbar{background:var(--surface);border-bottom:2px solid var(--border);justify-content:space-between;align-items:center;gap:1rem;padding:.5rem 1rem;display:flex}.tabs{gap:.5rem;display:flex}.tab{color:var(--ink);background:0 0;border-color:#0000;align-items:center;gap:.5rem;font-weight:600;display:inline-flex}.tab.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.lock-icon{width:1.2rem;height:1.2rem}.topbar-right{align-items:center;gap:1.25rem;display:flex}.sync-status{color:var(--muted);font-size:1rem}.clock{font-variant-numeric:tabular-nums;font-size:2rem;font-weight:700}.content{flex:1;overflow:auto}.page{max-width:60rem;margin:0 auto;padding:2rem 1rem}.page.wide{max-width:none}.date{margin:0 0 1.5rem;font-size:1.75rem}.gate{text-align:center;max-width:30rem;margin:0 auto;padding:2rem 1rem}.keypad-wrap{margin:1.5rem 0}.dots{letter-spacing:.5rem;background:var(--surface);border:2px solid var(--border);border-radius:.5rem;min-height:4rem;margin-bottom:1rem;font-size:2.25rem;line-height:4rem;overflow:hidden}.keypad{grid-template-columns:repeat(3,1fr);gap:.75rem;display:grid}.keypad button{min-height:5rem;padding:0;font-size:2rem;font-weight:700}.keypad button.go{font-size:1.25rem}.gate-msg{min-height:3rem;margin-bottom:.5rem;font-size:1.25rem}.gate>button:not(.link){margin:1rem auto;display:block}.teacher{min-height:100%;display:flex}.side{border-right:2px solid var(--border);background:var(--surface);flex-direction:column;flex:none;gap:.5rem;width:15rem;padding:1rem;display:flex}.side-item{color:var(--ink);text-align:left;background:0 0;border-color:#0000}.side-item.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}.side-item.lock-now{border-color:var(--accent);color:var(--accent);margin-top:auto}.teacher-body{flex:1;min-width:0}.photo-grid{grid-template-columns:repeat(auto-fill,minmax(max(120px,9rem),1fr));gap:1rem;margin:0;padding:0;list-style:none;display:grid}.photo-tile{background:var(--surface);width:100%;min-height:0;color:var(--ink);border:3px solid var(--border);border-radius:.75rem;flex-direction:column;align-items:center;gap:.5rem;padding:.5rem;display:flex}.photo-tile.selected{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent)}.photo-tile-img,.photo-tile-circle{aspect-ratio:1;object-fit:cover;border-radius:.5rem;width:100%}.photo-tile-circle{color:#fff;border-radius:50%;justify-content:center;align-items:center;font-size:3rem;font-weight:700;display:flex}.photo-tile-name{text-align:center;overflow-wrap:anywhere;font-size:1.75rem;font-weight:700}.a4{border-top:2px solid var(--border);margin-top:40px;padding-top:24px}.a4 h2{margin:0 0 8px}.a4 button{border:2px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer;border-radius:8px;min-height:4rem;margin:0 12px 12px 0;padding:12px 24px;font-size:1.25rem}.a4 button.secondary{color:var(--accent);background:0 0}.a4 button:disabled{opacity:.5;cursor:default}.a4-result{color:#fff;border-radius:8px;margin:12px 0;padding:16px;font-size:clamp(1.4rem,4vw,2.2rem);font-weight:700}.a4-pass{background:#1b7f3b}.a4-fail{background:#b3261e}.a4-empty{background:#6b6b6b}.a4-error{color:#b3261e;border:2px solid #b3261e;border-radius:8px;margin:12px 0;padding:12px;font-size:1.15rem}.a4-facts{padding-left:20px;font-size:1.15rem;line-height:1.7}.a4-ua{color:var(--muted);word-break:break-word;font-size:.8rem}.a4-grid{grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:6px;margin-top:16px;display:grid}.a4-grid img{aspect-ratio:1;object-fit:cover;border-radius:4px;width:100%}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.hint{color:var(--muted);margin:0 0 1rem;font-size:1.1rem}.notice{border:2px solid var(--border);border-left:.5rem solid var(--accent);background:var(--surface);border-radius:.5rem;margin:0 0 1rem;padding:.75rem 1rem;font-size:1.25rem}.notice.error{border-color:var(--accent)}.card{background:var(--surface);border:2px solid var(--border);border-radius:.75rem;flex-direction:column;align-items:flex-start;gap:.75rem;margin-bottom:1.5rem;padding:1rem;display:flex}.card .hint{margin:0}.field-label{margin:0;font-size:1.25rem;font-weight:700}.names-box{font:inherit;border:2px solid var(--border);background:var(--bg);width:100%;min-height:10rem;color:var(--ink);resize:vertical;border-radius:.5rem;padding:.75rem 1rem;font-size:1.5rem}.names-box:focus-visible{outline:4px solid var(--ink);outline-offset:2px}.roster-list{flex-direction:column;gap:.75rem;margin:0 0 1.5rem;padding:0;list-style:none;display:flex}.roster-row{background:var(--surface);border:2px solid var(--border);border-radius:.75rem;align-items:flex-start;gap:1rem;padding:.75rem;display:flex}.roster-thumb{object-fit:cover;border-radius:.5rem;flex:none;width:5rem;height:5rem}.roster-initials{background:var(--muted);color:var(--bg);border-radius:50%;justify-content:center;align-items:center;font-size:1.75rem;font-weight:700;display:flex}.roster-main{flex-direction:column;flex:1;gap:.5rem;min-width:0;display:flex}.roster-name{overflow-wrap:anywhere;font-size:1.75rem;font-weight:700}.roster-buttons,.confirm,.rename-form{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.rename-input{flex:14rem;width:auto;margin:0}.confirm{font-size:1.25rem}.archived summary{cursor:pointer;align-items:center;min-height:4rem;font-size:1.25rem;font-weight:700;display:flex}.archived .roster-thumb{opacity:.6}.bulk-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.bulk-actions{flex-wrap:wrap;gap:.5rem;display:flex}.bulk-cols{grid-template-columns:minmax(0,3fr) minmax(16rem,2fr);align-items:start;gap:1.5rem;display:grid}.pick-grid{grid-template-columns:repeat(auto-fill,minmax(12rem,1fr));gap:1rem;margin:0;padding:0;list-style:none;display:grid}.pick-card{background:var(--surface);border:3px solid var(--border);border-radius:.75rem;flex-direction:column;gap:.5rem;padding:.5rem;display:flex}.pick-card.selected{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent)}.pick-select{min-height:8rem;color:var(--ink);background:0 0;border-color:#0000;flex-direction:column;gap:.5rem;padding:0;display:flex}.pick-img{aspect-ratio:1;object-fit:contain;background:var(--bg);border-radius:.5rem;width:100%}.pick-wait,.pick-error{aspect-ratio:1;text-align:center;color:var(--muted);justify-content:center;align-items:center;padding:.5rem;font-size:1rem;display:flex}.pick-error{color:var(--ink);overflow-y:auto}.pick-name{color:var(--muted);overflow-wrap:anywhere;font-size:.9rem}.student-pick{max-height:100dvh;padding:.5rem;position:sticky;top:0;overflow-y:auto}.student-pick h2,.student-pick h3{margin:.5rem 0}.student-list{flex-direction:column;gap:.5rem;margin:0 0 1rem;padding:0;list-style:none;display:flex}.student-list button{text-align:left;width:100%}.replace-tag{opacity:.8;font-size:1rem}.modal-backdrop{z-index:10;background:#000000b3;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal{background:var(--bg);max-width:100%;max-height:100%;color:var(--ink);border:2px solid var(--border);border-radius:1rem;flex-direction:column;align-items:center;gap:.75rem;padding:1rem 1.5rem;display:flex;overflow-y:auto}.modal h2{text-align:center;margin:0}.crop-frame{aspect-ratio:1;border:4px solid var(--accent);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;background:#000;border-radius:.5rem;width:min(32rem,90vw,52vh);overflow:hidden}.crop-frame canvas{width:100%;height:100%;display:block}.zoom-row{align-items:center;gap:1rem;width:min(32rem,90vw);font-size:1.25rem;font-weight:700;display:flex}.zoom-row input[type=range]{height:4rem;accent-color:var(--accent);cursor:pointer;flex:1}.zoom-row input[type=range]::-webkit-slider-thumb{width:2.5rem;height:2.5rem}.modal-actions{gap:1rem;display:flex}@media (width<=900px){.bulk-cols{grid-template-columns:1fr}.student-pick{max-height:none;position:static}}.a4.backup-first{border-top:0;margin-top:16px;padding-top:0}.backup-note{border:2px solid var(--border);background:var(--surface);color:var(--ink);border-radius:8px;margin:12px 0;padding:12px 16px;font-size:1.15rem;line-height:1.5}.backup-note p{margin:0 0 8px}.page.today{max-width:90rem}.no-school{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;font-size:1.75rem;display:flex}.blocks{flex-direction:column;gap:1rem;margin:0;padding:0;list-style:none;display:flex}.block{background:var(--surface);border:2px solid var(--border);border-left:.75rem solid var(--block-color);border-radius:.75rem;padding:1rem 1.25rem 1.25rem;scroll-margin:1rem}.block-head{flex-wrap:wrap;align-items:center;gap:.5rem 1.25rem;display:flex}.block-time{background:var(--block-color);color:#fff;font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:.5rem;padding:.25rem .75rem;font-size:1.5rem;font-weight:700;display:inline-block}.block-title{overflow-wrap:anywhere;flex:12rem;margin:0;font-size:clamp(1.75rem,2.4vw,2.5rem)}.badge{border:3px solid var(--accent);border-radius:999px;padding:.25rem 1rem;font-size:1.5rem;font-weight:800}.badge-now{background:var(--accent);color:var(--on-accent)}.badge-next{color:var(--accent);background:0 0}.block-now{border-color:var(--accent);border-left-color:var(--block-color);box-shadow:0 0 0 4px var(--accent)}.block-past{opacity:.6}.block-past:hover,.block-past:focus-within{opacity:1}.block-links{grid-template-columns:repeat(auto-fill,minmax(16rem,1fr));gap:.75rem;margin:1rem 0 0;padding:0;list-style:none;display:grid}.link-btn{border:2px solid var(--accent);min-height:4rem;color:var(--accent);overflow-wrap:anywhere;background:0 0;border-radius:.5rem;align-items:center;gap:.75rem;padding:.5rem 1.25rem;font-size:1.5rem;font-weight:700;text-decoration:none;display:flex}.link-btn:hover{background:var(--accent);color:var(--on-accent)}.link-btn:focus-visible{outline:4px solid var(--ink);outline-offset:2px}.link-icon{flex:none;width:2rem;height:2rem}.day-tabs{flex-wrap:wrap;margin-bottom:1rem}.day-title{margin:0 0 .75rem}.editor-blocks,.editor-links{flex-direction:column;gap:.75rem;margin:0 0 1rem;padding:0;list-style:none;display:flex}.editor-block{background:var(--surface);border:2px solid var(--border);border-left:.75rem solid var(--block-color);border-radius:.75rem;flex-direction:column;gap:.75rem;padding:.75rem 1rem;display:flex}.editor-block-head{flex-wrap:wrap;align-items:center;gap:.5rem 1rem;display:flex}.editor-block-title{overflow-wrap:anywhere;font-size:1.75rem}.editor-link{border-top:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:.5rem 1rem;padding:.5rem 0;font-size:1.25rem;display:flex}.editor-link-text{flex-direction:column;flex:14rem;min-width:0;display:flex}.editor-link-url{color:var(--muted);overflow-wrap:anywhere;font-size:1rem}.warn{border:2px solid var(--accent);background:var(--bg);border-radius:.5rem;padding:.5rem .75rem;font-size:1.15rem}.form-card{align-items:stretch;width:100%}.form-card h3{margin:0}.wide-input{width:100%;margin:0}.time-row{flex-wrap:wrap;gap:1.5rem;display:flex}.time-row .text-input{width:14rem;margin:.25rem 0 0;display:block}.swatches,.kinds{border:0;flex-wrap:wrap;align-items:center;gap:.75rem;margin:0;padding:0;display:flex}.swatches legend,.kinds legend{width:100%;margin-bottom:.5rem;padding:0}.kinds .hint{width:100%;margin:0}.swatch{border:3px solid var(--border);border-radius:50%;justify-content:center;align-items:center;width:4rem;padding:0;display:flex}.swatch.picked{border-color:var(--ink);box-shadow:0 0 0 3px var(--surface), 0 0 0 6px var(--ink)}.check-row{cursor:pointer;align-items:center;gap:1rem;min-height:4rem;font-size:1.5rem;display:flex}.check-row input{width:2.5rem;height:2.5rem;accent-color:var(--accent);flex:none}.hint-inline{color:var(--muted);font-size:1.1rem}.editor-actions{margin-top:1rem}
