:root{--blue-900: #002a5c;--blue-700: #004691;--blue-500: #0a6bd6;--blue-100: #e6f0fb;--red: #e40520;--green: #12805c;--amber: #c27c00;--gray-900: #1b1f24;--gray-700: #48515c;--gray-500: #7a8591;--gray-200: #dde2e8;--gray-100: #f2f4f7;--white: #fff;--opt-a: #0a6bd6;--opt-b: #e8630a;--radius: 14px;--shadow: 0 2px 10px rgb(0 30 70 / 8%);font-family:Segoe UI,system-ui,-apple-system,Roboto,Helvetica Neue,Arial,sans-serif;color:var(--gray-900);background:var(--gray-100);-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html,body{margin:0;min-height:100%}body{min-height:100vh}button{font:inherit}a{color:var(--blue-700)}h1,h2,h3{margin:0;line-height:1.2}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 20px;background:var(--blue-700);color:var(--white)}.brand{display:flex;align-items:center;gap:10px}.brand-mark{font-weight:800;letter-spacing:.5px;background:var(--white);color:var(--blue-700);padding:4px 8px;border-radius:8px;font-size:14px}.brand-text{display:flex;flex-direction:column;line-height:1.1}.brand-text strong{font-size:18px}.brand-text small{opacity:.85;font-size:12px}.topbar-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.btn{border:0;border-radius:10px;padding:10px 18px;font-weight:600;cursor:pointer;transition:background .15s,transform .05s,opacity .15s}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn:focus-visible,.vote-btn:focus-visible,.tab:focus-visible{outline:3px solid var(--blue-500);outline-offset:2px}.btn-primary{background:var(--blue-700);color:var(--white)}.btn-primary:hover:not(:disabled){background:var(--blue-900)}.btn-success{background:var(--green);color:var(--white)}.btn-danger{background:var(--red);color:var(--white)}.btn-warning{background:var(--amber);color:var(--white)}.btn-ghost{background:transparent;color:inherit;border:1px solid currentColor}.btn-light{background:#ffffff26;color:var(--white)}.btn-light:hover:not(:disabled){background:#ffffff40}.btn-lg{padding:16px 24px;font-size:18px;width:100%}.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}.badge-ready{background:var(--gray-200);color:var(--gray-700)}.badge-running{background:#d6f5e8;color:var(--green)}.badge-concluded{background:#fde3e6;color:#a5021a}.badge-unknown{background:var(--gray-200);color:var(--gray-500)}.badge-running:before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--green);margin-right:6px;animation:pulse 1.4s infinite}@keyframes pulse{50%{opacity:.25}}.card{background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.alert{border-radius:10px;padding:12px 14px;margin:12px 0;font-size:15px}.alert-error{background:#fde3e6;color:#8a0216}.alert-info{background:var(--blue-100);color:var(--blue-900)}.alert-success{background:#d6f5e8;color:#0b5c41}.alert-warning{background:#fff2d6;color:#7a4d00}.muted{color:var(--gray-500)}.dialog{border:0;border-radius:var(--radius);padding:24px;max-width:440px;width:calc(100% - 32px);box-shadow:0 20px 50px #0000004d}.dialog::backdrop{background:#0014328c}.dialog h2{font-size:20px;margin-bottom:10px}.dialog-body{color:var(--gray-700);line-height:1.45}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.voter{max-width:560px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column}.voter main{flex:1;padding:20px 16px 32px}.voter footer{text-align:center;font-size:12px;color:var(--gray-500);padding:16px}.voter h1{font-size:24px;margin-bottom:6px}.voter .lead{color:var(--gray-700);margin:0 0 20px}.service-list{display:grid;gap:12px;list-style:none;padding:0;margin:0}.service-link{display:flex;align-items:center;justify-content:space-between;gap:12px;text-decoration:none;color:inherit;background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px;border:2px solid transparent}.service-link:hover,.service-link:focus-visible{border-color:var(--blue-500);outline:none}.service-link h2{font-size:17px}.service-link p{margin:4px 0 0;color:var(--gray-700);font-size:14px}.back-link{display:inline-block;margin-bottom:14px;text-decoration:none;font-weight:600}.question{font-size:22px;margin:6px 0 18px}.rating-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:18px}.vote-btn{border:2px solid var(--gray-200);background:var(--white);border-radius:12px;cursor:pointer;font-weight:700;color:var(--gray-900);transition:border-color .15s,background .15s,transform .1s}.vote-btn:hover:not(:disabled){border-color:var(--blue-500)}.vote-btn[aria-pressed=true]{background:var(--blue-700);border-color:var(--blue-700);color:var(--white);transform:scale(1.04)}.vote-btn:disabled{opacity:.5;cursor:not-allowed}.rating-grid .vote-btn{aspect-ratio:1;font-size:22px}.rating-scale-labels{display:flex;justify-content:space-between;font-size:13px;color:var(--gray-500);margin:-8px 0 18px}.option-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:18px}.option-grid .vote-btn{min-height:120px;font-size:20px;padding:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px}.option-grid .vote-btn small{font-size:13px;font-weight:600;opacity:.7}.vote-btn.opt-a[aria-pressed=true]{background:var(--opt-a);border-color:var(--opt-a)}.vote-btn.opt-b[aria-pressed=true]{background:var(--opt-b);border-color:var(--opt-b)}.state-panel{text-align:center;padding:28px 18px}.state-panel .icon{font-size:44px;line-height:1;margin-bottom:10px}.state-panel h2{font-size:20px;margin-bottom:8px}.state-panel p{color:var(--gray-700);margin:0 0 4px}.regia{min-height:100vh;display:flex;flex-direction:column}.regia main{flex:1;padding:20px}.conn{display:inline-flex;align-items:center;gap:6px;font-size:13px;padding:4px 10px;border-radius:999px;background:#ffffff26}.conn:before{content:"";width:9px;height:9px;border-radius:50%;background:var(--amber)}.conn-open:before{background:#3ddc97}.conn-closed:before,.conn-forbidden:before{background:var(--red)}.login{max-width:420px;margin:8vh auto}.login h1{font-size:22px;margin-bottom:4px}.login form{display:grid;gap:14px;margin-top:18px}.field{display:grid;gap:6px;font-weight:600;font-size:14px}.field input{font:inherit;padding:11px 12px;border-radius:10px;border:1px solid var(--gray-200);background:var(--white)}.field input:focus{outline:2px solid var(--blue-500);border-color:transparent}.tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}.tab{border:0;background:var(--white);border-radius:10px;padding:10px 16px;cursor:pointer;font-weight:600;box-shadow:var(--shadow);display:inline-flex;align-items:center;gap:8px;color:var(--gray-900)}.tab[aria-selected=true]{background:var(--blue-700);color:var(--white)}.panels-grid{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(380px,1fr));align-items:start}.panel{background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;display:flex;flex-direction:column;gap:16px}.panel-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.panel-head h2{font-size:19px}.panel-head p{margin:4px 0 0;color:var(--gray-700);font-size:14px}.panel-meta{display:flex;gap:14px;flex-wrap:wrap;font-size:13px;color:var(--gray-700)}.panel-meta b{color:var(--gray-900)}.controls{display:flex;gap:8px;flex-wrap:wrap;padding-top:12px;border-top:1px solid var(--gray-200)}.kpis{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(110px,1fr))}.kpi{background:var(--gray-100);border-radius:10px;padding:10px 12px}.kpi span{display:block;font-size:12px;color:var(--gray-700);text-transform:uppercase;letter-spacing:.3px}.kpi strong{display:block;font-size:24px;margin-top:2px;font-variant-numeric:tabular-nums}.kpi.kpi-hero{background:var(--blue-700);color:var(--white)}.kpi.kpi-hero span{color:#fffc}.histogram{display:grid;grid-template-columns:repeat(10,1fr);gap:6px;align-items:end;height:220px}.histogram .col{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:4px;min-width:0}.histogram .bar{width:100%;border-radius:6px 6px 0 0;transition:height .35s ease;min-height:2px}.histogram .val{font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}.histogram .pct{font-size:11px;color:var(--gray-500)}.histogram .lbl{font-size:14px;font-weight:700;border-top:1px solid var(--gray-200);width:100%;text-align:center;padding-top:4px}.band-dissatisfied{background:var(--red)}.band-neutral{background:var(--amber)}.band-satisfied{background:var(--green)}.split{display:flex;height:28px;border-radius:8px;overflow:hidden;background:var(--gray-200)}.split>div{transition:width .35s ease;display:flex;align-items:center;justify-content:center;color:var(--white);font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden}.split-lg{height:64px;border-radius:12px}.split-lg>div{font-size:22px}.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:13px;color:var(--gray-700);margin-top:6px}.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:middle}.fill-a{background:var(--opt-a)}.fill-b{background:var(--opt-b)}.fill-0{background:#6d5bd0}.fill-1{background:#0e9aa7}.versus{display:grid;grid-template-columns:1fr 1fr;gap:12px}.versus .side{border-radius:12px;padding:14px;color:var(--white)}.versus .side span{display:block;font-size:14px;opacity:.9}.versus .side strong{display:block;font-size:34px;font-variant-numeric:tabular-nums}.versus .side small{font-size:14px;opacity:.9}.versus .side.lead{box-shadow:0 0 0 4px var(--gray-900) inset}.winner{border-radius:12px;padding:16px;text-align:center;color:var(--white);animation:pop .4s ease}.winner span{display:block;font-size:13px;text-transform:uppercase;letter-spacing:1px;opacity:.9}.winner strong{display:block;font-size:30px}.winner small{display:block;margin-top:4px;opacity:.9}@keyframes pop{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.empty{text-align:center;color:var(--gray-500);padding:24px 8px}.log{background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 20px;margin-top:20px}.log h2{font-size:16px;margin-bottom:8px}.log ol{list-style:none;margin:0;padding:0;max-height:240px;overflow:auto;font-size:13px;font-family:Consolas,Courier New,monospace}.log li{padding:3px 0;border-bottom:1px solid var(--gray-100)}.log time{color:var(--gray-500);margin-right:8px}.log .lvl-error{color:#a5021a}.log .lvl-warn{color:#7a4d00}.projection{background:var(--blue-900)}.projection main{padding:3vh 3vw}.projection .panel{padding:3vh 3vw;gap:3vh;min-height:88vh}.projection .panel-head h2{font-size:clamp(24px,3.4vw,54px)}.projection .panel-head p{font-size:clamp(16px,1.8vw,28px)}.projection .kpi strong{font-size:clamp(26px,3.6vw,60px)}.projection .kpi span{font-size:clamp(12px,1vw,18px)}.projection .histogram{height:42vh}.projection .histogram .val{font-size:clamp(12px,1.3vw,22px)}.projection .histogram .lbl{font-size:clamp(14px,1.6vw,28px)}.projection .split-lg{height:12vh}.projection .split-lg>div{font-size:clamp(20px,3vw,50px)}.projection .versus .side strong{font-size:clamp(34px,6vw,110px)}.projection .versus .side span{font-size:clamp(16px,1.8vw,30px)}.projection .winner strong{font-size:clamp(30px,5vw,90px)}.projection .controls,.projection .panel-meta{display:none}.projection .heart{font-size:clamp(140px,30vh,360px)}.heart-stage{display:flex;align-items:center;gap:24px;flex-wrap:wrap}.heart-kpis{flex:1;min-width:240px}.heart{font-size:96px;line-height:1;color:var(--gray-200);-webkit-user-select:none;user-select:none;transition:transform .12s ease-out,color .12s ease-out}.heart-on{color:#f2a5b0}.heart-lit{color:var(--red);transform:scale(1.18)}.heart-bit{font-family:Consolas,Courier New,monospace;color:var(--gray-500)}.heart-bit-on{color:var(--red)}.heart-bpm{display:flex;align-items:center;gap:8px}.heart-bpm input{width:90px}.field input[aria-invalid=true]{border-color:var(--red)}.voter-heart{display:flex;align-items:center;gap:8px}.heart-sm{font-size:30px}.voter .heart-on{color:#ffffff8c}.voter .heart-lit{color:#ff5c73}.voter-heart-bpm{font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;opacity:.9;min-width:2.2em}.btn-sm{padding:6px 10px;font-size:13px}.btn-light[aria-pressed=true]{background:var(--white);color:var(--blue-700)}.launcher{max-width:900px;margin:0 auto;padding:40px 20px}.launcher h1{font-size:28px;margin-bottom:6px}.launcher-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));margin-top:24px}.launcher-grid a{text-decoration:none;color:inherit}.launcher-grid .card{height:100%;border:2px solid transparent}.launcher-grid a:hover .card,.launcher-grid a:focus-visible .card{border-color:var(--blue-500)}.launcher-grid h2{font-size:20px;margin-bottom:8px}.launcher-grid p{margin:0;color:var(--gray-700)}@media(max-width:480px){.panels-grid{grid-template-columns:1fr}.histogram{height:160px;gap:3px}.histogram .pct{display:none}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
