@font-face{font-family:Fraunces;src:url('/assets/fonts/Fraunces-Variable.woff2') format('woff2');font-weight:100 900;font-display:swap}@font-face{font-family:Source Sans 3;src:url('/assets/fonts/SourceSans3-Variable.woff2') format('woff2');font-weight:200 900;font-display:swap}:root{--paper:var(--tf-paper);--ink:var(--tf-ink);--plum:var(--tf-identity);--pine:var(--tf-action);--rose:var(--tf-signal);--line:var(--tf-rule);--soft:var(--tf-fill);--muted:var(--tf-muted);--section-y:108px;--band-y:96px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font:400 18px/1.5 'Source Sans 3',sans-serif}.shell{max-width:1240px;margin:auto;padding-left:32px;padding-right:32px}.narrow{max-width:820px;margin-left:auto;margin-right:auto}.skip-link{position:absolute;left:-999px}.skip-link:focus{left:1rem;top:1rem;background:#fff;padding:.5rem;z-index:2}a{color:inherit;text-underline-offset:3px}a:focus-visible,button:focus-visible,input:focus-visible,summary:focus-visible{outline:3px solid var(--pine);outline-offset:3px}.masthead{display:flex;flex-wrap:wrap;align-items:center;gap:19px;padding-top:22px;padding-bottom:22px;border-bottom:1px solid var(--line)}.masthead nav{order:2;margin-left:auto}.masthead .nav-cta{order:3}.wordmark{font:650 23px/1 Fraunces,serif;text-decoration:none;letter-spacing:-.03em}.wordmark i{font-weight:350;color:var(--plum)}nav{display:flex;gap:19px;align-items:center;font-size:15px}nav a{text-decoration:none}.nav-cta,.button{background:var(--pine);color:#fff;padding:11px 15px;text-decoration:none;border:0;border-radius:2px;font:650 16px 'Source Sans 3',sans-serif;display:inline-block}.hero{padding:var(--section-y) 0}.hero-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:70px;align-items:start}.kicker{color:var(--pine);font-size:13px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;margin:0 0 13px}h1,h2{font-family:Fraunces,serif;letter-spacing:-.045em;line-height:.98;margin:0}h1{font-size:clamp(52px,7vw,95px);font-weight:500}h1 em{color:var(--plum);font-style:italic;font-weight:430}.lede{font-size:clamp(21px,2.2vw,27px);line-height:1.35;margin:30px 0}.hero-ownership{font-weight:650;margin:24px 0}.fine-print{font-size:14px;color:var(--muted);line-height:1.4;max-width:580px}.ledger-figure{position:relative;display:flex;flex-direction:column;gap:16px;padding-left:34px}.throughline{position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(var(--rose),var(--pine));transform-origin:top;animation:throughline .8s ease-out both}.node{--indent:0px;position:relative;width:min(230px,calc(100% - var(--indent)));margin-left:var(--indent);padding:12px 16px;background:var(--soft);border-left:4px solid var(--rose)}.node::before{content:"";position:absolute;top:22px;left:calc(-38px - var(--indent));width:calc(34px + var(--indent));height:1px;background:var(--rule)}.node b,.node small{display:block}.node small{font-size:14px;color:var(--muted)}.node-two{--indent:26px;border-color:color-mix(in oklab,var(--rose),var(--pine) 33%)}.node-three{--indent:52px;border-color:color-mix(in oklab,var(--rose),var(--pine) 66%)}.node-four{--indent:78px;border-color:var(--pine)}.problem{padding:var(--band-y) 0;background:var(--plum);color:#fff}.problem .kicker{color:#f3c7bf}.problem h2,.section-intro h2,.screens h2,.ownership h2,.sample h2,.pricing h2,.faq h2,.join h2{font-size:clamp(40px,5vw,65px);font-weight:480}.workflow{padding:var(--section-y) 0}.workflow ol{list-style:none;padding:0;margin:58px 0 0;display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:auto auto auto;row-gap:11px;border-top:1px solid var(--line)}.workflow li{display:grid;grid-template-rows:subgrid;grid-row:span 3;padding:22px 20px 0 0;border-top:5px solid var(--rose);margin-top:-3px}.workflow b{font:400 14px/1 Fraunces,serif;letter-spacing:.08em;font-variant-numeric:tabular-nums;color:var(--muted)}.workflow li:nth-child(2){border-color:color-mix(in oklab,var(--rose),var(--pine) 25%)}.workflow li:nth-child(3){border-color:color-mix(in oklab,var(--rose),var(--pine) 50%)}.workflow li:nth-child(4){border-color:color-mix(in oklab,var(--rose),var(--pine) 75%)}.workflow li:nth-child(5){border-color:var(--pine)}.workflow strong,.workflow span{display:block}.workflow strong{font:500 24px/1.1 Fraunces,serif}.workflow span{font-size:15px}.screens{padding:0 0 var(--section-y)}.screen-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:34px 22px;margin-top:40px}.screen-grid figure{margin:0}.screen-grid .wide{grid-column:span 2}.screen-grid img{display:block;width:100%;border:1px solid var(--line);box-shadow:9px 9px 0 var(--line);aspect-ratio:1.55;object-fit:cover;object-position:top}.screen-grid figcaption{padding:12px 0;font-size:15px}.screen-grid b,.screen-grid span{display:block}.screen-grid span{color:var(--muted)}.ownership{background:var(--soft);padding:var(--band-y) 0}.two-up{display:grid;grid-template-columns:1fr 1fr;gap:80px}.ledger-list{border-top:1px solid var(--plum);margin:0;padding:0;list-style:none}.ledger-list li{border-bottom:1px solid var(--plum);padding:17px 0;font:500 24px/1.2 Fraunces,serif}.sample{padding:var(--section-y) 0;display:grid;grid-template-columns:1fr 1fr;gap:70px;align-items:start}.sample img{max-width:100%;border:1px solid var(--line);box-shadow:9px 9px 0 var(--line)}.text-link{color:var(--pine);font-weight:650;margin-right:20px}.pricing{padding:0 0 var(--section-y);display:grid;grid-template-columns:.8fr 1.2fr;gap:90px;align-items:start}.pricing-note{margin:28px 0 0;color:var(--muted);max-width:34ch}.price-ledger{border-top:6px solid var(--rose);padding-top:22px}.price{margin:0;font-family:Fraunces,serif;display:grid;grid-template-columns:auto auto;column-gap:15px;justify-content:start;align-items:center}.price strong{grid-area:1/1/3/2;font-size:78px;font-weight:450;line-height:.8;letter-spacing:-.035em;font-variant-numeric:tabular-nums}.price del{grid-area:1/2/2/3;align-self:end;font-size:25px;color:var(--muted);font-variant-numeric:tabular-nums;text-decoration-thickness:1.5px}.price span{grid-area:2/2/3/3;align-self:start;margin-top:6px;font:650 12px 'Source Sans 3',sans-serif;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}.price-ledger dl{border-top:1px solid var(--line);margin:26px 0}.price-ledger dt{font-weight:700;margin-top:14px}.price-ledger dd{margin:0 0 14px;color:var(--muted)}.privacy-strip{background:var(--pine);color:#fff;padding:27px 0}.privacy-strip p{margin:0}.faq{padding:var(--section-y) 0}.faq details{border-top:1px solid var(--line);padding:17px 0;max-width:720px}.faq details:last-child{border-bottom:1px solid var(--line)}summary{cursor:pointer;font:500 23px Fraunces,serif;list-style:none;display:grid;grid-template-columns:1fr auto;align-items:center;gap:22px;transition:color .18s ease}summary::-webkit-details-marker{display:none}summary:hover,details[open] summary{color:var(--pine)}summary::after{content:"";width:15px;height:15px;background-image:linear-gradient(currentColor,currentColor),linear-gradient(currentColor,currentColor);background-repeat:no-repeat;background-position:center,center;background-size:15px 1.5px,1.5px 15px;transition:background-size .25s ease}details[open] summary::after{background-size:15px 1.5px,1.5px 0}.faq p{max-width:740px;margin-bottom:0}.faq details p{max-width:none;margin:11px 0 0;animation:faq-open .28s ease}@keyframes faq-open{from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:none}}.join{background:var(--soft);padding:var(--band-y) 0}.join .lede{font-size:22px}.waitlist-form{margin-top:30px}.waitlist-form label{display:block;font-weight:650;font-size:15px}.waitlist-form label span{font-weight:400;color:var(--muted)}.form-row{display:flex;gap:10px;margin:7px 0 13px}.waitlist-form input[type=email],.waitlist-form select{padding:13px;border:1px solid var(--plum);border-radius:0;font:18px 'Source Sans 3',sans-serif;color:var(--ink);background-color:#fff}.waitlist-form input[type=email]{display:block;width:100%;margin:7px 0 18px}.waitlist-form select{flex:1;min-width:0;appearance:none;padding-right:42px;background-image:linear-gradient(45deg,transparent 50%,var(--ink) 50%),linear-gradient(135deg,var(--ink) 50%,transparent 50%);background-position:calc(100% - 22px) 50%,calc(100% - 16px) 50%;background-size:6px 6px;background-repeat:no-repeat}.waitlist-form select:focus-visible{outline:3px solid var(--pine);outline-offset:3px}.waitlist-form input:disabled,.form-row button:disabled,.consent input:disabled{opacity:.65;cursor:not-allowed}.consent{font-weight:400!important}.footer{padding-top:38px;padding-bottom:38px;border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;font-size:15px}.footer div{display:flex;gap:16px}.footer p{margin:0;color:var(--muted)}@keyframes throughline{from{transform:scaleY(0)}to{transform:scaleY(1)}}@media(max-width:800px){.shell{padding-left:20px;padding-right:20px}.masthead{row-gap:15px;column-gap:12px}.masthead .wordmark{width:min(170px,44vw)}.masthead .nav-cta{order:2;margin-left:auto;font-size:15px;padding:10px 13px}.masthead nav{order:3;margin-left:0;width:100%;flex-wrap:wrap;gap:9px 18px}:root{--section-y:76px;--band-y:68px}.hero-grid,.two-up,.sample,.pricing{grid-template-columns:1fr;gap:38px}.workflow ol{grid-template-columns:1fr;grid-template-rows:none;gap:28px;border-top:0;margin-top:35px}.workflow li{display:block;grid-row:auto;padding-right:0;border-top-width:4px}.workflow b{display:block;margin-bottom:9px}.workflow strong{margin-bottom:7px}.screen-grid,.screen-grid .wide{grid-template-columns:1fr;grid-column:auto}.screen-grid{gap:25px}.footer{align-items:flex-start;gap:22px;flex-direction:column}.footer div{flex-wrap:wrap}}@media(max-width:430px){body{font-size:17px}.form-row{flex-direction:column}.form-row .button{text-align:center}.node-two{--indent:16px}.node-three{--indent:32px}.node-four{--indent:48px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.throughline{animation:none}.faq details p{animation:none}summary,summary::after{transition:none}}
/* The waitlist build still carries a storefront-only lede, hidden here. The
   storefront build renders its own copy statically and needs no toggle. */
[data-storefront-only]{display:none}
/* A refused sale: Buy reads as unavailable, and the notice carries a quiet
   signal-coloured rule rather than coloured text, which keeps it legible. */
.button:disabled{opacity:.5;cursor:not-allowed}
#notice[data-error],#notice-noscript{color:var(--ink);border-left:3px solid var(--rose);padding-left:10px}
/* Inline Paddle checkout frame target, revealed on buy. */
.checkout-container{margin-top:18px}
/* When checkout.js scrolls the buy section into view on buy-click (and on
   ?email= arrival), leave breathing room above it instead of jamming it flush
   to the top edge of the window. */
#pricing{scroll-margin-top:48px}
.download-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin-top:36px}.download-platform{border:1px solid var(--line);padding:28px;background:var(--soft)}.download-platform h2{font-size:36px;margin-bottom:20px}.platform-support{font-size:16px;color:var(--muted);margin:15px 0}.install-callout{border-left:3px solid var(--pine);padding:14px 16px;margin-top:18px;font-size:16px;line-height:1.45}.install-callout p{margin:6px 0 0}.install-callout ol{margin:8px 0 0;padding-left:22px}.install-callout code{font:inherit}.download-platform-wide{grid-column:1/-1}@media(max-width:700px){.download-options{grid-template-columns:1fr;gap:16px}.download-platform{padding:22px}.download-platform h2{font-size:32px}}
/* Blog: the /blog/ index and post pages generated from site-src/blog/. */
.blog-index,.post{padding-top:72px;padding-bottom:var(--section-y)}.blog-index h1{font-size:clamp(38px,4.6vw,58px)}.blog-index .lede{max-width:640px;margin-bottom:56px}
.post-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}.post-list li{padding:30px 0 32px;border-bottom:1px solid var(--line)}.post-list time{display:block;color:var(--muted);font-size:13px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;margin-bottom:12px}.post-list h2{font-size:clamp(28px,3.2vw,38px);font-weight:480;line-height:1.08;letter-spacing:-.03em}.post-list h2 a{text-decoration:none}.post-list h2 a:hover{color:var(--pine)}.post-list p{margin:12px 0 0;color:var(--muted);max-width:640px}
.post-header{padding-bottom:34px;margin-bottom:40px;border-bottom:1px solid var(--line)}.post-header .kicker a{text-decoration:none}.post h1{font-size:clamp(38px,4.6vw,58px);line-height:1.04;letter-spacing:-.04em}.post-meta{margin:22px 0 0;color:var(--muted);font-size:16px}
.prose{font-size:19px;line-height:1.65;max-width:680px}.prose>:first-child{margin-top:0}.prose p,.prose ul,.prose ol,.prose blockquote,.prose pre,.prose table{margin:0 0 1.15em}.prose h2{font-size:clamp(28px,3vw,34px);font-weight:500;line-height:1.12;letter-spacing:-.03em;margin:1.9em 0 .6em}.prose h3,.prose h4{font:650 21px/1.3 'Source Sans 3',sans-serif;margin:1.6em 0 .5em}.prose h4{font-size:19px}.prose a{color:var(--pine);text-decoration-thickness:1px}.prose strong{font-weight:650}.prose ul,.prose ol{padding-left:1.3em}.prose li{margin:.35em 0}.prose li::marker{color:var(--rose)}
.prose blockquote{margin-left:0;padding:4px 0 4px 22px;border-left:3px solid var(--rose);font:italic 400 22px/1.45 Fraunces,serif;color:var(--plum)}.prose blockquote p:last-child{margin-bottom:0}.prose img{display:block;max-width:100%;height:auto;border:1px solid var(--line)}.prose code{font:.86em/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--soft);padding:.1em .35em;border-radius:2px}.prose pre{background:var(--soft);padding:18px 20px;overflow-x:auto;font-size:15px;line-height:1.5}.prose pre code{background:none;padding:0;font-size:inherit}.prose table{display:block;overflow-x:auto;border-collapse:collapse;font-size:16px}.prose th,.prose td{text-align:left;vertical-align:top;padding:9px 18px 9px 0;border-bottom:1px solid var(--line)}.prose th{font-weight:650}.prose hr{border:0;border-top:1px solid var(--line);margin:2.4em 0}
.post-back{margin:48px 0 0;font-size:16px;font-weight:650}.post-back a{color:var(--pine);text-decoration:none}.post-back a:hover{text-decoration:underline}.post-cta{margin-top:40px;padding:34px 36px 36px;background:var(--soft);border-left:4px solid var(--pine)}.post-cta .kicker{margin-bottom:12px}.post-cta h2{font-size:clamp(30px,3.4vw,40px);font-weight:480;margin-bottom:14px}.post-cta p{margin:0 0 22px;max-width:600px}.post-cta .waitlist-form{margin-top:0}.post-cta .fine-print{margin:0}.post-cta-updates{padding-top:22px;margin-top:26px!important;border-top:1px solid var(--line)}
@media(max-width:800px){.blog-index,.post{padding-top:44px}.blog-index .lede{margin-bottom:40px}.post-header{margin-bottom:30px;padding-bottom:26px}.prose{font-size:18px}.post-cta{padding:26px 22px 28px}}
/* Click-to-enlarge screenshots (#inside): one popover per screen, no script.
   Previous/Next are labels for the grid tiles' buttons, so each step opens the
   next popover from outside any popover and the open one closes instead of
   stacking underneath it. The id pairs below must match home.html;
   scripts/check-site.ts verifies the wiring. */
