:root{--evergreen:#123f2d;--green:#2b6b4b;--cream:#fffaf0;--paper:#fffdf7;--cranberry:#a52b35;--gold:#b28534;--ink:#173a2b;--muted:#687068;--line:#d8c9ad;--soft:#f1e8d8;--shadow:0 20px 55px rgba(20,56,42,.13)}
*{box-sizing:border-box}html{background:#e9e0d2}body{margin:0;color:var(--ink);background:#e9e0d2;font-family:"DM Sans",sans-serif}button,input,textarea{font:inherit}button{cursor:pointer}img{display:block;max-width:100%}h1,h2,h3,p{margin-top:0}.prototype-shell{min-height:100svh;padding:0;background:radial-gradient(circle at 18% 12%,rgba(178,133,52,.15),transparent 22rem),repeating-linear-gradient(135deg,rgba(165,43,53,.025) 0 14px,transparent 14px 28px),#e9e0d2}.phone-surface{position:relative;min-height:100svh;overflow:hidden;background:var(--cream)}
.lights{position:absolute;inset:0 0 auto;z-index:2;display:flex;height:38px;justify-content:space-around;border-top:2px solid var(--evergreen);transform:rotate(-1.5deg)}.lights i{width:9px;height:14px;margin-top:5px;border-radius:60% 60% 48% 48%;background:var(--cranberry);box-shadow:0 0 10px rgba(165,43,53,.3)}.lights i:nth-child(3n+2){background:var(--gold)}.lights i:nth-child(3n){background:var(--evergreen)}
.brand{display:flex;align-items:center;gap:10px}.seal{display:grid;width:42px;height:42px;place-items:center;border:1px solid var(--gold);border-radius:50%;color:var(--cream);background:var(--evergreen);font-family:"Fraunces",serif;font-size:.92rem;box-shadow:5px 5px 0 rgba(178,133,52,.12)}.brand span{display:block;font-family:"Fraunces",serif;font-size:1.08rem;font-weight:700;line-height:1}.brand small{display:block;margin-top:4px;color:var(--cranberry);font-size:.58rem;font-weight:800;letter-spacing:.22em;text-transform:uppercase}.brand.compact .seal{width:34px;height:34px;font-size:.7rem}.brand.compact span{font-size:.88rem}.brand.compact small{font-size:.46rem}
.welcome{position:relative;min-height:100svh;padding:42px 22px 30px}.welcome:before,.welcome:after{position:absolute;width:180px;height:180px;border:1px solid rgba(178,133,52,.22);border-radius:50%;content:""}.welcome:before{top:118px;right:-124px;box-shadow:0 0 0 16px rgba(178,133,52,.035),0 0 0 34px rgba(165,43,53,.025)}.welcome:after{bottom:-126px;left:-92px;box-shadow:0 0 0 18px rgba(23,79,54,.03),0 0 0 38px rgba(23,79,54,.025)}.welcome>.brand,.welcome-copy,.register-card,.welcome footer{position:relative;z-index:1}.welcome-copy{padding:55px 2px 24px;text-align:center}.eyebrow,.event-date{color:var(--gold);font-size:.65rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.welcome-copy h1{max-width:330px;margin:14px auto 0;font-family:"Fraunces",serif;font-size:clamp(3rem,14vw,4.7rem);line-height:.88;letter-spacing:-.055em}.passport-script{margin:10px 0 0;color:var(--cranberry);font-family:"Fraunces",serif;font-size:1.45rem;font-style:italic}.welcome-copy .intro{max-width:335px;margin:20px auto 0;color:var(--muted);font-size:.86rem;line-height:1.55}.register-card{display:grid;gap:14px;max-width:430px;margin:auto;padding:21px;border:1px solid rgba(178,133,52,.46);border-radius:22px;background:rgba(255,255,255,.8);box-shadow:var(--shadow)}.form-head{display:flex;gap:10px;align-items:center}.form-head b{font-family:"Fraunces",serif}.form-head i{display:grid;width:32px;height:32px;place-items:center;border-radius:10px;color:#fff;background:var(--cranberry);font-style:normal}.form-head span{display:block;color:var(--muted);font-size:.65rem}.field>span{display:block;margin-bottom:5px;font-size:.67rem;font-weight:800}.field input,.field textarea{width:100%;min-height:43px;padding:10px 12px;border:1px solid var(--line);border-radius:11px;color:var(--ink);background:#fffdf7}.primary,.secondary{display:flex;width:100%;min-height:47px;align-items:center;justify-content:center;gap:8px;border:0;border-radius:12px;color:#fff;background:var(--evergreen);font-weight:800}.primary.red{background:var(--cranberry)}.secondary{border:1px solid var(--line);color:var(--evergreen);background:transparent}.register-card small,.welcome footer{color:var(--muted);font-size:.64rem;text-align:center}.welcome footer{margin-top:20px}.welcome footer b{color:var(--evergreen)}
.app-shell{display:flex;min-height:100svh;flex-direction:column}.app-header{position:relative;z-index:10;display:flex;min-height:61px;align-items:center;justify-content:space-between;padding:10px 17px;border-bottom:1px solid rgba(23,58,43,.12);background:rgba(255,250,240,.95);backdrop-filter:blur(14px)}.icon-button{display:grid;width:34px;height:34px;place-items:center;border:1px solid var(--line);border-radius:50%;color:var(--evergreen);background:transparent}.app-body{flex:1;overflow:auto;padding-bottom:70px}.view{padding:23px 17px 32px}.view-title{display:flex;align-items:center;justify-content:space-between}.view-title h1,.detail-hero h1,.scan h1,.confirm h1,.complete h1{margin:4px 0 0;font-family:"Fraunces",serif;line-height:1}.view-title h1{font-size:2.25rem;letter-spacing:-.04em}.date-chip{display:grid;width:53px;height:53px;place-items:center;border:1px solid var(--gold);border-radius:50%;color:var(--cranberry);font-family:"Fraunces",serif;font-size:.7rem;font-weight:800;box-shadow:4px 4px 0 rgba(178,133,52,.12)}.view-intro{margin:10px 0 18px;color:var(--muted);font-size:.8rem}.progress-card{margin-top:18px;padding:17px;border:1px solid rgba(178,133,52,.38);border-radius:18px;background:linear-gradient(135deg,#fffdf7,#f5ead5);box-shadow:0 12px 30px rgba(23,58,43,.07)}.progress-head{display:flex;align-items:center;justify-content:space-between}.progress-head div{display:grid}.progress-head span{font-size:.67rem}.progress-head strong{font-family:"Fraunces",serif;font-size:1.08rem}.progress-head>strong{color:var(--cranberry);font-family:"DM Sans",sans-serif}.progress-track{height:9px;margin:11px 0 9px;overflow:hidden;border-radius:999px;background:#ded4c2}.progress-bar{height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--evergreen),#337657);transition:width .35s}.progress-card p{margin:0;color:var(--muted);font-size:.67rem}.challenge-alert{display:grid;width:100%;grid-template-columns:38px 1fr auto;align-items:center;gap:10px;margin-top:13px;padding:12px;border:0;border-radius:16px;color:#fff;background:linear-gradient(135deg,var(--cranberry),#7f2029);text-align:left;box-shadow:0 12px 28px rgba(165,43,53,.2)}.challenge-alert>i{display:grid;width:36px;height:36px;place-items:center;border-radius:11px;background:rgba(255,255,255,.14);font-style:normal}.challenge-alert span{display:grid}.challenge-alert small{color:#f6c9cb;font-size:.52rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.challenge-alert b{font-family:"Fraunces",serif;font-size:.9rem}.challenge-alert em{font-size:.62rem;font-style:normal;opacity:.86}.section-label{display:flex;align-items:center;justify-content:space-between;margin:22px 0 9px}.section-label b{font-family:"Fraunces",serif}.section-label small{color:var(--muted);font-size:.6rem}.stops{display:grid;grid-template-columns:1fr 1fr;gap:9px}.stop-card{position:relative;display:flex;min-height:145px;padding:12px;border:1px solid var(--line);border-radius:16px;color:var(--ink);background:var(--paper);text-align:left;box-shadow:0 8px 20px rgba(23,58,43,.045);flex-direction:column;justify-content:space-between}.stop-card.current{border-color:var(--cranberry)}.stop-card.done{border-color:#6b947d;background:#f5f8f2}.stop-top{display:flex;align-items:flex-start;justify-content:space-between;gap:4px}.number{display:grid;width:27px;height:27px;place-items:center;border-radius:50%;color:#fff;background:var(--evergreen);font-family:"Fraunces",serif;font-size:.72rem;font-weight:800}.status{padding:4px 6px;border-radius:999px;color:#6f746e;background:#ece8df;font-size:.48rem;font-weight:800}.status.available{color:var(--cranberry);background:#f5dfe0}.status.complete{color:#fff;background:var(--green)}.stop-copy{display:grid;padding-right:12px}.stop-copy b{font-family:"Fraunces",serif;font-size:.94rem;line-height:1.05}.stop-copy span{margin-top:4px;color:var(--muted);font-size:.59rem}.stamp{position:absolute;right:8px;top:43px;padding:5px 6px;border:2px solid rgba(165,43,53,.65);border-radius:50%;color:var(--cranberry);font-family:"Fraunces",serif;font-size:.45rem;font-weight:800;text-transform:uppercase;transform:rotate(-13deg)}.scope-note{margin-top:16px;padding:12px;border-radius:13px;color:var(--muted);background:#eee7da;font-size:.64rem;line-height:1.45}.scope-note b{color:var(--ink)}
.bottom-nav{position:absolute;right:0;bottom:0;left:0;z-index:15;display:grid;height:67px;grid-template-columns:repeat(4,1fr);border-top:1px solid rgba(255,250,240,.15);background:rgba(18,63,45,.98)}.bottom-nav button{display:flex;border:0;color:#c3d0c7;background:transparent;font-size:.53rem;font-weight:700;flex-direction:column;align-items:center;justify-content:center;gap:4px}.bottom-nav i{font-family:"Fraunces",serif;font-size:1.05rem;font-style:normal}.bottom-nav button.active{color:#f2d78d}.sub-header{display:grid;height:57px;grid-template-columns:40px 1fr 40px;align-items:center;padding:0 11px;color:#fff;background:var(--evergreen);text-align:center}.sub-header button{display:grid;width:33px;height:33px;place-items:center;border:0;border-radius:50%;color:#fff;background:rgba(255,255,255,.1)}.sub-header span{font-family:"Fraunces",serif}.detail-hero{position:relative;overflow:hidden;padding:29px 21px 25px;background:linear-gradient(155deg,#fffaf0,#efe2c8)}.detail-number{display:grid;width:41px;height:41px;margin-bottom:13px;place-items:center;border-radius:50%;color:#fff;background:var(--cranberry);font-family:"Fraunces",serif;font-weight:800;box-shadow:5px 5px 0 rgba(165,43,53,.12)}.detail-hero h1{max-width:340px;font-size:2.15rem}.detail-hero p{margin:9px 0 0;color:var(--muted);font-size:.68rem}.checked{display:inline-flex;margin-top:13px;padding:7px 10px;border-radius:999px;color:#fff;background:var(--green);font-size:.63rem;font-weight:800}.detail-list{padding:7px 18px 92px}.detail-block{display:grid;grid-template-columns:37px 1fr;gap:11px;padding:16px 2px;border-bottom:1px solid var(--line)}.detail-icon{display:grid;width:36px;height:36px;place-items:center;border-radius:11px;color:#fff;background:var(--evergreen);font-style:normal}.detail-icon.red{background:var(--cranberry)}.detail-icon.gold{background:var(--gold)}.detail-block small{color:var(--gold);font-size:.54rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.detail-block h2{margin:3px 0;font-family:"Fraunces",serif;font-size:1rem;line-height:1.2}.detail-block p{margin:2px 0;color:var(--muted);font-size:.63rem;line-height:1.4}.directions{display:flex;width:100%;align-items:center;justify-content:space-between;margin-top:14px;padding:12px;border:1px solid var(--line);border-radius:13px;color:var(--ink);background:#fffdf7;text-align:left}.directions span{display:grid}.directions small{color:var(--muted)}.sticky{position:absolute;right:0;bottom:0;left:0;z-index:10;padding:11px 17px 15px;border-top:1px solid var(--line);background:rgba(255,250,240,.96)}
.scan,.confirm,.complete{display:flex;min-height:calc(100svh - 60px);padding:32px 24px;text-align:center;flex-direction:column;align-items:center;justify-content:center}.qr{position:relative;display:grid;width:180px;height:180px;margin-bottom:27px;place-items:center;border:3px solid var(--evergreen);border-radius:27px;background:repeating-linear-gradient(45deg,#f0e8d8 0 10px,#fffaf0 10px 20px);box-shadow:var(--shadow);font-size:5rem}.qr:after{position:absolute;right:12px;left:12px;height:3px;background:var(--cranberry);box-shadow:0 0 12px var(--cranberry);content:"";animation:scanline 2s ease-in-out infinite}.scan h1,.confirm h1,.complete h1{margin-top:8px;font-size:2.35rem}.scan p,.confirm p,.complete p{max-width:335px;color:var(--muted);font-size:.78rem;line-height:1.5}.scan .primary,.confirm .primary{max-width:340px;margin-top:14px}.code-form{width:100%;max-width:340px}.code-form input{height:52px;border:2px solid var(--gold);font-size:1.3rem;font-weight:800;letter-spacing:.14em;text-align:center;text-transform:uppercase}.error{margin:6px 0;color:var(--cranberry)!important;font-weight:800}.demo-code{font-size:.65rem!important}.success{display:grid;width:77px;height:77px;margin-bottom:20px;place-items:center;border-radius:50%;color:#fff;background:var(--green);font-size:2.3rem;box-shadow:0 0 0 13px rgba(178,133,52,.12)}.mini-stamp{display:grid;width:88px;height:88px;margin:13px 0;place-items:center;border:4px double var(--cranberry);border-radius:50%;color:var(--cranberry);font-family:"Fraunces",serif;font-size:2.2rem;font-weight:800;transform:rotate(-8deg)}@keyframes scanline{0%,100%{top:24px}50%{top:150px}}
.route-map{position:relative;height:365px;overflow:hidden;margin-top:12px;border:1px solid var(--line);border-radius:23px;background:linear-gradient(rgba(178,133,52,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(178,133,52,.08) 1px,transparent 1px),#f4ead8;background-size:31px 31px}.route-line{position:absolute;border-radius:9px;background:var(--cranberry);box-shadow:0 0 0 4px #fffaf0,0 0 0 6px rgba(165,43,53,.16)}.route-line.h{left:44px;right:39px;top:182px;height:7px}.route-line.v{right:68px;top:182px;bottom:42px;width:7px}.street{position:absolute;color:#7e725f;font-size:.53rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase}.street.rail{left:48px;top:154px}.street.wash{right:-7px;bottom:94px;transform:rotate(90deg)}.map-stop{position:absolute;z-index:2;display:flex;width:60px;border:0;color:var(--ink);background:transparent;flex-direction:column;align-items:center}.map-stop b{display:grid;width:32px;height:32px;place-items:center;border:3px solid #fffaf0;border-radius:50%;color:#fff;background:var(--evergreen);font-family:"Fraunces",serif;font-size:.68rem}.map-stop.done b{background:var(--green)}.map-stop small{margin-top:3px;padding:2px 3px;border-radius:5px;background:rgba(255,250,240,.92);font-size:.45rem;font-weight:800;line-height:1.1}.s1{left:17px;top:164px}.s2{left:77px;top:164px}.s3{left:137px;top:164px}.s4{left:197px;top:164px}.s5{right:37px;top:164px}.s6{right:37px;bottom:30px}.map-note{color:var(--muted);font-size:.58rem;text-align:center}.route-list{display:grid;gap:7px}.route-row{display:grid;width:100%;grid-template-columns:29px 1fr auto;align-items:center;gap:9px;padding:10px;border:1px solid var(--line);border-radius:12px;color:var(--ink);background:#fffdf7;text-align:left}.route-row>i{display:grid;width:27px;height:27px;place-items:center;border-radius:50%;color:#fff;background:var(--evergreen);font-size:.63rem;font-style:normal}.route-row span{display:grid}.route-row b{font-family:"Fraunces",serif;font-size:.77rem}.route-row small{color:var(--muted);font-size:.54rem}
.drop{margin:3px 0 11px;background:var(--cranberry)}.memory-types{display:flex;justify-content:center;gap:8px;margin-bottom:17px;color:var(--muted);font-size:.55rem}.memory-grid{columns:2;column-gap:9px}.memory{overflow:hidden;margin-bottom:9px;border:1px solid var(--line);border-radius:14px;background:#fffdf7;box-shadow:0 8px 22px rgba(23,58,43,.06);break-inside:avoid}.memory img{width:100%;height:130px;object-fit:cover}.memory-body{padding:10px}.memory-body p{margin:0 0 7px;font-family:"Fraunces",serif;font-size:.71rem;line-height:1.35}.memory-body span{color:var(--muted);font-size:.5rem}.memory.message{min-height:165px;padding-top:18px;background:linear-gradient(145deg,#f5e7cb,#fffaf0)}.memory.message:before{display:block;margin-left:11px;color:var(--cranberry);content:"“";font-family:"Fraunces",serif;font-size:2.8rem;line-height:.7}.media-placeholder{display:grid;height:105px;place-items:center;color:#fff;background:linear-gradient(135deg,var(--evergreen),#245f44);font-family:"Fraunces",serif}.moderation{margin-top:16px;padding:12px;border-radius:13px;color:var(--muted);background:#eee7da;font-size:.61rem;line-height:1.4}.more-card{display:grid;grid-template-columns:39px 1fr;gap:11px;margin-top:17px;padding:15px;border:1px solid var(--line);border-radius:16px;background:#fffdf7}.more-card>i{display:grid;width:38px;height:38px;place-items:center;border-radius:11px;color:#fff;background:var(--cranberry);font-style:normal}.more-card small{color:var(--gold);font-size:.53rem;font-weight:800;text-transform:uppercase}.more-card h2{margin:3px 0;font-family:"Fraunces",serif;font-size:1.02rem}.more-card p{margin:0;color:var(--muted);font-size:.65rem;line-height:1.45}.more details{border-bottom:1px solid var(--line)}.more summary{padding:13px 2px;font-size:.72rem;font-weight:800}.more details p,.more details ol{color:var(--muted);font-size:.64rem;line-height:1.5}.organizer{margin-top:21px;overflow:hidden;border:1px solid var(--evergreen);border-radius:18px;background:#fffdf7}.organizer header{padding:14px;color:#fff;background:var(--evergreen)}.organizer header small{color:#dfcfaa;font-size:.52rem;text-transform:uppercase}.organizer header h2{margin:2px 0 0;font-family:"Fraunces",serif;font-size:1rem}.participant{display:grid;padding:13px;border-bottom:1px solid var(--line)}.participant b{font-family:"Fraunces",serif}.participant span{color:var(--muted);font-size:.59rem}.stats{display:grid;grid-template-columns:repeat(3,1fr);padding:12px;border-bottom:1px solid var(--line);text-align:center}.stats div{display:grid;border-right:1px solid var(--line)}.stats div:last-child{border:0}.stats b{color:var(--cranberry);font-family:"Fraunces",serif}.stats small{color:var(--muted);font-size:.46rem}.times{padding:13px}.times>div{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px dotted var(--line);font-size:.55rem}.times time{color:var(--muted)}.organizer footer{padding:10px 13px;color:#d8dfda;background:#244b39;font-size:.52rem}.reset{margin-top:15px;color:var(--cranberry)}
.modal{position:absolute;inset:0;z-index:30;display:grid;padding:14px;background:rgba(20,42,32,.38);place-items:center}.modal-card{position:relative;width:100%;max-width:420px;max-height:calc(100svh - 28px);overflow:auto;padding:21px;border:1px solid rgba(178,133,52,.45);border-radius:23px;background:#fffaf0;box-shadow:0 28px 90px rgba(23,58,43,.28)}.modal-card h2{margin:8px 0 5px;font-family:"Fraunces",serif;font-size:1.45rem}.modal-card>p{color:var(--muted);font-size:.72rem;line-height:1.45}.close{position:absolute;right:11px;top:11px}.choice{display:grid;grid-template-columns:repeat(2,1fr);gap:7px;margin:13px 0}.choice button{padding:10px;border:1px solid var(--line);border-radius:11px;color:var(--ink);background:#fffdf7;font-size:.63rem;font-weight:800}.choice button.active{border-color:var(--cranberry);color:var(--cranberry);background:#f8e5e5}.upload{display:grid;gap:5px;margin-bottom:11px;padding:12px;border:1px dashed var(--gold);border-radius:12px;font-size:.64rem}.upload small{color:var(--muted)}.challenge-done{display:grid;padding:18px;border-radius:14px;color:#fff;background:var(--green);place-items:center;text-align:center}.complete{position:relative;padding-top:62px;background:radial-gradient(circle at 50% 20%,rgba(178,133,52,.18),transparent 17rem),#fffaf0}.trophy{display:grid;width:82px;height:82px;margin:17px 0;place-items:center;border:2px solid var(--gold);border-radius:50%;color:#fff;background:var(--cranberry);font-size:2rem;box-shadow:0 0 0 12px rgba(178,133,52,.1)}.complete h1{color:var(--cranberry);font-size:2.7rem}.qualified{display:flex;gap:9px;margin:14px 0;padding:14px;border:1px solid #9cb6a7;border-radius:14px;background:#eff5ef;text-align:left}.qualified i{color:var(--green);font-style:normal}.qualified b{font-family:"Fraunces",serif;font-size:.82rem}.qualified span{display:block;margin-top:3px;color:var(--muted);font-size:.58rem}.stamp-row{display:flex;gap:5px;margin:9px 0 17px}.stamp-row span{display:grid;width:35px;height:35px;place-items:center;border:2px double var(--cranberry);border-radius:50%;color:var(--cranberry);font-size:.65rem;transform:rotate(-8deg)}.complete .primary,.complete .secondary{max-width:340px;margin-top:7px}
@media(min-width:700px){.prototype-shell{padding:28px}.phone-surface{width:min(100%,520px);min-height:calc(100svh - 56px);max-height:calc(100svh - 56px);margin:auto;border:1px solid rgba(23,58,43,.15);border-radius:32px;box-shadow:0 40px 100px rgba(19,49,37,.2)}.phone-surface:has(.welcome){overflow-y:auto;overscroll-behavior:contain}.app-shell{height:calc(100svh - 56px);min-height:0}.welcome{min-height:calc(100svh - 56px)}.app-body{min-height:0;overflow-y:auto;overscroll-behavior:contain}.scan,.confirm,.complete{min-height:calc(100svh - 117px)}}
@media(max-width:370px){.welcome{padding-right:16px;padding-left:16px}.register-card{padding:17px}.view{padding-right:13px;padding-left:13px}.stops{gap:6px}.stop-card{padding:10px}.map-stop small{font-size:.41rem}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
