@import "https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Newsreader:opsz,wght@6..72,600&display=swap";:root{color:#173c33;font-synthesis:none;--green:#1e5a4b;--paper:#fffdf7;--line:#d8d2c4;background:#f3efe5;font-family:DM Sans,sans-serif}*{box-sizing:border-box}body{background:radial-gradient(circle at 85% 0,#e1eadb,#0000 34rem),#f3efe5;min-width:320px;min-height:100vh;margin:0}button,input,select,textarea{font:inherit;color:inherit}button,select,input{min-height:44px}button{cursor:pointer}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline-offset:3px;outline:3px solid #3979a4}h1,h2,p{margin-top:0}h1,h2{font-family:Newsreader,serif}h1{margin-bottom:.35rem;font-size:clamp(2.4rem,6vw,4.5rem);line-height:1}h2{margin-bottom:.2rem}.loading{place-items:center;min-height:100vh;font-weight:700;display:grid}.topbar{border-bottom:1px solid var(--line);z-index:10;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fffdf8e8;align-items:center;gap:2rem;min-height:72px;padding:.75rem max(1rem,50vw - 640px);display:flex;position:sticky;top:0}.brand{color:inherit;align-items:center;gap:.65rem;text-decoration:none;display:flex}.brand>span{color:#fff;background:var(--green);border-radius:13px 4px;place-items:center;width:42px;height:42px;font:600 1.4rem Newsreader;display:grid;box-shadow:inset -5px -5px #103e34}.class-picker{text-transform:uppercase;letter-spacing:.08em;align-items:center;gap:.55rem;margin-left:auto;font-size:.75rem;font-weight:700;display:flex}.class-picker select{border:1px solid var(--line);text-transform:none;letter-spacing:0;background:#fff;border-radius:10px;min-width:180px;padding:0 .75rem}nav{gap:.25rem;margin-left:auto;display:flex}nav a{min-height:44px;color:inherit;border-bottom:3px solid #0000;place-items:center;padding:0 1rem;font-weight:700;text-decoration:none;display:grid}nav a.active{color:var(--green);border-color:var(--green)}nav button{background:0 0;border:0;border-bottom:3px solid #0000;padding:0 1rem;font-weight:700}nav button.active{color:var(--green);border-color:var(--green)}.page{width:min(1280px,100%);margin:auto;padding:2rem 1.25rem 5rem}.hero{justify-content:space-between;align-items:end;gap:2rem;margin-bottom:1.5rem;display:flex}.hero p{color:#5d716a;margin-bottom:0;font-size:1.05rem}.eyebrow{letter-spacing:.14em;font-weight:700;margin:0 0 .4rem!important;font-size:.72rem!important}.primary,.secondary{border-radius:11px;padding:.7rem 1rem;font-weight:700}.primary{border:1px solid var(--green);color:#fff;background:var(--green)}.secondary{border:1px solid var(--line);background:var(--paper)}button:disabled{cursor:not-allowed;opacity:.45}.summary{grid-template-columns:repeat(3,1fr);gap:.75rem;margin-bottom:1rem;display:grid}.summary div{border:1px solid var(--line);background:#fffdf7c9;border-radius:14px;padding:1rem 1.2rem}.summary strong,.summary span{display:block}.summary strong{font:600 2rem Newsreader}.summary small{color:#71827c;font-size:1rem}.summary span{color:#60746d;text-transform:uppercase;letter-spacing:.07em;font-size:.8rem;font-weight:700}.student-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.8rem;display:grid}.student-card{border:1px solid var(--line);background:var(--paper);border-radius:17px;overflow:hidden;box-shadow:0 8px 25px #24443b0a}.student-heading{align-items:center;gap:.75rem;padding:1rem;display:flex}.student-heading h2{margin:0;font-size:1.35rem}.student-heading div>span{color:#657770;font-size:.82rem}.avatar{width:46px;height:46px;color:var(--green);background:#e0ecdf;border-radius:50%;flex:none;place-items:center;font-weight:800;display:grid}.avatar.small{width:34px;height:34px}.tap-actions{grid-template-columns:2fr 1fr;min-height:82px;display:grid}.tap-actions button{border:0;font-weight:700}.tap-actions strong{font-size:1.35rem;display:block}.positive{color:#fff;background:#277458}.positive:hover{background:#1f6149}.redirect{color:#5c4210;background:#f2ca7b}.attendance{border:0;border-top:1px solid var(--line);color:#536b63;background:0 0;width:100%;font-size:.78rem;font-weight:700}.student-card.absent{opacity:.62;filter:grayscale(.65)}.empty{text-align:center;border:1px dashed #aeb7ad;border-radius:18px;padding:4rem 1rem}.empty>span{font-size:2rem}.empty p{color:#657770}.setup-grid{grid-template-columns:minmax(0,1.7fr) minmax(260px,1fr);align-items:start;gap:1rem;display:grid}.setup-grid .wide{grid-column:1/-1}.panel{border:1px solid var(--line);background:var(--paper);border-radius:17px;padding:1.25rem}.panel label,.panel label small{display:block}.panel label{margin:1rem 0;font-weight:700}.panel label small{color:#657770;margin:.2rem 0 .5rem;font-weight:400}textarea,input{background:#fff;border:1px solid #bbb5a8;border-radius:10px;width:100%;margin-top:.45rem;padding:.75rem}textarea{resize:vertical}.roster-list{border-top:1px solid var(--line);margin:1.5rem 0 0;padding:0;list-style:none}.roster-list li{border-bottom:1px solid var(--line);align-items:center;gap:.7rem;min-height:58px;display:flex}.roster-list li strong{margin-right:auto}.roster-list li button{color:#8a4038;background:0 0;border:0;font-weight:700}.toast{color:#fff;background:#173c33;border-radius:12px;align-items:center;gap:.8rem;max-width:calc(100vw - 2rem);padding:.75rem 1rem;display:flex;position:fixed;bottom:1rem;right:1rem;box-shadow:0 8px 28px #0003}.toast button{color:#fff;background:0 0;border:0;min-height:30px;font-size:1.3rem}@media (width<=720px){.topbar{flex-wrap:wrap;gap:.6rem 1rem}.class-picker{order:3;width:100%}.class-picker select{flex:1}nav{margin-left:auto}.page{padding-top:1.25rem}.hero{align-items:start}.summary{gap:.4rem}.summary div{padding:.7rem}.summary strong{font-size:1.55rem}.setup-grid{grid-template-columns:1fr}}.signin{width:min(430px,100%);padding-top:12vh}.signin .panel{padding:2rem}.signin h1{font-size:2.2rem}.signin p{color:#657770}.linkish{color:var(--green);background:0 0;border:0;font-weight:700;text-decoration:underline}.error{color:#8a4038;font-weight:600}form .primary{width:100%}.hint{color:#657770;font-size:.92rem}.row{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.filepick{font-size:.9rem;font-weight:700}.filepick input{background:0 0;border:0;margin-top:.3rem;padding:0}.roster-list li input{background:0 0;border-color:#0000;flex:1;min-width:0;margin:0}.roster-list li input:hover,.roster-list li input:focus{background:#fff;border-color:#bbb5a8}.roster-list li.clash{background:#fdf3ee}.flag{color:#8a4038;font-size:.78rem;font-weight:700}.behavior-list{margin:1rem 0 0;padding:0;list-style:none}.behavior-list li{border-bottom:1px solid var(--line);align-items:center;gap:.5rem;min-height:56px;display:flex}.behavior-list li>input[type=text],.behavior-list li>input:not([type]){background:0 0;border-color:#0000;flex:1;min-width:6rem;margin:0}.behavior-list li>input:hover,.behavior-list li>input:focus{background:#fff;border-color:#bbb5a8}.behavior-list input[type=color]{border-radius:9px;width:38px;min-width:38px;height:38px;margin:0;padding:2px}.behavior-list .mode{margin:0}.behavior-list select{border:1px solid var(--line);background:#fff;border-radius:9px;max-width:12rem;padding:0 .5rem}.behavior-list button{color:#8a4038;background:0 0;border:0;font-weight:700}.nudge{color:#536b63;min-width:34px}.check{align-items:center;gap:.6rem;display:flex;margin:0!important;font-weight:600!important}.check input{width:auto;min-height:22px;margin:0}.swatch{border-radius:5px;width:18px;height:18px}.chart-page{width:min(1600px,100%)}.chart-bar{flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:1rem;display:flex}.modes{border:1px solid var(--line);background:var(--paper);border-radius:12px;gap:.25rem;padding:.25rem;display:flex}.modes button{background:0 0;border:0;border-radius:9px;padding:0 1rem;font-weight:700}.modes button.active{color:#fff;background:var(--green)}.canvas{border:1px solid var(--line);background:var(--paper);border-radius:18px;position:relative;overflow:auto}.canvas.snapping{background-image:radial-gradient(#d8d2c4 1px,#0000 1px);background-size:20px 20px}.seat{border:1px solid var(--line);color:#173c33;text-align:center;touch-action:none;background:#eef2ea;border-radius:14px;place-items:center;padding:.25rem;font-size:.95rem;font-weight:700;line-height:1.15;display:grid;position:absolute;box-shadow:0 2px 6px #24443b12}.seat.empty{background:#f6f4ee;border-style:dashed}.seat.faded{opacity:.55}.seat.dragging{z-index:3;box-shadow:0 10px 24px #24443b30}.seat.selected{border-color:var(--green);outline:3px solid #1e5a4b55}.seating{gap:1rem;display:grid}.seating-room{min-width:0;overflow:auto}.unseated{background:#fffdf7a0;border:1px dashed #aeb7ad;border-radius:16px;padding:1rem 1.25rem}.unseated h2{font-size:1.1rem}.unseated ul{flex-wrap:wrap;gap:.5rem;margin:.75rem 0 0;padding:0;list-style:none;display:flex}.chip{border:1px solid var(--line);background:var(--paper);touch-action:none;border-radius:999px;padding:.5rem .9rem;font-weight:700}.carry{z-index:20;color:#fff;background:var(--green);pointer-events:none;border-radius:999px;padding:.5rem .9rem;font-weight:700;position:fixed;transform:translate(-50%,-50%);box-shadow:0 8px 20px #24443b40}a.primary{text-decoration:none;display:inline-block}.chart-bar .class-picker{margin-left:0}.session-bar{border:1px solid var(--line);background:var(--paper);border-radius:999px;align-items:center;gap:.75rem;padding:.5rem .9rem;display:flex}.session-bar .dot{background:#c0392b;border-radius:50%;width:10px;height:10px;animation:2s ease-in-out infinite pulse}.session-bar .clock{font-variant-numeric:tabular-nums;color:#5d716a;font-weight:700}.session-bar.compact{color:#f3efe5;background:0 0;border-color:#0000}.session-bar.compact .clock{color:#cfd8d3}@keyframes pulse{50%{opacity:.35}}.bar-end{align-items:center;gap:.75rem;margin-left:auto;display:flex}.scrim{z-index:30;background:#173c3366;position:fixed;inset:0}.popup{z-index:31;background:var(--paper);border-radius:22px;width:min(720px,100vw - 2rem);padding:1.25rem;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 24px 60px #0b241d55}.popup header{justify-content:space-between;align-items:start;gap:1rem;margin-bottom:1rem;display:flex}.popup h2{margin:0;font-size:2rem}.popup .close{border:1px solid var(--line);background:0 0;border-radius:12px;min-width:46px;min-height:46px;font-size:1.5rem;line-height:1}.tap-grid{gap:.6rem;display:grid}.tap-button{border:2px solid var(--tap-color);background:color-mix(in srgb, var(--tap-color) 12%, white);color:#173c33;border-radius:16px;align-content:center;gap:.2rem;min-height:118px;padding:.75rem;display:grid}.tap-button strong{font:600 2rem Newsreader,serif}.tap-button span{font-weight:700}.tap-button.on{color:#fff;background:var(--tap-color)}.tap-button:disabled{opacity:.3}.tracking{gap:1rem;display:grid}.popup.narrow{width:min(460px,100vw - 2rem)}.toast button{font-weight:700;text-decoration:underline}.check.away{text-transform:uppercase;letter-spacing:.05em;color:#657770;font-size:.78rem!important}.tracking-bar{align-items:center;gap:.75rem;display:flex}.highlight{margin-left:0}.seat.strong,.chip.strong{color:#fffdf7;border-color:#0000}.tracking.teaching{z-index:25;background:#12312a;grid-template-rows:auto 1fr auto;gap:.5rem;padding:.5rem;display:grid;position:fixed;inset:0}.tracking.teaching .tracking-bar{justify-content:space-between}.tracking.teaching .canvas{background:#17392f;border-color:#2c5348;max-height:100%}.tracking.teaching .canvas.snapping{background-image:none}.tracking.teaching .seat{color:#eef4f0;background:#1d453a;border-color:#2f5b4e}.tracking.teaching .seat.empty{background:#163a30}.tracking.teaching .unseated{background:#17392f;border-color:#2f5b4e}.tracking.teaching .unseated h2{color:#eef4f0}.tracking.teaching .highlight{color:#cfd8d3}.tracking.teaching .hint{color:#a8bbb3}.leave{color:#eef4f0;background:0 0;border:1px solid #2f5b4e;border-radius:12px;min-width:46px;min-height:46px;font-size:1.4rem;line-height:1}.toast{z-index:40}.outbox{color:#5c4210;background:#f2ca7b;border-radius:999px;padding:.25rem .6rem;font-size:.74rem;font-weight:700}.filters{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.25rem;margin-bottom:1rem;display:grid}.filter h2{text-transform:uppercase;letter-spacing:.08em;color:#60746d;margin-bottom:.6rem;font-family:DM Sans,sans-serif;font-size:.78rem;font-weight:700}.checks{flex-direction:column;gap:.4rem;display:flex}.filters .modes{flex-wrap:wrap}.table-wrap{border:1px solid var(--line);background:var(--paper);border-radius:17px;overflow-x:auto}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--line);white-space:nowrap;padding:.6rem .9rem}th{background:#fffdf8;position:sticky;top:0}th button{text-transform:uppercase;letter-spacing:.06em;color:#60746d;background:0 0;border:0;align-items:center;gap:.4rem;min-height:32px;padding:0;font-size:.78rem;font-weight:700;display:flex}td.num,th.num{text-align:right}th.num button{justify-content:flex-end;width:100%}td.num{font-variant-numeric:tabular-nums}tbody tr:last-child td{border-bottom:0}tr.quiet td{color:#8b9a94}tr.quiet strong{color:#6c7d76}.class-rail{border:1px solid var(--line);background:var(--paper);border-radius:15px;flex-wrap:wrap;align-items:center;gap:.5rem 1rem;margin-bottom:1rem;padding:.5rem;display:flex}.class-tabs{flex-wrap:wrap;gap:.3rem;display:flex}.class-tab{background:0 0;border:1px solid #0000;border-radius:10px;padding:0 1rem;font-weight:700}.class-tab:hover{border-color:var(--line)}.class-tab.active{color:#fff;background:var(--green);border-color:var(--green)}.add-class{align-items:center;gap:.5rem;margin-left:auto;display:flex}.add-class input{width:10rem;margin:0}.panel-head{justify-content:space-between;align-items:end;gap:1rem;display:flex}.panel-head label{flex:1;max-width:18rem;margin:0!important}.danger{color:#8a4038}.count{margin:1.25rem 0 0;font-size:1.1rem}.count+.roster-scroll .roster-list{margin-top:.5rem}.roster-scroll{max-height:24rem;overflow:auto}.roster-scroll .roster-list li:last-child{border-bottom:0}.start{width:min(460px,100%)}
