/* Christmas contest decoration. No external assets or added visible content. */
:root{--christmas-green:#173e34;--christmas-red:#782c39;--christmas-gold:#eed39a}
.contest-hero{position:relative;isolation:isolate;overflow:hidden;background-color:var(--christmas-green);background-image:radial-gradient(ellipse at 95% 90%,#376049 0,transparent 48%),linear-gradient(120deg,#12352d,#214b3e);border-bottom:4px solid #b18b4f;padding-top:5rem}
.contest-hero::before{content:"";position:absolute;z-index:-1;inset:0 0 auto;height:62px;pointer-events:none;background-image:radial-gradient(ellipse 5px 8px at 18px 29px,#f7dda0 95%,transparent),radial-gradient(ellipse 5px 8px at 66px 37px,#eab8b4 95%,transparent),radial-gradient(ellipse 5px 8px at 114px 29px,#d2e3c2 95%,transparent),radial-gradient(ellipse 14px 17px at 18px 29px,#f7dda026,transparent),radial-gradient(ellipse 14px 17px at 66px 37px,#eab8b426,transparent),radial-gradient(ellipse 14px 17px at 114px 29px,#d2e3c226,transparent),linear-gradient(0deg,transparent 41px,#a1ae8b 41px,#a1ae8b 43px,transparent 43px);background-size:144px 62px}
.contest-hero::after{content:"";position:absolute;z-index:-1;right:-42px;bottom:-58px;width:290px;height:240px;pointer-events:none;opacity:.35;background:repeating-linear-gradient(145deg,transparent 0 18px,#779071 19px 23px,transparent 24px 37px);clip-path:polygon(52% 0,100% 100%,0 100%);transform:rotate(15deg)}
.contest-hero h1{font-family:var(--font-display);font-weight:400;letter-spacing:-.045em;line-height:1.04;margin:.2rem 0 1.4rem;text-wrap:balance}
.contest-hero .lead{max-width:670px;color:#f1f3e9}
.contest-hero .kicker{color:var(--christmas-gold)}
.contest-hero .button-light{background:#fff9ec;color:#173e34;border:1px solid #eed39a}
.contest-hero .button-light:hover{background:#eed39a}
.contest-hero .dates{gap:1rem;flex-wrap:wrap;max-width:730px}
.contest-hero .dates p{flex:1;min-width:135px;margin:.5rem 0;padding:.85rem 1rem;border:1px solid #8a9f86;border-radius:8px;background:#12352d80}
.contest-hero .dates strong{color:var(--christmas-gold);font-size:.76rem;letter-spacing:.12em;text-transform:uppercase}
.contest-hero #phase-status:not(:empty){display:inline-block;padding:.45rem .8rem;border-radius:6px;border:1px solid #b9c6a9;background:#fff9ec;color:#173e34;font-weight:700}
body:has(.contest-hero){background:#fbf8f1;--mist:#edf1e8;--lime:#eed39a}
body:has(.contest-hero) .site-header{border-bottom:3px solid #782c39}
body:has(.contest-hero) .site-header nav{line-height:2.2}
body:has(.contest-hero) .site-header nav a{display:inline-flex;align-items:center;min-height:44px;padding:.25rem .15rem;text-underline-offset:.25em}
body:has(.contest-hero) .section .kicker{color:#782c39}
body:has(.contest-hero) .section h2{text-wrap:balance}
body:has(.contest-hero) .section-tint{border-block:1px solid #d4dccb;background:#edf1e8}
body:has(.contest-hero) .rules,body:has(.contest-hero) .display-card{background:#fffdf8;border-color:#b7c6b5;box-shadow:0 5px 20px #173e3408}
body:has(.contest-hero) .display-card{border-top:4px solid #782c39}
body:has(.contest-hero) #prizes .rules{border-top:4px solid #aa8446}
body:has(.contest-hero) .rules summary{font-weight:700;cursor:pointer;min-height:44px;padding:.35rem 0;color:#173e34}
body:has(.contest-hero) .demo{background:#fff7e7;border-color:#b99353;border-radius:8px}
body:has(.contest-hero) fieldset{background:#fffdf8;border-radius:10px;border-color:#8b9d88}
body:has(.contest-hero) fieldset legend{padding:0 .5rem;font-weight:700;color:#173e34}
body:has(.contest-hero) .button-primary{background:#782c39;color:#fffdf8}
body:has(.contest-hero) .button-primary:hover{background:#59202b}
body:has(.contest-hero) :focus-visible{outline:3px solid #9b5c12;outline-offset:4px}
body:has(.contest-hero) input[type=checkbox]{accent-color:#173e34}
body:has(.contest-hero) .site-footer{background:#173e34;border-top:4px solid #b18b4f}
@media(max-width:720px){.contest-hero{padding-top:4.4rem}.contest-hero::after{width:170px;height:150px;opacity:.22}.contest-hero .dates{gap:.6rem}.contest-hero .dates p{min-width:100px;padding:.75rem .65rem;font-size:.92rem}body:has(.contest-hero) .header-inner{gap:.6rem;padding-block:.6rem}body:has(.contest-hero) .site-header nav{width:100%;font-size:.92rem}body:has(.contest-hero) .rules,body:has(.contest-hero) .display-card{padding:1.15rem}}
@media(max-width:380px){.contest-hero .dates p{min-width:85px;font-size:.86rem}.contest-hero h1{font-size:2.6rem}}
@media(prefers-reduced-motion:reduce){html:has(.contest-hero){scroll-behavior:auto}body:has(.contest-hero) .button{transition:none}body:has(.contest-hero) .button:hover{transform:none}}
@media(forced-colors:active){.contest-hero::before,.contest-hero::after{display:none}.contest-hero .dates p{border:1px solid CanvasText}}

#consent-dialog{width:min(680px,calc(100% - 24px));max-height:90vh;overflow:auto;padding:24px;border:2px solid #245741;border-radius:18px;background:#fffaf0;color:#173e30}#consent-dialog::backdrop{background:rgba(7,31,24,.65)}#consent-form>label,#consent-form .rules label{display:flex;align-items:flex-start;gap:12px;margin:20px 0}#consent-form input[type=checkbox]{flex:none;width:22px;height:22px;margin-top:3px}.consent-actions{display:flex;flex-wrap:wrap;gap:12px}.consent-actions button{min-height:44px} @media(hover:none) and (pointer:coarse){#mobile-upload,#mobile-handoff{display:none!important}}

/* Keep contest navigation visible, with space for anchored sections. */
body:has(.contest-hero) .site-header{position:sticky;top:0;z-index:30;box-shadow:0 3px 12px #173d3a18}
html:has(.contest-hero){scroll-padding-top:125px}
@media(max-width:720px){
 body:has(.contest-hero) .header-inner{flex-wrap:nowrap;gap:.75rem;min-height:76px}
 body:has(.contest-hero) .brand-logo{width:78px;height:auto}
 body:has(.contest-hero) .site-header nav{width:auto;flex:1;line-height:1.4;font-size:.88rem;text-align:right}
 html:has(.contest-hero){scroll-padding-top:105px}
}

/* Shared public contest pages. */
.contest-page .site-header{position:sticky;top:0;z-index:30;background:#fff;box-shadow:0 3px 12px #173d3a18;border-bottom:3px solid #782c39}
.contest-page .site-header nav{line-height:2.2}
.contest-page .site-header nav a{display:inline-flex;align-items:center;min-height:44px;padding:.25rem .15rem}
html:has(.contest-page){scroll-padding-top:125px}
.full-contest-rules,.display-page{padding-block:2rem;max-width:900px}
.full-contest-rules h2{margin-top:2rem}.full-contest-rules aside{padding:1rem;background:#fff2cf;border:1px solid #b39445}.full-contest-rules table{width:100%;border-collapse:collapse}.full-contest-rules th,.full-contest-rules td{text-align:left;border-bottom:1px solid #b8c6bc;padding:.6rem}.full-contest-rules .permission{background:white;padding:1.25rem;border-left:5px solid #782c39}.entry-intro{padding-block:1rem}.display-page .rules{margin-block:2rem}#display-media img,#display-media video{width:100%;max-height:65vh;object-fit:contain}#display-media button{min-width:44px;min-height:44px}
@media(max-width:720px){.contest-page .header-inner{flex-wrap:nowrap;gap:.75rem;min-height:76px;padding-block:.5rem}.contest-page .brand-logo{width:78px;height:auto}.contest-page .site-header nav{flex:1;width:auto;line-height:1.4;font-size:.88rem;text-align:right}html:has(.contest-page){scroll-padding-top:120px}.full-contest-rules table{font-size:.88rem}}
@media print{.contest-page .site-header,.contest-page .site-footer,.skip-link{display:none}.full-contest-rules{max-width:none;padding:0;font-size:11pt}.full-contest-rules h2{break-after:avoid}}
@media(max-width:720px){.contest-page .site-header nav{font-size:.82rem;line-height:1.25}.contest-page .site-header nav a{padding:.1rem;min-height:38px}html:has(.contest-page){scroll-padding-top:155px}}
#entry-email-form{margin-top:0}#entry-email-form button,#entry-email-code-form button{margin-top:.75rem}

/* Transparent lamp string hangs over the content from the shared header edge. */
body:has(.has-christmas-lights) .contest-hero{padding-top:3rem}
.contest-hero::before{display:none}
.site-header.has-christmas-lights{overflow:visible}
.christmas-twinkle{position:absolute;left:0;right:0;top:calc(100% - 7px);height:54px;pointer-events:none;overflow:visible;background:transparent;border:0}
.christmas-twinkle::before{content:"";position:absolute;left:0;right:0;top:7px;height:2px;background:#749075;box-shadow:0 1px 2px #071d17}
.christmas-twinkle-bulb{position:absolute;display:block;width:18px;height:46px;object-fit:contain;transform:translateX(-50%);filter:brightness(1);pointer-events:none}
.christmas-twinkle-bulb.is-shining{animation:christmas-soft-shine 2s ease-in-out both}
@keyframes christmas-soft-shine{0%,100%{filter:brightness(1) drop-shadow(0 0 0 #ffe9ae00)}50%{filter:brightness(1.35) drop-shadow(0 0 8px #ffe9aea0)}}
html:has(.has-christmas-lights){scroll-padding-top:179px}
@media(max-width:720px){body:has(.has-christmas-lights) .contest-hero{padding-top:2.8rem}html:has(.has-christmas-lights){scroll-padding-top:209px}}
@media(prefers-reduced-motion:reduce){.christmas-twinkle-bulb.is-shining{animation:none}}
@media(forced-colors:active){.christmas-twinkle{display:none}}
@media print{.christmas-twinkle{display:none}}

body:has(.has-christmas-lights) main:not(:has(.contest-hero)){padding-top:3.5rem}
/* Shared evergreen banner, with the original logo on a cream plaque. */
.contest-page .site-header{background:#173e34;border-bottom:2px solid #b18b4f;color:#fff9ec}
.contest-page .site-header nav a{color:#fff9ec}
.contest-page .site-header nav a:hover,.contest-page .site-header nav a[aria-current=page]{text-decoration:underline;text-decoration-color:#d9bb77;text-decoration-thickness:2px;text-underline-offset:.3em}
.contest-page .site-header .brand{background:#fff9ec;padding:6px 12px;border-radius:8px;margin-block:8px;box-shadow:0 2px 6px #102e2c33}
.contest-page .site-header :focus-visible{outline:3px solid #edcf89;outline-offset:3px}
@media(max-width:720px){.contest-page .site-header .brand{padding:5px 8px;margin-block:4px}.contest-page .site-header nav a{min-height:44px}}
@media(forced-colors:active){.contest-page .site-header{background:Canvas;color:CanvasText;border-color:CanvasText}.contest-page .site-header nav a{color:LinkText}}
/* Contain Leaflet controls and panes below the sticky banner. */
.contest-page #rules-zone-map{position:relative;z-index:0;isolation:isolate}
