:root{--color-surface: #FFFFFF;--color-surface-alt: #F9FAFB;--color-text: #1F2937;--color-text-muted: #4B5563;--color-accent: #4338CA;--color-accent-hover: #3730A3;--color-on-accent: #FFFFFF;--color-border: #6B7280;--color-focus: #2563EB;--color-error: #B91C1C;--color-error-bg: #FEF2F2;--color-success: #166534;--color-success-bg: #F0FDF4;--color-warning: #92400E;--color-warning-bg: #FFFBEB;--color-info: #1E40AF;--color-info-bg: #EFF6FF;--color-disabled-bg: #D1D5DB;--color-disabled-text: #374151;--color-overlay: rgba(17,24,39,.6);--font-family-text: system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;--font-family-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--font-size-small: 14px;--font-size-body: 16px;--font-size-h2: 20px;--font-size-h1: 24px;--font-size-code: 32px;--font-size-display: 48px;--font-weight-regular: 400;--font-weight-semibold: 600;--font-weight-bold: 700;--font-line-body: 1.5;--font-line-heading: 1.25;--space-1: 4px;--space-2: 8px;--space-3: 16px;--space-4: 24px;--space-5: 32px;--space-6: 48px;--size-touch-min: 44px;--size-focus-ring: 3px;--size-qr-min: 240px;--size-col-student: 480px;--size-col-organiser: 960px;--radius-control: 8px;--radius-card: 12px;--motion-fade: .15s;--z-sticky: 10;--z-dialog: 100}@media (prefers-reduced-motion: reduce){:root{--motion-fade: 0ms}}*,*:before,*:after{box-sizing:border-box}html{font-size:var(--font-size-body)}body{margin:0;background:var(--color-surface-alt);color:var(--color-text);font-family:var(--font-family-text);line-height:var(--font-line-body)}:focus-visible{outline:var(--size-focus-ring) solid var(--color-focus);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.skip{position:absolute;left:var(--space-2);top:calc(var(--size-touch-min) * -3);background:var(--color-surface);padding:var(--space-2) var(--space-3);z-index:var(--z-dialog)}.skip:focus{top:var(--space-2)}.masthead{background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:var(--space-2) var(--space-3)}.wordmark{font-size:var(--font-size-h2);font-weight:var(--font-weight-bold);color:var(--color-accent);text-decoration:none;display:inline-block;min-height:var(--size-touch-min);line-height:var(--size-touch-min)}.col{max-width:var(--size-col-student);margin:0 auto;padding:var(--space-3);background:var(--color-surface);min-height:80vh}.col-wide{max-width:var(--size-col-organiser)}.page-title{font-size:var(--font-size-h1);line-height:var(--font-line-heading);margin:var(--space-3) 0}.page-title:focus{outline:none}h2{font-size:var(--font-size-h2);line-height:var(--font-line-heading)}a{color:var(--color-accent)}hr{border:0;border-top:1px solid var(--color-border);margin:var(--space-4) 0}.hint{font-size:var(--font-size-small);color:var(--color-text-muted);margin:var(--space-1) 0}.req{font-weight:var(--font-weight-regular);color:var(--color-text-muted)}.field{margin:var(--space-3) 0}.field label,legend{display:block;font-weight:var(--font-weight-semibold);margin-bottom:var(--space-1)}input[type=text],input[type=password],input[type=datetime-local],select,textarea{width:100%;min-height:var(--size-touch-min);padding:var(--space-2) var(--space-3);border:2px solid var(--color-border);border-radius:var(--radius-control);background:var(--color-surface);color:var(--color-text);font:inherit}input:disabled,select:disabled,textarea:disabled{background:var(--color-surface-alt);color:var(--color-text-muted)}.has-error input,.has-error select{border-color:var(--color-error)}.field-error{color:var(--color-error);font-size:var(--font-size-small);font-weight:var(--font-weight-semibold);margin:var(--space-1) 0 0}.fieldset{border:0;padding:0;margin:var(--space-3) 0}.choice{display:flex;align-items:center;gap:var(--space-2);min-height:var(--size-touch-min);padding:0 var(--space-2);border-radius:var(--radius-control);cursor:pointer;font-weight:var(--font-weight-regular)}.choice:hover{background:var(--color-surface-alt)}.choice input{width:var(--space-4);height:var(--space-4);flex:none;accent-color:var(--color-accent)}.btn{min-height:var(--size-touch-min);padding:var(--space-2) var(--space-4);border-radius:var(--radius-control);font:inherit;font-weight:var(--font-weight-semibold);cursor:pointer;border:2px solid var(--color-accent)}.btn-primary{background:var(--color-accent);color:var(--color-on-accent)}.btn-primary:hover,.btn-primary:active{background:var(--color-accent-hover)}.btn-secondary{background:transparent;color:var(--color-accent)}.btn-secondary:hover{background:var(--color-info-bg)}.btn-danger{background:var(--color-error);border-color:var(--color-error);color:var(--color-on-accent)}.btn:disabled{background:var(--color-disabled-bg);border-color:var(--color-disabled-bg);color:var(--color-disabled-text);cursor:not-allowed}.btn-block{width:100%}.linklike{background:none;border:0;padding:0;min-height:var(--size-touch-min);color:var(--color-accent);text-decoration:underline;font:inherit;cursor:pointer}.row{display:flex;flex-wrap:wrap;gap:var(--space-2);margin:var(--space-3) 0;align-items:flex-end}.between{justify-content:space-between}.between .field{flex:1 1 240px;margin:0}.banner{display:flex;gap:var(--space-2);padding:var(--space-3);margin:var(--space-3) 0;border-left:4px solid;border-radius:var(--radius-control)}.banner-icon{font-weight:var(--font-weight-bold);flex:none;width:var(--space-4)}.banner-info{background:var(--color-info-bg);border-color:var(--color-info);color:var(--color-info)}.banner-success{background:var(--color-success-bg);border-color:var(--color-success);color:var(--color-success)}.banner-warning{background:var(--color-warning-bg);border-color:var(--color-warning);color:var(--color-warning)}.banner-error{background:var(--color-error-bg);border-color:var(--color-error);color:var(--color-error)}.error-summary{background:var(--color-error-bg);color:var(--color-error);border-left:4px solid var(--color-error);padding:var(--space-3);margin:var(--space-3) 0}.error-summary ul{margin:var(--space-1) 0 0;padding-left:var(--space-4)}.badge{display:inline-block;padding:var(--space-2) var(--space-3);border-radius:var(--radius-control);font-size:var(--font-size-h1)}.badge-success{background:var(--color-success-bg);color:var(--color-success);border:2px solid var(--color-success)}.badge-error{background:var(--color-error-bg);color:var(--color-error);border:2px solid var(--color-error)}.verify-name{font-size:var(--font-size-h2);font-weight:var(--font-weight-semibold)}.codebox{font-family:var(--font-family-mono);font-size:var(--font-size-code);font-weight:var(--font-weight-bold);letter-spacing:.1em;text-align:center;background:var(--color-surface-alt);border:2px solid var(--color-border);border-radius:var(--radius-card);padding:var(--space-3);margin:var(--space-3) 0;word-break:break-all}.qrcard{text-align:center}.qr{width:100%;max-width:320px;min-width:var(--size-qr-min);height:auto;border:1px solid var(--color-border);background:#fff}.sticky-bar{position:sticky;top:0;z-index:var(--z-sticky);background:var(--color-surface);border-bottom:2px solid var(--color-border);display:flex;justify-content:space-between;align-items:center;gap:var(--space-2);padding:var(--space-2) 0}.timer{display:flex;align-items:baseline;gap:var(--space-2);flex-wrap:wrap}.timer-label{font-size:var(--font-size-small);color:var(--color-text-muted)}.timer-time{font-family:var(--font-family-mono);font-size:var(--font-size-h1);font-weight:var(--font-weight-bold)}.timer-warn{background:var(--color-warning-bg);color:var(--color-warning);padding:var(--space-1) var(--space-2);border-radius:var(--radius-control)}.timer-warn .timer-label{color:var(--color-warning)}.timer-note{font-weight:var(--font-weight-semibold)}.progress{margin:0;font-size:var(--font-size-small)}.sectionbar{display:flex;flex-wrap:wrap;gap:var(--space-2);margin:var(--space-3) 0}.secbtn{flex:1 1 120px;min-height:var(--size-touch-min);padding:var(--space-2);border:2px solid var(--color-border);border-radius:var(--radius-control);background:var(--color-surface);font:inherit;cursor:pointer;display:flex;flex-direction:column;text-align:left}.secbtn.is-current{border-color:var(--color-accent);font-weight:var(--font-weight-bold);background:var(--color-info-bg)}.secmeta{font-size:var(--font-size-small);color:var(--color-text-muted);font-weight:var(--font-weight-regular)}.sec-title{margin-bottom:var(--space-2)}.qcard{border:1px solid var(--color-border);border-radius:var(--radius-card);padding:var(--space-3);margin:var(--space-3) 0;min-width:0}.qcard legend{padding:0 var(--space-1)}.qnum{color:var(--color-accent)}.save-row{margin:var(--space-1) 0 0;min-height:var(--space-4)}.save{font-size:var(--font-size-small);font-weight:var(--font-weight-semibold)}.save-saved{color:var(--color-success)}.save-failed{color:var(--color-error)}.save-saving{color:var(--color-text-muted)}.overlay{position:fixed;inset:0;background:var(--color-overlay);display:flex;align-items:center;justify-content:center;padding:var(--space-3);z-index:var(--z-dialog)}.dialog{background:var(--color-surface);border-radius:var(--radius-card);padding:var(--space-4);max-width:var(--size-col-student);width:100%}.tabs{display:flex;flex-wrap:wrap;gap:var(--space-2);border-bottom:2px solid var(--color-border);margin:var(--space-3) 0}.tab{min-height:var(--size-touch-min);padding:var(--space-2) var(--space-3);background:none;border:0;border-bottom:4px solid transparent;font:inherit;cursor:pointer;color:var(--color-text)}.tab.is-current{border-bottom-color:var(--color-accent);font-weight:var(--font-weight-bold)}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--space-3);margin:var(--space-3) 0}.stat{background:var(--color-surface-alt);border:2px solid var(--color-border);border-radius:var(--radius-card);padding:var(--space-3);text-align:center}.stat-n{font-size:var(--font-size-h1);font-weight:var(--font-weight-bold);margin:0;line-height:var(--font-line-heading)}.stat-l{margin:0;color:var(--color-text-muted);font-size:var(--font-size-small)}.table-wrap{overflow-x:auto;margin:var(--space-3) 0}.table{width:100%;border-collapse:collapse}.table caption{text-align:left;font-weight:var(--font-weight-semibold);padding:var(--space-2) 0}.table th,.table td{border:1px solid var(--color-border);padding:var(--space-2);text-align:left}.table th{background:var(--color-surface-alt)}.table tbody tr:nth-child(2n){background:var(--color-surface-alt)}@media (min-width: 600px){.col{padding:var(--space-4)}}@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
