*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body.lp{background:var(--color-paper);color:var(--color-ink);font-family:var(--font-sans);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
a{color:var(--color-primary);text-decoration:none}
a:hover{color:oklch(0.5 0.13 38);text-decoration:underline}
:focus-visible{outline:none;box-shadow:var(--ring-focus)}
.lp-wrap{max-width:1180px;margin:0 auto;padding:0 32px}
.lp-nav{display:flex;align-items:center;gap:24px;padding-block:22px}
.lp-brand{display:flex;align-items:center;gap:10px;font-weight:600;font-size:18px;letter-spacing:-.01em;color:var(--color-ink)}
.lp-brand:hover{color:var(--color-ink);text-decoration:none}
.lp-brand svg{width:36px;height:24px;flex:none}
.lp-nav .sp{flex:1}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:44px;padding:0 20px;border-radius:var(--radius-md);border:0;background:var(--color-primary);color:var(--color-primary-fg);font:600 15px/1 var(--font-sans);cursor:pointer;box-shadow:var(--shadow-sm);transition:background var(--duration-fast) var(--easing-out);white-space:nowrap}
.btn:hover{background:oklch(0.54 0.135 38);color:var(--color-primary-fg);text-decoration:none}
.btn.sm{height:38px;padding:0 16px;font-size:14px}
.btn.ghost{background:transparent;color:var(--color-ink);border:1px solid var(--color-line);box-shadow:none}
.btn.ghost:hover{background:var(--color-paper-alt);color:var(--color-ink)}
.eyebrow{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--color-primary)}
.eyebrow::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
/* hero */
.hero{position:relative;overflow:hidden;padding:48px 0 72px}
.hero-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:40px;align-items:center}
.hero-copy{position:relative;z-index:2}
.hero h1{font-size:clamp(40px,5.6vw,66px);line-height:1.02;letter-spacing:-.035em;font-weight:600;margin:18px 0 20px;text-wrap:balance}
.hero .lede{font-size:clamp(17px,1.5vw,19px);line-height:1.55;color:var(--color-ink-muted);max-width:44ch;text-wrap:pretty}
.hero-phones{display:grid;place-items:center;padding:8px 0}
/* sign-up link: sits where the design's waitlist forms were */
.join{display:flex;align-items:center;flex-wrap:wrap;gap:12px 20px;margin-top:32px;max-width:470px}
/* phone */
.phone{width:280px;height:590px;border-radius:46px;background:var(--color-ink);padding:9px;box-shadow:var(--shadow-lg);flex:none}
.scr{height:100%;border-radius:37px;background:var(--color-paper);overflow:hidden;display:flex;flex-direction:column;position:relative;text-align:left}
.scr .sbar{height:42px;flex:none;display:flex;align-items:center;justify-content:space-between;padding:4px 26px 0;font-size:12px;font-weight:600}
.scr .sbar::after{content:"";position:absolute;left:50%;top:10px;width:78px;height:22px;margin-left:-39px;border-radius:12px;background:var(--color-ink)}
.scr .sbar i{width:22px;height:10px;border-radius:3px;border:1.5px solid var(--color-ink)}
.scr .hd{display:flex;align-items:center;gap:8px;padding:8px 18px 12px}
.scr .hd h3{font-size:22px;font-weight:600;letter-spacing:-.02em;flex:1}
.scr .hd svg{width:26px;height:17px}
.scr .chips{display:flex;gap:5px;padding:0 18px 10px}
.scr .chip{height:25px;padding:0 10px;border-radius:999px;border:1px solid var(--color-line);font-size:11px;font-weight:500;color:var(--color-ink-muted);display:flex;align-items:center}
.scr .chip.on{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-paper)}
.scr .lbl{padding:8px 18px 4px;font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--color-ink-subtle)}
.scr .rows{display:flex;flex-direction:column;padding:0 10px}
.scr .row{display:flex;align-items:center;gap:10px;padding:9px 8px;border-bottom:1px solid var(--color-line)}
.scr .row .tx{flex:1;min-width:0}
.scr .row .t{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.scr .row .m{font-size:11px;color:var(--color-ink-subtle);display:flex;align-items:center;gap:5px;margin-top:1px}
.scr .tabs{margin-top:auto;display:flex;justify-content:space-around;padding:9px 0 20px;border-top:1px solid var(--color-line);background:var(--color-paper-alt)}
.scr .tab{display:flex;flex-direction:column;align-items:center;gap:2px;font-size:10px;font-weight:500;color:var(--color-ink-subtle)}
.scr .tab svg{width:20px;height:20px}
.scr .tab.on{color:var(--color-primary);font-weight:600}
.scr .fab{position:absolute;right:16px;bottom:80px;width:46px;height:46px;border-radius:50%;background:var(--color-primary);color:var(--color-primary-fg);display:grid;place-items:center;box-shadow:var(--shadow-lg)}
.scr .fab svg{width:20px;height:20px}
.kt{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;flex:none}
.kt svg{width:18px;height:18px}
.kt.meal{background:var(--stage-save-bg);color:var(--stage-save-fg)}
.kt.movie{background:var(--stage-prepare-bg);color:var(--stage-prepare-fg)}
.kt.place{background:var(--stage-budget-bg);color:var(--stage-budget-fg)}
.kt.other{background:var(--stage-capture-bg);color:var(--stage-capture-fg)}
.dt{width:34px;height:38px;border-radius:9px;display:flex;flex-direction:column;align-items:center;justify-content:center;flex:none;line-height:1}
.dt .mo{font-size:8px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.dt .d{font-size:15px;font-weight:700;margin-top:2px}
.dt.meal{background:var(--stage-save-bg);color:var(--stage-save-fg)}
.dt.movie{background:var(--stage-prepare-bg);color:var(--stage-prepare-fg)}
.dt.place{background:var(--stage-budget-bg);color:var(--stage-budget-fg)}
.av{width:15px;height:15px;border-radius:50%;display:inline-grid;place-items:center;font-size:8px;font-weight:700;flex:none}
.av.mira{background:var(--color-primary);color:#fff}
.av.jules{background:var(--color-accent);color:oklch(0.30 0.05 50)}
/* hero demo: plays once over --demo, then holds on the calendar. Every layer
   shares the duration, so the keyframe percentages line up: add (5–36),
   schedule (42–74), calendar (76 on). A .dm-tap fires at its own --at percent.
   .dm-replay rewinds them all (the script at the end of index.html). */
.hero-phones{--demo:16s;gap:18px}
.phone.demo{width:300px;height:630px}
.dm-replay svg{width:16px;height:16px}
.dm-replay{animation:dm-replay var(--demo) linear both}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.demo .dm-views{flex:1;position:relative;min-height:0}
.demo .dm-view{position:absolute;inset:0;overflow:hidden}
.demo .dm-cal{opacity:0}
.demo .fab{bottom:14px}
.demo .row,.demo .tab{position:relative}
.demo .dm-tw{color:var(--color-primary);font-weight:600}
.demo .dm-new{display:grid;grid-template-rows:0fr;opacity:0}
.demo .dm-new>div{overflow:hidden;min-height:0}
.demo .dm-scrim{position:absolute;inset:0;background:var(--color-ink);opacity:0}
.demo .dm-sheet{position:absolute;left:0;right:0;bottom:0;background:var(--color-paper);border-radius:22px 22px 0 0;padding-bottom:24px;box-shadow:var(--shadow-lg);transform:translateY(105%)}
.demo .handle{width:30px;height:4px;border-radius:999px;background:var(--color-line);margin:8px auto 10px}
.demo .sh-title{font-size:15px;font-weight:600;letter-spacing:-.01em;padding:0 16px 12px;border-bottom:1px solid var(--color-line)}
.demo .sh-head{display:flex;align-items:center;gap:10px;padding:0 16px 12px;border-bottom:1px solid var(--color-line)}
.demo .sh-head .kt{width:40px;height:40px;border-radius:10px}
.demo .sh-head .kt svg{width:20px;height:20px}
.demo .sh-head .t{font-size:14.5px;font-weight:600;letter-spacing:-.01em}
.demo .sh-head .m{font-size:11px;color:var(--color-ink-subtle);display:flex;align-items:center;gap:5px}
.demo .sh-sec{padding:12px 16px 2px}
.demo .flbl{display:flex;gap:6px;margin-bottom:8px;font-size:9px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--color-ink-subtle)}
.demo .flbl span{font-weight:500;opacity:.7}
.demo .kseg{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.demo .kseg>span{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;padding:9px 6px 8px;border:1px solid var(--color-line);border-radius:var(--radius-md);font-size:11px;font-weight:600;color:var(--color-ink-muted)}
.demo .kseg .kt{width:30px;height:30px;border-radius:8px}
.demo .kseg .kt svg{width:17px;height:17px}
.demo .dm-input{position:relative;display:flex;align-items:center;height:38px;padding:0 12px;border:1px solid var(--color-primary);border-radius:var(--radius-md);box-shadow:var(--ring-focus);font-size:13px}
.demo .dm-ph{position:absolute;left:12px;color:var(--color-ink-subtle)}
.demo .dm-typed{display:inline-block;max-width:0;overflow:hidden;white-space:nowrap}
.demo .dm-caret{width:1.5px;height:16px;margin-left:1px;background:var(--color-primary)}
.demo .sh-foot{display:flex;gap:6px;padding:14px 16px 0}
.demo .sh-foot span{position:relative;flex:1;display:grid;place-items:center;height:38px;border:1px solid var(--color-line);border-radius:var(--radius-md);font-size:12.5px;font-weight:600;color:var(--color-ink-muted)}
.demo .sh-acts{display:flex;flex-direction:column;gap:5px;padding:10px 16px 0}
.demo .sh-acts span{position:relative;display:flex;align-items:center;gap:10px;height:40px;padding:0 12px;border:1px solid var(--color-line);border-radius:var(--radius-md);font-size:12.5px;font-weight:500}
.demo .sh-acts svg{width:17px;height:17px;color:var(--color-ink-muted)}
.demo .sh-foot .go,.demo .sh-acts .go{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-primary-fg);font-weight:600}
.demo .sh-acts .go svg{color:inherit}
.demo .sh-acts .bad,.demo .sh-acts .bad svg{color:var(--color-danger)}
.demo .dm-days{display:grid;grid-template-columns:repeat(8,1fr);gap:4px}
.demo .dm-days span{position:relative;display:flex;flex-direction:column;align-items:center;gap:1px;padding:6px 0 5px;border:1px solid var(--color-line);border-radius:8px;font-size:12px;font-weight:600;color:var(--color-ink)}
.demo .dm-days b{font-size:7.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;opacity:.55}
.demo .dm-times{display:flex;gap:4px}
.demo .dm-times span{position:relative;padding:6px 8px;border:1px solid var(--color-line);border-radius:999px;font-size:11px;font-weight:500;color:var(--color-ink-muted);font-variant-numeric:tabular-nums}
.demo .dm-tap{position:absolute;left:50%;top:50%;z-index:3;width:36px;height:36px;margin:-18px 0 0 -18px;border-radius:50%;background:var(--color-ink);opacity:0;animation:dm-tap var(--demo) linear calc(var(--demo) * var(--at) / 100) both}
.demo .dm-wish{animation:dm-wish var(--demo) var(--easing-out) both}
.demo .dm-cal{animation:dm-cal var(--demo) var(--easing-out) both}
.demo .dm-tw{animation:dm-tw var(--demo) linear both}
.demo .dm-tc{animation:dm-tc var(--demo) linear both}
.demo .dm-scrim{animation:dm-scrim var(--demo) var(--easing-out) both}
.demo .dm-add{animation:dm-add var(--demo) var(--easing-out) both}
.demo .dm-detail{animation:dm-detail var(--demo) var(--easing-out) both}
.demo .dm-sched{animation:dm-sched var(--demo) var(--easing-out) both}
.demo .dm-ph{animation:dm-ph var(--demo) linear both}
.demo .dm-typed{animation:dm-typed var(--demo) linear both}
.demo .dm-caret{animation:dm-blink 1s steps(1) infinite}
.demo .dm-pick-kind{animation:dm-kind var(--demo) linear both}
.demo .dm-new{animation:dm-new var(--demo) var(--easing-out) both}
.demo .dm-new .row{animation:dm-glow-new var(--demo) ease-out both}
.demo .dm-pick-day{animation:dm-day var(--demo) linear both}
.demo .dm-pick-time{animation:dm-time var(--demo) linear both}
.demo .dm-landed{animation:dm-glow-landed var(--demo) ease-out both}
@keyframes dm-tap{0%{opacity:0;transform:scale(.5)}1.5%{opacity:.16;transform:scale(1)}4%,100%{opacity:0;transform:scale(1.5)}}
@keyframes dm-wish{0%,77.5%{opacity:1}80.5%,100%{opacity:0}}
@keyframes dm-cal{0%,77.5%{opacity:0;transform:translateX(12px)}80.5%,100%{opacity:1;transform:none}}
@keyframes dm-tw{0%,77.5%{color:var(--color-primary);font-weight:600}78.5%,100%{color:var(--color-ink-subtle);font-weight:500}}
@keyframes dm-tc{0%,77.5%{color:var(--color-ink-subtle);font-weight:500}78.5%,100%{color:var(--color-primary);font-weight:600}}
@keyframes dm-scrim{0%,7.5%{opacity:0}10.5%,32.5%{opacity:.28}35.5%,43.5%{opacity:0}46.5%,70.5%{opacity:.28}73.5%,100%{opacity:0}}
@keyframes dm-add{0%,7.5%{transform:translateY(105%)}10.5%,32.5%{transform:none}35.5%,100%{transform:translateY(105%)}}
@keyframes dm-detail{0%,43.5%{transform:translateY(105%)}46.5%,50.5%{transform:none}53.5%,100%{transform:translateY(105%)}}
@keyframes dm-sched{0%,50.5%{transform:translateY(105%)}53.5%,70.5%{transform:none}73.5%,100%{transform:translateY(105%)}}
@keyframes dm-ph{0%,12%{opacity:1}12.5%,100%{opacity:0}}
@keyframes dm-typed{0%,12%{max-width:0;animation-timing-function:steps(21,end)}24%,100%{max-width:138px}}
@keyframes dm-blink{50%{opacity:0}}
@keyframes dm-replay{0%,86%{opacity:0;visibility:hidden}90%,100%{opacity:1;visibility:visible}}
@keyframes dm-kind{0%,26%{border-color:var(--color-line);color:var(--color-ink-muted);box-shadow:0 0 0 0 transparent}27%,100%{border-color:var(--stage-budget-dot);color:var(--color-ink);box-shadow:0 0 0 3px color-mix(in oklch,var(--stage-budget-dot) 14%,transparent)}}
@keyframes dm-new{0%,35.5%{grid-template-rows:0fr;opacity:0}39%,72.5%{grid-template-rows:1fr;opacity:1}76%,100%{grid-template-rows:0fr;opacity:0}}
@keyframes dm-glow-new{0%,37%{background:transparent}39.5%{background:color-mix(in oklch,var(--color-accent) 24%,transparent)}50%,100%{background:transparent}}
@keyframes dm-day{0%,57%{background:var(--color-paper);border-color:var(--color-line);color:var(--color-ink)}58%,100%{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-paper)}}
@keyframes dm-time{0%,62%{background:var(--color-paper);border-color:var(--color-line);color:var(--color-ink-muted)}63%,100%{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-paper)}}
@keyframes dm-glow-landed{0%,80%{background:transparent}82.5%{background:color-mix(in oklch,var(--color-accent) 24%,transparent)}92%,100%{background:transparent}}
/* No motion: the loop's last word, Lupa on the calendar, held still. */
@media (prefers-reduced-motion:reduce){
.demo *{animation:none!important}
.dm-replay{display:none}
.demo .dm-wish{opacity:0}
.demo .dm-cal{opacity:1}
.demo .dm-tw{color:var(--color-ink-subtle);font-weight:500}
.demo .dm-tc{color:var(--color-primary);font-weight:600}
}
/* install demo ("On every screen"): Safari, the ⋯ menu, Share, Add to Home
   Screen, the home screen, then the app full screen, over one --install
   timeline. It plays once, from the moment it scrolls into view (the script
   adds .go). Taps fire at their --at percent: ⋯ 8, Share 19, Add to Home
   Screen 37, Add 56, the icon 74; the app is up by 83. Every layer stacks
   over the whole screen, under the status bar. */