.screen-open{display:block;width:100%;padding:0;border:0;background:none;color:inherit;font:inherit;cursor:zoom-in}.screen-open img{transition:transform .18s ease,box-shadow .18s ease}@media(hover:hover){.screen-open:hover img{transform:translate(-3px,-3px);box-shadow:12px 12px 0 var(--line)}}
:root:has(.screen-view:popover-open){overflow:hidden}
.screen-view{--view-w:min(1100px,calc(100vw - 64px),calc((100dvh - 172px) * 1440 / 945));width:calc(var(--view-w) + 34px);max-width:none;max-height:calc(100dvh - 24px);margin:auto;padding:16px;border:1px solid var(--line);background:var(--paper);color:var(--ink)}.screen-view:focus{outline:none}.screen-view::backdrop{background:color-mix(in oklab,var(--ink,black) 82%,transparent)}.screen-view img{display:block;width:100%;height:auto;border:1px solid var(--line)}
/* The bar wraps by the room it has. The popover's width often comes from the
   viewport's height, so a viewport-width breakpoint picks the wrong layout. */
.screen-view-bar{display:flex;flex-wrap:wrap;align-items:center;gap:12px 28px;padding-top:16px;font-size:15px}.screen-view-bar p{flex:1 1 18rem;margin:0}.screen-view-bar b{display:block;font:500 22px/1.15 Fraunces,serif;letter-spacing:-.02em}.screen-view-bar p span{display:block;color:var(--muted)}
.screen-view-step{display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px}.screen-view-step label{white-space:nowrap;cursor:pointer;color:var(--pine);font-weight:650;text-underline-offset:3px}.screen-view-step label:hover{text-decoration:underline}.screen-view-step label:first-child::before{content:"← ";content:"← "/""}.screen-view-step label:last-child::after{content:" →";content:" →"/""}.screen-view-step span{white-space:nowrap;color:var(--muted);font-variant-numeric:tabular-nums}
.screen-view-close{margin-left:auto;padding:8px 14px;border:1px solid var(--ink);border-radius:2px;background:none;color:var(--ink);font:650 15px 'Source Sans 3',sans-serif;cursor:pointer}.screen-view-close:hover{background:var(--soft)}
/* Labels cannot take focus, so keyboard users step with Tab/Shift+Tab onto a
   tile behind the backdrop and press Enter. While a neighbouring tile has
   keyboard focus, ring its Previous/Next label; while the open screen's own
   tile has it, ring Close, because Enter there closes the view. */
