:root{--bg: #f4f6f3;--paper: #ffffff;--ink: #1d2a24;--muted: #5d6a63;--rule: #d3dbd5;--green: #1f5c40;--green-soft: #e8f1ec;--red: #b42318;--red-soft: #fdecea;--calc: #f9d9d5;--calc-head: #f2bdb6;--amber: #9a5b00;--amber-soft: #fff4e0;--focus: #2f7dd1;font-family:system-ui,Segoe UI,Roboto,Arial,sans-serif;font-size:14px;color:var(--ink);background:var(--bg)}*{box-sizing:border-box}body{margin:0}h1{font-size:1.5rem;margin:0}h2{font-size:1.1rem;margin:1.5rem 0 .5rem}a{color:var(--green)}code{background:var(--green-soft);padding:1px 5px;border-radius:3px}button,.button{font:inherit;background:var(--green);color:#fff;border:1px solid var(--green);border-radius:6px;padding:6px 14px;cursor:pointer;text-decoration:none;display:inline-block;white-space:nowrap}button:disabled{opacity:.5;cursor:default}button.ghost,.button.ghost{background:transparent;color:var(--green)}button.danger{background:var(--red);border-color:var(--red)}button.small,.button.small{padding:3px 9px;font-size:.85rem}input,select,textarea{font:inherit;border:1px solid var(--rule);border-radius:5px;padding:5px 7px;background:#fff;color:var(--ink);min-width:0}textarea{width:100%;font-family:ui-monospace,Consolas,monospace;font-size:.85rem}input:focus,select:focus,textarea:focus,button:focus-visible{outline:2px solid var(--focus);outline-offset:1px}input.short{width:5.5em}.topbar{display:flex;align-items:center;gap:16px;padding:10px 20px;background:var(--green);color:#fff}.topbar .brand{color:#fff;font-weight:800;letter-spacing:.08em;text-decoration:none}.topbar .who{margin-left:auto;opacity:.9}.topbar button.ghost{color:#fff;border-color:#fff9}.page{padding:20px;max-width:1600px;margin:0 auto}.page-head{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:12px;margin-bottom:14px}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.muted{color:var(--muted);margin:2px 0 0}.hint{color:var(--muted);font-size:.85rem}.loading,.empty{padding:30px 20px;color:var(--muted)}.error{color:var(--red)}.notice{background:var(--amber-soft);color:var(--amber);padding:8px 12px;border-radius:6px}.tabs{display:flex;gap:4px;flex-wrap:wrap;border-bottom:1px solid var(--rule);margin-bottom:12px}.tabs button{background:transparent;color:var(--muted);border:none;border-bottom:3px solid transparent;border-radius:0;padding:8px 12px}.tabs button.on{color:var(--green);border-bottom-color:var(--green);font-weight:600}.tabs.sub{border-bottom:none}.tabs.sub button{border:1px solid var(--rule);border-radius:16px;padding:4px 12px}.tabs.sub button.on{background:var(--green-soft);border-color:var(--green)}.save{font-size:.85rem;color:var(--muted)}.save.ok:before{content:"✓ ";color:var(--green)}.save.warn{color:var(--amber)}.save.error{color:var(--red)}.grid-wrap{overflow-x:auto;background:var(--paper);border:1px solid var(--rule);border-radius:6px}table{border-collapse:collapse;font-variant-numeric:tabular-nums}.grid th,.grid td{border:1px solid var(--rule);padding:0;text-align:center;height:30px}.grid thead th{background:var(--green-soft);font-weight:600;font-size:.8rem;padding:4px 6px}.grid th.subject{background:var(--green);color:#fff;max-width:220px}.grid .code{font-size:.75rem;border:1px solid currentColor;border-radius:3px;padding:0 3px;margin-right:4px}.grid th.comp .max{display:block;font-weight:400;color:var(--muted)}.grid .sticky{position:sticky;background:var(--paper);z-index:1}.grid thead .sticky{background:var(--green-soft);z-index:2}.grid .sticky.num{left:0;width:34px;min-width:34px;color:var(--muted)}.grid .sticky.name{left:34px;min-width:190px;text-align:left;padding:0 8px;white-space:nowrap}.grid td.cell input{width:56px;border:none;border-radius:0;text-align:center;padding:6px 2px;background:transparent}.grid td.cell input:focus{background:#eef5ff;outline-offset:-2px}.grid td.cell input.invalid{background:var(--red-soft);color:var(--red)}.grid .ro{display:inline-block;min-width:50px}.grid .score{background:#f8faf8;color:var(--muted);min-width:52px;font-size:.85rem}.grid td.avg{font-weight:700;min-width:70px;background:var(--green-soft)}.grid .low{color:var(--red)}.grid td.rank{min-width:46px}.grid tfoot td{background:#fafbfa;font-size:.85rem;color:var(--muted);padding:0 4px}.grid tfoot td.sticky.name{font-weight:600;color:var(--ink)}.grid td.calc,.grid tfoot td.calc{background:var(--calc);color:var(--ink);cursor:default;-webkit-user-select:text;user-select:text}.grid thead th.calc{background:var(--calc-head)}.grid .calc.low{color:var(--red)}.calc-legend{display:flex;align-items:center;gap:6px;margin:0;padding:6px 10px;border-top:1px solid var(--rule);font-size:.8rem;color:var(--muted)}.calc-legend .swatch{width:14px;height:14px;border:1px solid var(--calc-head);border-radius:3px;background:var(--calc)}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-bottom:12px}.tile{background:var(--paper);border:1px solid var(--rule);border-radius:6px;padding:10px 12px;display:flex;flex-direction:column;gap:2px}.tile .lbl{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.tile b{font-size:1.5rem;color:var(--green)}.tile .sub{font-size:.85rem;color:var(--muted)}.tile .up{color:var(--green)}.tile .down{color:var(--red)}.band{display:grid;grid-template-columns:52px 1fr 24px;align-items:center;gap:6px;font-size:.8rem}.band i{height:8px;background:var(--green);border-radius:4px;min-width:2px}.band em{font-style:normal;text-align:right}table.list{width:100%;background:var(--paper)}table.list th,table.list td{border-bottom:1px solid var(--rule);padding:6px 8px;text-align:left;vertical-align:middle}table.list th{font-size:.8rem;color:var(--muted);font-weight:600;background:var(--green-soft)}table.list td input{width:100%}table.list td input.short{width:5.5em}table.list .wide{min-width:320px}table.list .new-row td{background:#fafbfa}table.list td.actions,.seat{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.seat input{width:140px!important}.form{display:flex;flex-direction:column;gap:10px;max-width:520px;margin:10px 0}.form.inline{flex-direction:row;flex-wrap:wrap;align-items:flex-end;max-width:none}.field{display:flex;flex-direction:column;gap:3px}.field span{font-size:.8rem;color:var(--muted)}.check{display:flex;align-items:center;gap:4px}.terms{display:flex;gap:10px;flex-wrap:wrap}.term{background:var(--paper);border:1px solid var(--green);border-radius:6px;padding:10px 12px;display:flex;flex-direction:column;gap:4px;min-width:170px}.term.closed{border-color:var(--rule);color:var(--muted)}.progress{display:inline-grid;grid-template-columns:90px auto;align-items:center;gap:8px}.progress:before{content:"";grid-area:1 / 1;height:8px;border-radius:4px;background:var(--rule)}.progress i{grid-area:1 / 1;height:8px;background:var(--green);border-radius:4px}.progress em{font-style:normal;font-size:.85rem}.login{min-height:100vh;display:grid;place-items:center;padding:16px}.login form{background:var(--paper);border:1px solid var(--rule);border-radius:10px;padding:28px;width:100%;max-width:360px;display:flex;flex-direction:column;gap:12px}.login h1{color:var(--green)}.login-logo{display:block;width:100%;max-width:260px;margin:0 auto 4px}.lang-switch{display:inline-flex;border:1px solid currentColor;border-radius:6px;overflow:hidden}.lang-switch button{background:transparent;color:inherit;border:none;border-radius:0;padding:3px 9px;font-size:.8rem;font-weight:600}.lang-switch button.on{background:var(--green);color:#fff}.topbar .lang-switch{border-color:#fff9}.topbar .lang-switch button.on{background:#fff;color:var(--green)}.login .login-lang{align-self:flex-end;color:var(--green)}.grading h3{margin:12px 0 0;font-size:1rem}.grading-section{margin:10px 0}.grading-section .list{margin:6px 0}.about{max-width:980px;margin:0 auto;padding:16px 20px 40px}.about-top{display:flex;justify-content:space-between;align-items:center;color:var(--green)}.about-brand img{height:48px;display:block}.about-hero{text-align:center;padding:48px 0 32px}.about-hero h1{font-size:clamp(1.6rem,4vw,2.4rem);color:var(--green)}.about-hero p{max-width:620px;margin:14px auto 22px;font-size:1.1rem;color:var(--muted);line-height:1.5}.about h2{font-size:1.3rem;margin:32px 0 14px}.about-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}.about-grid article{background:var(--paper);border:1px solid var(--rule);border-top:4px solid var(--green);border-radius:8px;padding:16px 18px}.about-grid h3{margin:0 0 6px;font-size:1rem}.about-grid p,.about-us p,.about-how li{margin:0;line-height:1.55;color:var(--ink)}.about-us{background:var(--green-soft);border-radius:10px;padding:6px 22px 20px;margin-top:32px}.about-us p+p{margin-top:10px}.about-how ol{margin:0;padding-left:22px;display:grid;gap:8px}.about-foot{display:flex;justify-content:space-between;border-top:1px solid var(--rule);margin-top:40px;padding-top:14px;color:var(--muted)}.card{--c: #1b8a4c;background:#fff;width:210mm;min-height:297mm;margin:0 auto 24px;padding:7mm;border:1px solid var(--rule);font-family:Poppins,system-ui,sans-serif;font-size:11px;color:#111;display:flex;flex-direction:column}.card>*{zoom:var(--fit, 1)}.sheet.a5{zoom:.7048}.card{outline:3.5mm solid var(--c);outline-offset:-5mm}.card-state{display:grid;grid-template-columns:1fr 22mm 1fr;align-items:center;text-align:center;font-size:10px;padding:3mm 3mm 0}.card-state div{display:flex;flex-direction:column}.card-state b,.card-state span{text-transform:uppercase;font-weight:600}.card-state i{font-style:normal;font-size:9px}.card-state img{width:20mm;height:20mm;object-fit:contain;justify-self:center}.card-school{text-align:center;margin-top:2mm}.card-school h2{margin:0;font-size:19px;font-weight:700}.card-school p{margin:0;font-size:9.5px;color:#444}.card-school h3{margin:1.5mm 0 0;padding-bottom:1.5mm;font-size:13px;font-weight:700;text-transform:uppercase;border-bottom:2px solid var(--c);border-image:linear-gradient(to right,transparent 0,var(--c) 6%,var(--c) 94%,transparent 100%) 1}.card-school h3 span{font-weight:500;margin-left:6px}.card-pupil{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:1mm 4mm;padding:2mm 4mm;font-size:12px;font-weight:500}.card-pupil span:nth-child(1){grid-column:span 2}.card-pupil span:nth-child(3n+2){text-align:right}.card-pupil b{font-weight:600}.card-grid{--cols: 22% 1fr 11% 14%;flex:1 1 auto;display:flex;flex-direction:column;gap:1.2mm;padding:0 1mm}.card-head,.card-subject{display:grid;grid-template-columns:var(--cols)}.card-grid .rows{display:grid;grid-template-columns:1.25fr repeat(calc(var(--seqs) + 1),1fr)}.card-head,.card-head .rows{gap:0 1mm}.card-head span{background:var(--c);color:#fff;text-align:center;font-size:12px;padding:1mm 0;border-radius:2px}.card-head>span:first-child{border-radius:3mm 2px 2px 3mm}.card-head>span:last-child{border-radius:2px 3mm 3mm 2px}.card-subject{flex:1 1 auto;max-height:60mm;border:1.2px solid var(--c);border-radius:3mm;overflow:hidden;break-inside:avoid}.card-subject>*+*{border-left:1.2px solid var(--c)}.card-subject .name{display:flex;align-items:center;padding:0 2mm;font-weight:600;font-size:11px}.card-subject .rows span{display:flex;align-items:center;justify-content:center;font-size:10.5px;line-height:13px;border-bottom:1px solid var(--c)}.card-subject .rows span:not(.eval){border-left:1px solid var(--c)}.card-subject .rows{grid-auto-rows:1fr;margin-bottom:-1px}.card-subject .eval,.card-subject .b{font-weight:700}.card-subject .total{position:relative;background:linear-gradient(to bottom right,transparent calc(50% - .7px),var(--c) 50%,transparent calc(50% + .7px))}.card-subject .total b{position:absolute;top:2mm;left:2.5mm;font-size:12px}.card-subject .total i{position:absolute;bottom:1.5mm;right:2.5mm;font-style:normal;font-size:10px}.card-subject .remark{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;font-size:9.5px;line-height:1.2}.card-subject .remark b{font-size:13px}.card-conduct{display:flex;flex-wrap:wrap;gap:1mm 5mm;margin:2mm 2mm 0;font-size:10.5px}.card-conduct em{flex-basis:100%}.card-bottom{margin-top:2mm;padding:3mm 2mm 1mm;display:grid;grid-template-columns:1.1fr 1fr 1.2fr;gap:4mm;align-items:end}.card-avg p{margin:0 0 2.5mm;font-size:17px;font-weight:700}.card-avg b{display:inline-block;min-width:30mm;padding:0 2mm;border-bottom:2px solid var(--c);font-size:18px}.card-avg small{font-size:11px;font-weight:500}.card-avg .annual{font-size:13px}.card-avg .annual b{font-size:14px;min-width:18mm}.card-class{display:flex;flex-direction:column;gap:1mm;font-size:12px}.card-class .legend{font-size:8.5px;color:#555;margin-top:1mm}.card-sign h4{margin:0 0 1mm;text-align:center;font-size:15px}.card-sign div{border:1.5px solid var(--c);border-radius:6mm 2mm 2mm;padding:2mm 4mm;display:flex;flex-direction:column;gap:4mm;font-style:italic;font-size:12px}.card-sign small{display:block;font-size:9.5px;font-style:normal;color:#444}.card:not(.dense) .card-subject .rows span{font-size:12px}.card.dense .card-grid{gap:.7mm}.card.dense .card-subject .rows span{font-size:9px;line-height:10.2px}.card.dense .card-subject .name{font-size:10px}.card.dense .card-subject .total b{top:1mm}.card.dense .card-subject .total i{bottom:.8mm}.card.dense .card-state img{width:17mm;height:17mm}.card.dense .card-bottom{padding-top:2mm}.card-credit{margin:1mm 0 0;text-align:right;font-size:7.5px;color:#888;padding-right:2mm;letter-spacing:.05em}@media print{body,:root{background:#fff}.no-print{display:none!important}.page{padding:0}main{padding:0}.sheet{break-after:page}.card{border:none;margin:0;height:297mm;-webkit-print-color-adjust:exact;print-color-adjust:exact}}@media(max-width:640px){.page{padding:12px}.cards-page{overflow-x:auto}}table.new-pupils td{padding:2px 4px}table.new-pupils input.invalid{background:var(--red-soft);color:var(--red)}.logo-pick{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.logo-pick img{height:56px;max-width:120px;object-fit:contain;border:1px solid var(--rule);border-radius:4px;background:#fff}.logo-pick input[type=color]{width:44px;height:32px;padding:0}.swatch{width:26px;height:26px;padding:0;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px var(--rule)}.login .button{text-align:center}@media screen and (max-width:768px){.topbar{flex-wrap:wrap;gap:6px 10px;padding:8px 12px}.topbar .brand{margin-right:auto}.topbar .lang-switch,.topbar button{flex-shrink:0}.topbar .who{order:3;flex-basis:100%;margin-left:0;font-size:.85rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}input,select,textarea{font-size:16px}input:not([type=checkbox]):not([type=radio]):not([type=color]),select{min-height:40px}button,.button{min-height:40px;padding:8px 14px}button.small,.button.small{min-height:34px;padding:6px 10px}.tabs button{padding:10px 12px}.tabs.sub button{padding:6px 12px}.lang-switch button{min-height:32px;padding:4px 11px}.swatch{min-height:0}.page-head{align-items:stretch}.toolbar select{max-width:100%}.grid th,.grid td{height:40px}.grid .sticky.num{width:28px;min-width:28px;font-size:.8rem}.grid .sticky.name{left:28px;min-width:112px;max-width:132px;padding:0 6px;white-space:normal;line-height:1.2;font-size:.9rem}.grid td.cell input{width:52px;min-height:39px;padding:8px 2px}.grid-wrap{-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}table.list th,table.list td{padding:6px}table.list td input{min-width:96px}table.list td input[inputmode=numeric]{min-width:64px}table.list .wide{min-width:240px}.stats{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.term{min-width:0;flex:1 1 140px}.form{max-width:none}.seat input{width:120px!important}.cards-page .page-head .toolbar>*{flex:1 1 auto}}@media screen and (max-width:480px){h1{font-size:1.3rem}.page{padding:10px}.tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tabs button{flex-shrink:0}.tabs.sub{flex-wrap:wrap;overflow:visible}.tile b{font-size:1.3rem}.about{padding:12px 16px 32px}.about-hero{padding:28px 0 20px}.about-us{padding:4px 16px 16px}.about-foot{flex-wrap:wrap;gap:8px}.login form{padding:22px 18px}}