.install-demo{--install:18s}
.install-demo:not(.go) *{animation-play-state:paused!important}
.install-demo .dm-replay{position:absolute;top:100%;left:50%;translate:-50% 18px;animation:dm-replay var(--install) linear both}
.install .sbar{position:absolute;top:0;left:0;right:0;z-index:5}
.install .in-layer{position:absolute;inset:0;padding-top:42px;display:flex;flex-direction:column}
.install .in-tap{position:absolute;left:50%;top:50%;z-index:3;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;background:var(--color-ink);opacity:0;animation:dm-tap var(--install) linear calc(var(--install) * var(--at) / 100) both}
.install .in-ico{display:block;width:40px;height:40px;border-radius:10px;overflow:hidden;box-shadow:0 0 0 1px var(--color-line)}
.install .in-ico svg{display:block;width:100%;height:100%}
/* Safari */
.install .in-page{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:0 26px 30px;text-align:center}
.install .in-page svg{width:54px;height:36px}
.install .in-page b{font-size:20px;line-height:1.15;letter-spacing:-.02em;font-weight:600;text-wrap:balance}
.install .in-field,.install .in-btn{align-self:stretch;height:36px;border-radius:var(--radius-md);display:flex;align-items:center;font-size:12px}
.install .in-field{padding:0 12px;border:1px solid var(--color-line);color:var(--color-ink-subtle)}
.install .in-btn{justify-content:center;background:var(--color-primary);color:var(--color-primary-fg);font-weight:600}
.install .in-bar{display:flex;align-items:center;gap:8px;padding:8px 12px 22px}
.install .in-round{position:relative;width:36px;height:36px;flex:none;border-radius:50%;display:grid;place-items:center;background:var(--color-paper-alt);border:1px solid var(--color-line);color:var(--color-ink)}
.install .in-round svg{width:16px;height:16px}
.install .in-url{flex:1;height:36px;border-radius:999px;display:grid;place-items:center;background:var(--color-paper-alt);border:1px solid var(--color-line);font-size:11.5px;font-weight:500}
/* the ⋯ menu */
.install .in-menu{position:absolute;right:12px;bottom:70px;width:178px;border-radius:16px;background:var(--color-paper);box-shadow:var(--shadow-lg);border:1px solid var(--color-line);overflow:hidden;opacity:0;transform-origin:88% 100%}
.install .in-menu span{position:relative;display:flex;align-items:center;justify-content:space-between;height:38px;padding:0 14px;font-size:12.5px;font-weight:500}
.install .in-menu span+span{border-top:1px solid var(--color-line)}
.install .in-menu svg,.install .in-group svg{width:16px;height:16px;color:var(--color-ink-muted)}
/* the sheets */
.install .in-scrim{position:absolute;inset:0;background:var(--color-ink);opacity:0}
.install .in-sheet{position:absolute;left:0;right:0;bottom:0;background:var(--color-paper-alt);border-radius:22px 22px 0 0;padding:0 12px 26px;box-shadow:var(--shadow-lg);transform:translateY(105%)}
.install .handle{width:30px;height:4px;border-radius:999px;background:var(--color-line);margin:8px auto 10px}
.install .in-head,.install .in-card{display:flex;align-items:center;gap:10px}
.install .in-head{padding:0 4px 12px}
.install .in-head b,.install .in-card b{display:block;font-size:13px;font-weight:600}
.install .in-head small,.install .in-card small{display:block;font-size:10.5px;color:var(--color-ink-subtle)}
.install .in-group{border-radius:12px;background:var(--color-paper);overflow:hidden}
.install .in-group span{position:relative;display:flex;align-items:center;justify-content:space-between;height:40px;padding:0 14px;font-size:12.5px;font-weight:500}
.install .in-group span+span{border-top:1px solid var(--color-line)}
.install .in-top{display:flex;align-items:center;justify-content:space-between;padding:16px 4px 14px;font-size:12px}
.install .in-top>span{position:relative;color:var(--color-primary)}
.install .in-top b{font-size:13px;font-weight:600}
.install .in-top .in-go{font-weight:600}
.install .in-card{padding:10px 14px;margin-bottom:12px;border-radius:12px;background:var(--color-paper)}
.install .in-card .in-ico{width:48px;height:48px;border-radius:12px}
.install .in-toggle{width:36px;height:22px;border-radius:999px;background:var(--color-success);position:relative}
.install .in-toggle::after{content:"";position:absolute;right:2px;top:2px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:var(--shadow-sm)}
/* the home screen */
.install .in-home{opacity:0;background:linear-gradient(165deg,var(--stage-budget-bg),var(--stage-save-bg) 55%,var(--stage-prepare-bg))}
.install .in-grid{display:grid;grid-template-columns:repeat(4,46px);justify-content:space-between;row-gap:16px;padding:22px 22px 0}
.install .in-grid>span{position:relative;display:flex;flex-direction:column;align-items:center;gap:5px;font-size:9.5px;font-weight:500;color:var(--color-ink)}
.install .in-grid i{display:block;width:46px;height:46px;border-radius:12px;background:color-mix(in oklch,var(--color-paper) 55%,transparent)}
.install .in-grid s{display:block;width:30px;height:5px;margin-top:2px;border-radius:3px;background:color-mix(in oklch,var(--color-ink) 12%,transparent)}
.install .in-mine .in-ico{width:46px;height:46px;border-radius:12px;box-shadow:var(--shadow-sm)}
.install .in-mine .in-tap{top:23px}
.install .in-dock{margin:auto 10px 12px;padding:10px 12px;border-radius:24px;display:flex;justify-content:space-between;background:color-mix(in oklch,var(--color-paper) 40%,transparent)}
.install .in-dock i{width:42px;height:42px;border-radius:11px;background:color-mix(in oklch,var(--color-paper) 60%,transparent)}
/* the app, opened from its icon */
.install .in-app{background:var(--color-paper);opacity:0;transform-origin:60% 28%}
.install .in-menu{animation:in-menu var(--install) var(--easing-out) both}
.install .in-scrim{animation:in-scrim var(--install) var(--easing-out) both}
.install .in-share{animation:in-share var(--install) var(--easing-out) both}
.install .in-add{animation:in-add var(--install) var(--easing-out) both}
.install .in-pick{animation:in-pick var(--install) linear both}
.install .in-home{animation:in-home var(--install) var(--easing-out) both}
.install .in-mine{animation:in-mine var(--install) var(--easing-out) both}
.install .in-app{animation:in-app var(--install) var(--easing-out) both}
@keyframes in-menu{0%,9.5%{opacity:0;transform:scale(.4)}12%,20%{opacity:1;transform:none}22.5%,100%{opacity:0;transform:scale(.4)}}
@keyframes in-scrim{0%,20.5%{opacity:0}24%,100%{opacity:.28}}
@keyframes in-share{0%,20.5%{transform:translateY(105%)}24%,39.5%{transform:none}42.5%,100%{transform:translateY(105%)}}
@keyframes in-add{0%,41.5%{transform:translateY(105%)}45%,100%{transform:none}}
@keyframes in-pick{0%,37%{background:var(--color-paper)}38%,100%{background:color-mix(in oklch,var(--color-ink) 8%,var(--color-paper))}}
@keyframes in-home{0%,58%{opacity:0;transform:scale(1.12)}62%,100%{opacity:1;transform:none}}
@keyframes in-mine{0%,62.5%{opacity:0;transform:scale(.3)}65.5%{opacity:1;transform:scale(1.1)}67%,100%{opacity:1;transform:none}}
@keyframes in-app{0%,76%{opacity:0;transform:scale(.18);border-radius:40px}77%{opacity:1}82.5%,100%{opacity:1;transform:none;border-radius:0}}
/* No motion: the app, open full screen. */
@media (prefers-reduced-motion:reduce){
.install-demo *{animation:none!important}
.install-demo .dm-replay{display:none}
.install .in-app{opacity:1;transform:none}
}
/* sections */
.sec{padding:112px 0}
.sec-alt{background:var(--color-paper-alt)}
.sec h2{font-size:clamp(30px,3.6vw,44px);line-height:1.08;letter-spacing:-.028em;font-weight:600;max-width:20ch;text-wrap:balance}
.sec .sub{margin-top:14px;font-size:17px;color:var(--color-ink-muted);max-width:52ch;text-wrap:pretty}
.steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin-top:56px}
.step{background:var(--color-paper);border:1px solid var(--color-line);border-radius:var(--radius-xl);padding:14px 14px 26px;display:flex;flex-direction:column;gap:22px}
.step .fig{height:220px;border-radius:var(--radius-lg);background:var(--color-paper-alt);display:flex;flex-direction:column;justify-content:center;gap:10px;padding:20px}
.step .n{font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--color-primary);padding:0 12px}
.step h3{font-size:20px;line-height:1.25;letter-spacing:-.015em;font-weight:600;padding:0 12px;margin-top:-14px}
.step p{font-size:15px;color:var(--color-ink-muted);padding:0 12px;margin-top:-12px;text-wrap:pretty}
.frag{background:var(--color-paper);border:1px solid var(--color-line);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}
.frag-input{padding:12px 14px;font-size:14px;color:var(--color-ink);display:flex;align-items:center;gap:2px}
.frag-input::after{content:"";width:1.5px;height:17px;background:var(--color-primary)}
.kinds{display:flex;gap:6px;flex-wrap:wrap}
.kinds span{height:30px;padding:0 11px;border-radius:999px;background:var(--color-paper);border:1px solid var(--color-line);font-size:12.5px;font-weight:500;color:var(--color-ink-muted);display:flex;align-items:center;gap:6px}
.kinds span svg{width:14px;height:14px}
.kinds span.on{background:var(--stage-budget-bg);border-color:transparent;color:var(--stage-budget-fg);font-weight:600}
.days{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.days span{height:58px;border-radius:var(--radius-md);background:var(--color-paper);border:1px solid var(--color-line);display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:11px;color:var(--color-ink-subtle);font-weight:500}
.days span b{font-size:18px;color:var(--color-ink);font-weight:600;line-height:1.2}
.days span.on{background:var(--color-primary);border-color:var(--color-primary);color:oklch(0.9 0.03 50)}
.days span.on b{color:var(--color-primary-fg)}
.times{display:flex;gap:6px}
.times span{flex:1;height:34px;border-radius:var(--radius-md);background:var(--color-paper);border:1px solid var(--color-line);display:grid;place-items:center;font-size:13px;font-weight:500;color:var(--color-ink-muted)}
.times span.on{border-color:var(--color-ink);color:var(--color-ink);font-weight:600}
.notif{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--radius-lg);background:oklch(0.99 0.005 70 / .9);border:1px solid var(--color-line);box-shadow:var(--shadow-md);font-size:12.5px;line-height:1.35}
.notif svg{width:26px;height:18px;flex:none}
.notif b{display:block;font-weight:600}
.notif span{color:var(--color-ink-muted)}
.cal-row{display:flex;align-items:center;gap:12px;padding:12px 14px}
.cal-row .t{font-size:14px;font-weight:600}
.cal-row .m{font-size:12px;color:var(--color-ink-subtle);display:flex;gap:5px;align-items:center}
/* product */
.product{position:relative;margin-top:56px;padding-right:120px}
.browser{border:1px solid var(--color-line);border-radius:var(--radius-lg);background:var(--color-paper);box-shadow:var(--shadow-lg);overflow:hidden}
.browser .bar{height:34px;display:flex;align-items:center;gap:6px;padding:0 14px;background:var(--color-paper-alt);border-bottom:1px solid var(--color-line)}
.browser .bar i{width:10px;height:10px;border-radius:50%;background:var(--color-line)}
.browser img{display:block;width:100%;height:auto}
.product .install-demo{position:absolute;right:0;bottom:-48px;transform:scale(.82);transform-origin:bottom right}
.product-notes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px;margin-top:88px;max-width:760px}
.product-notes h3{font-size:16px;font-weight:600}
.product-notes p{font-size:15px;color:var(--color-ink-muted);margin-top:4px}
/* privacy */
.privacy{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:64px;align-items:start}
.privacy .big-mark{width:132px;height:88px;margin-bottom:28px}
.facts{list-style:none;border-top:1px solid var(--color-line)}
.facts li{padding:20px 0;border-bottom:1px solid var(--color-line);display:grid;grid-template-columns:28px minmax(0,1fr);gap:12px;font-size:16px;color:var(--color-ink-muted)}
.facts li b{display:block;color:var(--color-ink);font-weight:600;margin-bottom:2px}
.facts li svg{width:20px;height:20px;color:var(--color-primary);margin-top:3px}
/* faq */
.faq{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:64px}
.faq details{border-bottom:1px solid var(--color-line)}
.faq details:first-child{border-top:1px solid var(--color-line)}
.faq summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:16px;padding:20px 0;font-size:17px;font-weight:600}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";margin-left:auto;width:10px;height:10px;border-right:1.8px solid var(--color-ink-subtle);border-bottom:1.8px solid var(--color-ink-subtle);transform:rotate(45deg) translate(-3px,-3px);transition:transform var(--duration-base) var(--easing-out);flex:none}
.faq details[open] summary::after{transform:rotate(-135deg) translate(-3px,-3px)}
.faq details p{padding:0 40px 22px 0;color:var(--color-ink-muted);font-size:16px;max-width:60ch;text-wrap:pretty}
/* final cta + footer */
.cta{background:var(--color-ink);color:var(--color-paper);padding:120px 0 104px;text-align:center}
.cta h2{margin:0 auto;color:var(--color-paper);max-width:18ch}
.cta .sub{margin:16px auto 0;color:oklch(0.82 0.02 60)}
.cta .join{margin:36px auto 0;justify-content:center}
.cta svg.cta-mark{width:72px;height:48px;margin-bottom:28px}
.lp-foot{background:var(--color-ink);color:oklch(0.78 0.02 60);font-size:13px;border-top:1px solid oklch(1 0 0 / .1)}
.lp-foot .lp-wrap{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:20px;padding-top:24px;padding-bottom:28px;white-space:nowrap}
.lp-foot .lp-wrap>:last-child{justify-self:end}
.lp-foot .lp-brand{color:var(--color-paper);font-size:15px}
.lp-foot .lp-brand svg{width:30px;height:20px}
.lp-foot a{color:oklch(0.88 0.02 70)}
@media (max-width:960px){
.hero-grid{grid-template-columns:1fr}
.steps{grid-template-columns:1fr;max-width:520px}
.privacy,.faq{grid-template-columns:1fr;gap:40px}
.product{padding-right:0}
.product .install-demo{display:none}
.product-notes{margin-top:40px}
}
@media (max-width:560px){
.lp-wrap{padding:0 20px}
.phone.demo{scale:.86;margin:-44px 0}
.sec{padding:80px 0}
.product-notes{grid-template-columns:1fr}
.lp-foot .lp-wrap{grid-template-columns:auto auto;justify-content:space-between}
.lp-foot .lp-brand{display:none}
}
