:root{--cream:#fff4e6;--paper:#fff;--cocoa:#4a2c2a;--cocoa-soft:#8a6a64;--strawberry:#e8476f;--strawberry-dark:#c42f56;--butter:#ffd166;--mint:#3fb68b;--line:#f0dcc8;--shadow:0 2px 0 #f0dcc8, 0 8px 24px #4a2c2a14;--radius:18px;color:var(--cocoa);background:var(--cream);-webkit-tap-highlight-color:transparent;font-family:Fredoka,ui-rounded,system-ui,sans-serif}*{box-sizing:border-box}body{background:var(--cream);min-height:100dvh;margin:0}h1,h2,h3{margin:0;line-height:1.15}h1{font-size:1.8rem;font-weight:700}h2{font-size:1.35rem;font-weight:600}h3{margin-bottom:.5rem;font-size:1.1rem;font-weight:600}p{margin:0;line-height:1.45}a{color:var(--strawberry-dark)}img{max-width:100%}.page{max-width:720px;margin:0 auto;padding:16px 16px 64px}.topbar{align-items:center;gap:10px;max-width:720px;margin:0 auto;padding:12px 16px;display:flex}.brand{color:var(--cocoa);font-size:1.2rem;font-weight:700;text-decoration:none}.stack{flex-direction:column;gap:16px;display:flex}.row{align-items:center;gap:10px;display:flex}.row.wrap{flex-wrap:wrap}.row.spread{justify-content:space-between}.center{text-align:center;align-items:center}.muted{color:var(--cocoa-soft);font-size:.92em}.error{color:var(--strawberry-dark);font-weight:500}.narrow{max-width:380px;margin:40px auto}.card{background:var(--paper);border-radius:var(--radius);box-shadow:var(--shadow);color:inherit;padding:18px;text-decoration:none}.card.success{box-shadow:none;background:#e3f8ef}.card.error{background:#ffe3ea}button,.button{font:inherit;border:2px solid var(--line);background:var(--paper);color:var(--cocoa);cursor:pointer;border-radius:999px;justify-content:center;align-items:center;gap:6px;padding:10px 18px;font-weight:500;text-decoration:none;transition:transform 80ms,background .15s;display:inline-flex}button:active,.button:active{transform:scale(.96)}button:disabled{opacity:.45;cursor:default}button.primary,.button.primary{background:var(--strawberry);border-color:var(--strawberry);color:#fff}button.primary:hover,.button.primary:hover{background:var(--strawberry-dark)}button.big,.button.big{width:100%;padding:16px 24px;font-size:1.15rem}button.danger{color:var(--strawberry-dark)}button.link{color:var(--cocoa-soft);background:0 0;border:none;text-decoration:underline}.button.disabled{pointer-events:none;opacity:.45}input,textarea,select{font:inherit;border:2px solid var(--line);background:var(--paper);width:100%;color:var(--cocoa);border-radius:12px;padding:12px 14px}input:focus,textarea:focus,select:focus{border-color:var(--strawberry);outline:none}input[type=checkbox]{width:22px;height:22px;accent-color:var(--strawberry)}label{flex-direction:column;gap:6px;font-weight:500;display:flex}label.row{flex-direction:row;font-weight:400}.segmented{background:var(--line);border-radius:999px;grid-auto-columns:1fr;grid-auto-flow:column;gap:6px;padding:5px;display:grid}.segmented button{background:0 0;border:none;padding:12px 8px}.segmented button.on{background:var(--paper);box-shadow:0 2px 6px #0000001a}.pill{background:var(--butter);border-radius:999px;padding:2px 10px;font-size:.85rem;font-weight:500;display:inline-block}.status{white-space:nowrap;background:var(--line);border-radius:999px;padding:4px 12px;font-size:.85rem;font-weight:600}.status-checkin{background:#d8f0ff}.status-voting{color:var(--strawberry-dark);background:#ffe0e8}.status-closed{background:#fff0c2}.status-revealed{background:#d9f6e8}.card-number{color:var(--strawberry);font-variant-numeric:tabular-nums;font-weight:700}.card-number.huge{font-size:2.6rem;line-height:1}.loading{text-align:center;color:var(--cocoa-soft);padding:60px 0;animation:1.2s infinite pulse}.hero{padding:40px 0}.big-emoji{font-size:4rem}.bob{animation:2s ease-in-out infinite bob}.spin{animation:3s linear infinite spin;display:inline-block}.party-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.mine-banner{background:#e3f8ef;align-items:center;gap:14px;display:flex}.enter-card{width:100%;max-width:320px}.enter-card label{color:var(--cocoa-soft);font-size:.9rem;font-weight:400}.enter-card input{text-align:center;font-size:1.3rem}.dish-photo{aspect-ratio:4/3;object-fit:cover;background:var(--line);border-radius:12px;width:100%;display:block}.dish-photo.placeholder{place-items:center;font-size:2.5rem;display:grid}.dish-photo.large{aspect-ratio:4/3;border-radius:var(--radius)}.dish-photo.thumb{aspect-ratio:1;flex-shrink:0;width:56px;height:56px;font-size:1.5rem}.photo-picker{aspect-ratio:4/3;border:3px dashed var(--line);border-radius:var(--radius);background:var(--paper);text-align:center;cursor:pointer;place-items:center;font-size:1.1rem;display:grid;position:relative;overflow:hidden}.photo-picker span{font-size:1rem;line-height:1.6}.photo-picker img{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.photo-uploading{color:#fff;background:#0009;border-radius:999px;padding:4px 12px;position:absolute;bottom:10px}.dish-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;display:grid}.dish-tile{background:var(--paper);box-shadow:var(--shadow);color:inherit;border-radius:14px;text-decoration:none;position:relative}.dish-tile .tile-main{text-align:left;background:0 0;border:none;border-radius:14px;flex-direction:column;align-items:stretch;gap:6px;width:100%;padding:6px;display:flex}.dish-tile .tile-label{padding:0 4px 4px;font-size:.95rem;line-height:1.25}.dish-tile.picked{outline:3px solid var(--strawberry)}.tile-medal{filter:drop-shadow(0 2px 3px #0000004d);font-size:2.2rem;animation:.3s pop;position:absolute;top:2px;left:4px}.tile-info{background:#ffffffe6;width:32px;height:32px;padding:0;font-size:1.1rem;position:absolute;top:10px;right:10px}.ballot{flex-direction:column;gap:14px;display:flex}.podium-slots{flex-direction:column;gap:8px;display:flex}.slot{border:2px dashed var(--line);background:#ffffff80;border-radius:14px;align-items:center;gap:10px;min-height:56px;padding:8px 12px;display:flex}.slot.filled{background:var(--paper);border-style:solid;border-color:var(--butter)}.slot .medal{font-size:1.8rem}.slot-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.slot-actions{gap:4px;display:flex}.slot-actions button{padding:4px 10px;font-size:.85rem}.save-status{text-align:center;min-height:1.4em;color:var(--mint);font-size:.9rem}.medal-buttons{grid-template-columns:repeat(3,1fr);gap:10px;width:100%;display:grid}.medal-buttons button{border-radius:16px;flex-direction:column;padding:12px 6px}.medal-buttons .medal{font-size:2.4rem}.medal-buttons button.on{border-color:var(--strawberry);background:#ffe3ea}.sheet-backdrop{z-index:50;background:#4a2c2a73;justify-content:center;align-items:flex-end;animation:.15s fade;display:flex;position:fixed;inset:0}.sheet{background:var(--cream);border-radius:24px 24px 0 0;flex-direction:column;gap:14px;width:100%;max-width:560px;max-height:92dvh;padding:20px 16px 32px;animation:.22s slide-up;display:flex;overflow-y:auto}@media (width>=700px){.sheet-backdrop{align-items:center}.sheet{border-radius:24px}}.card-header{align-items:center;gap:16px;display:flex}.dish-view{background:var(--paper);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.dish-view .dish-photo.large{border-radius:0}.dish-view-body{flex-direction:column;gap:10px;padding:16px;display:flex}.podium-list{flex-direction:column;gap:10px;margin:8px 0 0;padding:0;list-style:none;display:flex}.podium-list li{align-items:center;gap:12px;display:flex}.podium-list .medal{font-size:2rem}.leaderboard{border-collapse:collapse;width:100%}.leaderboard th,.leaderboard td{text-align:center;border-bottom:1px solid var(--line);padding:8px 6px}.leaderboard th:first-child,.leaderboard td:first-child{text-align:left}.admin-nav{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.admin-nav a{color:var(--cocoa);background:var(--paper);border-radius:999px;padding:8px 14px;text-decoration:none}.admin-nav a.active{background:var(--cocoa);color:var(--cream)}.party-list{margin:0;padding:0;list-style:none}.party-list li{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:10px 0;display:flex}.party-list a{color:inherit;text-decoration:none}.stat{background:var(--cream);border-radius:999px;padding:6px 14px}.dish-table{border-collapse:collapse;width:100%}.dish-table td{border-bottom:1px solid var(--line);vertical-align:middle;padding:8px 4px}.dish-table td.actions{text-align:right;white-space:nowrap}.dish-table td.actions button{padding:6px 12px}.standings table{border-collapse:collapse;width:100%;margin-bottom:16px;font-size:.92rem}.standings td,.standings th{border-bottom:1px solid var(--line);text-align:left;padding:6px 4px}.standings tr.tied{background:#fff0c2}.tie-card{border:3px solid var(--butter)}.tie-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.tie-list li{background:var(--cream);border-radius:12px;align-items:center;gap:10px;padding:8px;display:flex}.tie-list li>span:nth-child(2){flex:1}details summary{cursor:pointer}.print-area{flex-direction:column;gap:24px;margin-top:16px;display:flex}.print-area>*{box-shadow:var(--shadow);background:#fff}@media print{@page{size:letter;margin:.4in}body,:root{background:#fff}.page{max-width:none;padding:0}#root,.page,.stack{display:block!important}.no-print,.topbar,.admin-nav{display:none!important}.print-area{margin:0;display:block}.print-area>*{box-shadow:none}.print-page{break-after:page;page-break-after:always}.print-page:last-child{break-after:auto;page-break-after:auto}}.print-page{width:7.7in;height:10in;margin:0 auto;overflow:hidden}.poster{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:.3in;height:9.9in;display:flex}.poster img{width:5in}.poster-title{font-size:42pt;font-weight:700}.poster-sub{color:var(--strawberry);font-size:40pt;font-weight:600}.poster-url{font-size:18pt}.card-sheet{grid-template-columns:1fr 1fr;grid-auto-rows:3.3in;align-content:start;display:grid}.print-card{break-inside:avoid;border:1px dashed #bbb;grid-template:"num num""qr text"1fr"url url"/1.6in 1fr;gap:.08in .15in;height:3.3in;padding:.18in;display:grid}.print-card-number{color:var(--strawberry);grid-area:num;font-size:40pt;font-weight:700;line-height:1}.print-card img{grid-area:qr;align-self:center;width:1.6in}.print-card-text{grid-area:text;align-self:center;font-size:12pt;line-height:1.5}.print-card-url{color:#777;grid-area:url;font-size:9pt}@keyframes bob{50%{transform:translateY(-10px)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.4}}@keyframes pop{0%{transform:scale(.2)}70%{transform:scale(1.2)}}@keyframes fade{0%{opacity:0}}@keyframes slide-up{0%{opacity:0;transform:translateY(40px)}}.reveal{color:#fff;cursor:pointer;-webkit-user-select:none;user-select:none;background:radial-gradient(at top,#6b2150 0%,#2a0f2e 55%,#12061a 100%);font-size:clamp(14px,1.6vw,28px);transition:background 1s;position:fixed;inset:0;overflow:hidden}.reveal.gold{background:radial-gradient(#7a5a00 0%,#3d1f00 60%,#140800 100%)}.reveal-center{z-index:2;text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:3vh;height:100%;padding:3vh 4vw;display:flex;position:relative}.reveal-title{background:linear-gradient(90deg,#ffd166,#ff8fab,#ffd166) 0 0/200%;color:#0000;-webkit-background-clip:text;background-clip:text;font-size:5em;font-weight:700;animation:3s linear infinite shimmer}.reveal-kicker{opacity:.85;font-size:1.8em}.reveal-hint{opacity:.5;font-size:.9em}.reveal-warning{background:#ffd16633;border-radius:20px;padding:1em 1.5em;font-size:1.6em}.reveal-start{color:#fff;background:#ff4f7b;border:none;padding:.6em 1.6em;font-size:2em;animation:2s ease-in-out infinite breathe;box-shadow:0 0 40px #ff4f7b99}.reveal-stats{justify-content:center;gap:4vw;margin:4vh 0;display:flex}.reveal-stats div{opacity:.9;flex-direction:column;font-size:1.4em;display:flex}.reveal-stats strong{color:#ffd166;font-size:3em;line-height:1}.reveal-emoji{font-size:12em;line-height:1}.blink{animation:1.6s infinite pulse}.reveal-place{letter-spacing:.02em;font-size:2.6em;font-weight:700}.place-1 .reveal-place{color:#ffd166;text-shadow:0 0 30px #ffd166b3;font-size:3.4em}.mystery{font-size:16em;line-height:1}.reveal-dish{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#ffffff14;border-radius:32px;align-items:center;gap:4vw;max-width:92vw;padding:3vh 3vw;display:flex}.place-1 .reveal-dish{border:3px solid #ffd166cc;box-shadow:0 0 80px #ffd16680}.reveal-dish img,.reveal-dish-placeholder{aspect-ratio:4/3;object-fit:cover;border-radius:22px;width:42vw;max-height:62vh;box-shadow:0 20px 60px #00000080}.reveal-dish-placeholder{background:#ffffff14;place-items:center;font-size:10em;display:grid}.reveal-dish-info{text-align:left;flex-direction:column;gap:2vh;min-width:30vw;display:flex}.reveal-dish-info h1{font-size:3.4em}.reveal-dish-number{color:#ff8fab;font-size:1.4em;font-weight:600}.reveal-points{opacity:.85;font-size:1.3em}.reveal-baker{margin-top:2vh;font-size:3em;font-weight:700}.hidden-baker{opacity:.5;font-size:2em;font-style:italic;animation:1.5s infinite pulse}.place-1 .reveal-baker:not(.hidden-baker){color:#ffd166}.finale{justify-content:center;gap:5vw;width:100%;display:flex}.finale-col{flex:1;max-width:44vw}.finale-col h2{margin-bottom:2vh;font-size:2em}.finale-podium{justify-content:center;align-items:flex-end;gap:1vw;display:flex}.finale-step{flex-direction:column;flex:1;align-items:center;gap:.8vh;display:flex}.finale-step img,.finale-placeholder{aspect-ratio:1;object-fit:cover;border-radius:16px;width:100%}.finale-placeholder{background:#ffffff14;place-items:center;font-size:3em;display:grid}.finale-name{font-size:1.3em;font-weight:700}.finale-dish{opacity:.8;font-size:.9em}.finale-block{background:linear-gradient(#fff3,#fff1);border-radius:12px 12px 0 0;place-items:center;width:100%;font-size:2.5em;display:grid}.step-1 .finale-block{background:linear-gradient(#ffd166aa,#ffd16622);height:22vh}.step-2 .finale-block{height:15vh}.step-3 .finale-block{height:10vh}.floaters{z-index:1;pointer-events:none;position:absolute;inset:0}.floaters span{opacity:.18;animation:linear infinite float-up;position:absolute;bottom:-10vh}.pop-in{flex-direction:column;align-items:center;gap:3vh;animation:.7s cubic-bezier(.2,1.4,.4,1) both pop-in;display:flex}.zoom-in{flex-direction:column;align-items:center;gap:2vh;animation:.8s cubic-bezier(.2,1.3,.4,1) both zoom-in;display:flex}.spin-slow{animation:2.5s ease-in-out infinite wobble}.flip-in{animation:.9s cubic-bezier(.2,1.2,.4,1) both flip-in}.bounce-in{animation:.8s cubic-bezier(.2,1.6,.4,1) both bounce-in}.shake{animation:.35s ease-in-out infinite shake,5s ease-in forwards grow}@keyframes shimmer{to{background-position:200%}}@keyframes breathe{50%{transform:scale(1.06)}}@keyframes float-up{to{transform:translateY(-130vh)rotate(360deg)}}@keyframes pop-in{0%{opacity:0;transform:scale(.6)}}@keyframes zoom-in{0%{opacity:0;filter:blur(10px);transform:scale(3)}}@keyframes wobble{25%{transform:rotate(-12deg)scale(1.05)}75%{transform:rotate(12deg)scale(1.05)}}@keyframes flip-in{0%{opacity:0;transform:perspective(1200px)rotateY(90deg)scale(.8)}}@keyframes bounce-in{0%{opacity:0;transform:scale(.3)translateY(40px)}}@keyframes shake{0%,to{transform:rotate(0)}25%{transform:rotate(-6deg)}75%{transform:rotate(6deg)}}@keyframes grow{0%{scale:.7}to{scale:1.3}}@media (prefers-reduced-motion:reduce){*,:before,:after{animation-duration:.01ms!important;animation-iteration-count:1!important}}
