:root{--ink:#314b68;--accent:#2f6da3;--paper:#eef1f5;--good:#2a7f62;--ochre:#8a5e10;--crimson:#a03a3a;--on-ink:#e3eaf2;--on-ink-dim:#b8c6d6;--on-ink-accent:#a5cbee;--line:#d3dbe5;--card:#fff;--muted:#6b7c92;--serif:"IBM Plex Serif",Georgia,serif;--sans:"IBM Plex Sans",system-ui,-apple-system,sans-serif;--mono:"IBM Plex Mono",ui-monospace,monospace;--r:10px;--tap:44px}.semca,.semca *,.semca :after,.semca :before{box-sizing:border-box}.semca{font-family:var(--sans);color:var(--ink);background:var(--paper)}.semca h1,.semca h2,.semca h3{font-family:var(--serif);font-weight:600;margin:0}.semca h2{font-size:1.15rem}.semca h3{font-size:1rem}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:16px;margin-bottom:14px}.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}.muted{color:var(--muted);font-size:.85rem}.mono{font-family:var(--mono)}.row{display:flex;align-items:center;gap:10px}.grow{flex:1 1;min-width:0}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn{font:inherit;font-size:.9rem;min-height:var(--tap);padding:0 16px;border-radius:var(--r);border:1px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer}.btn:hover{filter:brightness(1.08)}.btn:disabled{opacity:.45;cursor:not-allowed;filter:none}.btn.quiet{color:var(--accent)}.btn.plain,.btn.quiet{background:transparent}.btn.plain{color:var(--ink);border-color:var(--line)}.btn.danger{background:transparent;color:var(--crimson);border-color:var(--crimson)}.btn.small{min-height:34px;padding:0 10px;font-size:.82rem}.btn:focus-visible,.cell input:focus-visible,.field:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.field{font:inherit;width:100%;min-height:var(--tap);padding:8px 12px;border:1px solid var(--line);border-radius:var(--r);background:#fff;color:var(--ink)}.field.mono{font-family:var(--mono)}label.lbl{display:block;font-size:.8rem;color:var(--muted);margin:0 0 4px}.note{border-radius:var(--r);padding:12px 14px;font-size:.88rem;margin-bottom:10px}.note.warn{background:#fdf6e6;border:1px solid #e3cc93;color:var(--ochre)}.note.stop{background:#fbeded;border:1px solid #e0b4b4;color:var(--crimson)}.note.ok{background:#eaf5f0;border:1px solid #a9d3c2;color:var(--good)}.tag{font-size:.72rem;font-family:var(--mono);text-transform:uppercase;letter-spacing:.04em;padding:3px 7px;border-radius:5px;background:var(--paper);color:var(--muted);white-space:nowrap}.tag.good{background:#eaf5f0;color:var(--good)}.tag.warn{background:#fdf6e6;color:var(--ochre)}.tag.stop{background:#fbeded;color:var(--crimson)}.tag.info{background:#e8f0f8;color:var(--accent)}.person{display:flex;align-items:center;gap:10px 12px;flex-wrap:wrap;padding:12px 0;border-bottom:1px solid var(--line)}.person:last-child{border-bottom:0}.person .grow{flex:1 1 60%;min-width:0}.avatar,.person .btn,.person .tag{flex:none}.avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;background:var(--ink);color:var(--on-ink);display:grid;place-items:center;font-family:var(--serif);font-size:.9rem}.person .name{font-weight:500}.person.gone .avatar,.person.gone .name{opacity:.55}@media (max-width:520px){.person .grow{flex:1 1 100%}.person .btn{margin-left:auto}.person .btn~.btn{margin-left:0}}.empty{text-align:center;padding:28px 12px;color:var(--muted)}.empty p{margin:0 0 12px}.code-card{background:var(--ink);color:var(--on-ink);border-radius:var(--r);padding:16px}.code-card .big{font-family:var(--mono);font-size:1.5rem;letter-spacing:.06em;color:#fff}.code-card .lbl{color:var(--on-ink-dim);font-size:.78rem}.code-card a{color:var(--on-ink-accent)}.book-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 -16px;padding:0 16px}table.book{border-collapse:separate;border-spacing:0;font-size:.88rem}table.book td,table.book th{padding:6px 8px;border-bottom:1px solid var(--line);text-align:center}table.book td.who,table.book th.who{position:-webkit-sticky;position:sticky;left:0;z-index:2;background:#fff;text-align:left;min-width:148px;max-width:148px;border-right:1px solid var(--line)}table.book thead th{background:var(--paper);vertical-align:bottom;font-weight:600}table.book thead th.who{background:var(--paper);z-index:3}table.book tbody tr:nth-child(2n) td,table.book tbody tr:nth-child(2n) td.who{background:#fafbfd}th.group{font-family:var(--serif);font-size:.82rem;text-align:center;border-bottom:2px solid var(--ink);padding-top:10px}th.group .w{font-family:var(--mono);font-weight:400;color:var(--muted);font-size:.72rem}th.group.off{color:var(--muted);border-bottom-color:var(--line)}th.item{font-weight:500;min-width:76px}th.item button{background:none;border:0;font:inherit;color:inherit;cursor:pointer;padding:2px}th.item .max{display:block;font-family:var(--mono);font-size:.72rem;color:var(--muted);font-weight:400}.cell input{width:58px;min-height:36px;padding:4px;text-align:center;font-family:var(--mono);font-size:.9rem;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--ink)}.cell input:hover{border-color:var(--line)}.cell input:focus{border-color:var(--accent);background:#fff}.cell input:disabled{color:var(--muted);cursor:not-allowed}.cell.over input{color:var(--ochre)}.cell.saving{background:#f3f7fb}.cell.failed input{border-color:var(--crimson)}td.final{font-family:var(--mono);font-weight:600;white-space:nowrap}td.final .letter{font-family:var(--serif);margin-left:6px}.t-good{color:var(--good)}.t-ochre{color:var(--ochre)}.t-crimson{color:var(--crimson)}.t-muted{color:var(--muted)}td.avg,th.avg{background:var(--paper);font-family:var(--mono)}tfoot td{font-size:.82rem;color:var(--muted);border-bottom:0}.locked-bar{position:-webkit-sticky;position:sticky;top:0;z-index:5;background:#fdf6e6;border:1px solid #e3cc93;color:var(--ochre);border-radius:var(--r);padding:10px 14px;font-size:.86rem;margin-bottom:12px}.modes{display:flex;gap:8px;margin-bottom:14px}.modes button{flex:1 1;min-height:var(--tap);font:inherit;font-size:.88rem;cursor:pointer;border:1px solid var(--line);border-radius:var(--r);background:#fff;color:var(--ink);text-align:left;padding:8px 12px}.modes button[aria-pressed=true]{border-color:var(--accent);background:#e8f0f8}.modes button span{display:block;font-size:.74rem;color:var(--muted)}.cat-row{display:grid;grid-template-columns:1fr 92px 44px;grid-gap:8px;gap:8px;align-items:center;margin-bottom:8px}.weight-total{display:flex;justify-content:space-between;font-family:var(--mono);font-size:.85rem;padding-top:8px;border-top:1px solid var(--line)}.sheet-back{position:fixed;inset:0;background:rgba(49,75,104,.45);display:flex;align-items:flex-end;justify-content:center;z-index:40;padding:0}.sheet{background:#fff;width:100%;max-width:560px;max-height:88vh;overflow:auto;border-radius:var(--r) var(--r) 0 0;padding:20px}@media (min-width:640px){.sheet-back{align-items:center;padding:20px}.sheet{border-radius:var(--r)}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}.t-ink{color:var(--ink)}.marks{display:flex;gap:6px;flex:none}.mark{width:40px;min-height:var(--tap);font:inherit;font-family:var(--mono);font-size:.95rem;cursor:pointer;border:1px solid var(--line);border-radius:var(--r);background:#fff;color:var(--muted)}.mark:hover{border-color:var(--accent)}.mark:disabled{opacity:.45;cursor:not-allowed}.mark.on{color:#fff;font-weight:600}.mark.on.good{background:var(--good);border-color:var(--good)}.mark.on.ochre{background:var(--ochre);border-color:var(--ochre)}.mark.on.crimson{background:var(--crimson);border-color:var(--crimson)}.mark.on.info{background:var(--accent);border-color:var(--accent)}.shell-top{background:var(--ink);color:var(--on-ink);padding:10px 16px;display:flex;align-items:center;gap:12px}.shell-top .brand{font-family:var(--serif);font-size:1.05rem;color:#fff}.shell-top .who{color:var(--on-ink-dim);font-size:.82rem}.shell-top a{color:var(--on-ink-accent);text-decoration:none;font-size:.85rem}.shell-top button.link{background:none;border:0;color:var(--on-ink-accent);font:inherit;font-size:.85rem;cursor:pointer;padding:6px}.shell-body{padding:16px;max-width:1200px;margin:0 auto}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto}.tabs button{font:inherit;font-size:.92rem;cursor:pointer;white-space:nowrap;background:none;border:0;border-bottom:3px solid transparent;padding:10px 14px;min-height:var(--tap);color:var(--muted)}.tabs button[aria-selected=true]{color:var(--ink);border-bottom-color:var(--accent);font-weight:600}.gate{min-height:100dvh;display:grid;place-items:center;padding:20px;background:var(--paper)}.gate .box{width:100%;max-width:400px}.gate h1{font-size:1.6rem;text-align:center;margin-bottom:4px}.gate .sub{text-align:center;color:var(--muted);font-size:.88rem;margin-bottom:22px}.gate .btn{width:100%;margin-top:14px}.gate .switch{text-align:center;margin-top:16px}.klass{display:block;text-decoration:none;color:inherit}.klass .card:hover{border-color:var(--accent)}.bar{height:8px;background:var(--paper);border-radius:4px;overflow:hidden;margin-top:6px}.bar span{display:block;height:100%;background:var(--accent)}.line{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--line)}.line:last-child{border-bottom:0}.line .v{font-family:var(--mono);white-space:nowrap}.recibo{padding:4px 0}.recibo h3{font-size:1.15rem}.print-only{display:none}@media print{.btn,.locked-bar,.no-print,.shell-top,.tabs,select{display:none!important}.print-only{display:block}.card,.semca,.shell-body,body{background:#fff!important;color:#000!important;margin:0;padding:0;box-shadow:none!important;border:0!important}.card{page-break-inside:avoid}table{width:100%;border-collapse:collapse}td,th{padding:6px 4px!important;border-bottom:1px solid #999!important}.muted{color:#444!important}@page{margin:18mm 16mm}body:has(.recibo) .shell-body>*,body:has(.recibo) .shell-top{display:none!important}body:has(.recibo) .sheet-back{position:static!important;display:block!important;background:none!important;padding:0!important}body:has(.recibo) .sheet{max-width:100%!important;max-height:none!important;overflow:visible!important;padding:0!important;border-radius:0!important;box-shadow:none!important}.recibo{page-break-inside:avoid;max-width:150mm}.recibo .line{border-bottom:1px solid #ccc!important}}