:root:has(#shot-dashboard:focus-visible) [for=shot-dashboard],:root:has(#shot-wedding-hub:focus-visible) [for=shot-wedding-hub],:root:has(#shot-consultation:focus-visible) [for=shot-consultation],:root:has(#shot-day-of:focus-visible) [for=shot-day-of],:root:has(#shot-connect-ai:focus-visible) [for=shot-connect-ai],:root:has(#shot-dashboard:focus-visible) #view-dashboard .screen-view-close,:root:has(#shot-wedding-hub:focus-visible) #view-wedding-hub .screen-view-close,:root:has(#shot-consultation:focus-visible) #view-consultation .screen-view-close,:root:has(#shot-day-of:focus-visible) #view-day-of .screen-view-close,:root:has(#shot-connect-ai:focus-visible) #view-connect-ai .screen-view-close{outline:3px solid var(--pine);outline-offset:3px}
@media(max-width:800px){.screen-view{--view-w:min(1100px,calc(100vw - 44px),calc((100dvh - 212px) * 1440 / 945));width:calc(var(--view-w) + 22px);padding:10px}.screen-view-bar{gap:10px 16px;padding-top:12px}.screen-view-bar b{font-size:19px}}
/* Short landscape windows (a phone on its side): caption and controls move to
   a side column so the image can use the full height. Scoped to :popover-open
   because an author display value would otherwise show closed popovers. */
@media(max-height:560px) and (min-aspect-ratio:4/3){.screen-view{--view-w:min(1100px,calc(100vw - 320px),calc((100dvh - 56px) * 1440 / 945));width:calc(var(--view-w) + 274px);padding:12px}.screen-view:popover-open{display:grid;grid-template-columns:var(--view-w) 1fr;column-gap:16px;align-items:start}.screen-view-bar{padding-top:0}.screen-view-close{margin-left:0}}
/* Without popover support every viewer would render inline on the page. */
@supports not selector(:popover-open){.screen-view{display:none}.screen-open{cursor:default}}
@media(prefers-reduced-motion:reduce){.screen-open img{transition:none}}
