@font-face{font-family:PartyHand;src:url('/fonts/caveat.ttf') format('truetype');font-style:normal;font-weight:400 700;font-display:swap}
:root,html[data-theme=halloween]{--paper:#111b0f;--ink:#edf3df;--accent:#d0f555;--on-accent:#14200e;--surface:#213019;--line:#536443;--muted:#bac5a7}html{background:var(--paper);color:var(--ink)}body{background:var(--paper);color:var(--ink)}header,footer{border-color:#455438}.brand{color:#dce7c7}.brand-icon{background:#d0f555;color:#172311}.brand-dot,.small-star,.done-star,.eyebrow,.footer-star{color:#d0f555}h1,h2{color:#edf3df}h1 em{color:#d0f555}.lede,.hint,.privacy-note,.retention,.delivery>p,.done-content>p:not(.eyebrow),.consent,.status{color:#bac5a7}.eyebrow,.collection-label{font-family:monospace;letter-spacing:2px}.primary{background:#d0f555;color:#14200e;border-radius:8px;font-family:monospace;font-weight:700;box-shadow:none}.primary:hover{background:#e1ff80;color:#14200e}.secondary{background:#1d2b17;color:#dce8c5;border-color:#566847;border-radius:8px}.secondary:hover{background:#314425}.icon-button{color:#dce8c5;border-color:#566847}a,.text-button{color:#d1e7a7}.result-stage,.album-card{background:#1d2b17}.album-card p{color:#b9c7a5}input[type=text],input[type=email],input[type=password],input[type=date],.settings-fields input{background:#172311;color:#e9f0d9;border-color:#566847}.consent input,input[type=checkbox],input[type=radio]{accent-color:#d0f555}dialog{background:#172311;color:#dce8c5;border-color:#566847}dialog h2{color:#eaf6d1}.done-content h1,.delivery h2{font-family:PartyHand,cursive;letter-spacing:0}.screen-heading h1{font-family:PartyHand,cursive;font-size:40px;letter-spacing:0}.capture-lit{background:#fffdf5;color:#292723}.capture-lit .screen-heading h1,.capture-lit .status{color:#28341f}.capture-lit .brand{color:#28341f}.capture-lit .brand-icon{color:#fffdf5;background:#28341f}.capture-lit .icon-button{color:#28341f}.camera-wrap.burst-pulse::after{content:'';position:absolute;inset:0;border:9px solid #ffffff25;border-radius:inherit;pointer-events:none}.host-toolbar a{color:#dce8c5}.event-settings{background:#172311;border-color:#536443}.event-settings .hint{color:#bac5a7}.album-card .approved{background:#566f36;color:#fff}.wall-body{background:#10190e}.wall-photo{background:#1b2915}.wall-layout h1{font-family:PartyHand,cursive;font-size:56px}.wall-layout h1 em{color:#d0f555}
/* Invitation direction: film photograph, acid type, restrained marginal marks. */
body.landing-active{background:#10190d;background-image:linear-gradient(#111c0bc9,#10180ef5),var(--party-background,url('/backgrounds/vampires.jpg'));background-size:cover;background-position:center;background-attachment:fixed}.landing-active main{max-width:880px}.party-card{min-height:760px;padding:24px 80px 30px;background:linear-gradient(125deg,#17220c70,#16220b30);border:1px solid #b0c77a26;border-radius:3px}.sketch-border{display:none}.landing-heading{margin-bottom:22px}.host-names{font:500 19.25px/1.15 PartyHand,cursive;color:#d0f555;transform:none;text-align:center;margin:0 auto -25px}.landing-heading canvas{width:290px}.landing-heading p{display:none}.landing-web{opacity:.27;stroke:#d2ed8a;width:72px;height:72px}.landing-ghost{opacity:.4;width:46px;height:57px;stroke:#d2ed8a;stroke-width:1.6}.ghost-left{left:9%;top:auto;bottom:90px;transform:rotate(-8deg)}.ghost-right{right:9%;bottom:125px;transform:rotate(9deg)}.landing-modes{width:330px;gap:10px}.landing-choice{border:1px solid #c5dd7a20;background:#0f180a55;border-radius:8px;padding:9px 14px 9px 9px;min-height:85px}.choice-copy strong{font:700 16px/1.3 monospace;text-transform:uppercase;letter-spacing:1.1px}.choice-copy small{font:11px/1.5 Arial;color:#bfccab}.choice-art{border:0;border-radius:3px;background:#1b2912;transform:rotate(-3deg)}.landing-choice[aria-pressed=true]{background:#a6c85220;border-color:#c8ed6f;color:#ddf88a}.landing-choice[aria-pressed=true] .choice-art{box-shadow:none;background:#2e411c}.choice-check{color:#d0f555}.landing-choice:hover{background:#394e2566}.landing-start{font:700 16px monospace;letter-spacing:3px;text-transform:uppercase;border:0;border-radius:8px;background:#d0f555;color:#14200e;width:220px;margin-top:24px;min-height:53px}.landing-start:hover{background:#e1ff80}.landing-details{font:700 14px/1.3 monospace;text-transform:uppercase;letter-spacing:2px;color:#d0f555;margin-top:20px}.landing-details span:first-child{font:500 33px/1 PartyHand,cursive;letter-spacing:3px}.landing-sample{color:#bac9a4}.landing-active>header{max-width:880px}.landing-active>footer{max-width:840px}.landing-active .brand{color:#c6d4b2}.landing-active .icon-button{color:#c6d4b2}.landing-active .choice-art canvas{filter:drop-shadow(0 2px 3px #0005)}
@media(max-width:650px){.landing-active main{padding:0 16px}.party-card{padding:22px 24px 24px;min-height:660px}.host-names{font-size:15.95px}.landing-heading canvas{width:245px}.landing-heading{margin-bottom:17px}.landing-modes{width:280px}.landing-choice{min-height:76px;gap:10px;padding:7px 10px 7px 7px}.choice-copy strong{font-size:14px;letter-spacing:.7px}.choice-copy small{font-size:10px}.landing-start{width:200px;margin-top:23px;min-height:48px}.landing-details{font-size:12px;letter-spacing:1.5px;margin-top:14px}.landing-details span:first-child{font-size:30px}.landing-ghost{width:31px;height:40px}.ghost-left{left:5%;bottom:83px}.ghost-right{right:5%;bottom:91px}.landing-web{width:48px;height:48px}.screen-heading h1{font-size:34px}.wall-layout h1{font-size:42px}}
@media(min-width:900px) and (max-height:900px){.landing-active main{max-width:1100px;padding:5px 30px}.landing-active>header{max-width:1100px;height:60px}.party-card{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto auto auto;column-gap:55px;min-height:calc(100svh - 125px);padding:40px 60px;align-content:center}.landing-heading{grid-column:1;grid-row:1/3;align-self:center;margin:0}.landing-heading canvas{width:min(100%,320px)}.host-names{font-size:19.8px}.landing-modes{grid-column:2;grid-row:1;width:100%}.landing-start{grid-column:2;grid-row:2;margin-top:24px}.landing-sample{grid-column:2;grid-row:3}.landing-details{grid-column:1;grid-row:3;margin-top:0;align-self:start}.ghost-left{left:4%;bottom:35px}.ghost-right{right:3%;bottom:30px}.landing-active>footer{max-width:1040px}}
@media(max-width:360px){.party-card{padding-left:15px;padding-right:15px}.landing-heading canvas{width:220px}.host-names{font-size:14.85px}.landing-modes{width:260px}.choice-copy strong{font-size:13px}.choice-copy small{font-size:9px}}

.capture-lit a,.capture-lit .text-button,.capture-lit footer{color:#475d2d}.capture-lit #capture .eyebrow{color:#576a3c}
.event>span:first-child{background:#d0f555}button:disabled{background:#33422b!important;color:#9dab87!important}.capture-lit button:disabled{background:#e1e8d6!important;color:#69795a!important}.capture-lit{transition:none}
@media(min-width:900px) and (max-height:900px){body:not(.landing-active)>header{height:60px}body:not(.landing-active) main{padding:18px 36px 25px}.screen-heading{margin-bottom:12px}.screen-heading h1{font-size:32px}.screen-heading .eyebrow{margin-bottom:6px}.capture-tools{margin-bottom:10px}.capture-lit .camera-wrap{width:50vh;max-height:38vh}.thumbnails{margin:8px}.capture-button{margin:8px auto}.screen-heading>div{min-width:0}}

input[type=date]{color-scheme:dark}

/* Shared invitation identity across the guest journey. */
.primary,.secondary,.landing-start,.text-button,.icon-button{border-radius:999px}
.primary,.secondary{font-family:monospace;font-weight:700;letter-spacing:.3px}
.brand-icon{display:none}.brand{font-size:20px}.brand-dot{font-size:17px}
body:not(.landing-active):not(.wall-body){background-image:linear-gradient(#10190ef0,#10190ef9),var(--party-background,url('/backgrounds/vampires.jpg'));background-size:cover;background-position:center;background-attachment:fixed}
.compact-event{display:flex;flex-direction:column;align-items:center;padding-top:7px}.compact-event span{font:500 12px/1 PartyHand,cursive;color:#d0f555}.compact-event canvas{display:block;width:78px;height:auto;margin-top:-5px}.landing-active .compact-event{display:none}
.screen-heading h1,.delivery h2,.done-content h1,.host-main h1{font-family:monospace;font-weight:700;font-style:normal;font-size:clamp(23px,3vw,32px);letter-spacing:-1px}
.delivery .small-star{display:none}.delivery h2{font-size:26px}.screen-heading .eyebrow{font-size:10px}.result-stage{background:#0c160a70;border:1px solid #b0c77a26;border-radius:4px;padding:18px}.delivery{padding:24px;border:1px solid #b0c77a26;border-radius:4px;background:#14200ed9}.event-settings{border-radius:8px}.done-content{background:#14200ed9;border:1px solid #b0c77a26;padding:30px;border-radius:4px}
.capture-lit{color:#edf3df}.capture-lit .brand,.capture-lit .icon-button,.capture-lit a,.capture-lit footer{color:#c6d4b2}.capture-lit #capture{background:#fffdf5;border-radius:4px;padding:18px}.capture-lit #capture .text-button{color:#475d2d}.capture-lit #capture .secondary{background:transparent;color:#344527;border-color:#84956f}.capture-lit .camera-wrap{border-radius:6px}.capture-lit .camera-wrap video,.capture-lit .camera-wrap canvas{border-radius:2px}
#sound-toggle:disabled{background:transparent!important;border-color:transparent!important;color:#bac5a7!important}.capture-lit #sound-toggle:disabled{color:#58664b!important}
@media(max-width:650px){.event{display:block}.compact-event canvas{width:62px}.compact-event span{font-size:10px}.compact-event{padding-top:3px}.delivery{padding:20px}.capture-lit #capture{padding:12px}.screen-heading h1{font-size:23px}.screen-heading{gap:8px}.screen-heading .secondary{padding:10px 12px}.result-stage{padding:12px;min-height:0}}
.capture-lit header,.capture-lit footer{background:transparent;color:#c6d4b2}.result-stage img{transform:none}.result-stage{min-height:0}.review-layout{align-items:start}button:focus-visible,a:focus-visible,input:focus-visible,.capture-tools .secondary:focus-visible{outline:2px solid #d0f555;outline-offset:4px}.primary:focus-visible,.secondary:focus-visible,.landing-start:focus-visible{border-radius:999px}.capture-lit #capture button:focus-visible{outline-color:#506735}.host-body{background-image:none!important}.host-body h1{font-family:monospace;font-size:32px;letter-spacing:-1px}
header{position:relative}.event:has(.compact-event){position:absolute;left:50%;transform:translateX(-50%)}

/* Tactile paper, printed keepsakes and physical controls. */
.party-card,.delivery,.done-content,.event-settings{background-image:url('/textures/paper-grain.svg'),linear-gradient(135deg,#ffffff05,#00000018);box-shadow:inset 0 1px 0 #e8f3c715,0 12px 32px #0003,0 1px 2px #0006}
.primary,.landing-start{background-image:linear-gradient(#edff9c80,#b7da291a);border:1px solid #daee8c;box-shadow:inset 0 1px 0 #f8ffd8,0 3px 0 #728824,0 6px 12px #0004;text-shadow:0 1px 0 #f2ffbb80}
.secondary{background-image:linear-gradient(#ffffff0a,#00000014);box-shadow:inset 0 1px 0 #ffffff0c,0 2px 3px #0002}
.primary:not(:disabled):active,.secondary:not(:disabled):active,.landing-start:active{transform:translateY(2px);box-shadow:inset 0 2px 4px #0002,0 1px 0 #52651d}
.landing-choice{box-shadow:inset 0 1px 0 #ffffff0b,0 4px 10px #0002}.landing-choice[aria-pressed=true]{box-shadow:inset 0 1px 4px #0005,0 1px 0 #e2f3b51c}
.choice-art canvas{filter:drop-shadow(1px 3px 2px #0008)!important}.result-stage{background-image:url('/textures/paper-grain.svg');box-shadow:inset 0 1px 12px #0005}.result-stage img,.result-stage video{box-shadow:0 2px 2px #0006,0 10px 24px #0008;outline:1px solid #dce4bf30;outline-offset:0}
input[type=text],input[type=email],input[type=password],input[type=date]{box-shadow:inset 0 2px 5px #0003,0 1px 0 #ffffff08}
.capture-lit #capture{background-image:url('/textures/paper-grain.svg');box-shadow:0 2px 0 #ddd8c4,0 12px 35px #0005}.capture-lit .camera-wrap{box-shadow:inset 0 1px 3px #827c6530,0 2px 3px #584f3020}
#shutter.capture-button{display:grid;place-items:center;width:82px;height:82px;min-height:82px;padding:7px;margin:20px auto 12px;border-radius:50%;border:1px solid #e5efcb;background:linear-gradient(145deg,#f7f9ed,#a9b19b);box-shadow:inset 0 1px 2px #fff,0 3px 0 #6b765c,0 6px 12px #0004}
.shutter-disc{display:block;width:100%;height:100%;border-radius:50%;background:linear-gradient(155deg,#e7ff8b,#c1e542);border:3px solid #26351b;box-shadow:inset 0 2px 2px #f5ffbe,0 1px 2px #0004}
#shutter:not(:disabled):active{transform:translateY(2px);box-shadow:inset 0 1px 2px #fff,0 1px 0 #6b765c,0 2px 5px #0004}#shutter:not(:disabled):active .shutter-disc{background:#b9db3f;box-shadow:inset 0 3px 5px #52651d60}#shutter:disabled .shutter-disc{background:#8c9879;box-shadow:inset 0 1px 3px #0002}
@media(min-width:900px) and (max-height:900px){#shutter.capture-button{width:72px;height:72px;min-height:72px;margin:12px auto 8px}}
@media(prefers-reduced-motion:reduce){.primary:not(:disabled):active,.secondary:not(:disabled):active,.landing-start:active,#shutter:not(:disabled):active{transform:none}}
#shutter.capture-button{grid-template-columns:1fr;grid-template-rows:1fr;justify-content:center;gap:0}#shutter .shutter-disc{position:static;justify-self:stretch;align-self:stretch;min-width:0}
/* Give the live view the space freed by the removed effect controls. */
#capture .camera-wrap{width:min(100%,800px);max-width:800px;max-height:none;aspect-ratio:4/3}
.capture-lit #capture .camera-wrap{border-width:10px}
@media(min-width:900px) and (max-height:900px){#capture .camera-wrap{width:min(100%,64vh);max-height:none}#capture .thumbnails{margin:4px}#shutter.capture-button{margin:10px auto 6px}}
@media(max-width:650px){.capture-lit #capture{padding:12px 6px}.capture-lit #capture .camera-wrap{border-width:6px}#capture .screen-heading{padding:0 6px}}

.host-names,.landing-details span:first-child{font-family:monospace;font-weight:700;font-style:normal;text-transform:uppercase;letter-spacing:2px;font-size:14px;line-height:1.3}
@media(max-width:650px){.host-names,.landing-details span:first-child{font-size:12px;letter-spacing:1.5px}}
.keepsake-loading{display:none}.processing .camera-wrap>:not(.keepsake-loading){visibility:hidden}.processing .keepsake-loading{display:flex;position:absolute;inset:0;align-items:center;justify-content:center;flex-direction:column;gap:18px;background:#16210f;color:#d0f555;font:700 16px/1.5 monospace;text-align:center;padding:24px;z-index:5}.keepsake-loading p{margin:0}.keepsake-spinner{width:40px;height:40px;border:3px solid #d0f55530;border-top-color:#d0f555;border-radius:50%;animation:keepsake-spin .9s linear infinite}.processing #shutter{visibility:hidden}.processing .screen-heading h1{visibility:hidden}@keyframes keepsake-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.keepsake-spinner{animation:none;border-color:#d0f555}}

.idle-countdown{font:11px/1.5 monospace;text-align:center;color:#d0f555;margin:18px 0 0}

#capture.portrait-capture .camera-wrap{aspect-ratio:3/4;width:min(100%,360px)}@media(min-width:900px) and (max-height:900px){#capture.portrait-capture .camera-wrap{width:min(100%,36vh)}}

#back.back-icon,#retake.back-icon{width:38px;height:38px;min-height:38px;padding:0;display:grid;place-items:center;font:20px/1 Arial;border-radius:50%}.thumbnails:empty{display:none}#camera-message:empty{display:none}#shutter.capture-button{margin-top:14px}#capture.portrait-capture .camera-wrap{width:min(100%,340px)}@media(min-width:900px) and (max-height:900px){#capture.portrait-capture .camera-wrap{width:min(100%,36vh)}}

.capture-wordmark{display:block;width:100px;height:auto;margin:8px auto -6px;filter:drop-shadow(0 1px 0 #14200a80)}.capture-lit .capture-wordmark{background:#172311;border-radius:3px;padding:3px 6px;box-shadow:inset 0 1px 0 #ffffff12,0 2px 4px #0002}.processing .capture-wordmark{display:none}

.keepsake-spinner{position:relative;width:120px;height:155px;border:0;border-radius:0;animation:none}.print-slot{position:absolute;top:0;left:0;width:120px;height:12px;border-radius:999px;background:#060b04;box-shadow:inset 0 2px 4px #000,0 1px 0 #a8be6b55}.print-window{position:absolute;top:6px;left:15px;width:90px;height:149px;overflow:hidden}.developing-strip{display:flex;flex-direction:column;gap:5px;width:76px;padding:7px 7px 5px;margin:0 auto;background:#eee9d5 url('/textures/paper-grain.svg');box-shadow:2px 4px 6px #0006;transform-origin:top center;animation:develop-print 1.8s ease-in-out infinite}.developing-strip i{height:29px;display:block;background:radial-gradient(ellipse at 50% 45%,#cce878 0 15%,transparent 17%),radial-gradient(ellipse at 50% 120%,#91ac50 0 42%,transparent 44%),linear-gradient(140deg,#304322,#14200d);animation:develop-image 1.8s ease-in-out infinite}.developing-strip i:nth-child(2){animation-delay:.12s}.developing-strip i:nth-child(3){animation-delay:.24s}.developing-strip>span{font:700 7px/1.5 monospace;letter-spacing:.5px;color:#26371b;text-transform:uppercase}.processing .keepsake-loading{background-image:radial-gradient(ellipse at 50% 40%,#33451a70,transparent 65%),url('/textures/paper-grain.svg')}
@keyframes develop-print{0%{transform:translateY(-70%)}65%,85%{transform:translateY(0)}100%{transform:translateY(0);opacity:0}}@keyframes develop-image{0%,25%{filter:brightness(2.4) saturate(0)}65%,100%{filter:brightness(1) saturate(1)}}@media(prefers-reduced-motion:reduce){.developing-strip,.developing-strip i{animation:none;transform:none}}

html,body{overflow-x:clip}@media(max-width:650px){#capture.portrait-capture .camera-wrap{width:min(100%,290px)}#capture.portrait-capture .screen-heading{margin-bottom:12px}#capture.portrait-capture .capture-wordmark{width:84px;margin-top:6px}}

#email-form #send{margin-top:22px}#delivery-status:empty{display:none}.save-actions{margin-top:20px}.idle-warning[hidden]{display:none}.idle-warning{position:fixed;z-index:200;bottom:max(20px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);width:max-content;max-width:calc(100vw - 28px);display:flex;align-items:center;gap:16px;padding:12px 14px 12px 20px;background:#182510;color:#e4f2cb;border:1px solid #839e50;border-radius:18px;box-shadow:0 6px 24px #0008;font:12px/1.4 monospace}.idle-warning .secondary{white-space:nowrap;min-height:40px;padding:8px 14px;border-color:#b5d46c;color:#e4f2cb}

.ui-icon{width:20px;height:20px;display:inline-block;vertical-align:middle;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.back-icon .ui-icon,.landing-start .ui-icon{width:22px;height:22px}.icon-button{display:grid;place-items:center}.secondary:has(.ui-icon),.text-button:has(.ui-icon){display:inline-flex;align-items:center;justify-content:center;gap:8px}.primary>.ui-icon{margin-left:auto}.preview-links .ui-icon{width:14px;height:14px}

/* One print, driven by rendering/encoding stages rather than a repeating loop. */
.developing-strip{animation:none;opacity:1;transform:translateY(calc(-95% * (1 - var(--print-progress,0))));transition:transform .25s ease-out}.developing-strip i{animation:none;filter:brightness(calc(2.4 - 1.4 * var(--print-progress,0))) saturate(var(--print-progress,0));transition:filter .25s ease-out}#screen-flash.burst-lit{opacity:.14}@media(prefers-reduced-motion:reduce){.developing-strip{transform:none;transition:none}.developing-strip i{filter:none;transition:none}#screen-flash.burst-lit{opacity:0}}

#capture.square-capture .camera-wrap{aspect-ratio:1;width:min(100%,620px)}@media(min-width:900px) and (max-height:900px){#capture.square-capture .camera-wrap{width:min(100%,50vh)}}

/* A single, intentionally timed reveal using the actual captured keepsake. */
.keepsake-spinner{width:180px;height:170px}.print-slot{width:180px}.print-window{left:0;width:180px;height:164px}.developing-strip{padding:0;background:none;box-shadow:2px 4px 7px #0008;width:50px;transform:translateY(-98%);transition:none;opacity:1}.developing-strip.print-single{width:125px}.developing-strip.print-boomerang{width:90px}.developing-strip canvas{display:block;width:100%;height:auto}.printing-reveal .developing-strip{animation:keepsake-print-once 2.6s cubic-bezier(.28,.1,.45,1) 1 both}.processing .keepsake-loading{gap:12px;padding:16px;font-size:14px}@keyframes keepsake-print-once{from{transform:translateY(-98%)}to{transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.printing-reveal .developing-strip{animation:none;transform:none}}

/* Host choices use real keepsake previews. */
.visual-choices{display:grid;gap:14px}.frame-choices{grid-template-columns:repeat(2,minmax(0,1fr))}.capture-choices{grid-template-columns:repeat(3,minmax(0,1fr))}.visual-choices label{position:relative;display:flex;align-items:center;flex-direction:column;gap:10px;padding:18px 10px;border:1px solid #657345;border-radius:18px;background:linear-gradient(145deg,#25301d,#10170d);box-shadow:inset 0 1px #ffffff12;cursor:pointer;text-align:center}.visual-choices label:has(:checked){border-color:#d8ef8b;box-shadow:0 0 0 2px #d8ef8b}.visual-choices input{position:absolute;top:10px;left:10px;accent-color:#d8ef8b}.visual-choices img{width:100%;height:170px;object-fit:contain;filter:drop-shadow(0 8px 7px #0008)}.visual-choices small{color:#c3cbb4;font-size:12px}.layout-options{margin:14px 0 24px}.layout-options summary{cursor:pointer}.host-body fieldset{margin-block:24px}.host-body .settings-fields{margin-top:20px}@media(max-width:600px){.visual-choices{gap:10px}.visual-choices img{height:125px}.capture-choices label{padding:30px 5px 12px}.capture-choices strong{font-size:12px}.capture-choices small{font-size:11px}}
/* Curved film drum: raster projection avoids flattened CSS 3D layers. */
.is-zoetrope{width:240px;height:190px}.is-zoetrope .print-slot{display:none}.is-zoetrope .print-window{width:240px;height:190px;overflow:visible}.printing-reveal .print-boomerang{width:82px;animation:none;transform:none;box-shadow:none;position:relative;margin:0 auto}.print-boomerang>canvas:first-child{opacity:0;animation:zoetrope-keepsake 2.6s ease-out both}.print-boomerang>canvas.film-drum{position:absolute;top:0;left:-89px;width:260px;height:190px;animation:drum-finish 2.6s ease both;opacity:1}.visual-choices input{z-index:2;width:18px;height:18px}.visual-choices label:focus-within{outline:2px solid #e1f69a;outline-offset:4px}@keyframes drum-finish{0%,78%{opacity:1}100%{opacity:0}}@keyframes zoetrope-keepsake{0%,78%{opacity:0;transform:scale(.6)}100%{opacity:1;transform:scale(1)}}.recording-timer{position:absolute;top:14px;right:14px;z-index:8;padding:8px 12px;border-radius:999px;background:#17200ee8;color:#e5f7a8;border:1px solid #c7db8c80;box-shadow:0 2px 8px #0005;font:600 14px/1 monospace;font-variant-numeric:tabular-nums}.recording-timer:before{content:'';display:inline-block;width:7px;height:7px;margin-right:7px;border-radius:50%;background:#e5f7a8}.recording-timer[hidden]{display:none}@media(prefers-reduced-motion:reduce){.print-boomerang>canvas:first-child{animation:none;opacity:1}}
#shutter.is-capturing .shutter-disc{position:relative;background:linear-gradient(155deg,#fff3e8,#e7c7b8);border-color:#672a24;box-shadow:inset 0 2px 2px #fff8}#shutter.is-capturing .shutter-disc:before,#shutter.is-capturing .shutter-disc:after{content:'';position:absolute;top:calc(50% - 2px);left:calc(50% - 14px);width:28px;height:4px;border-radius:999px;background:#b52f29;transform:rotate(45deg)}#shutter.is-capturing .shutter-disc:after{transform:rotate(-45deg)}.processing #shutter.is-capturing{visibility:visible}
#camera-empty{background:radial-gradient(ellipse at center,#314128,#10190e 70%);color:#dce7c5;box-shadow:inset 0 0 65px #0009;overflow:hidden}#camera-empty:before{content:'';position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,transparent 0 3px,#0002 3px 4px);opacity:.55}#camera-empty h2{font:600 15px/1.4 monospace;letter-spacing:.02em;position:relative;margin:18px 0 6px}#camera-empty p{font:12px/1.5 monospace;max-width:240px;color:#b4c69b;position:relative}.camera-focus-display{position:relative;width:160px;height:130px;margin:0 auto 16px}.camera-focus-display .focus-corner{position:absolute;width:26px;height:26px;border-color:#ccdf9d;border-style:solid;border-width:0;border-radius:2px}.focus-corner.tl{top:0;left:0;border-top-width:2px;border-left-width:2px}.focus-corner.tr{top:0;right:0;border-top-width:2px;border-right-width:2px}.focus-corner.bl{bottom:0;left:0;border-bottom-width:2px;border-left-width:2px}.focus-corner.br{bottom:0;right:0;border-bottom-width:2px;border-right-width:2px}.camera-focus-display .focus-ring{position:absolute;inset:22px 37px;border:1px solid #e4f4b8;border-radius:50%;box-shadow:0 0 0 7px #91a86212,inset 0 0 15px #99b86b15;animation:lens-seek 1.8s ease-in-out infinite}.camera-focus-display .focus-cross{position:absolute;top:64px;left:70px;width:20px;height:1px;background:#d8eba8}.focus-cross:after{content:'';position:absolute;left:9px;top:-9px;width:1px;height:20px;background:#d8eba8}.camera-focus-display .focus-readout{position:absolute;bottom:-27px;left:0;width:100%;font:10px/1 monospace;letter-spacing:2px;color:#d8eba8;text-align:center}@keyframes lens-seek{0%,100%{transform:scale(1.12);opacity:.5}55%{transform:scale(.82);opacity:1}}@media(prefers-reduced-motion:reduce){.camera-focus-display .focus-ring{animation:none}}
/* Keep the startup group centered inside the shorter mobile strip preview. */
.camera-wrap:has(#camera-empty:not(.hidden)) .camera-label{visibility:hidden}
@media(max-width:650px){
#capture:not(.portrait-capture):not(.square-capture) #camera-empty{padding:14px}
#capture:not(.portrait-capture):not(.square-capture) .camera-focus-display{width:120px;height:78px;margin:0 auto 20px}
#capture:not(.portrait-capture):not(.square-capture) .focus-ring{inset:8px 29px}
#capture:not(.portrait-capture):not(.square-capture) .focus-cross{top:38px;left:50px}
#capture:not(.portrait-capture):not(.square-capture) .focus-readout{bottom:-18px}
#capture:not(.portrait-capture):not(.square-capture) #camera-empty h2{margin:8px 0 4px;font-size:14px}
#capture:not(.portrait-capture):not(.square-capture) #camera-empty p{margin:0}
}
.camera-prewarm{position:fixed;width:1px;height:1px;bottom:0;left:0;opacity:0;pointer-events:none}.camera-start-status{font:12px/1.5 monospace;color:#d6e8b7;text-align:center;max-width:300px;margin:8px auto}.camera-start-status:empty{display:none}#start[aria-busy=true]{cursor:progress}#start[aria-busy=true] .ui-icon{animation:camera-pending 1s ease-in-out infinite}@keyframes camera-pending{50%{transform:translateX(4px)}}

/* Unified interface typography. Canvas keepsake artwork keeps its own lettering. */
@font-face {
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/fonts/poppins-400.ttf) format('truetype');
}
@font-face {
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/poppins-500.ttf) format('truetype');
}
@font-face {
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/fonts/poppins-600.ttf) format('truetype');
}
@font-face {
  font-family: 'Poppins';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/poppins-700.ttf) format('truetype');
}

body,body *{font-family:Poppins,Arial,Helvetica,sans-serif!important}
.screen-heading h1,.delivery h2,.done-content h1,.host-body h1{letter-spacing:-.025em;line-height:1.2}.primary,.secondary{letter-spacing:0;font-weight:600}
/* Tablet portrait: camera-first capture, then a full-width keepsake and sharing. */
body{padding-top:env(safe-area-inset-top,0px);padding-right:env(safe-area-inset-right,0px);padding-bottom:env(safe-area-inset-bottom,0px);padding-left:env(safe-area-inset-left,0px)}
html{scroll-padding-top:24px;scroll-padding-bottom:calc(24px + env(safe-area-inset-bottom,0px))}
#email-form input{font-size:16px;min-height:52px;scroll-margin-block:28px}#email-form #send{min-height:52px}body.editing-keepsake main{padding-bottom:calc(36px + var(--keyboard-inset,0px))}
@media(min-width:651px) and (max-width:1100px) and (orientation:portrait){
body:not(.landing-active)>header{height:72px;margin-inline:28px}
body:not(.landing-active) main{padding:18px 24px 24px}
#capture .screen-heading,#review .screen-heading{margin-bottom:16px;gap:12px}
#capture .screen-heading h1,#review .screen-heading h1{font-size:28px}
#capture .screen-heading .eyebrow,#review .screen-heading .eyebrow{margin-bottom:6px}
.capture-lit #capture{padding:16px 12px 12px}
#capture .camera-wrap{width:min(100%,800px);max-height:none;aspect-ratio:4/3}
#capture.square-capture .camera-wrap{width:min(100%,calc(100svh - 340px),740px);aspect-ratio:1}
#capture.portrait-capture .camera-wrap{width:min(100%,calc((100svh - 340px)*.75),620px);aspect-ratio:3/4}
#capture #shutter.capture-button{width:88px;height:88px;min-height:88px;margin:12px auto 8px}
#capture .thumbnails{margin:8px 0}#capture .thumbnails:empty{display:none}
#review .review-layout{grid-template-columns:1fr;gap:22px;max-width:760px;margin-inline:auto}
#review .result-stage{min-height:0;max-height:none;padding:18px;width:100%}
#review .result-stage img,#review .result-stage video{display:block;width:auto;height:auto;max-width:100%;max-height:min(62svh,820px);object-fit:contain;margin:auto}
#review .result-stage .hidden{display:none}
#review .delivery{width:100%;max-width:none;margin:0;padding:24px 28px}
#review .delivery .small-star{display:none}#review .delivery h2{margin-top:0}
#review .save-actions{gap:14px}#review .save-actions button{min-height:48px}
#review #email-form{max-width:560px;margin-inline:auto}
#review #email-form label{margin-top:18px;margin-bottom:8px}
body:not(.landing-active)>footer{margin-inline:28px;height:56px}
}
/* The bright capture surround is only for taking photos, not developing them. */
.capture-lit #capture.processing{background:var(--paper);background-image:url('/textures/paper-grain.svg');color:var(--ink);box-shadow:inset 0 0 0 1px #53644355,0 12px 35px #0004}
.capture-lit #capture.processing .camera-wrap{border-color:var(--paper);outline-color:#53644355;background:var(--paper);box-shadow:none}
#capture.processing .keepsake-loading{background-color:var(--paper)}
.capture-lit #capture.processing .eyebrow{color:var(--accent)}
.capture-lit #capture.processing .back-icon{color:var(--ink);border-color:var(--line)}
@media(orientation:portrait){body.landing-active,body:not(.landing-active):not(.wall-body){background-position:var(--party-position,center)}}

.background-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.background-choices img{width:100%;height:auto!important;aspect-ratio:16/9;object-fit:cover;border-radius:8px}.background-choices label{min-width:0}.background-choices strong{font-size:14px}.background-behavior{display:flex;gap:16px;flex-wrap:wrap;margin-top:18px}.background-behavior label{display:flex;align-items:center;gap:8px}

#done .done-content{max-width:580px;margin:auto}#done .done-content>button{display:flex;align-items:center;justify-content:center;gap:10px;margin:12px auto;min-height:48px;width:min(100%,320px)}#recipient-form{text-align:left;margin:24px auto;max-width:380px}#recipient-form label{display:block;margin:16px 0 8px}#recipient-form button{margin-top:20px;width:100%}#recipient-status{overflow-wrap:anywhere}

/* The keepsake and controls own this transition; do not replay screen entry. */
#review.screen{animation:none}

#unlock{width:min(380px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow:auto;padding:28px;border-radius:26px;text-align:center;box-shadow:0 24px 80px #0009}#unlock h2{font-size:24px;line-height:1.25;margin:12px 0 22px}#unlock .eyebrow{font-size:10px}.pin-dots{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;min-height:20px;margin:0 0 24px}.pin-dots span{width:12px;height:12px;border-radius:50%;border:1px solid #a5b78b;background:#25321c}.pin-dots span.filled{background:#d0f555;border-color:#d0f555;box-shadow:0 0 9px #d0f55533}.pin-keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.pin-key{display:flex;align-items:center;justify-content:center;min-height:56px;border-radius:999px;border:1px solid #64754c;background:linear-gradient(#344429,#202d18);box-shadow:0 3px 0 #080f06,inset 0 1px 0 #ffffff15;color:#edf3df;font-size:24px;touch-action:manipulation}.pin-key:active{transform:translateY(2px);box-shadow:0 1px 0 #080f06;background:#42552e}.pin-key.pin-action{font-size:12px}.pin-key:focus-visible{outline:2px solid #d0f555;outline-offset:3px}#pin-unlock{width:100%;justify-content:center;min-height:50px;margin-top:22px}#unlock-status{min-height:20px;margin:14px 0 0;font-size:12px;line-height:1.5}@media(max-height:600px){#unlock{padding:18px}#unlock h2{margin:8px 0 14px;font-size:20px}.pin-dots{margin-bottom:12px}.pin-key{min-height:44px}#pin-unlock{margin-top:14px}}

/* Keep the finished keepsake aligned within one full-height page. */
body.review-active{min-height:100svh;display:flex;flex-direction:column}
.review-active>main{width:100%;flex:1}
.review-active>footer{flex-shrink:0}
#review #next{display:flex;align-items:center;justify-content:center;gap:12px;width:100%;min-height:54px;padding:14px 22px;border-radius:999px;text-decoration:none;font-size:14px;font-weight:600}
@media(min-width:1101px){
 .review-active>header,.review-active>footer{width:calc(100% - 64px);max-width:1000px;margin-inline:auto}
 .review-active>main{max-width:1064px;padding:32px;display:flex;align-items:center}
 #review{width:100%;max-width:1000px;margin-inline:auto}
 #review .screen-heading{margin-bottom:26px}
 #review .review-layout{width:100%;max-width:none;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:32px;align-items:stretch}
 #review .result-stage{min-width:0;max-height:none;display:flex;align-items:center;justify-content:center}
 #review .result-stage img,#review .result-stage video{max-width:100%;max-height:min(62svh,720px);width:auto;height:auto;object-fit:contain}
 #review .result-stage .hidden{display:none}
 #review .delivery{min-width:0;display:flex;flex-direction:column;padding:28px}
 #review #next{margin-top:auto}
 #review .save-actions{margin-bottom:24px}
}
