/* Cracked consumer app. Phone first: media edge to edge, one orange pill per screen, the next action in a glass
   thumb dock. Every color, shadow and curve is a token in mobile-tokens.css; DESIGN.md has the recipes. */
*{box-sizing:border-box}
html{height:100%;background:var(--bg);overscroll-behavior:none;-webkit-text-size-adjust:100%;color-scheme:dark;overflow-x:clip}
body{margin:0;color:var(--ink);font:400 var(--text-body)/1.5 var(--body);font-kerning:normal;-webkit-font-smoothing:antialiased;overflow-x:clip}
.journey-page{position:fixed;inset:0;display:flex;flex-direction:column;overflow:hidden;background:var(--noise) 0 0/64px 64px,var(--bg)}
/* The page is lit: a warm glow from the top edge and a fine grain, painted once behind everything. */
.journey-page::before{content:'';position:fixed;inset:0;pointer-events:none;background:var(--ambient)}
.main{position:relative;flex:1;min-height:0;overflow-y:auto;overflow-x:clip;overscroll-behavior:none;scrollbar-width:thin}
h1,h2,h3,p,figure,dl,dd{margin:0}
h1,h2{font-family:var(--display);font-weight:800;letter-spacing:var(--track-title);line-height:1.08;text-wrap:balance;overflow-wrap:anywhere;min-width:0}
h1{font-size:2rem}h2{font-size:1.5rem}p{text-wrap:pretty}
a{color:var(--link);text-decoration:none}button,input,textarea{font:inherit}button{cursor:pointer}button,a,label,summary{-webkit-tap-highlight-color:transparent}
button,a,summary,button *,a *{touch-action:manipulation;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
button:disabled{cursor:default}input,textarea{font-size:1rem;user-select:text;-webkit-user-select:text}
img,video{display:block;max-width:100%}
svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
[hidden]{display:none!important}:focus-visible{outline:3px solid var(--accent);outline-offset:3px}h2[tabindex="-1"]:focus{outline:none}
html[data-input-mode=pointer] :is(button,a,label):focus-visible{outline:none}
.skip-link{position:fixed;top:-120px;left:16px;z-index:30;padding:12px 16px;background:var(--accent);color:var(--on-accent);border-radius:var(--radius-pill)}.skip-link:focus{top:calc(8px + env(safe-area-inset-top))}

/* ---------- app bar ---------- */
.journey-nav{flex:none;position:relative;z-index:var(--z-nav);display:grid;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;gap:8px;height:calc(var(--nav-h) + env(safe-area-inset-top));padding:env(safe-area-inset-top) max(12px,env(safe-area-inset-right)) 0 max(8px,env(safe-area-inset-left))}
.nav-title{grid-column:2;text-align:center;font-size:1rem;font-weight:700;letter-spacing:var(--track-tight);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nav-back{grid-column:1;position:relative;display:grid;place-items:center;width:44px;height:44px;color:var(--ink);border-radius:50%;transition:background var(--dur-micro) var(--ease-press),transform var(--dur-micro) var(--ease-press)}
.nav-back:active{background:var(--surface-pressed);transform:scale(.92)}
/* My videos is a raised pill on every screen, so a first-timer always knows where finished videos live. */
.journey-library{grid-column:3;justify-self:end;position:relative;display:flex;align-items:center;gap:6px;min-height:40px;padding:0 14px 0 11px;border-radius:var(--radius-pill);background:var(--grad-raised);box-shadow:var(--btn-secondary);color:var(--ink);font-size:.875rem;font-weight:700;letter-spacing:-.005em;white-space:nowrap;transition:transform var(--dur-micro) var(--ease-press),box-shadow var(--dur-micro) var(--ease-press)}
.journey-library svg{width:19px;height:19px}.journey-library:active{transform:scale(.95)}.journey-library.is-active{color:var(--link);box-shadow:inset 0 1px 0 rgba(255,255,255,.08),0 0 0 1px var(--accent-ring)}
.journey-library [data-video-count]{min-width:18px;padding:0 5px;border-radius:var(--radius-pill);background:var(--grad-accent);color:var(--on-accent);font-size:.625rem;font-weight:800;line-height:18px;text-align:center;box-shadow:0 2px 6px -2px rgba(255,110,60,.8)}
/* A page outside the app's flow (the front door, the legal pages, a brand's page): just the wordmark. */
.journey-nav.is-brand-only{grid-template-columns:minmax(0,1fr)}
html[data-page=home] .journey-nav{grid-template-columns:minmax(0,1fr) auto}html[data-page=home] .brand{grid-column:1}html[data-page=home] .journey-library{grid-column:2}
/* Inside the flow the library is a 44px icon button, so the screen title centers on the phone, not in the gap. */
html:not([data-page=home]) .nav-back{background:var(--grad-raised);box-shadow:var(--btn-secondary)}
html:not([data-page=home]) .journey-library{width:44px;min-height:44px;padding:0;justify-content:center;border-radius:50%}html:not([data-page=home]) .library-label{display:none}
html:not([data-page=home]) .journey-library [data-video-count]{position:absolute;top:4px;right:4px;box-shadow:0 0 0 2px var(--bg),0 2px 6px -2px rgba(255,110,60,.8)}
.brand{grid-column:1/3;justify-self:start;display:flex;align-items:center;min-height:44px;padding:0 8px;color:var(--ink)}.brand img{aspect-ratio:4522/871;width:auto}.brand img{display:block;height:30px;width:auto}
/* The wide-screen bar (desktop.css draws it from 64rem). Never on a phone. */
.desk-brand,.desk-nav,.more-effects{display:none}
/* The switch between the two front doors, For brands (/) and For creators (/creators): two links styled as one control.
   Phones give it its own row under the bar; from 48rem it sits in the middle of the bar. */
.journey-nav.has-sides{height:auto;grid-template-rows:calc(var(--nav-h) + env(safe-area-inset-top)) auto;padding-bottom:14px}
.journey-nav.has-sides>:not(.side-switch){grid-row:1}
.side-switch{grid-column:1/-1;grid-row:2;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px;margin:0 4px 0 8px;padding:3px;border-radius:var(--radius-pill);background:var(--bg-deep);box-shadow:inset 0 1px 2px rgba(0,0,0,.45),0 0 0 1px var(--line)}
.side-switch a{display:flex;align-items:center;justify-content:center;min-height:38px;padding:0 16px;border-radius:var(--radius-pill);color:var(--muted);font-size:.875rem;font-weight:700;letter-spacing:-.005em;white-space:nowrap;transition:color var(--dur-hover) var(--ease-press),background var(--dur-hover) var(--ease-press)}
.side-switch a[aria-current]{color:var(--ink);background:var(--grad-raised);box-shadow:var(--btn-secondary)}
.side-switch a:not([aria-current]):hover{color:var(--ink)}
.side-switch a:active{transform:scale(var(--press))}
/* The effect's media runs under a transparent bar; controls sit on glass so they read on any frame. */
html[data-page=effect] .journey-nav{position:absolute;inset:0 0 auto;background:linear-gradient(to bottom,rgba(8,9,11,.72),rgba(8,9,11,0))}
html[data-page=effect] .nav-title{visibility:hidden}
html[data-page=effect] :is(.nav-back,.journey-library){background:var(--glass);box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 0 0 1px rgba(255,255,255,.08);-webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4)}

/* ---------- buttons ---------- */
.studio-label{display:block;font-size:.8125rem;font-weight:700;color:var(--link);letter-spacing:0}
.journey-primary,.btn{position:relative;display:flex;align-items:center;justify-content:center;gap:10px;min-height:56px;width:100%;padding:12px 24px;border:0;border-radius:var(--radius-pill);background:var(--grad-accent);box-shadow:var(--btn-primary);color:var(--on-accent);font-weight:800;font-size:1.0625rem;line-height:1.2;letter-spacing:-.01em;text-align:center;white-space:nowrap;text-decoration:none;cursor:pointer;transition:transform var(--dur-release) var(--ease-press),box-shadow var(--dur-hover) var(--ease-press),filter var(--dur-hover) var(--ease-press);touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.journey-primary:active,.btn:active{transform:scale(var(--press));box-shadow:var(--btn-primary-press);filter:brightness(.97);transition-duration:var(--dur-micro)}
.journey-primary:disabled,.btn:disabled{color:var(--faint);background:var(--surface-raised);box-shadow:var(--hi),var(--ring);text-shadow:none;transform:none;filter:none}
/* The price and the arrow sit in their own dark pill inside the button, flush with its right edge. */
.cta-price{padding:6px 12px;margin-right:-12px;border-radius:var(--radius-pill);background:rgba(25,19,15,.94);box-shadow:inset 0 1px 0 rgba(255,255,255,.1);color:#ffb18d;font-size:.9375rem;text-shadow:none;font-variant-numeric:tabular-nums}
.journey-primary>svg{width:32px;height:32px;padding:8px;margin-right:-12px;border-radius:50%;background:rgba(25,19,15,.94);box-shadow:inset 0 1px 0 rgba(255,255,255,.1);color:#ffb18d;stroke-width:2.4;transition:transform var(--dur-hover) var(--ease-press)}
.btn-secondary,.btn-ghost{color:var(--ink);background:var(--grad-raised);box-shadow:var(--btn-secondary);text-shadow:none}
.btn-secondary:active,.btn-ghost:active{box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 0 0 1px rgba(255,255,255,.07);filter:brightness(.92)}
.btn-sm{width:auto;min-height:44px;padding:0 18px;font-size:.9375rem}
.journey-note{font-size:.8125rem;line-height:1.4;text-align:center;color:var(--muted);margin-top:10px}
.journey-error{padding:12px 14px;border-radius:var(--radius-control);background:var(--error-surface);box-shadow:inset 0 0 0 1px rgba(255,154,145,.18);color:var(--error);font-size:.875rem;line-height:1.45}.journey-error:empty{display:none}

/* ---------- surfaces ---------- */
/* A card is a lit plate: gradient fill, top highlight, hairline ring, soft shadow. Never a flat fill with a border. */
.release-notice,.recipe-input,.composer-reference,.auth-draft,.install-help,.dfy-card,.claim-box,.card{background:var(--grad-surface);box-shadow:var(--hi),var(--ring),var(--elev-1)}
.release-notice{padding:16px;border-radius:var(--radius-control);font-size:.875rem}.release-notice strong{display:block;color:var(--ink)}.release-notice p{margin-top:4px;color:var(--muted);line-height:1.5}
.output-strip{display:flex;flex-wrap:wrap;gap:8px}
.output-strip>div{display:flex;align-items:baseline;gap:6px;min-height:32px;padding:6px 12px;border-radius:var(--radius-pill);background:rgba(255,255,255,.035);box-shadow:inset 0 0 0 1px var(--line)}
.output-strip dt{font-size:.75rem;color:var(--faint)}.output-strip dd{font-size:.8125rem;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.flow-action,.result-dock{margin-top:auto}
.effect-use{text-align:left;margin-top:-6px}

/* ---------- media cards ---------- */
/* Media sits on the page like a print on a desk: rounded, shadowed, with a 1px light ring drawn over the image. */
.film-cover{position:relative;overflow:hidden;border-radius:var(--radius-media);background:linear-gradient(100deg,var(--surface) 40%,var(--surface-raised) 50%,var(--surface) 60%) 0 0/300% 100%;animation:shimmer 1.6s linear 5}.film-cover.is-loaded{animation:none;background:var(--surface)}
.film-cover img,.film-cover video{width:100%;height:100%;object-fit:cover}
/* A home tile's sample clip, laid over its cover once it is actually playing (journey.js), so a slow clip never blanks the tile. */
.film-loop{position:absolute;inset:0;opacity:0;transition:opacity 320ms var(--ease-out)}.is-playing .film-loop{opacity:1}
.film-item{display:block;min-width:0;color:var(--ink)}
.effect-card{position:relative;display:block;border-radius:var(--radius-media);overflow:hidden;background:var(--surface);box-shadow:var(--elev-2);transition:transform var(--dur-hover) var(--ease-press),box-shadow var(--dur-hover) var(--ease-press)}
.effect-card::after,.library-item .film-cover::before{content:'';position:absolute;inset:0;z-index:3;border-radius:inherit;box-shadow:var(--ring-media);pointer-events:none}
.effect-card:active{transform:scale(var(--press));transition-duration:var(--dur-micro)}
.effect-card .film-cover{border-radius:0;aspect-ratio:9/16}.effect-card[data-featured]{grid-column:1/-1;box-shadow:var(--elev-3)}.effect-card[data-featured] .film-cover{aspect-ratio:4/5}
.effect-card .film-cover::after{content:'';position:absolute;inset:0;background:var(--grad-scrim)}
/* The ads card shows all three versions at once, each cropped above its own caption, with the copy underneath. */
/* The text effect's poster is mostly black: light it like a CRT, a green bloom behind the line and fine scanlines. */
[data-effect-kind=text] .film-cover::before{content:'';position:absolute;inset:0;z-index:1;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.035) 0 1px,rgba(255,255,255,0) 1px 3px),radial-gradient(90% 40% at 40% 44%,rgba(80,255,140,.2),rgba(80,255,140,0) 70%)}
[data-effect-kind=text] .film-cover img{transform:scale(1.35);transform-origin:12% 40%}
.film-caption{position:absolute;inset:auto 0 0;z-index:1;display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:14px}
.film-caption h2{font-size:1.25rem;letter-spacing:var(--track-title);text-shadow:0 2px 16px rgba(0,0,0,.5)}.film-caption p{font-size:.8125rem;line-height:1.35;color:rgba(245,245,243,.86);max-width:30ch;text-shadow:0 1px 8px var(--scrim)}
.film-input{display:none}
.film-cta{display:flex;align-items:center;gap:6px;min-height:44px;margin-top:10px;padding:0 7px 0 18px;border-radius:var(--radius-pill);background:var(--grad-accent);box-shadow:var(--btn-primary);color:var(--on-accent);font-size:.9375rem;font-weight:800;white-space:nowrap}
.film-cta.is-quiet{background:rgba(255,255,255,.14);box-shadow:inset 0 1px 0 rgba(255,255,255,.18),0 0 0 1px rgba(255,255,255,.1);color:var(--ink);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.film-cta.is-quiet svg{background:rgba(255,255,255,.16);color:var(--ink)}
.film-cta svg{width:28px;height:28px;padding:6px;border-radius:50%;background:rgba(25,19,15,.94);color:#ffb18d;stroke-width:2.6;transition:transform var(--dur-hover) var(--ease-press)}
[data-featured] .film-caption{padding:20px}[data-featured] .film-caption h2{font-size:2.25rem;letter-spacing:var(--track-display);line-height:1}[data-featured] .film-caption p{font-size:.9375rem;margin-top:2px}
[data-featured] .film-input{display:block;font-size:.75rem;font-weight:700;color:var(--ink);text-shadow:0 1px 8px var(--scrim)}
/* Chips on media are glass: blurred, lit on top, ringed (Krea, Pika). */
.film-sample,.film-duration,.cinema-sample,.film-status,.render-reference,.empty-feature-media>span{position:absolute;z-index:2;display:flex;align-items:center;gap:6px;padding:4px 10px;border-radius:var(--radius-pill);background:var(--glass);box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 0 0 1px rgba(255,255,255,.08);-webkit-backdrop-filter:blur(12px) saturate(1.4);backdrop-filter:blur(12px) saturate(1.4);color:var(--ink);font-size:.6875rem;line-height:1.5;font-weight:700;max-width:calc(100% - 64px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.film-sample{top:10px;left:10px}.film-duration{top:10px;right:10px;font-variant-numeric:tabular-nums}

/* ---------- the effects front door (/fx), design/EFFECTS-FRONT-DOOR-2026-09-25.md ---------- */
.browse-page,.library-page,.plain-page,.lost-page{max-width:1160px;margin:0 auto;padding:4px max(16px,env(safe-area-inset-right)) calc(40px + env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))}
.studio-intro{padding:10px 4px 24px}
.studio-intro h1{font-size:var(--text-display);line-height:.98;letter-spacing:var(--track-display);max-width:12ch}
.studio-intro>p{color:var(--muted);font-size:1.0625rem;line-height:1.45;max-width:32ch;margin-top:12px}
.film-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
/* One line, then the lead effect playing, then photo-in and video-out pairs, then the rest, then the price. */
.fx-intro{padding-bottom:20px}.fx-intro h1{max-width:none}.fx-intro .nowrap{white-space:nowrap}
.fx-intro>.fx-price{max-width:none;margin-top:14px;color:var(--muted);font-size:.8125rem;font-weight:600;line-height:1.4}
.fx-intro>.fx-status{max-width:none;display:flex;align-items:baseline;gap:8px;margin-top:14px;color:var(--muted);font-size:.8125rem;font-weight:600;line-height:1.4}
.fx-price b{color:var(--ink);font-weight:800;font-variant-numeric:tabular-nums}
.fx-status::before{content:'';flex:none;align-self:flex-start;margin-top:.45em;width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px rgba(255,121,74,.8)}
.fx-top{display:flex;flex-direction:column;gap:32px}
.fx-lead-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.fx-pairs h2,.fx-more h2{font-size:1.375rem;letter-spacing:var(--track-title);padding:0 4px}
.fx-pair-row{--pair-w:128px;display:grid;grid-auto-flow:column;grid-auto-columns:var(--pair-w);gap:12px;margin:14px -16px 0;padding:4px 16px 8px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scroll-padding-inline:16px;scrollbar-width:none}
.fx-pair-row::-webkit-scrollbar{display:none}
.fx-pair{display:flex;flex-direction:column;gap:8px;min-width:0;color:var(--ink);scroll-snap-align:start}
.fx-pair-out{position:relative;display:block;aspect-ratio:3/4;border-radius:16px;overflow:hidden;background:var(--media-bg);box-shadow:var(--ring-media),var(--elev-2);transition:transform var(--dur-hover) var(--ease-press)}
.fx-pair-out>img{width:100%;height:100%;object-fit:cover;object-position:50% 30%}
/* The photo that went in, tipped like a print on the video that came out (the purchase sheet's two prints). */
.fx-pair-in{position:absolute;left:8px;bottom:8px;width:42%;aspect-ratio:1;border-radius:10px;overflow:hidden;background:#fff;transform:rotate(-4deg);box-shadow:0 0 0 2px rgba(255,255,255,.9),0 6px 14px -4px rgba(0,0,0,.7)}
.fx-pair-in img{width:100%;height:100%;object-fit:cover}
.fx-pair-name{display:flex;flex-direction:column;padding:0 2px;color:var(--muted);font-size:.8125rem;line-height:1.3}.fx-pair-name b{color:var(--ink);font-weight:700}
.fx-pair:active .fx-pair-out{transform:scale(var(--press))}
.fx-pairs-note{margin-top:6px;padding:0 4px;color:var(--faint);font-size:.75rem;line-height:1.4}
.fx-more{margin-top:32px}.fx-more .effect-grid{margin-top:14px}
/* An odd last effect takes the whole row, cut wide so it doesn't tower over the pair above it. */
@media(max-width:47.99rem){.fx-more .effect-grid>.effect-card:not([data-featured]):last-child:nth-child(odd) .film-cover{aspect-ratio:4/3}.fx-more .effect-grid>.effect-card:last-child:nth-child(odd) .film-cover img{object-position:50% 35%}}
.fx-plate{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 12px;margin-top:32px;padding:20px;border-radius:var(--radius-card);background:var(--grad-surface);box-shadow:var(--hi),var(--ring),var(--elev-1)}
.fx-plate div{display:flex;flex-direction:column;gap:2px}.fx-plate strong{font-size:2rem;font-weight:800;letter-spacing:var(--track-title);line-height:1.05;font-variant-numeric:tabular-nums}.fx-plate span{color:var(--muted);font-size:.875rem}
.fx-plate p{grid-column:1/-1;color:var(--muted);font-size:.875rem;line-height:1.45}.fx-plate p+p{margin-top:-10px}
.app-foot .fx-owner{flex-basis:100%;color:var(--muted)}.app-foot .fx-owner a{display:inline;min-height:0;color:var(--link)}

/* The front door ends with who sells this and where the terms are, quietly. */
.app-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 24px;margin-top:40px;padding:20px 4px 0;box-shadow:inset 0 1px 0 var(--line);color:var(--faint);font-size:.8125rem}.app-foot nav{display:flex;gap:4px 20px;flex-wrap:wrap}.app-foot a{display:flex;align-items:center;min-height:44px;color:var(--muted);font-weight:600}

/* ---------- effect ---------- */
.studio-flow{display:flex;flex-direction:column;gap:20px;width:min(100%,540px);min-height:100%;margin:0 auto;padding:6px 16px calc(var(--dock-h) + 48px + env(safe-area-inset-bottom))}
.studio-flow.is-discovering{gap:0;padding:0 0 calc(var(--dock-h) + 32px + env(safe-area-inset-bottom))}
.cinema-stage{position:relative;isolation:isolate;width:100%;height:min(177.78vw,calc(100svh - 440px));min-height:320px;overflow:hidden;background:var(--media-bg)}
.cinema-stage video{width:100%;height:100%;object-fit:cover;object-position:50% 22%;cursor:pointer}
.cinema-sample{top:calc(var(--nav-h) + 8px + env(safe-area-inset-top));left:16px}
.cinema-toggle{position:absolute;right:16px;bottom:48px;z-index:2;display:grid;place-items:center;width:44px;height:44px;padding:0;border:0;border-radius:50%;color:var(--ink);background:var(--glass);box-shadow:inset 0 1px 0 rgba(255,255,255,.14),0 0 0 1px rgba(255,255,255,.08),0 4px 12px rgba(0,0,0,.35);-webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4);transition:transform var(--dur-micro) var(--ease-press)}
.cinema-toggle:active{transform:scale(.92)}
.cinema-toggle svg{width:20px;height:20px;fill:currentColor;stroke-width:2.4}.cinema-toggle .icon-pause{fill:none}
.cinema-toggle[data-paused=true] .icon-pause,.cinema-toggle:not([data-paused=true]) .icon-play{display:none}
/* The panel rises over the media like a sheet: a lit top edge, a shadow cast upward, a faint warm glow. */
.effect-panel{position:relative;z-index:1;flex:1 0 auto;display:flex;flex-direction:column;gap:20px;margin-top:-30px;padding:26px 20px 8px;border-radius:var(--radius-sheet) var(--radius-sheet) 0 0;background:radial-gradient(120% 50% at 50% 0%,rgba(255,121,74,.07),rgba(255,121,74,0) 70%),var(--bg);box-shadow:var(--elev-sheet)}
.effect-story h1{font-size:var(--text-heading);letter-spacing:var(--track-display);line-height:1.02;margin-top:8px;max-width:16ch}.effect-story>p{font-size:1rem;line-height:1.5;color:var(--muted);margin-top:10px;max-width:40ch}
.recipe-input{display:flex;align-items:flex-start;gap:14px;padding:14px;border-radius:var(--radius-card)}
.recipe-icon{display:grid;place-items:center;flex:none;width:42px;height:42px;border-radius:13px;background:var(--accent-tint);box-shadow:inset 0 0 0 1px rgba(255,121,74,.22);color:var(--link)}.recipe-icon svg{width:20px;height:20px}
.recipe-input h2{font-size:.9375rem;font-weight:700;letter-spacing:-.01em;line-height:1.35}.recipe-input p{font-size:.8125rem;line-height:1.45;color:var(--muted);margin-top:2px}
/* The sample strip on the effect page: the same effect on other products, one tap to play each. */
.example-strip h2{font-size:.9375rem;font-weight:700;letter-spacing:-.01em}.example-strip>p{font-size:.8125rem;line-height:1.45;color:var(--muted);margin-top:8px}
.example-row{display:flex;gap:10px;margin:8px -20px 0;padding:6px 20px 6px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-padding-inline:20px;scrollbar-width:none}.example-row::-webkit-scrollbar{display:none}
.example-pick{flex:none;display:flex;flex-direction:column;align-items:center;gap:8px;width:74px;padding:0;border:0;background:none;color:var(--muted);font:inherit;font-size:.75rem;font-weight:600;line-height:1.2;text-align:center;scroll-snap-align:start;cursor:pointer}
.example-pick img{width:66px;height:66px;border-radius:18px;object-fit:cover;background:var(--surface);box-shadow:0 0 0 1px rgba(255,255,255,.1),var(--elev-1);transition:box-shadow var(--dur-hover) var(--ease-press),transform var(--dur-micro) var(--ease-press)}
.example-pick[aria-pressed=true]{color:var(--ink)}.example-pick[aria-pressed=true] img{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--accent),0 6px 18px -6px rgba(255,110,60,.6)}.example-pick:active img{transform:scale(.94)}

/* ---------- make ---------- */
.flow-heading h1{font-size:var(--text-heading);letter-spacing:var(--track-display);line-height:1.02;max-width:14ch}.flow-heading>p{color:var(--muted);margin-top:10px;font-size:1rem;line-height:1.45;max-width:40ch}
.composer-reference{display:flex;align-items:center;gap:12px;padding:8px;border-radius:var(--radius-card)}
.reference-media{position:relative;width:42px;height:56px;flex:none}.reference-media img{width:100%;height:100%;object-fit:cover;border-radius:10px;box-shadow:0 0 0 1px rgba(255,255,255,.1),0 2px 6px rgba(0,0,0,.5)}.reference-media>span{display:none}
.effect-receipt{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.effect-receipt>span{flex:1;min-width:0}.effect-receipt strong{display:block;font-size:.9375rem;font-weight:700}.effect-receipt small{display:block;color:var(--muted);font-size:.75rem;line-height:1.35;margin-top:1px}
.effect-receipt a{display:flex;align-items:center;gap:2px;min-height:40px;padding:0 10px 0 14px;border-radius:var(--radius-pill);background:rgba(255,255,255,.04);box-shadow:inset 0 0 0 1px var(--line);font-size:.875rem;font-weight:700;white-space:nowrap}.effect-receipt svg{width:16px;height:16px}
#journey-form{display:flex;flex-direction:column;gap:14px;min-width:0}
/* The photo well: a lit plate with a dashed inner guide and a warm center, not a dashed box on the page. */
.portrait-picker{position:relative;display:grid;min-height:clamp(220px,36svh,400px);border-radius:var(--radius-card);background:radial-gradient(60% 50% at 50% 42%,rgba(255,121,74,.09),rgba(255,121,74,0) 72%),var(--grad-surface);box-shadow:var(--hi),var(--ring),var(--elev-1);overflow:hidden}
.portrait-picker::before{content:'';position:absolute;inset:0;z-index:1;border-radius:inherit;box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.1);pointer-events:none;transition:box-shadow var(--dur-hover) var(--ease-press)}
.selected-portrait,.photo-control{grid-area:1/1}/* Once chosen, the frame shrinks to the photo itself: no letterbox bars, the photo is the card. */
.selected-portrait{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.selected-portrait img{width:auto;height:100%;max-width:100%;object-fit:contain;border-radius:18px;background:var(--media-bg);box-shadow:var(--ring-media),var(--elev-2)}
.has-photo .portrait-picker{height:clamp(260px,44svh,440px)}.has-photo .portrait-picker{background:none;box-shadow:none;overflow:visible}.has-photo .portrait-picker::before{content:none}
.photo-control{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:16px;cursor:pointer;user-select:none;-webkit-user-select:none}
.photo-control input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:1}.photo-control:focus-within{outline:3px solid var(--accent);outline-offset:-3px;border-radius:var(--radius-card)}
.photo-control:active{background:rgba(255,255,255,.03)}
.photo-empty{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center;color:var(--muted);font-size:.875rem}.photo-empty strong{font-size:1.1875rem;font-weight:800;letter-spacing:-.02em;color:var(--ink);margin-top:14px}
.photo-icon{display:grid;place-items:center;width:64px;height:64px;border-radius:22px;background:linear-gradient(180deg,rgba(255,121,74,.22),rgba(255,121,74,.1));box-shadow:inset 0 1px 0 rgba(255,200,170,.25),0 0 0 1px rgba(255,121,74,.3),0 10px 28px -10px rgba(255,110,60,.55);color:#ffb18d}.photo-icon svg{width:28px;height:28px}
.photo-select{display:none}
.has-photo .photo-empty{display:none}.has-photo .photo-control{justify-content:flex-end}
.has-photo .photo-select{display:flex;align-items:center;min-height:44px;padding:0 18px;border-radius:var(--radius-pill);background:var(--glass-strong);box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 0 0 1px rgba(255,255,255,.1);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);color:var(--ink);font-size:.875rem;font-weight:700}
.input-guidance{color:var(--muted);font-size:.8125rem;line-height:1.45}.input-count{font-size:.75rem;color:var(--faint);text-align:right;font-variant-numeric:tabular-nums}
.journey-line{display:flex;flex-direction:column;gap:8px}
/* Fields are wells: darker than the page, shadowed inside, ringed; focus lights the ring orange. */
.journey-line textarea,.input{width:100%;border:0;background:var(--bg-deep);color:var(--ink);box-shadow:inset 0 1px 3px rgba(0,0,0,.45),inset 0 0 0 1px var(--line-strong);transition:box-shadow var(--dur-hover) var(--ease-press)}
.journey-line textarea{padding:16px;resize:none;min-height:180px;border-radius:var(--radius-card);font-size:1.125rem;line-height:1.45}
.journey-line textarea:focus,.input:focus{outline:none;box-shadow:inset 0 1px 3px rgba(0,0,0,.45),inset 0 0 0 1.5px var(--accent),0 0 0 4px var(--accent-tint)}
/* Until there is a photo, the dock's one job is choosing it. */
.studio-flow[data-kind=image]:not(.has-photo) [data-continue],.studio-flow.has-photo [data-choose]{display:none}
[data-choose]{cursor:pointer}

/* ---------- purchase sheet ---------- */
.purchase-sheet{position:fixed;inset:auto 0 0;margin:0;width:100%;max-width:none;max-height:calc(100dvh - env(safe-area-inset-top) - 12px);padding:30px 20px max(16px,env(safe-area-inset-bottom));border:0;border-radius:var(--radius-sheet) var(--radius-sheet) 0 0;background:radial-gradient(100% 34% at 50% 0%,rgba(255,121,74,.12),rgba(255,121,74,0) 72%),var(--grad-surface);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),var(--elev-sheet);color:var(--ink);overflow:auto;overscroll-behavior:contain}
.purchase-sheet::backdrop{background:var(--color-backdrop);-webkit-backdrop-filter:blur(6px) saturate(1.2);backdrop-filter:blur(6px) saturate(1.2)}
.purchase-sheet[open]{display:flex;flex-direction:column;animation:sheet-enter var(--dur-sheet) var(--ease-sheet)}.purchase-sheet[open]::backdrop{animation:fade-in var(--dur-sheet) var(--ease-out)}
.sheet-handle{position:absolute;top:9px;left:calc(50% - 18px);width:36px;height:5px;border-radius:var(--radius-pill);background:rgba(255,255,255,.22)}
.sheet-close{position:sticky;top:0;align-self:flex-end;z-index:2;margin:-14px -6px -44px 0;flex:none;display:grid;place-items:center;width:44px;height:44px;padding:0;background:var(--grad-raised);box-shadow:var(--btn-secondary);border:0;border-radius:50%;color:var(--ink);transition:transform var(--dur-micro) var(--ease-press)}.sheet-close:active{transform:scale(.92)}.sheet-close svg{width:18px;height:18px;stroke-width:2.2}
.purchase-heading{order:1;padding-right:52px}.purchase-images{order:2}.sheet-change{order:3}.purchase-price{order:5}.purchase-price-note{order:6}.purchase-error{order:7}.purchase-sheet [data-buy]{order:8}.payment-detail{order:9}.purchase-terms{order:11}.purchase-sheet>.demo-sheet-launch{order:12}
.purchase-heading h2{font-size:var(--text-sheet);letter-spacing:var(--track-display);line-height:1.04;margin-top:6px}.purchase-heading>p{margin-top:8px;color:var(--muted);font-size:.9375rem;line-height:1.45}
/* Yours and the example as two prints, tipped toward each other, with the arrow on a glass disc between. */
.purchase-images{position:relative;display:flex;align-items:center;justify-content:center;padding:22px 0 6px}
.purchase-images figure{flex:1;min-width:0;max-width:148px}.purchase-images figure:first-child :is(img,[data-purchase-line]){transform:rotate(-3deg) translateX(6px)}.purchase-images figure:last-child img{transform:rotate(3deg) translateX(-6px)}
.purchase-images img,.purchase-images [data-purchase-line]{width:100%;aspect-ratio:3/4;height:auto;object-fit:cover;border-radius:16px;background:var(--media-bg);box-shadow:0 0 0 1px rgba(255,255,255,.12),var(--elev-2)}
.purchase-sheet[data-input-rejected] [data-purchase-photo]{box-shadow:0 0 0 2px var(--error),var(--elev-2)}
.purchase-images [data-purchase-line]{display:block;padding:12px;overflow:hidden;overflow-wrap:anywhere;font-size:.875rem;line-height:1.4}
.purchase-images figcaption{font-size:.75rem;font-weight:600;color:var(--muted);margin-top:10px;text-align:center}
.transform-arrow{position:relative;z-index:1;display:grid;place-items:center;flex:none;width:36px;height:36px;margin:0 -8px 22px;border-radius:50%;background:var(--grad-accent);box-shadow:var(--btn-primary);color:var(--on-accent)}.transform-arrow svg{width:18px;height:18px;stroke-width:2.6}
/* A refused photo: the refusal sits right under the photo, then the fix. */
.purchase-sheet[data-input-rejected] .purchase-error{order:3}.purchase-sheet[data-input-rejected] .sheet-change{order:4}
/* A refused photo: choosing another becomes the main action; paying with the same one stays possible for a network retry. */
.purchase-sheet[data-input-rejected] .sheet-change{width:100%;min-height:56px;margin-top:12px;background:var(--grad-accent);box-shadow:var(--btn-primary);color:var(--on-accent);font-size:1.0625rem;font-weight:800}
.purchase-sheet[data-input-rejected] [data-buy]:not(:disabled){background:var(--grad-raised);box-shadow:var(--btn-secondary);color:var(--ink);text-shadow:none}
.sheet-change{display:flex;align-items:center;justify-content:center;min-height:44px;margin:4px auto 0;padding:0 16px;border:0;border-radius:var(--radius-pill);background:none;color:var(--link);font-size:.875rem;font-weight:700}
.purchase-price{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:10px;padding:16px;border-radius:var(--radius-control);background:var(--grad-raised);box-shadow:var(--hi),var(--ring);font-size:1rem;font-weight:700}
.purchase-price small{display:block;font-size:.8125rem;font-weight:400;color:var(--muted);margin-top:2px}.purchase-price strong{font-size:1.625rem;font-weight:800;white-space:nowrap;font-variant-numeric:tabular-nums;letter-spacing:-.03em}
.purchase-price-note{font-size:.8125rem;color:var(--muted);margin-top:8px;padding-inline:4px}.purchase-price-note+.purchase-price-note{margin-top:2px}
.purchase-error{margin-top:16px}
.purchase-sheet .journey-primary{margin-top:18px}.payment-detail{font-size:.75rem;line-height:1.5;text-align:center;color:var(--muted);margin-top:10px}.payment-detail:empty{display:none}
.purchase-terms{display:flex;justify-content:center;gap:4px;margin-top:4px}.purchase-terms a{display:flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0 10px;font-size:.8125rem;color:var(--muted);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--line-strong)}
.sheet-signin{order:9;display:flex;align-items:center;justify-content:center;min-height:44px;font-size:.8125rem;color:var(--muted);text-decoration:underline;text-underline-offset:3px}.sheet-signin[hidden]{display:none}
.purchase-redo{color:var(--muted)}
.purchase-seller{order:10;font-size:.75rem;color:var(--faint);text-align:center;margin-top:4px}

/* ---------- sign in ---------- */
.auth{width:min(100%,440px);margin:0 auto;display:flex;flex-direction:column;padding:14px 20px calc(32px + env(safe-area-inset-bottom));text-align:left}.auth>img{display:none}
.auth h1{font-size:var(--text-heading);letter-spacing:var(--track-display);line-height:1.02;max-width:14ch}.auth .sub{color:var(--muted);font-size:1rem;margin:12px 0 24px;max-width:34ch}
.auth-draft{display:flex;align-items:center;gap:14px;padding:10px 14px 10px 10px;border-radius:var(--radius-card);margin-bottom:24px}
.auth-draft img{width:56px;height:72px;object-fit:cover;border-radius:12px;background:var(--media-bg);box-shadow:0 0 0 1px rgba(255,255,255,.1),0 4px 10px rgba(0,0,0,.45);flex:none}
.auth-draft span{font-size:.9375rem;font-weight:700}.auth-draft small{display:block;font-size:.8125rem;font-weight:400;color:var(--muted);margin-top:2px}.auth-draft .auth-line{width:88px;flex:none;padding:10px;border-radius:12px;background:var(--media-bg);font-size:.75rem;overflow-wrap:anywhere;font-weight:400}
.auth form{display:flex;flex-direction:column;gap:16px}.field{display:flex;flex-direction:column;gap:8px}.field .label{font-size:.875rem;font-weight:700}
.input{min-height:56px;border-radius:var(--radius-control);padding:14px 16px;font-size:1rem}
.input::placeholder,textarea::placeholder{color:var(--faint)}
.fine,.note,.help{font-size:.8125rem;line-height:1.55;color:var(--muted);margin-top:16px}.line{font-size:1rem;color:var(--muted);margin-top:12px}.alert{font-size:.875rem;color:var(--muted);margin-block:16px}.auth>.btn{margin-top:20px}.auth>.btn+.btn{margin-top:12px}

/* ---------- result ---------- */
.result-layout{display:flex;flex-direction:column;gap:22px;width:min(100%,540px);margin:0 auto;padding:6px 16px calc(120px + env(safe-area-inset-bottom))}
.result-layout.is-pending{padding-bottom:calc(32px + env(safe-area-inset-bottom))}
.result-media{position:relative;align-self:center;aspect-ratio:9/16;height:min(56svh,600px);max-width:100%;border-radius:var(--radius-media);overflow:hidden;background:var(--media-bg);box-shadow:var(--elev-3)}
.result-media::after{content:'';position:absolute;inset:0;border-radius:inherit;box-shadow:var(--ring-media);pointer-events:none}
/* A finished video glows warm behind itself: the one moment in the flow that gets a celebration. */
.result-layout.is-ready .result-media{overflow:visible;isolation:isolate}.result-layout.is-ready .result-video{border-radius:inherit}
.result-layout.is-ready .result-media::before{content:'';position:absolute;inset:-4% -26% -12%;z-index:-1;border-radius:50%;background:radial-gradient(closest-side,rgba(255,121,74,.55),rgba(255,121,74,.3) 48%,rgba(255,121,74,.1) 72%,rgba(255,121,74,0));pointer-events:none}
.result-video,.result-media .hold,.result-media .hold img{width:100%;height:100%;object-fit:contain}
.result-copy h1{font-size:var(--text-heading);letter-spacing:var(--track-display);line-height:1.02;max-width:16ch}.result-copy>p{font-size:1rem;color:var(--muted);line-height:1.5;margin-top:10px;max-width:40ch}
.result-copy .output-strip{margin-top:16px}.result-copy :is(.alert,.help){font-size:.8125rem;line-height:1.5;color:var(--faint);margin:6px 0 0}.result-copy>p+:is(.alert,.help){margin-top:14px}.result-copy :is(.alert,.help)+:is(.alert,.help){margin-top:2px}
.result-eyebrow{display:flex;align-items:center;gap:10px;margin-bottom:10px;font-size:.8125rem;font-weight:700;color:var(--muted)}
.result-eyebrow>span+span{display:flex;align-items:center;gap:6px;padding:3px 10px;border-radius:var(--radius-pill);background:var(--grad-raised);box-shadow:var(--hi),var(--ring);color:var(--ink)}
.result-eyebrow>span+span::before,.film-status::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px rgba(255,121,74,.8)}
.is-ready .result-eyebrow>span+span::before,.is-ready .film-status::before{background:var(--success);box-shadow:0 0 8px rgba(157,217,178,.7)}.is-error .result-eyebrow>span+span::before,.is-error .film-status::before{background:var(--error);box-shadow:0 0 8px rgba(255,154,145,.7)}
.result-link{display:flex;align-items:center;min-height:44px;margin-top:12px;font-size:.9375rem;font-weight:700}
.result-next{display:flex;flex-direction:column;align-items:stretch;gap:4px;margin-top:20px}.result-next .result-link:first-child{justify-content:center;min-height:52px;padding:0 20px;border-radius:var(--radius-pill);background:var(--grad-raised);box-shadow:var(--btn-secondary);color:var(--link);transition:transform var(--dur-release) var(--ease-press)}.result-next .result-link:first-child:active{transform:scale(var(--press));transition-duration:var(--dur-micro)}.result-next .result-link.is-quiet{justify-content:center}.result-next .result-link{margin-top:0}.result-link.is-quiet{color:var(--muted);font-weight:600}
.result-copy>.card{margin-top:20px;padding:4px 16px;border-radius:var(--radius-control);font-size:.875rem}.result-copy summary{display:flex;align-items:center;min-height:48px;cursor:pointer;color:var(--muted);font-weight:700}.result-copy .r{display:flex;align-items:center;gap:10px;min-height:44px}.result-copy .r input{width:20px;height:20px;accent-color:var(--accent)}.result-copy form{display:flex;flex-direction:column;gap:8px;padding-bottom:12px}
.result-dock{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:10px}.result-dock form{display:contents}.result-dock .btn{padding-inline:16px}
/* Waiting: the effect reference, dimmed, with a slow light sweep across it. Never a percentage. */
.render-wait{position:relative;width:100%;height:100%;overflow:hidden;background:var(--media-bg)}.render-wait-poster{height:100%;width:100%;object-fit:cover;filter:saturate(.5) brightness(.45)}
.result-layout.is-pending .render-wait::after{content:'';position:absolute;inset:0;background:linear-gradient(105deg,rgba(255,255,255,0) 35%,rgba(255,190,160,.14) 50%,rgba(255,255,255,0) 65%);transform:translateX(-100%);animation:sweep 2.4s var(--ease-out) infinite}
.render-reference{top:12px;left:12px;font-size:.75rem}
.render-wait-state{position:absolute;z-index:1;left:50%;top:50%;transform:translate(-50%,-50%);display:flex;align-items:center;gap:10px;padding:12px 18px;border-radius:var(--radius-pill);background:var(--glass-strong);box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 0 0 1px rgba(255,255,255,.08),var(--elev-2);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);font-size:.9375rem;font-weight:700;white-space:nowrap}
.is-failed .render-wait-state{color:var(--error)}.is-failed .render-wait-state svg{width:18px;height:18px;stroke-width:2.4}
.progress-orbit{display:block;width:18px;height:18px;border:2.5px solid rgba(255,255,255,.14);border-top-color:var(--accent);border-radius:50%;animation:orbit .9s linear infinite}
.stages{list-style:none;display:flex;gap:6px;padding:0;margin:22px 0 0}.stages li{font-size:0;height:5px;flex:1;border-radius:var(--radius-pill);background:rgba(255,255,255,.08);box-shadow:inset 0 1px 1px rgba(0,0,0,.35)}
.stages .is-done{background:var(--grad-accent)}.stages .is-current{background:linear-gradient(90deg,var(--accent) 0%,#ffc2a4 50%,var(--accent) 100%) 0 0/200% 100%;box-shadow:0 0 12px rgba(255,121,74,.6);animation:shimmer 1.8s linear infinite}.stages .is-current:last-child{background:var(--grad-accent);box-shadow:none;animation:none}

/* ---------- library ---------- */
.library-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:10px 4px 22px}.library-heading h1{font-size:var(--text-heading);letter-spacing:var(--track-display);line-height:1}.library-heading p{color:var(--muted);margin-top:8px;font-size:.9375rem}
.library-new{display:flex;align-items:center;flex:none;min-height:44px;padding:0 18px;border-radius:var(--radius-pill);background:var(--grad-accent);box-shadow:var(--btn-primary);color:var(--on-accent);font-size:.9375rem;font-weight:800;transition:transform var(--dur-micro) var(--ease-press)}.library-new:active{transform:translateY(1px) scale(.97);box-shadow:var(--btn-primary-press)}
.library-item .film-cover{aspect-ratio:9/16;box-shadow:var(--elev-2)}.library-item:only-child{grid-column:1/-1}.library-item:only-child .film-cover{aspect-ratio:4/5}.library-item h2{font-size:1rem;letter-spacing:-.02em;margin-top:12px}.library-item p{font-size:.8125rem;color:var(--muted);margin-top:2px}
.film-status{top:10px;left:10px;font-size:.75rem}
.empty-feature{display:grid;gap:24px;align-items:center;max-width:800px;margin:0 auto}
.empty-feature-media{position:relative;display:block;aspect-ratio:4/5;max-height:52svh;border-radius:var(--radius-media);overflow:hidden;background:var(--surface);box-shadow:var(--elev-3),var(--glow-accent)}
.empty-feature-media::after{content:'';position:absolute;inset:0;border-radius:inherit;box-shadow:var(--ring-media);pointer-events:none}.empty-feature-media video{width:100%;height:100%;object-fit:cover}
.empty-feature-media>span{top:12px;left:12px;font-size:.75rem}
.empty-feature-copy h2{font-size:1.75rem;letter-spacing:var(--track-display)}.empty-feature-copy>p:not(.empty-kicker){color:var(--muted);font-size:.9375rem;margin-top:10px;max-width:40ch}.empty-kicker{font-size:.8125rem;font-weight:700;color:var(--link);margin-bottom:8px}
.empty-feature-actions{display:flex;flex-direction:column;gap:4px;margin-top:22px}.empty-feature-actions>a:not(.btn){display:flex;align-items:center;justify-content:center;min-height:44px;font-size:.9375rem;font-weight:700}
.empty-library{display:flex;flex-direction:column;align-items:center;gap:10px;padding:36px 24px 28px;border-radius:var(--radius-card);background:radial-gradient(90% 60% at 50% 0%,rgba(255,121,74,.08),rgba(255,121,74,0) 70%),var(--grad-surface);box-shadow:var(--hi),var(--ring),var(--elev-1);text-align:center}
.empty-library>svg{width:56px;height:56px;padding:14px;margin-bottom:6px;border-radius:16px;background:var(--accent-tint);box-shadow:inset 0 0 0 1px rgba(255,121,74,.28);color:var(--link)}
.empty-library h2{font-size:var(--text-title);letter-spacing:var(--track-title);line-height:1.1}.empty-library p{max-width:34ch;color:var(--muted);font-size:.9375rem;line-height:1.5;text-wrap:pretty}
.empty-library .btn{width:auto;min-width:220px;margin-top:10px}
.install-help{margin-top:28px;padding:4px 16px;border-radius:var(--radius-control);font-size:.875rem;color:var(--muted)}.install-help summary::before{content:'';flex:none;width:36px;height:36px;margin-right:12px;border-radius:10px;background:url(/cracked-tile.svg) center/cover;box-shadow:0 0 0 1px rgba(255,255,255,.1),var(--elev-1)}.install-help summary{display:flex;align-items:center;justify-content:flex-start;min-height:60px;color:var(--ink);cursor:pointer;font-weight:700;list-style:none}.install-help summary::-webkit-details-marker{display:none}.install-help summary::after{margin-left:auto;content:'+';font-size:1.25rem;color:var(--muted)}.install-help[open] summary::after{content:'−'}.install-help p{max-width:45ch;padding-block:8px 12px}

/* ---------- after a video: the guest's optional email, the next purchase, the done-for-you card ---------- */
.claim-box{display:flex;flex-direction:column;gap:10px;margin-top:20px;padding:16px;border-radius:var(--radius-card)}.claim-box .help{margin-top:0}
.dfy-card{margin-top:20px;padding:18px 16px 10px;border-radius:var(--radius-card);background:radial-gradient(90% 60% at 100% 0%,rgba(255,121,74,.1),rgba(255,121,74,0) 70%),var(--grad-surface)}.dfy-card h2{font-size:1.125rem;font-weight:800;letter-spacing:-.02em}.dfy-card p{font-size:.875rem;color:var(--muted);margin-top:6px;line-height:1.45}.dfy-card .btn{margin-top:14px}.dfy-card .help{margin-top:8px}

/* ---------- plain pages: pricing and billing ---------- */
.plain-page{display:flex;flex-direction:column;gap:16px;width:min(100%,560px)}
.head{display:flex;flex-direction:column;gap:10px;padding:10px 4px 12px}.head .row-title{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.head .title,.head .display{font-size:var(--text-heading);font-weight:800;letter-spacing:var(--track-display);line-height:1}.head .line{margin-top:0;max-width:34ch}
.card{display:flex;flex-direction:column;align-items:flex-start;gap:14px;padding:20px;border-radius:var(--radius-card)}
.card h2{font-size:1.25rem;letter-spacing:var(--track-title)}.card .line,.card .note{margin-top:0;font-size:.9375rem}
.rows{display:flex;flex-direction:column;align-self:stretch}
.row{display:flex;align-items:center;gap:12px;min-height:52px;padding:12px 0;font-size:.9375rem;box-shadow:inset 0 -1px 0 var(--line)}
.row .label{color:var(--ink)}.row .spacer{flex:1}.row b{font-size:1.0625rem;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.row.is-stack .text{display:flex;align-items:center;justify-content:space-between;gap:16px;flex:1;min-width:0}.row.is-stack .label{color:var(--ink)}
.card .line,.card .note{font-size:.8125rem;color:var(--muted)}.card .line+.line{margin-top:-8px}.card>.btn{align-self:stretch;width:100%}

.offer-samples{display:flex;flex-direction:column;gap:14px}.offer-samples h2{font-size:var(--text-title);letter-spacing:var(--track-title)}.offer-samples>div{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.offer-samples a{display:flex;flex-direction:column;gap:8px;color:var(--muted);font-size:.8125rem;font-weight:700}.offer-samples img{width:100%;aspect-ratio:9/16;object-fit:cover;border-radius:var(--radius-media);background:var(--media-bg);box-shadow:var(--ring-media),var(--elev-2)}
.offer-list{list-style:none;display:flex;flex-direction:column;gap:10px;margin:16px 0 20px;padding:0}.offer-list li{display:flex;align-items:flex-start;gap:10px;font-size:.9375rem;line-height:1.45}
.offer-list li::before{content:'';flex:none;width:18px;height:18px;margin-top:2px;border-radius:50%;background:var(--accent-tint) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ff956e' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12l5 5L20 7'/%3E%3C/svg%3E") center/11px no-repeat;box-shadow:inset 0 0 0 1px rgba(255,121,74,.3)}

.sound-lab header p{color:var(--muted);line-height:1.5;margin-top:8px}.sound-switch{display:flex;align-items:center;gap:10px;min-height:44px;font-weight:700}.sound-switch input{width:20px;height:20px;accent-color:var(--accent)}
.sound-moment{display:flex;flex-direction:column;gap:8px}.sound-moment>p{color:var(--muted);font-size:.875rem}.sound-moment ul{list-style:none;display:flex;flex-direction:column;gap:8px;padding:0;margin:4px 0 0}
.sound-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:12px 12px 12px 16px;border-radius:var(--radius-control);background:var(--grad-surface);box-shadow:var(--hi),var(--ring)}.sound-row.is-picked{box-shadow:var(--hi),0 0 0 1.5px var(--accent-ring)}
.sound-row div{display:flex;flex-direction:column;gap:2px;min-width:0}.sound-row span{color:var(--muted);font-size:.8125rem;line-height:1.4}.sound-row .btn{width:auto;min-height:44px;padding:0 16px;font-size:.875rem}

/* Every width: the price is the largest thing on a plan card (Higgsfield, Creatify, Arcads pricing: 36 to 48px numerals). The first
   row of each card carries the headline price; its label drops under it. Later rows stay the small receipt style. */
.plain-page>.card .rows>.row:first-child{flex-direction:column-reverse;align-items:flex-start;gap:4px;padding:6px 0 18px}
.plain-page>.card .rows>.row:first-child .spacer{display:none}
.plain-page>.card .rows>.row.is-stack:first-child .text{flex-direction:column-reverse;align-items:flex-start;gap:4px}
.plain-page>.card .rows>.row:first-child b{font-size:2.75rem;line-height:1;letter-spacing:-.04em}
.plain-page>.card .rows>.row:first-child .label{color:var(--muted)}

/* ---------- 404 and offline ---------- */
.lost-page{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;min-height:100%;padding-block:32px 72px;text-align:center}
.lost-mark{position:relative;width:96px;height:96px;margin-bottom:12px}.lost-mark img,.lost-mark svg{width:96px;height:96px;border-radius:26px;box-shadow:0 0 0 1px rgba(255,255,255,.1),var(--elev-3),0 20px 60px -18px rgba(255,121,74,.55)}
.lost-mark svg{stroke:none;display:block}.lost-page .note{margin-top:0;max-width:32ch;font-size:.8125rem}
.lost-page h1{font-size:var(--text-heading);letter-spacing:var(--track-display)}.lost-page p{color:var(--muted);max-width:28ch}
.lost-page .btn{width:auto;min-width:220px;margin-top:10px}.lost-page .btn+.btn{margin-top:0}

/* ---------- toast ---------- */
.render-toast{position:fixed;inset:auto 16px calc(16px + env(safe-area-inset-bottom));max-width:440px;margin:0 auto;z-index:var(--z-sticky);display:flex;align-items:center;gap:12px;min-height:56px;padding:8px 8px 8px 18px;border-radius:var(--radius-pill);background:var(--glass-strong);box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 0 0 1px rgba(255,255,255,.08),var(--elev-3);-webkit-backdrop-filter:blur(20px) saturate(1.4);backdrop-filter:blur(20px) saturate(1.4);color:var(--ink);font-size:.9375rem;font-weight:700;animation:rise var(--dur-enter) var(--ease-out) both}
.render-toast>span:last-child{margin-left:auto;display:flex;align-items:center;min-height:40px;padding:0 16px;border-radius:var(--radius-pill);background:var(--grad-accent);box-shadow:var(--btn-primary);color:var(--on-accent);text-shadow:0 1px 0 rgba(255,214,190,.35)}
.render-pulse{width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 10px rgba(255,121,74,.9);flex:none;animation:pulse 1.4s ease-in-out infinite}

/* ---------- motion (design/MOTION.md) ---------- */
@keyframes sheet-enter{from{transform:translateY(100%)}to{transform:translateY(0)}}
@keyframes sheet-exit{to{transform:translateY(100%)}}
@keyframes fade-in{from{opacity:0}}@keyframes fade-out{to{opacity:0}}
@keyframes rise{from{opacity:0;transform:translateY(var(--rise))}}
@keyframes sink{to{opacity:0;transform:translateY(calc(var(--rise) * .75))}}
@keyframes orbit{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.45}}
@keyframes shimmer{to{background-position:-300% 0}}@keyframes sweep{to{transform:translateX(100%)}}
/* The finished video: it develops out of the dark like a print, a warm glow blooms behind it, then the words follow. */
@keyframes reveal{from{opacity:0;transform:scale(.92);filter:brightness(2.2) saturate(0) blur(12px)}35%{opacity:1;filter:brightness(1.55) saturate(.35) blur(3px)}70%{filter:brightness(1.08) saturate(.92) blur(0)}to{opacity:1;transform:none;filter:none}}
@keyframes bloom{from{opacity:0;transform:scale(.55)}40%{opacity:1}to{opacity:.85;transform:scale(1)}}
@keyframes pop{from{opacity:0;transform:scale(.9)}}
/* Content arrives: a short rise, staggered for the first few pieces. Docks, bars and sheets never move on load. Under
   reduced motion --rise is 0, so the same rules become short fades (fewer and gentler, not a hard cut). */
:is(.studio-intro,.flow-heading,.composer-reference,.effect-story,.auth>*,.result-copy>:not(.result-dock),.plain-page>*,.lost-page>*,.empty-feature>*,.empty-library){animation:rise var(--dur-enter) var(--ease-out) both}
.effect-grid>:nth-child(1){animation:rise var(--dur-enter) var(--ease-out) 50ms both}.effect-grid>:nth-child(2){animation:rise var(--dur-enter) var(--ease-out) 100ms both}.effect-grid>:nth-child(3){animation:rise var(--dur-enter) var(--ease-out) 150ms both}
:is(.auth>*,.plain-page>*,.lost-page>*):nth-child(2){animation-delay:50ms}:is(.auth>*,.plain-page>*,.lost-page>*):nth-child(3){animation-delay:100ms}:is(.auth>*,.plain-page>*,.lost-page>*):nth-child(n+4){animation-delay:150ms}
.flow-heading{animation-delay:60ms}#journey-form{animation:rise var(--dur-enter) var(--ease-out) 110ms both}
.result-layout:not(.is-ready) .result-media{animation:rise var(--dur-enter) var(--ease-out) both}
.result-layout.is-ready .result-media{animation:reveal 1400ms cubic-bezier(.3,.7,.25,1) both}
.result-layout.is-ready .result-media::before{animation:bloom 1600ms var(--ease-out) 250ms both}
.result-layout.is-ready .result-copy>:not(.result-dock){animation:rise var(--dur-enter) var(--ease-out) both}
.result-layout.is-ready .result-copy>:nth-child(1){animation-delay:500ms}.result-layout.is-ready .result-copy>:nth-child(2){animation-delay:560ms}.result-layout.is-ready .result-copy>:nth-child(3){animation-delay:620ms}.result-layout.is-ready .result-copy>:nth-child(n+4){animation-delay:680ms}
.result-layout.is-ready .result-eyebrow>span+span{animation:pop 360ms var(--ease-out) 700ms both}
@media(min-width:48rem){.result-layout .result-copy>.result-dock{animation:rise var(--dur-enter) var(--ease-out) 110ms both}.result-layout.is-ready .result-copy>.result-dock{animation-delay:740ms}}
/* The purchase sheet leaves the way it came, faster: down on phones, a small drop and fade on desktop. */
.purchase-sheet[open].is-closing{animation:sheet-exit var(--dur-exit) var(--ease-out) forwards}.purchase-sheet[open].is-closing::backdrop{animation:fade-out var(--dur-exit) var(--ease-out) forwards}
.render-toast[data-leaving]{animation:sink 200ms var(--ease-out) forwards}
.render-toast[data-ready] .render-pulse{animation:none;background:var(--success);box-shadow:0 0 10px rgba(157,217,178,.8)}
@media(prefers-reduced-motion:no-preference){
 /* Below the fold, cards reveal as they scroll in, where the browser can tie it to scroll. */
 @supports(animation-timeline:view()){.film-grid:not(.effect-grid)>*,.effect-grid>:nth-child(n+4){animation:rise linear both;animation-timeline:view();animation-range:entry 0% entry 60%}}
}
@media(hover:hover) and (pointer:fine){
 .journey-primary:not(:disabled):hover,.btn:not(:disabled):not(.btn-secondary):not(.btn-ghost):hover,.film-cta:hover,.library-new:hover{box-shadow:var(--btn-primary-hover);filter:brightness(1.04)}
 .journey-primary:not(:disabled):hover>svg,.effect-card:hover .film-cta svg{transform:translateX(3px)}
 .btn-secondary:hover,.btn-ghost:hover,.journey-library:hover,.sheet-close:hover{filter:brightness(1.12)}
 .nav-back:hover{background:var(--surface-pressed)}
 .fx-pair:hover .fx-pair-out{transform:translateY(-3px)}
 .effect-card:hover{transform:translateY(-4px);box-shadow:var(--elev-3)}.effect-card:hover::after{box-shadow:inset 0 0 0 1px rgba(255,255,255,.2)}.effect-card:hover .film-cta{box-shadow:var(--btn-primary-hover);filter:brightness(1.04)}.effect-card:hover .film-cta.is-quiet{box-shadow:inset 0 1px 0 rgba(255,255,255,.22),0 0 0 1px rgba(255,255,255,.2);background:rgba(255,255,255,.22);filter:none}.effect-card .film-cta{transition:box-shadow var(--dur-hover) var(--ease-out),filter var(--dur-hover) var(--ease-out)}.film-cover img{transition:transform 600ms var(--ease-out)}.film-loop{transition:opacity 320ms var(--ease-out),transform 600ms var(--ease-out)}.effect-card:hover .film-cover img,.effect-card:hover .film-loop,.library-item:hover .film-cover img{transform:scale(1.03)}.effect-card[data-effect-kind=text]:hover .film-cover img{transform:scale(1.39)}
 .photo-control:hover{background:rgba(255,255,255,.025)}.portrait-picker:hover::before{box-shadow:inset 0 0 0 1.5px rgba(255,121,74,.45)}
}

/* ---------- phones: the thumb dock ---------- */
@media(max-width:47.99rem){
 .journey-nav::before{content:'';position:absolute;inset:0;z-index:-1;background:rgba(17,19,21,.8);-webkit-backdrop-filter:blur(20px) saturate(1.4);backdrop-filter:blur(20px) saturate(1.4);box-shadow:0 1px 0 rgba(255,255,255,.06);opacity:0;transition:opacity var(--dur-hover) var(--ease-out);pointer-events:none}html[data-scrolled] .journey-nav::before{opacity:1}
 .flow-action,.result-dock{position:fixed;left:0;right:0;bottom:0;z-index:var(--z-sticky);margin:0;padding:12px max(16px,env(safe-area-inset-right)) max(14px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));background:rgba(17,19,21,.94);box-shadow:0 -1px 0 rgba(255,255,255,.07);-webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5)}
 .flow-action::before,.result-dock::before{content:'';position:absolute;left:0;right:0;bottom:100%;height:56px;background:linear-gradient(to top,rgba(17,19,21,.94) 0%,rgba(17,19,21,.8) 30%,rgba(17,19,21,0) 100%);pointer-events:none}
 .flow-action>*,.result-dock{max-width:540px;margin-inline:auto}.result-dock{max-width:none}
 .flow-action .journey-note{margin-top:8px}
 .result-layout.is-ready .result-copy>.result-dock{animation:fade-in 300ms var(--ease-out) 450ms both}
 /* Half-width home tiles: a CTA that fits, no sample thumbnails, and an odd last tile takes the full row. */
 .effect-card:not([data-featured]) .film-cta{min-height:36px;margin-top:8px;padding:0 5px 0 12px;font-size:.8125rem}.effect-card:not([data-featured]) .film-cta svg{width:24px;height:24px;padding:5px}
 .effect-card:not([data-featured]) .film-caption p{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
 .effect-grid>.effect-card:not([data-featured]):last-child:nth-child(odd){grid-column:1/-1}.effect-grid>.effect-card:not([data-featured]):last-child:nth-child(odd) .film-cover{aspect-ratio:4/5}
 html:is([data-page=effect],[data-page=make]) .render-toast,.result-layout:not(.is-pending)~.render-toast{bottom:calc(var(--dock-h) + env(safe-area-inset-bottom))}
}
@media(max-height:42rem){.studio-intro h1{font-size:2.125rem}.portrait-picker{min-height:clamp(200px,34svh,320px)}.has-photo .portrait-picker{height:clamp(200px,34svh,320px)}.purchase-images img,.purchase-images [data-purchase-line]{aspect-ratio:1}.purchase-images figure{max-width:112px}.purchase-heading h2{font-size:1.375rem}.result-media{height:48svh}}

/* ---------- tablets and desktop ---------- */
@media(min-width:48rem){
 .journey-nav{width:min(100% - 32px,1160px);margin:0 auto;height:72px;padding:0}
 .journey-nav.has-sides{height:72px;grid-template-rows:auto;padding:0}.side-switch{position:absolute;grid-area:auto;left:50%;top:50%;transform:translate(-50%,-50%);margin:0}.side-switch a:active{transform:none}
 html[data-page=effect] .journey-nav{position:relative;width:min(100% - 32px,1160px);background:none}html[data-page=effect] .nav-title{visibility:visible}html[data-page=effect] .nav-back{background:none;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}html[data-page=effect] .journey-library{background:var(--grad-raised);box-shadow:var(--btn-secondary)}
 .browse-page,.library-page{padding:16px 24px 56px}.studio-intro{padding:24px 0 40px}.studio-intro h1{font-size:var(--text-desktop);max-width:16ch}.studio-intro>p{font-size:1.125rem;max-width:44ch}
 .effect-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}[data-featured] .film-caption{padding:28px}
 .fx-top{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:32px;align-items:center}.fx-top>.effect-card[data-featured]{grid-column:auto}.fx-pair-row{margin-inline:0;padding-inline:0;scroll-padding-inline:0}[data-featured] .film-caption h2{font-size:3rem}
 .film-grid:not(.effect-grid){grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}
 .studio-flow.is-discovering{width:min(100%,1080px);display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:48px;padding:8px 32px 56px;align-items:center}
 .is-discovering .cinema-stage{height:min(78svh,760px);min-height:420px;aspect-ratio:9/16;width:auto;justify-self:end;border-radius:var(--radius-media);box-shadow:var(--elev-3),var(--glow-accent)}.cinema-sample{top:12px;left:12px}.cinema-toggle{bottom:12px;right:12px}
 .effect-panel{margin:0;padding:0;border-radius:0;background:none;box-shadow:none;gap:24px}.effect-story h1{font-size:3.25rem}.example-row{margin-inline:0;padding-inline:0}
 .studio-flow.is-making{width:min(100%,960px);display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:20px 48px;padding:8px 24px 56px;align-items:start}
 .is-making .composer-reference{grid-column:1;grid-row:1/4;display:block;padding:12px}.is-making .reference-media{width:100%;height:auto;aspect-ratio:9/16}.is-making .reference-media img{border-radius:14px}.is-making .reference-media>span{display:block;position:absolute;top:10px;left:10px;padding:4px 10px;border-radius:var(--radius-pill);background:var(--glass-strong);font-size:.75rem;font-weight:700;color:var(--muted)}.is-making .effect-receipt{padding:12px 4px 0}
 .is-making .flow-heading,.is-making #journey-form,.is-making>.output-strip,.is-making>.flow-action{grid-column:2}.is-making .flow-heading h1{font-size:2.75rem}
 .purchase-sheet{inset:0;margin:auto;width:460px;max-width:calc(100% - 48px);height:fit-content;max-height:calc(100dvh - 48px);border-radius:var(--radius-sheet);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 0 0 1px rgba(255,255,255,.06),var(--elev-3)}.purchase-sheet[open]{animation-name:sheet-pop}.sheet-handle{display:none}.auth{padding-top:48px}
 .empty-feature{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:40px}.empty-feature-media{aspect-ratio:3/4;max-height:none}
 .result-layout{width:min(100%,1000px);display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:24px 56px;padding:8px 32px 56px}.result-media{height:min(76svh,720px);grid-row:1/3}.result-copy h1{font-size:2.75rem}.result-dock{margin-top:24px}
 .plain-page{padding-top:24px}
}
@keyframes sheet-pop{from{opacity:0;transform:translateY(10px) scale(.97)}}@keyframes sheet-drop{to{opacity:0;transform:translateY(6px) scale(.98)}}
@media(min-width:48rem){.purchase-sheet[open]{animation-duration:var(--dur-pop);animation-timing-function:var(--ease-out)}.purchase-sheet[open].is-closing{animation-name:sheet-drop;animation-duration:180ms}.purchase-sheet[open]::backdrop{animation-duration:200ms}.purchase-sheet[open].is-closing::backdrop{animation-duration:180ms}}
/* Reduced motion: nothing travels, nothing loops, nothing is tied to scroll. Short opacity fades stay. */
@media(prefers-reduced-motion:reduce){
 :root{--rise:0px;--press:1}html{scroll-behavior:auto}
 .purchase-sheet[open],.purchase-sheet[open].is-closing{animation-name:fade-in;animation-duration:200ms}.purchase-sheet[open].is-closing{animation-name:fade-out;animation-duration:150ms}
 .result-layout.is-ready .result-media{animation:fade-in 400ms var(--ease-out) both}.result-layout.is-ready .result-media::before{animation:fade-in 400ms var(--ease-out) both}.result-layout.is-ready .result-eyebrow>span+span{animation:fade-in 200ms both}
 .film-cover,.progress-orbit,.stages .is-current,.render-pulse,.result-layout.is-pending .render-wait::after,.ads-status .stages .is-current{animation:none}
 .progress-orbit{border-top-color:rgba(255,255,255,.14);background:radial-gradient(circle,var(--accent) 0 3px,transparent 4px)}
 :is(.journey-primary,.btn,.effect-card,.film-cover img,.nav-back,.cinema-toggle,.sheet-close,.example-pick img,.more-card img,.journey-primary>svg){transition-property:opacity,box-shadow,filter,background-color,color!important;transform:none!important}
}
