@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@600;700;800&family=DM+Sans:wght@400;500;600;650;700;750;800&display=swap');
:root{--blue:#0b0584;--green:#3cc027;--yellow:#f6bb0d;--ink:#17182a;--muted:#697180;--heading:'Barlow Condensed','Arial Narrow',Arial,sans-serif;--body:'DM Sans',Arial,sans-serif}
*{box-sizing:border-box}body{margin:0;background:#f5f7fb;color:var(--ink);font:16px/1.5 var(--body)}button,input,a{-webkit-tap-highlight-color:transparent}button,a,input{outline-offset:4px}button{font:inherit;cursor:pointer}button:focus-visible,a:focus-visible{outline:3px solid var(--green)}[hidden]{display:none!important}
.workspace{max-width:500px;margin:28px auto;padding:0 16px 20px}.preview-caption{display:flex;justify-content:space-between;gap:12px;align-items:center;margin:0 2px 12px;font-size:14px;font-weight:750}.preview-caption #progress-label{font-size:12px;font-weight:500;color:#7c8495}.ballot{background:#fff;border-radius:18px;overflow:hidden;box-shadow:0 12px 35px #19284412,0 1px 3px #19284408;border:1px solid #e3e7ef}.ballot-header{color:#fff;background:var(--blue);padding:20px 24px 19px;display:flex;align-items:center;justify-content:space-between;border-bottom:5px solid var(--yellow)}.ballot-header span{font-size:12px;letter-spacing:1.8px;font-weight:650;color:#ffffffbf}.ballot-header h1{font:700 38px/1.1 var(--heading);letter-spacing:.1px;margin:3px 0 0}.ballot-check{width:43px;height:43px;border-radius:50%;border:2px solid #ffffff38;background:#ffffff0a;display:grid;place-items:center;font-size:27px;color:var(--green)}.ballot-instruction{margin:12px 20px 3px;font-size:12px;color:#68748a;text-align:center}.ballot-list{padding:8px 12px 12px}.candidate-row{display:flex;align-items:center;gap:13px;min-height:88px;padding:10px 11px;border-radius:8px;position:relative}.candidate-row:nth-child(odd){background:#f1f4fb}.candidate-row.featured{background:#ecf6e9;border-left:3px solid var(--green);padding-left:8px}.portrait{width:53px;height:64px;border-radius:5px;overflow:hidden;background:#e5eaf2;flex-shrink:0;display:flex;align-items:center;justify-content:center;border:1px solid #d4dbe8}.portrait img{width:100%;height:100%;object-fit:cover;object-position:center 28%;display:block}.portrait svg{fill:none;stroke:#aab4c4;width:31px;height:35px;stroke-width:1.3}.candidate-details{min-width:0;flex:1}.office{display:block;font-size:12px;font-weight:750;color:#68738b;letter-spacing:.55px;line-height:1.3;text-transform:uppercase}.candidate-name{font-size:14px;font-weight:800;color:#171b40;line-height:1.3;margin:3px 0 6px;overflow-wrap:anywhere}.candidate-name .party{font-size:12px;color:#708097;font-weight:650;margin-left:5px}.candidate-name.empty{color:#8f98a9;font-weight:500;font-size:13px}.digits{display:flex;gap:4px;align-items:center}.digit{width:27px;height:29px;border:1px solid #b6c0d8;background:#fff;color:var(--blue);display:grid;place-items:center;font:700 24px/1 var(--heading);border-radius:2px}.confirmation{display:inline-flex;margin-left:6px;color:#28721e;align-items:center}.confirmation svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.5}
.candidate-row.editable{padding-top:12px;padding-bottom:12px}.editable .office{cursor:pointer}.inline-controls{display:flex;align-items:center;gap:7px}.digit-input{position:relative;display:inline-block;flex-shrink:0;--cell:34px;--gap:5px}.digit-input input{position:absolute;inset:0;z-index:2;display:block;width:100%;height:100%;margin:0;padding:0;border:0;border-radius:4px;background:transparent;color:transparent;caret-color:transparent;outline:0;font:700 28px/44px var(--heading);letter-spacing:15px;cursor:text}.digit-input input::selection{background:transparent;color:transparent}.digit-input .digits{gap:var(--gap);pointer-events:none}.digit-input .digit{width:var(--cell);height:44px;border:1.5px solid #8191bc;border-radius:4px;font-size:28px;background:#fff;transition:border-color .15s,box-shadow .15s}.digit-input.empty .digit{border-style:dashed;border-color:#aab7d1;color:#aeb8cd}.digit-input:focus-within .digit{border-color:var(--blue);border-style:solid;box-shadow:0 0 0 1px #0b05840a}.digit-input:focus-within .digit.active{box-shadow:inset 0 -3px var(--blue);background:#f6f6ff}.digit-input:focus-within .digit.selected{background:#e7e6ff}.digit-input.invalid .digit{border-color:#bf635b}.field-status{margin-top:5px;font-size:12px;color:#68768e;line-height:1.35;min-height:16px}.field-status.success{display:none}.field-status.error{color:#b63126}.clear-field{border:0;background:transparent;color:#7b879d;border-radius:50%;height:44px;width:36px;flex-shrink:0;font-size:25px;line-height:1}.clear-field:hover{background:#e5eaf5;color:var(--blue)}
.ballot-brand{padding:14px 23px 10px;background:var(--blue);color:#fff;display:flex;justify-content:space-between;align-items:center;border-top:4px solid var(--green);gap:12px}.ballot-brand small{font-size:10px;letter-spacing:1px;display:block;color:#ffffffc7}.ballot-brand strong{font:700 24px/1.1 var(--heading)}.ballot-brand b{font:800 43px/1 var(--heading);color:var(--yellow);letter-spacing:.5px}.ballot-legal{background:var(--blue);color:#ffffffe0;text-align:center;font-size:12px;line-height:1.6;padding:2px 12px 17px}.save-area{margin-top:18px}.save-button{border:0;border-radius:11px;background:var(--yellow);color:var(--blue);min-height:54px;display:flex;align-items:center;justify-content:center;gap:12px;font-size:16px;font-weight:800;width:100%;box-shadow:0 3px 0 #dca404;text-decoration:none;transition:background .15s,transform .15s}.save-button:hover{background:#ffc922;transform:translateY(-1px)}.save-button:active{transform:translateY(1px)}.save-button:disabled{cursor:wait;opacity:.75}.save-button svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.save-area p{margin:11px 0 0;font-size:12px;color:#757d8d;text-align:center;min-height:18px}.paper-note{font-size:12px;color:#818998;text-align:center;margin:14px 0}.source{font-size:12px;color:#798393;text-align:center;line-height:1.5;margin:14px 0 0}.source a{color:inherit;text-underline-offset:3px}.source small{font-size:12px;display:block;color:#8a92a0;margin-top:1px}.data-error{color:#b63126!important}
 dialog{max-width:450px;width:calc(100% - 24px);border:0;border-radius:16px;padding:20px;box-shadow:0 30px 80px #0005;color:var(--ink)}dialog::backdrop{background:#080a3b99;backdrop-filter:blur(5px)}.dialog-head{display:flex;align-items:center;gap:12px}dialog h2{font:700 28px/1.1 var(--heading);color:var(--blue);margin:0}dialog p{font-size:13px;color:#697180}dialog img{display:block;width:100%;height:auto;max-height:60vh;object-fit:contain;margin:15px auto}.close-dialog{margin-left:auto;border:0;border-radius:50%;width:38px;height:38px;background:#f0f2f7;color:#3c4460;font-size:26px;flex-shrink:0}
@media(max-width:400px){.workspace{margin:16px auto;padding:0 12px 20px}.ballot-header{padding:18px 20px}.ballot-header h1{font-size:35px}.ballot-list{padding:8px 9px 10px}.candidate-row{padding:9px;gap:10px}.candidate-row.featured{padding-left:6px}.portrait{width:48px;height:61px}.office{font-size:11px;letter-spacing:.4px}.candidate-name{font-size:13px}.candidate-name .party{font-size:11px}.digit-input{--cell:31px;--gap:4px}.ballot-brand{padding-left:18px;padding-right:18px}.ballot-brand strong{font-size:22px}.ballot-brand b{font-size:40px}.ballot-legal{font-size:11px}.clear-field{width:32px}.ballot-instruction{margin-left:12px;margin-right:12px}.inline-controls{gap:4px}}
@media(max-width:340px){.portrait{width:40px;height:54px}.candidate-row{gap:8px;padding:8px}.digit-input{--cell:29px;--gap:3px}.inline-controls{gap:2px}.candidate-name .party{display:block;margin-left:0}.ballot-brand strong{font-size:20px}.ballot-brand b{font-size:35px}.ballot-brand small{font-size:9px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
