:root{--navy:#0b2545;--blue:#0869e8;--red:#ff454d;--red-dark:#d92b33;--green:#08b487;--bg:#f2f6fc;--panel:#fff;--muted:#627083;--border:#dce3ec;--shadow:0 2px 7px #14213d18}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:#16243a;font:16px/1.45 Inter,Segoe UI,Arial,sans-serif}button,input{font:inherit}.page{max-width:1500px;margin:auto;padding:28px}.topbar,.report-header,.section-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:24px}h1{font-size:clamp(2rem,4vw,3.3rem);line-height:1.05;color:var(--navy);margin:0 0 8px}h2{color:#1d2b41}.topbar p,.report-header p{margin:0;color:var(--muted)}.actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center}.btn{display:inline-flex;justify-content:center;align-items:center;border:1px solid var(--border);border-radius:8px;padding:10px 17px;background:#fff;color:#172033;text-decoration:none;cursor:pointer;font-weight:650;box-shadow:var(--shadow)}.btn:hover{filter:brightness(.97)}.btn.primary{background:var(--blue);border-color:var(--blue);color:#fff}.btn.success{background:#009b73;border-color:#009b73;color:#fff}.btn.danger{background:var(--red);border-color:var(--red);color:#fff}.btn.outline{background:#fff}.btn.outline.danger{color:#f04444}.btn.small{padding:7px 12px}.btn.full{width:100%;margin-top:14px}.legend{display:flex;gap:18px;margin:0 0 18px;color:var(--muted)}.dot{display:inline-block;width:12px;height:12px;border-radius:50%;margin-right:6px}.dot.red{background:var(--red)}.dot.green{background:var(--green)}.student-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:14px}.student-card{min-height:116px;border:0;border-radius:12px;padding:13px 9px;color:#fff;box-shadow:0 2px 4px #0002;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;transition:transform .1s,background .15s}.student-card:hover{transform:translateY(-2px)}.student-card strong{font-size:20px}.student-card span{font-weight:700;line-height:1.18}.student-card.absent{background:var(--red)}.student-card.present{background:var(--green)}dialog{border:0;border-radius:12px;padding:0;box-shadow:0 20px 60px #0005;max-width:510px;width:calc(100% - 30px)}dialog::backdrop{background:#000b}dialog form{padding:25px}dialog h2{margin-top:0}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.center-page{min-height:100vh;display:grid;place-items:center;padding:20px}.panel{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:30px;margin-bottom:28px;box-shadow:var(--shadow)}.login-panel{width:min(450px,100%)}label{display:grid;gap:7px;font-weight:650}input[type=text],input[type=password],input[type=number],input:not([type]){width:100%;padding:11px;border:1px solid #aeb8c6;border-radius:6px;background:#fff}.form-grid{display:grid;grid-template-columns:2fr 1fr;gap:16px}.full-row{grid-column:1/-1}.warning{color:#c33d29}.student-list{display:grid;gap:10px}.student-row{display:flex;align-items:center;justify-content:space-between;gap:15px;border:1px solid var(--border);border-radius:8px;padding:12px 15px;flex-wrap:wrap}.student-row form{margin:0}.edit-form{flex-basis:100%;display:grid;grid-template-columns:120px 1fr auto;gap:8px}.flash-stack{position:fixed;z-index:20;top:15px;left:50%;transform:translateX(-50%);display:grid;gap:8px}.flash{padding:12px 18px;border-radius:8px;background:#fff;box-shadow:0 4px 20px #0003}.flash.success{border-left:5px solid var(--green)}.flash.error{border-left:5px solid var(--red)}.summary{display:flex;gap:18px;margin:25px 0}.summary-card{min-width:180px;padding:18px;border-radius:12px;color:#fff;display:flex;align-items:center;gap:13px}.summary-card strong{font-size:34px}.summary-card.present{background:var(--green)}.summary-card.absent{background:var(--red)}.report-section{margin-top:30px;break-inside:avoid}.report-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:8px}.report-student{border-left:7px solid;padding:12px;background:#fff;border-radius:6px;display:flex;gap:10px}.report-student.present{border-color:var(--green)}.report-student.absent{border-color:var(--red)}
@media(max-width:700px){.page{padding:18px}.topbar,.report-header,.section-heading{display:block}.actions{margin-top:16px}.actions .btn{flex:1}.student-grid{grid-template-columns:repeat(3,1fr);gap:8px}.student-card{min-height:105px;padding:8px 5px}.student-card strong{font-size:18px}.student-card span{font-size:13px}.form-grid,.edit-form{grid-template-columns:1fr}.full-row{grid-column:auto}.panel{padding:20px}.summary-card{min-width:0;flex:1}}
@media print{body{background:#fff;font-size:11px}.page{max-width:none;padding:0}.no-print{display:none!important}.report-header{margin-bottom:8px}.report-header h1{font-size:26px}.summary{margin:10px 0}.summary-card{padding:8px;min-width:100px}.summary-card strong{font-size:22px}.report-section{margin-top:14px}.report-section h2{font-size:16px}.report-grid{grid-template-columns:repeat(4,1fr);gap:4px}.report-student{padding:6px;break-inside:avoid}}
.slot-grid{grid-template-columns:repeat(10,minmax(0,1fr))}.student-card{min-width:0;overflow:hidden}.student-card span{max-width:100%;text-align:center;overflow-wrap:anywhere}.student-card.empty{background:#263449;cursor:default;box-shadow:none}.student-card.empty:hover{transform:none}
.edit-form[hidden]{display:none}
.attendance-page .student-card{min-height:0;aspect-ratio:1/1}
@media(max-width:1000px){.slot-grid{grid-template-columns:repeat(5,minmax(0,1fr))}}
@media(max-width:700px){.slot-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media print{.snapshot .slot-grid{grid-template-columns:repeat(10,minmax(0,1fr));gap:3px}.snapshot .student-card{min-height:64px;border-radius:3px;padding:3px;font-size:8px}.snapshot .student-card strong{font-size:10px}}
/* Fremmødeoversigt: 10 kolonner på PC/tablet, 5 på mobil. */
@media screen and (min-width:701px) and (max-width:1100px){.attendance-page .slot-grid{grid-template-columns:repeat(10,minmax(0,1fr));gap:10px}.attendance-page .student-card{min-height:0;aspect-ratio:1/1;padding:5px 3px;gap:4px}.attendance-page .student-card strong{font-size:16px;line-height:1}.attendance-page .student-card span{display:-webkit-box;width:100%;font-size:10px;line-height:1.1;white-space:normal;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:2}}
@media screen and (max-width:700px){.attendance-page .slot-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.attendance-page .student-card{min-height:0;aspect-ratio:1/1;padding:5px}.attendance-page .student-card strong{font-size:18px}.attendance-page .student-card span{display:none}}
.report-page{max-width:1200px}.report-page .report-section{margin-top:22px}.report-page .report-section h2{margin:0 0 9px}.report-page .report-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:7px}.report-page .report-student{min-width:0;min-height:48px;align-items:flex-start;font-size:12px;line-height:1.2}.report-page .report-student strong{flex:0 0 auto}.report-page .report-student span{min-width:0;overflow-wrap:anywhere}.report-page .empty-message{grid-column:1/-1}
@page{size:A4 portrait;margin:6mm}
@media print{.report-page .report-header{display:block;margin:0 0 3mm}.report-page .report-header h1{font-size:14pt;line-height:1;margin:0 0 1mm}.report-page .report-header p{font-size:7pt;line-height:1;margin:0}.report-page{width:100%;max-width:none;padding:0}.report-page .report-section{margin:0 0 4mm;break-inside:auto}.report-page .report-section h2{font-size:11px;line-height:1.1;margin:0 0 2mm;color:#16243a}.report-page .report-grid{grid-template-columns:repeat(7,minmax(0,1fr));gap:1.2mm}.report-page .report-student{min-height:8.2mm;border-left-width:1mm;border-radius:.6mm;padding:1.2mm 1.4mm;gap:1.2mm;font-size:6.7pt;line-height:1.12;box-shadow:none;background:#f8fafc;break-inside:avoid}.report-page .report-student strong{font-size:6.9pt}.report-page .report-student span{overflow-wrap:anywhere}.report-page .empty-message{font-size:7pt;margin:0}}
.number-toggle{display:flex;align-items:center;gap:6px}.number-toggle input{width:72px;height:42px;border:1px solid #aeb8c6;border-radius:8px;padding:8px 10px;background:#fff;text-align:center;font-weight:700;font-size:18px}.number-toggle .btn{height:42px;padding-inline:14px}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.code-settings{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.code-form{display:grid;gap:14px;padding:20px;border:1px solid var(--border);border-radius:10px}.code-form h3{margin:0;color:var(--navy)}
.code-panel summary{cursor:pointer;color:var(--navy);font-size:1.5rem;font-weight:700;list-style-position:inside}.code-panel summary::marker{color:var(--blue)}.code-panel-content{padding-top:14px}
@media(max-width:700px){.attendance-page .topbar .actions{display:grid;grid-template-columns:auto 1fr 1fr}.attendance-page .number-toggle{grid-column:1/-1}.attendance-page .number-toggle input{width:86px}.attendance-page .number-toggle .btn{flex:0 0 auto}.attendance-page .number-toggle:focus-within .btn{position:fixed;z-index:1000;left:16px;right:16px;top:auto;bottom:auto;width:auto;height:52px;background:var(--blue);border-color:var(--blue);color:#fff;font-size:18px;box-shadow:0 5px 20px #0005}}
@media(max-width:800px){.code-settings{grid-template-columns:1fr}}
