:root{color:#17212b;background:#f2f5f2;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}.voter-shell{width:min(100% - 1rem,42rem);margin:0 auto;padding:1.25rem 0 4rem}.voter-centered{display:grid;min-height:100vh;align-content:center}.voter-header{padding:.75rem 0 1.25rem}.voter-header h1{font-size:clamp(2.15rem,10vw,3.5rem)}.ballot-status,.live-total,.ballot-badges{display:flex;flex-wrap:wrap;gap:.45rem;align-items:center}.ballot-status{justify-content:space-between;margin-top:1rem;padding:.8rem .9rem;border-radius:.75rem;color:#274a35;background:#e4f2e8;font-size:.86rem;font-weight:750}.offline-banner{margin:0 0 1rem;padding:.85rem;border:1px solid #d9bd78;border-radius:.75rem;color:#6e5115;background:#fff7df}.ballot-list{display:grid;gap:1rem;margin:0;padding:0;list-style:none}.ballot-card,.request-card{overflow:hidden;border:1px solid #d8dfd9;border-radius:1rem;background:#fff;box-shadow:0 .6rem 1.8rem #203f2c12}.ballot-image,.ballot-image-fallback{width:100%;aspect-ratio:16 / 8}.ballot-image{display:block;object-fit:cover}.ballot-image-fallback{display:grid;color:#245d3c;background:linear-gradient(135deg,#e8f1ea,#f6f2e7);font-size:3rem;place-items:center}.ballot-card-body,.request-card{padding:1rem}.ballot-card h2{font-size:clamp(1.45rem,6vw,2rem)}.ballot-badges{margin-top:.75rem}.ballot-badges span,.live-total span{padding:.38rem .55rem;border-radius:999px;color:#3f5948;background:#edf3ee;font-size:.76rem;font-weight:700}.vote-choices{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.45rem;margin:1rem 0 0;padding:0;border:0}.vote-choices legend{margin-bottom:.5rem;color:#536157;font-size:.8rem;font-weight:750}.vote-choices button{display:grid;min-height:4.25rem;padding:.5rem .3rem;border:1px solid #c8d1ca;border-radius:.7rem;color:#34473a;background:#fff;cursor:pointer;font-size:.72rem;font-weight:750;place-items:center}.vote-choices button>span:first-child{font-size:1.35rem}.vote-choices button.selected{border-color:#245d3c;color:#173f2b;background:#dff0e4;box-shadow:inset 0 0 0 1px #245d3c}.save-status{min-height:1.25rem;margin:.45rem 0 0;color:#58675d;font-size:.78rem}.live-total{margin-top:.7rem}.live-total strong{color:#245d3c;font-size:1.25rem}.ballot-details{margin-top:.8rem}.ballot-details summary{min-height:2.75rem;color:#365942;cursor:pointer;font-weight:750;line-height:2.75rem}.request-card{margin-top:1rem}.request-card form{display:grid;gap:.7rem;margin-top:1.25rem;padding-top:1.25rem;border-top:1px solid #e3e8e4}.request-card label{display:grid;gap:.4rem;color:#45584b;font-size:.84rem;font-weight:750}.request-card input,.request-card select,.request-card button{min-height:3rem;padding:.65rem .75rem;border:1px solid #bcc8bf;border-radius:.65rem;background:#fff;font:inherit}.request-card button{border-color:#245d3c;color:#fff;background:#245d3c;font-weight:800}.login-shell{display:grid;min-height:100vh;padding:1rem;place-items:center}.login-card{width:min(100%,30rem);padding:clamp(1.5rem,6vw,2.5rem);border:1px solid #d8dfd9;border-radius:1rem;background:#fff;box-shadow:0 1rem 3rem #203f2c1a}.login-card h1{font-size:clamp(2.2rem,10vw,3.4rem)}.login-form{display:grid;gap:1rem;margin-top:1.75rem}.login-form label{display:grid;gap:.4rem;color:#536157;font-size:.82rem;font-weight:700}.login-form input,.login-form select,.login-form button{min-height:3rem;padding:.65rem .8rem;border:1px solid #bfcac2;border-radius:.6rem;background:#fff;font:inherit}.login-form button{border-color:#245d3c;color:#fff;background:#245d3c;font-weight:750}.login-status{margin:1.75rem 0 0;color:#667269}button{font:inherit}.shell{width:min(100% - 2rem,72rem);margin:0 auto;padding:clamp(1.5rem,4vw,3.5rem) 0 5rem}.page-header,.section-heading,.review-heading,.review-actions{display:flex;align-items:center;justify-content:space-between;gap:1.5rem}.eyebrow,.position{margin:0 0 .45rem;color:#59685c;font-size:.78rem;font-weight:750;letter-spacing:.08em;text-transform:uppercase}h1,h2,h3,p{margin-top:0}h1{margin-bottom:0;color:#173f2b;font-size:clamp(2.2rem,7vw,4rem);letter-spacing:-.045em;line-height:1}h2{margin-bottom:0;color:#173f2b;font-size:clamp(1.5rem,4vw,2.15rem);letter-spacing:-.025em}h3{margin-bottom:.75rem;color:#34473a;font-size:.82rem;letter-spacing:.04em;text-transform:uppercase}.summary{max-width:62ch;margin:1rem 0 0;color:#536157;font-size:1rem;line-height:1.65}.lock-badge,.recipe-status,.parent-badge{flex:0 0 auto;padding:.55rem .75rem;border-radius:999px;font-size:.78rem;font-weight:750}.header-badges{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}.workspace-tabs{display:flex;gap:.5rem;margin:1.25rem 0;padding:.35rem;border:1px solid #d7dfd9;border-radius:.75rem;background:#edf2ee}.workspace-tabs button{min-height:2.6rem;padding:.55rem 1rem;border:0;border-radius:.55rem;color:#536157;background:transparent;font-weight:750}.workspace-tabs button.active{color:#fff;background:#245d3c}.review-heading-actions{display:flex;align-items:center;gap:.6rem}.secondary-action.compact-next{min-height:auto;padding:.5rem .8rem}.parent-badge{color:#365644;background:#e9f2eb}.lock-badge{border:1px solid #c8a763;color:#725515;background:#fff6df}.lock-badge.unlocked{border-color:#8fbea0;color:#1d5b35;background:#e3f4e8}.error-banner{margin:1.5rem 0 0;padding:1rem;border:1px solid #e3b3ac;border-radius:.75rem;color:#7a251d;background:#fff0ed}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;margin:2rem 0 1rem}.metric{padding:1rem 1.1rem;border:1px solid #d8dfd9;border-radius:.85rem;background:#fff}.metric.good{border-color:#b9d5c1;background:#f0faf3}.metric.attention{border-color:#e2c886;background:#fff9e9}.metric p{margin-bottom:.5rem;color:#607066;font-size:.78rem;font-weight:700}.metric strong{color:#173f2b;font-size:1.8rem}.filters{display:flex;gap:.5rem;overflow-x:auto;padding:.25rem 0 1rem}.filter,.secondary-action,.primary-action{border-radius:.65rem;cursor:pointer}.filter{flex:0 0 auto;padding:.6rem .85rem;border:1px solid #cbd5cd;color:#405047;background:#fff}.filter.active{border-color:#245d3c;color:#fff;background:#245d3c}.review-card,.taxonomy{border:1px solid #d8dfd9;border-radius:1rem;background:#fff;box-shadow:0 1rem 3rem #203f2c0f}.rules-card,.preview-results{margin-top:1.5rem;padding:clamp(1.25rem,4vw,2rem);border:1px solid #dbe2dc;border-radius:1rem;background:#fff;box-shadow:0 .65rem 2rem #25413014}.rule-version{padding:.45rem .7rem;border-radius:999px;color:#245d3c;background:#e7f2ea;font-size:.8rem;font-weight:800}.preview-controls,.version-save,.simple-rules{display:grid;grid-template-columns:minmax(12rem,1fr) auto;gap:1rem;align-items:end;margin-top:1.5rem}.simple-rules{grid-template-columns:repeat(2,minmax(0,1fr))}.preview-controls label,.version-save label,.simple-rules label,.advanced-rule-grid label{display:grid;gap:.4rem;color:#536157;font-size:.82rem;font-weight:750}.preview-controls input,.version-save input,.simple-rules select,.advanced-rule-grid input{min-height:2.7rem;padding:.55rem .7rem;border:1px solid #bfcac2;border-radius:.55rem;background:#fff;font:inherit}.candidate-list{display:grid;gap:.9rem;margin:1.5rem 0 0;padding:0;list-style:none}.candidate-card{display:grid;grid-template-columns:2.25rem 7rem minmax(0,1fr);gap:1rem;align-items:start;padding:1rem;border:1px solid #dfe5e0;border-radius:.8rem;background:#fbfcfb}.candidate-card.no-image{grid-template-columns:2.25rem minmax(0,1fr)}.candidate-rank{display:grid;width:2.25rem;height:2.25rem;border-radius:999px;color:#fff;background:#245d3c;font-weight:850;place-items:center}.candidate-image{width:7rem;height:5.25rem;border-radius:.6rem;object-fit:cover}.candidate-content{min-width:0}.candidate-title{display:flex;gap:1rem;align-items:start;justify-content:space-between}.candidate-title h3{margin:0}.candidate-title>strong{color:#245d3c;font-size:1.15rem}.compact-tags{margin-top:.65rem}.candidate-card details,.advanced-rules{margin-top:.9rem}.candidate-card summary,.advanced-rules summary{color:#365942;cursor:pointer;font-weight:750}.score-breakdown{display:grid;gap:.4rem;margin:.75rem 0 0;padding:0;list-style:none}.score-breakdown li{display:flex;gap:1rem;justify-content:space-between;color:#5d6960;font-size:.88rem}.preview-ballot-actions{display:flex;gap:1rem;align-items:center;justify-content:space-between;margin-top:1.5rem;padding-top:1.25rem;border-top:1px solid #e1e6e2}.preview-ballot-actions h3{margin-bottom:.35rem}.preview-ballot-actions p,.voter-link-panel>p{margin:0;color:#637067}.saved-ballot{border-color:#9bbda5;background:#fbfefb}.saved-ballot-actions{justify-content:flex-start}.archived-ballots ul{margin-bottom:0;color:#637067}.voter-link-panel{margin-top:1rem;padding:1rem;border-radius:.75rem;background:#eef5ef}.voter-link-panel ul{display:grid;gap:.55rem;margin:1rem 0 0;padding:0;list-style:none}.voter-link-panel li{display:grid;grid-template-columns:minmax(7rem,1fr) auto auto;gap:.5rem;align-items:center}.voter-link-panel a,.voter-link-panel button{min-height:2.6rem;padding:.55rem .7rem;border:1px solid #bfcac2;border-radius:.55rem;color:#274a35;background:#fff;font:inherit;font-weight:750;line-height:1.4;text-decoration:none}.advanced-rule-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.9rem;margin-top:1rem}.version-history{margin-top:1.5rem;padding-top:1.25rem;border-top:1px solid #e1e6e2}.version-history ul{margin:0;padding:0;list-style:none}.version-history li{display:flex;gap:1rem;align-items:center;justify-content:space-between;padding:.7rem 0;border-bottom:1px solid #edf0ed}.version-history button{min-height:2.25rem;padding:.35rem .65rem;border:1px solid #bfcac2;border-radius:.45rem;color:#30483a;background:#fff;font-weight:700}.review-card{min-height:30rem;padding:clamp(1.25rem,4vw,2rem)}.recipe-status.ready{color:#1d5b35;background:#e3f4e8}.recipe-status.needs_review{color:#725515;background:#fff1c9}.recipe-status.not_in_rotation{color:#536157;background:#edf0ed}.recipe-image{aspect-ratio:16 / 7;overflow:hidden;margin:1.5rem 0;border-radius:.8rem;background:#f4f7f4}.recipe-image img{width:100%;height:100%;display:block;object-fit:cover}.recipe-facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.7rem;margin:1.5rem 0}.recipe-facts div{min-width:0;padding:.8rem;border-radius:.65rem;background:#f4f7f4}.recipe-facts dt{color:#647269;font-size:.72rem;font-weight:750;text-transform:uppercase}.recipe-facts dd{overflow:hidden;margin:.3rem 0 0;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.review-section{margin-top:1.5rem}.tag-list{display:flex;flex-wrap:wrap;gap:.45rem}.tag-list span{padding:.4rem .6rem;border-radius:.45rem;color:#365644;background:#e9f2eb;font-size:.84rem}.tag-list .muted-tag{color:#6c746e;background:#f0f1f0}.planner-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem}.planner-group{min-width:0;margin:0;padding:.9rem;border:1px solid #d8dfd9;border-radius:.75rem}.planner-group legend{padding:0 .35rem;color:#2d4937;font-size:.82rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.group-hint{margin:-.15rem 0 .65rem;color:#768078;font-size:.75rem}.planner-options{display:grid;gap:.5rem}.planner-options label{display:grid;grid-template-columns:auto 1fr;gap:.55rem;align-items:center;padding:.65rem .75rem;border:1px solid #d8dfd9;border-radius:.6rem}.selection-error{margin:.75rem 0 0;color:#8a6214}.owner-sign-in{display:grid;grid-template-columns:1fr 1fr auto;gap:.75rem;align-items:end;margin-top:1.5rem;padding:1rem;border-radius:.75rem;background:#f4f7f4}.owner-sign-in label{display:grid;gap:.35rem;color:#536157;font-size:.78rem;font-weight:700}.owner-sign-in input,.owner-sign-in select,.owner-sign-in button{min-height:2.6rem;padding:.55rem .7rem;border:1px solid #bfcac2;border-radius:.55rem;background:#fff}.owner-sign-in button{color:#fff;background:#245d3c;font-weight:700}.review-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}.issue-list{margin:0;padding-left:1.2rem;color:#6d4f12;line-height:1.6}.clear-state{margin-bottom:0;color:#3d6b4c}.review-actions{margin-top:2rem;padding-top:1.25rem;border-top:1px solid #e1e6e2}.secondary-action,.primary-action{min-height:2.75rem;padding:.65rem 1rem;border:1px solid #bfcac2;font-weight:700}.secondary-action{color:#30483a;background:#fff}.primary-action{margin-left:auto;border-color:#245d3c;color:#fff;background:#245d3c}button:disabled{opacity:.55;cursor:not-allowed}.empty-state{display:grid;min-height:25rem;margin:0;color:#667269;place-items:center}.taxonomy{margin-top:1.5rem;padding:clamp(1.25rem,4vw,2rem)}.section-heading>p{margin:0;color:#637067;font-weight:700}.taxonomy ul{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;margin:1.5rem 0 0;padding:0;border-top:1px solid #e0e5e1;list-style:none}.taxonomy li{display:grid;grid-template-columns:1fr auto auto;gap:.8rem;align-items:center;min-width:0;padding:.75rem 0;border-bottom:1px solid #e0e5e1}.taxonomy li:nth-child(odd){padding-right:1rem}.taxonomy li:nth-child(2n){padding-left:1rem}.taxonomy small{color:#768078}.taxonomy strong{font-size:.72rem;text-transform:uppercase}.taxonomy strong.existing{color:#2e7046}.taxonomy strong.missing{color:#976d16}@media(max-width:44rem){.page-header,.review-heading,.section-heading{align-items:flex-start;flex-direction:column;gap:.9rem}.metrics,.recipe-facts,.review-grid,.planner-groups,.taxonomy ul{grid-template-columns:1fr 1fr}.taxonomy li:nth-child(n){padding-right:0;padding-left:0}.review-actions{flex-wrap:wrap}.preview-ballot-actions{align-items:stretch;flex-direction:column}.preview-ballot-actions .primary-action{width:100%;margin-left:0}.saved-ballot-actions button{width:100%}.owner-sign-in,.preview-controls,.version-save,.simple-rules,.advanced-rule-grid{grid-template-columns:1fr}.preview-controls .primary-action,.version-save .primary-action{width:100%;margin-left:0}.primary-action{order:3;width:100%;margin-left:0}}@media(max-width:28rem){.metrics,.recipe-facts,.review-grid,.taxonomy ul,.workspace-tabs,.candidate-card,.candidate-card.no-image{grid-template-columns:1fr}.workspace-tabs{display:grid}.candidate-image{width:100%;height:10rem}.voter-link-panel li{grid-template-columns:1fr 1fr}.voter-link-panel li strong{grid-column:1 / -1}}
