:root{--brand: #009972;--brand-75: #40b294;--brand-50: #80ccb9;--brand-25: #bfe6dc;--brand-deep: #007a5b;--ink: #000000;--ink-muted: #4d4d4d;--mist: #f2f7f6;--paper: #ffffff;--rule: #d6e5e1;--accent: #f59d15;--accent-soft: #fff4e0;--info: #00adba;--info-soft: #e0f7f9;--ok: #009972;--ok-soft: #e6f7f2;--danger: #c51a1b;--danger-soft: #fde8e8;--pine: var(--brand);--pine-deep: var(--brand-deep);--pine-soft: var(--brand-75);--amber: var(--accent);--amber-soft: var(--accent-soft);--radius: 10px;--shadow: 0 1px 2px rgb(0 0 0 / 6%), 0 8px 24px rgb(0 153 114 / 12%);--font: "Atkinson Hyperlegible", system-ui, sans-serif;--nav-h: 64px;--safe-b: env(safe-area-inset-bottom, 0px);color-scheme:light}*,*:before,*:after{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;font-family:var(--font);font-size:16px;line-height:1.45;color:var(--ink);background:linear-gradient(180deg,var(--brand-25) 0%,var(--mist) 32%,var(--mist) 100%);-webkit-font-smoothing:antialiased}::selection{background:color-mix(in srgb,var(--pine) 28%,white);color:var(--ink)}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--pine)}.app-shell{min-height:100dvh;display:flex;flex-direction:column;max-width:720px;margin:0 auto}.app-shell.wide{max-width:960px}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px 12px;background:var(--pine);color:#f4fbfa;box-shadow:0 2px 12px #0a2c2d40}.brand{display:flex;flex-direction:column;gap:2px;min-width:0}.brand strong{font-size:1.15rem;letter-spacing:-.02em;font-weight:700}.brand span{font-size:.8rem;opacity:.82;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-actions{display:flex;gap:8px;align-items:center}.lang-switch{display:inline-flex;border:1px solid color-mix(in srgb,#fff 35%,transparent);border-radius:8px;overflow:hidden}.lang-switch button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;color:inherit;padding:6px 10px;font-weight:700;font-size:.75rem;letter-spacing:.04em;cursor:pointer}.lang-switch button.active{background:#ffffff38}.lang-switch.on-light{border-color:var(--rule);color:var(--ink)}.lang-switch.on-light button.active{background:var(--brand-25);color:var(--brand-deep)}.login-lang{position:absolute;top:16px;right:16px}.main{flex:1;padding:16px 16px calc(var(--nav-h) + var(--safe-b) + 16px)}.bottom-nav{position:fixed;left:50%;transform:translate(-50%);bottom:0;width:min(720px,100%);display:grid;grid-template-columns:repeat(4,1fr);gap:2px;padding:8px 8px calc(8px + var(--safe-b));background:color-mix(in srgb,var(--paper) 92%,white);border-top:1px solid var(--rule);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:30}.bottom-nav button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;padding:8px 4px;border-radius:8px;color:var(--ink-muted);display:flex;flex-direction:column;align-items:center;gap:4px;font-size:.72rem;font-weight:700;cursor:pointer}.bottom-nav button[aria-current=page]{color:var(--pine);background:color-mix(in srgb,var(--pine) 10%,transparent)}.bottom-nav svg{width:22px;height:22px}h1,h2,h3{margin:0 0 .4em;letter-spacing:-.02em;line-height:1.2}h1{font-size:1.55rem}h2{font-size:1.2rem}.lede{margin:0 0 1.1rem;color:var(--ink-muted);max-width:42rem}.panel{background:var(--paper);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.panel+.panel{margin-top:14px}.panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:12px 14px;border-bottom:1px solid var(--rule);background:color-mix(in srgb,var(--mist) 55%,white)}.panel-head h2{margin:0;font-size:.95rem;text-transform:uppercase;letter-spacing:.04em}.panel-body{padding:12px 14px}.register{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}.register th,.register td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--rule);vertical-align:top}.register th{font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-muted);background:color-mix(in srgb,var(--mist) 70%,white);position:sticky;top:0}.register tr:last-child td{border-bottom:0}.register tbody tr{cursor:pointer;transition:background .14s ease}.register tbody tr:hover,.register tbody tr:focus-within{background:color-mix(in srgb,var(--pine) 6%,white)}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:1px solid transparent;border-radius:8px;padding:10px 14px;font-weight:700;cursor:pointer;transition:background .14s ease,border-color .14s ease,transform .14s ease}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--pine);color:#f4fbfa}.btn-primary:hover:not(:disabled){background:var(--pine-soft)}.btn-ghost{background:transparent;border-color:color-mix(in srgb,#f4fbfa 35%,transparent);color:inherit}.btn-secondary{background:#fff;border-color:var(--rule);color:var(--ink)}.btn-secondary:hover:not(:disabled){border-color:var(--pine)}.btn-amber{background:var(--amber);color:#fff}.btn-sm{padding:6px 10px;font-size:.85rem}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px}.field label{font-size:.85rem;font-weight:700;color:var(--ink-muted)}.field input,.field select,.field textarea{width:100%;padding:11px 12px;border:1px solid var(--rule);border-radius:8px;background:#fff}.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid color-mix(in srgb,var(--pine) 45%,white);outline-offset:1px;border-color:var(--pine)}.stack{display:flex;flex-direction:column;gap:12px}.row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:.78rem;font-weight:700;background:var(--brand-25);color:var(--brand-deep)}.chip.ok{background:var(--ok-soft);color:var(--ok)}.chip.warn{background:var(--amber-soft);color:var(--amber)}.chip.bad{background:var(--danger-soft);color:var(--danger)}.stamp{display:inline-flex;align-items:center;justify-content:center;min-width:5.5rem;padding:4px 8px;border:2px solid var(--ok);color:var(--ok);border-radius:4px;font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;transform:rotate(-6deg)}.stamp.pending{border-color:var(--amber);color:var(--amber)}.login-page{position:relative;min-height:100dvh;display:grid;place-items:center;padding:24px 16px;background:radial-gradient(ellipse at 18% 0%,var(--brand-75) 0%,transparent 48%),linear-gradient(165deg,var(--brand-deep),var(--brand) 48%,#00adba)}.login-card{width:min(420px,100%);background:var(--paper);border-radius:14px;padding:28px 22px 22px;box-shadow:0 20px 50px #00000047;animation:rise .32s cubic-bezier(.22,1,.36,1) both}.login-card h1{color:var(--pine)}.login-card .lede{margin-bottom:1.4rem}.error-banner{background:var(--danger-soft);color:var(--danger);padding:10px 12px;border-radius:8px;margin-bottom:12px;font-weight:700;font-size:.9rem}.muted{color:var(--ink-muted);font-size:.9rem}.empty{padding:28px 16px;text-align:center;color:var(--ink-muted)}.schedule-grid{display:grid;gap:10px}.schedule-block{border-left:3px solid var(--pine);padding:10px 12px;background:color-mix(in srgb,var(--mist) 40%,white);border-radius:0 8px 8px 0}.schedule-block time{display:block;font-size:.78rem;font-weight:700;color:var(--ink-muted);font-variant-numeric:tabular-nums;margin-bottom:4px}.attend-status{display:inline-flex;flex-wrap:wrap;gap:4px}.attend-status button{-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:2rem;padding:6px 8px;border-radius:6px;border:1px solid var(--rule);background:#fff;font-weight:700;font-size:.75rem;cursor:pointer;color:var(--ink-muted)}.attend-status button.on.present,.attend-status button.present.on{background:var(--ok-soft);border-color:var(--brand);color:var(--brand-deep)}.attend-status button.on.absent{background:var(--danger-soft);border-color:var(--danger);color:var(--danger)}.attend-status button.on.late{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.attend-status button.on.excused{background:var(--info-soft);border-color:var(--info);color:#066}@keyframes rise{0%{opacity:0;transform:translateY(10px);filter:blur(2px)}to{opacity:1;transform:none;filter:none}}@media(min-width:800px){.app-shell.wide .main{padding-bottom:24px}.bottom-nav{width:min(960px,100%)}.register-wrap{overflow:auto}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
