/* The invitation's ivory, olive and champagne palette follows the guest everywhere. */
.big-code.short-code{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.big-code.short-code>span{font-size:clamp(22px,6vw,32px)}#passImage{display:block;width:100%;height:48dvh;object-fit:contain;background:#f0e8d9;border-radius:10px}#passImageDialog>.primary{display:flex;width:100%}#passImageDialog h2{font-size:25px}
main,section,article,form,.photo-top>*,.admin-top>*,.admin-bottom>*{min-width:0}
button:disabled{cursor:default}.text-button{min-height:44px}.portal-header nav a{min-height:44px;display:inline-flex;align-items:center}.portal-header nav{gap:18px}
input:not([type=radio]):not([type=file]),select{font-size:16px}
.code-pass{margin:30px -8px 20px;border:1px solid #c8a96a66;border-radius:18px;overflow:hidden;background:#f7f1e6;box-shadow:0 10px 35px #2024190b;animation:passReveal .7s ease both}
.pass-photo{height:230px;position:relative;overflow:hidden}.pass-photo img{width:100%;height:100%;object-fit:cover;object-position:center 40%}.pass-photo:after{content:"";position:absolute;inset:0;background:linear-gradient(transparent,#20241970)}.pass-photo>span{position:absolute;z-index:1;bottom:24px;left:24px;color:#fbf7ee;font-size:11px;letter-spacing:.22em}.pass-code-body{padding:28px}.pass-code-body h3{font-size:28px;margin:0 0 12px}
.big-code{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 14px;border-top:1px dashed #c8a96a99;border-bottom:1px dashed #c8a96a99;padding:22px 0;margin:20px 0;user-select:all;touch-action:auto}.big-code>span{text-align:center;font:bold clamp(19px,3vw,30px)/1.3 monospace;letter-spacing:.03em;white-space:nowrap;color:#202419}.save-warning{font-size:13px;color:#4f5a3a}.save-warning strong{font-weight:600}.pass-actions{display:grid;gap:10px}.pass-panel>#enterChallenge{width:100%;margin-top:15px}
.save-animation{display:flex;align-items:center;justify-content:center;gap:20px;padding:12px 0;color:#6d715f}.save-animation>span{font-size:11px;max-width:180px}.save-animation>span i{color:#9a7b44;font-style:normal}.phone-drawing{width:40px;height:63px;border:2px solid #4f5a3a;border-radius:8px;position:relative;display:grid;place-items:center;background:#fffaf2;flex-shrink:0;animation:phoneTilt 5s ease-in-out infinite}.phone-drawing:before{content:"";position:absolute;top:4px;left:13px;width:10px;border-bottom:2px solid #4f5a3a}.phone-drawing>span{font-size:18px;color:#9a7b44}.phone-drawing b{position:absolute;bottom:-7px;right:-10px;color:#9a7b44;font-size:23px;animation:favoritePulse 5s ease-in-out infinite}.camera-flash{position:absolute;inset:0;border-radius:5px;background:#fff;opacity:0;animation:cameraFlash 5s infinite}
.save-dialog{text-align:center;width:min(490px,calc(100% - 30px));max-height:calc(100dvh - 32px);overflow-y:auto;padding:35px 28px}.save-dialog>p:not(.eyebrow){font-size:14px}.save-dialog .big-code>span{font-size:25px}.save-dialog>.primary,.save-dialog>.secondary{width:100%;margin-top:10px}.dialog-close{position:absolute;top:5px;right:15px;font-size:17px}.dialog-actions{flex-wrap:wrap}dialog{max-height:calc(100dvh - 32px);overflow:auto}dialog:focus{outline:none}
.contest-banner{display:flex;gap:18px;align-items:center;border-top:1px solid #c8a96a44;border-bottom:1px solid #c8a96a44;padding:16px 0;margin-bottom:24px}.contest-banner p{margin:0;font-size:13px;color:#666c59}.contest-banner .badge{flex-shrink:0}
.my-flight{display:grid;grid-template-columns:1fr auto;align-items:center;gap:4px 18px;border-top:1px dashed #c8a96a66;border-bottom:1px dashed #c8a96a66;padding:15px 0;margin:24px 0}.my-flight>span:first-child{font-size:10px;letter-spacing:.12em;color:#9a7b44}.my-flight strong{grid-row:span 2;font:42px Georgia;color:#4f5a3a}.my-flight>span:last-child{font-size:12px;color:#666c59;overflow-wrap:anywhere}
.upload-pickers{display:grid;grid-template-columns:1fr 1fr;gap:12px}.upload-zone{position:relative;margin:0;padding:18px 10px;min-height:128px;text-align:center;transition:background .2s,transform .2s}.upload-zone:hover{background:#a8b79a22;transform:translateY(-2px)}.upload-zone:focus-visible,.upload-zone:focus-within{outline:3px solid #c8a96a;outline-offset:3px}.camera-zone{border-style:solid}.upload-zone.is-disabled{opacity:.5;pointer-events:none}.file-input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;padding:0!important}.upload-card .primary{width:100%}
.photo-previews{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:16px 0}.preview{margin:0;position:relative;overflow:hidden;border:1px solid #c8a96a66;border-radius:10px;background:#fffaf2}.preview>img{width:100%;aspect-ratio:1;display:block;object-fit:cover}.preview>figcaption{font-size:10px;padding:7px;line-height:1.4;overflow-wrap:anywhere;min-height:42px;color:#666c59}.preview-remove{position:absolute;right:4px;top:4px;width:44px;height:44px;border:0;background:#fbf7eedd;color:#4f5a3a;border-radius:50%;font-size:15px}.preview[data-state=saved]{border-color:#4f5a3a}.preview[data-state=saved] figcaption{color:#4f5a3a}.preview[data-state=error]{border-color:#934127}.preview[data-state=error] figcaption{color:#934127}.preview[data-state=uploading]{animation:uploadPulse 1s infinite alternate}
.ranking-name{border:0;background:none;padding:4px 0;font:inherit;color:#4f5a3a;text-align:left;min-height:44px;overflow-wrap:anywhere}.ranking-name:hover{text-decoration:underline}.ranking li{padding:7px 0}.ranking li.is-me{background:#a8b79a17;border-radius:8px;padding-left:8px;padding-right:8px}.ranking-footer{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.live-label{font-size:10px;color:#6d715f;display:inline-flex;gap:7px;align-items:center}.live-label i{width:5px;height:5px;border-radius:50%;background:#4f5a3a;box-shadow:0 0 0 3px #a8b79a33}
.album-section{scroll-margin-top:20px}.album-controls{display:flex;align-items:end;justify-content:space-between;gap:20px;margin:25px 0}.album-tabs{display:flex;gap:8px}.album-tabs button[aria-pressed=true]{background:#4f5a3a;color:#fbf7ee}.album-controls label{width:min(350px,40%)}.album-controls select{margin-top:7px}.photo-open{display:block;width:100%;padding:0;border:0;border-radius:0;background:none;overflow:hidden}.photo-open img{transition:transform .4s}.photo-open:hover img{transform:scale(1.04)}.photo figcaption{font-size:12px}.photo-state{display:block;color:#874d35;font-size:10px}.photo figcaption>div{margin-top:2px}.photo-dialog{width:min(1100px,calc(100% - 24px));padding:18px;background:#f7f1e6}.viewer-header{display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:14px;overflow-wrap:anywhere;color:#4f5a3a}.viewer-header button{flex-shrink:0}.photo-dialog>img{display:block;width:100%;height:min(66dvh,800px);object-fit:contain;background:#20241908;border-radius:8px;touch-action:pan-y}.viewer-actions{display:flex;justify-content:center;align-items:center;gap:12px;margin-top:16px;flex-wrap:wrap}.viewer-actions .secondary{min-width:48px}.viewer-actions a{margin-left:auto}
.contest-admin{display:flex;justify-content:space-between;align-items:center;gap:24px;margin-bottom:24px}.contest-admin h2{margin-bottom:8px}.contest-admin p.small{margin:0}.contest-admin button{flex-shrink:0}.row-code{font-size:13px;line-height:1.5;user-select:all;max-width:270px;margin:0 0 8px}.row-actions{gap:4px 16px}.row-actions button{min-height:44px;font-size:12px}.admin-bottom .gallery{grid-template-columns:repeat(2,minmax(0,1fr))}
@keyframes passReveal{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}@keyframes phoneTilt{0%,70%,100%{transform:rotate(0)}20%,35%{transform:rotate(-7deg)}}@keyframes cameraFlash{0%,21%,30%,100%{opacity:0}24%{opacity:.95}}@keyframes favoritePulse{0%,40%,100%{transform:scale(.8);opacity:.4}55%,75%{transform:scale(1.15);opacity:1}}@keyframes uploadPulse{to{opacity:.55}}
@media(max-width:900px){.photo-top{grid-template-columns:1fr 1fr;gap:18px}.photo-top .paper{padding:24px}.photo-previews{grid-template-columns:repeat(2,minmax(0,1fr))}.ranking-footer{align-items:start;flex-direction:column}}
@media(max-width:600px){main{width:calc(100% - 32px)}.portal-header{padding:10px 16px;gap:10px}.portal-header nav{gap:3px 13px}.portal-header nav a,.portal-header nav button{font-size:11px;min-height:38px}.portal-intro{padding-top:43px}.portal-intro h1{font-size:clamp(32px,9vw,46px)}.portal-intro>p:last-of-type{font-size:13px}.photo-top{grid-template-columns:1fr}.paper,.photo-top .paper{padding:22px}.code-pass{margin-left:-6px;margin-right:-6px}.pass-photo{height:190px}.pass-code-body{padding:20px}.pass-code-body h3{font-size:25px}.big-code{gap:9px 8px}.big-code>span{font-size:clamp(17px,5.4vw,25px)}.save-dialog{padding:34px 20px 24px}.save-dialog .big-code>span{font-size:clamp(19px,5.9vw,26px)}.save-dialog h2{font-size:26px}.save-dialog .save-animation{padding:8px 0}.save-dialog .dialog-actions{flex-direction:column}.dialog-actions button{flex:1}.contest-banner{align-items:start;flex-direction:column;gap:8px}.upload-pickers{gap:10px}.upload-zone{padding:15px 6px;min-height:115px}.upload-zone strong{font-size:13px}.upload-zone small{font-size:10px}.photo-previews{grid-template-columns:repeat(3,minmax(0,1fr))}.preview-remove{width:36px;height:36px}.preview>figcaption{font-size:10px}.ranking{max-height:360px}.ranking-footer{align-items:center;flex-direction:row}.album-controls{align-items:stretch;flex-direction:column;gap:16px}.album-tabs button{flex:1;padding:12px 10px}.album-controls label{width:100%}.photo figcaption{font-size:11px}.photo figcaption>div{gap:6px}.photo-dialog{padding:12px}.viewer-actions{gap:8px}.viewer-actions a{flex:1;margin:0}.viewer-header{font-size:13px}.photo-dialog>img{height:60dvh}.contest-admin{align-items:stretch;flex-direction:column;gap:16px}.row-actions{gap:2px 15px}.row-actions button{min-height:44px}.row-code{max-width:100%}.qr-card img{width:85px;height:85px}.qr-card h2{font-size:20px}}
@media(max-width:360px){.paper,.photo-top .paper{padding:18px}.big-code>span{font-size:17px;letter-spacing:0}.save-dialog .big-code>span{font-size:20px}.photo-previews{grid-template-columns:repeat(2,minmax(0,1fr))}.save-animation{gap:12px}.upload-zone strong{font-size:12px}.qr-card{gap:12px}.qr-card img{width:70px;height:70px}.ranking li{gap:6px;grid-template-columns:24px 1fr auto}.ranking strong{font-size:11px}}
@media(prefers-reduced-motion:reduce){.code-pass,.phone-drawing,.phone-drawing b,.camera-flash,.preview{animation:none}.phone-drawing b{opacity:1}.upload-zone,.photo-open img{transition:none}}
