/* Rose — roseformom.com
   System
   - One typeface, Geist. Three sizes: Display (headline), Body 17 px (the button), Small 13 px (everything else).
   - Ink: three levels. 1 = what to read, 2 = what supports it, 3 = what you only need if you look.
   - Space: an 8 px grid.
   - Color: none. Black on warm white. The only color is inside the iPhone, because it is iOS's own.
   - The iPhone is a picture of a real phone. Inside it, iOS 26 sizes apply, scaled from 393 pt.
     1em inside the screen = 17 pt.
   - Layout: wide screens put the words left and the whole phone right, sized to the window.
     Narrow screens stack them, with the call button above the fold.
*/
:root{
  --t-display:clamp(40px,5.4vw,60px);
  --t-body:17px;
  --t-small:13px;
  --ink-1:#0F0F0E; --ink-2:#8A8883; --ink-3:#B4B2AC;
  --bg:#FAFAF9; --line:rgba(15,15,14,.08);
  --s-1:8px; --s-2:16px; --s-6:48px;
  --sans:"Geist",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --ios:-apple-system,BlinkMacSystemFont,"SF Pro Text","Geist",sans-serif;
  --ease:cubic-bezier(.22,1,.36,1);
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink-1);font-family:var(--sans);font-size:var(--t-body);line-height:1.5;letter-spacing:-.01em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}
a{color:inherit}

/* Mark: Rose's contact photo. A black pebble with a soft top light. */
.mark{display:grid;place-items:center;border-radius:50%;flex:none;color:#fff;font-family:var(--sans);font-weight:600;line-height:1;letter-spacing:-.03em;
  background:radial-gradient(120% 90% at 50% 0%,#3A3A38 0%,#141413 55%,#050505 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18),inset 0 -1px 2px rgba(0,0,0,.6)}
.logo{display:inline-flex;text-decoration:none}
.logo .mark{width:34px;height:34px;font-size:16px}

/* Page: narrow first */
.page{display:flex;flex-direction:column;align-items:center;text-align:center;padding:20px 20px 0}
.hero{display:flex;flex-direction:column;align-items:center;width:100%}
.intro{display:flex;flex-direction:column;align-items:center;margin-top:32px}
h1{margin:0 0 28px;text-wrap:balance;font-size:var(--t-display);font-weight:600;line-height:1.04;letter-spacing:-.05em}
h1 span{display:block;color:var(--ink-2)}
.call{display:inline-flex;align-items:center;gap:10px;text-decoration:none;background:var(--ink-1);color:#fff;font-size:var(--t-body);font-weight:500;font-variant-numeric:tabular-nums;padding:16px 26px 16px 22px;border-radius:999px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 8px 24px -12px rgba(15,15,14,.5);transition:transform .35s var(--ease),box-shadow .35s var(--ease),background .35s}
.call svg{width:17px;height:17px;flex:none}
.call .num{opacity:.55;font-weight:400}
.call:hover{background:#262624;transform:translateY(-1px)}
.call:active{transform:scale(.98)}
.hint{margin:var(--s-2) 0 0;font-size:var(--t-small);color:var(--ink-2)}
.stage{--pw:min(300px,78vw);margin-top:var(--s-6);perspective:1400px}
.page footer{display:flex;justify-content:center;gap:20px;padding:48px 0 32px;font-size:var(--t-small);color:var(--ink-3)}
.page footer a{text-decoration:none}
.page footer a:hover{color:var(--ink-1)}

/* Wide: words left, the whole phone right */
@media (min-width:980px){
  .page{display:grid;grid-template-rows:auto auto auto auto;max-width:1160px;margin:0 auto;padding:28px 56px 0;text-align:left;align-items:stretch}
  .page header{justify-self:start}
  .hero{display:grid;grid-template-columns:1fr auto;gap:72px;align-items:center;min-height:calc(100vh - 62px);min-height:calc(100svh - 62px)}
  .intro{align-items:flex-start;margin:0}
  h1{font-size:clamp(48px,4.8vw,64px);margin-bottom:36px}
  .stage{--pw:clamp(260px,calc((100svh - 140px) / 2.32),330px);margin:0}
  .page footer{justify-content:flex-start;padding:24px 0 28px}
}

/* Text opt-in: one quiet section under the hero. Small text only. No headline, card or border. */
.optin{width:100%;padding:96px 0 8px}
.optin-form{display:flex;flex-direction:column;align-items:center;gap:var(--s-2);max-width:340px;margin:0 auto}
.optin-line{margin:0;font-size:var(--t-small);line-height:1.5;color:var(--ink-2)}
.optin-fields{display:flex;flex-direction:column;gap:12px;width:100%}
.optin-fields input{font:inherit;font-size:var(--t-small);letter-spacing:-.005em;color:var(--ink-1);background:transparent;border:0;border-bottom:1px solid rgba(15,15,14,.16);border-radius:0;padding:6px 0;width:100%;outline:none;transition:border-color .2s}
.optin-fields input::placeholder{color:var(--ink-3)}
.optin-fields input:focus{border-bottom-color:var(--ink-1)}
.optin-fields .trap{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.optin-consent{display:flex;gap:8px;align-items:flex-start;font-size:var(--t-small);line-height:1.45;color:var(--ink-3);text-align:left;cursor:pointer}
.optin-consent input{flex:none;width:13px;height:13px;margin:3px 0 0;accent-color:var(--ink-1)}
.optin-submit{background:none;border:0;padding:0;font:inherit;font-size:var(--t-small);font-weight:500;color:#3A3A38;cursor:pointer;text-underline-offset:3px}
.optin-submit:hover{text-decoration:underline}
.optin-submit:disabled{opacity:.5;cursor:default;text-decoration:none}
.optin-status{margin:0;font-size:var(--t-small);color:var(--ink-2)}
.optin-status:empty{display:none}
/* iOS zooms into inputs under 16px, so touch screens get 16px in the fields only */
@media (hover:none){.optin-fields input{font-size:16px}}
@media (min-width:980px){
  .optin{padding:72px 0 8px}
  .optin-form{align-items:flex-start;margin:0;max-width:600px;text-align:left}
  .optin-fields{flex-direction:row;gap:24px}
  .optin-fields input{width:170px}
}

/* The iPhone */
.phone{position:relative;width:calc(var(--pw)*1.07);aspect-ratio:393/852;padding:calc(var(--pw)*.035);
  border-radius:calc(var(--pw)*.165);background:#0B0B0B;
  box-shadow:0 0 0 1.5px #3B3B3A,0 0 0 3px #1A1A19,inset 0 0 0 1px rgba(255,255,255,.06),
    0 2px 4px rgba(0,0,0,.05),0 30px 70px -30px rgba(15,15,14,.32);
  transform:rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));transition:transform .8s var(--ease);will-change:transform}
.phone::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:linear-gradient(115deg,rgba(255,255,255,.07) 0%,rgba(255,255,255,0) 35%)}
.screen{position:relative;height:100%;border-radius:calc(var(--pw)*.135);overflow:hidden;background:#fff;
  font-family:var(--ios);color:#000;font-size:calc(var(--pw)*17/393);line-height:1.29;letter-spacing:-.022em;text-align:left}
.island{position:absolute;top:.64em;left:50%;transform:translateX(-50%);width:7.4em;height:2.18em;border-radius:2em;background:#000;z-index:5}
.status{display:flex;justify-content:space-between;align-items:center;height:3.5em;padding:0 1.9em 0 2.2em;font-weight:600;position:relative;z-index:4}
.status .icons{display:flex;gap:.32em;align-items:center}
.status svg{height:.72em;width:auto;display:block}

/* iOS 26 header: floating glass controls */
.glass{background:rgba(246,246,248,.76);-webkit-backdrop-filter:blur(14px) saturate(1.6);backdrop-filter:blur(14px) saturate(1.6);
  box-shadow:inset 0 0 0 .5px rgba(255,255,255,.9),0 0 0 .5px rgba(0,0,0,.07),0 .15em .6em rgba(0,0,0,.07)}
.nav{position:absolute;top:3.3em;left:0;right:0;height:4.6em;z-index:3}
.nav::before{content:"";position:absolute;inset:-3.3em 0 -.5em;background:linear-gradient(#fff 60%,rgba(255,255,255,0));z-index:-1}
.nav .back{position:absolute;left:.85em;top:.2em;height:2.4em;padding:0 .7em 0 .6em;border-radius:2em;display:flex;align-items:center;gap:.4em}
.nav .back svg{height:1.05em}
.nav .back .count{min-width:1.25em;height:1.25em;border-radius:1em;background:#000;color:#fff;font-size:.76em;font-weight:600;display:grid;place-items:center;padding:0 .3em}
.nav .video{position:absolute;right:.85em;top:.2em;width:2.4em;height:2.4em;border-radius:50%;display:grid;place-items:center}
.nav .video svg{height:.95em}
.contact{position:absolute;left:50%;top:0;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center}
.contact .mark{width:2.75em;height:2.75em;font-size:1.15em}
.contact .name{margin-top:-.45em;height:1.7em;padding:0 .5em 0 .7em;border-radius:1em;display:flex;align-items:center;gap:.2em;font-size:.76em;font-weight:600}
.contact .name svg{height:.6em;color:#8E8E93}

/* Thread */
.thread{padding:4.7em .95em 0}
.meta{text-align:center;font-size:.66em;color:#8E8E93;margin:0 0 .7em}
.meta b{font-weight:600}
.row{display:flex}
.row.out{justify-content:flex-end;margin-top:.5em}
.bubble{position:relative;padding:.4em .76em .44em;border-radius:1.12em;max-width:84%}
.bubble .txt{display:block}
.bubble.in{background:#E9E9EB;color:#000;margin-left:.1em}
.bubble.out{background:#0A84FF;color:#fff;margin-right:.1em}
.bubble::before,.bubble::after{content:"";position:absolute;bottom:0;height:1.15em}
.bubble.in::before{left:-.42em;width:1.15em;background:#E9E9EB;border-bottom-right-radius:.95em}
.bubble.in::after{left:-.62em;width:.62em;background:#fff;border-bottom-right-radius:.6em}
.bubble.out::before{right:-.42em;width:1.15em;background:#0A84FF;border-bottom-left-radius:.95em}
.bubble.out::after{right:-.62em;width:.62em;background:#fff;border-bottom-left-radius:.6em}
.meta.today{margin-top:1.1em}
.row.past{margin-top:.9em}
/* iOS 26 tapback: a blue reaction bubble with a glossy heart and a thought-bubble trail */
.tapback{position:absolute;top:-1.15em;right:-1.05em;width:2.05em;height:2.05em;border-radius:50%;background:#0A84FF;display:grid;place-items:center;z-index:1}
.tapback::before,.tapback::after{content:"";position:absolute;border-radius:50%;background:#0A84FF}
.tapback::before{width:.62em;height:.62em;right:.02em;bottom:-.12em}
.tapback::after{width:.27em;height:.27em;right:-.3em;bottom:-.5em}
.tapback svg{width:1.2em;height:1.08em;margin-top:.08em;filter:drop-shadow(0 .04em .06em rgba(160,20,90,.35))}
.delivered{text-align:right;font-size:.62em;color:#8E8E93;margin:.3em .25em 0 0}

/* Typing indicator */
.typing{position:relative;display:none;align-items:center;gap:.24em;height:2.1em;padding:0 .74em;border-radius:1.12em;background:#E9E9EB;margin-left:.1em;transform-origin:0 100%}
.typing.on{display:inline-flex}
.typing::before,.typing::after{content:"";position:absolute;border-radius:50%;background:#E9E9EB}
.typing::before{width:.62em;height:.62em;left:-.1em;bottom:-.1em}
.typing::after{width:.3em;height:.3em;left:-.38em;bottom:-.38em}
.typing i{width:.46em;height:.46em;border-radius:50%;background:#8E8E93;opacity:.3;animation:wave 1.25s infinite linear}
.typing i:nth-child(2){animation-delay:.2s}.typing i:nth-child(3){animation-delay:.4s}
@keyframes wave{0%,60%,100%{opacity:.3}25%{opacity:.9}}

/* Compose bar */
.compose{position:absolute;left:0;right:0;bottom:0;padding:.5em .8em 2.2em;display:flex;align-items:center;gap:.5em;z-index:3}
.compose .plus{width:2.3em;height:2.3em;border-radius:50%;display:grid;place-items:center;flex:none}
.compose .plus svg{height:.95em}
.compose .field{flex:1;min-width:0;height:2.3em;border-radius:1.2em;display:flex;align-items:center;gap:.4em;padding:0 .3em 0 .85em}
.compose .placeholder{color:#B0B0B5;flex:1}
.compose .draft{display:none;flex:1;white-space:nowrap;overflow:hidden;color:#000}
.compose .draft::after{content:"";display:inline-block;width:.09em;height:1.15em;margin-left:.05em;vertical-align:-.2em;background:#0A84FF;animation:caret 1s steps(1) infinite}
@keyframes caret{50%{opacity:0}}
.compose .wave{height:.95em;color:#8E8E93;margin-right:.55em;flex:none}
.compose .send{display:none;width:1.75em;height:1.75em;border-radius:50%;background:#0A84FF;color:#fff;place-items:center;flex:none}
.compose .send svg{height:.8em}
.compose.typing-now .placeholder,.compose.typing-now .wave{display:none}
.compose.typing-now .draft{display:block}
.compose.typing-now .send{display:grid}
.home-bar{position:absolute;bottom:.5em;left:50%;transform:translateX(-50%);width:8em;height:.3em;border-radius:1em;background:#000;z-index:4}

/* The page arrives */
@keyframes in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.logo,h1,.call,.hint,.stage{animation:in 1s var(--ease) both}
h1{animation-delay:.05s}.call{animation-delay:.15s}.hint{animation-delay:.2s}.stage{animation-delay:.25s;animation-duration:1.3s}
@media (prefers-reduced-motion:reduce){*{animation:none!important}.phone{transition:none}}

/* Legal pages: the same type, inks and mark */
.legal-head{display:flex;justify-content:space-between;align-items:center;max-width:680px;margin:0 auto;padding:24px 20px}
.legal-head .logo .mark{width:30px;height:30px;font-size:14px}
.legal-head .call{font-size:var(--t-small);padding:9px 16px 9px 13px;gap:8px;box-shadow:none}
.legal-head .call svg{width:14px;height:14px}
.legal{max-width:680px;margin:0 auto;padding:var(--s-6) 20px 80px;text-align:left}
.legal h1{font-size:var(--t-display);margin:0 0 var(--s-1)}
.legal .updated{font-size:var(--t-small);color:var(--ink-3);margin:0 0 var(--s-6)}
.legal h2{font-size:var(--t-body);font-weight:600;margin:var(--s-6) 0 var(--s-1)}
.legal h3{font-size:var(--t-small);font-weight:600;margin:24px 0 var(--s-1)}
.legal p,.legal li{color:#4A4945}
.legal strong{color:var(--ink-1);font-weight:600}
.legal ul{padding-left:20px}
.legal li{margin-bottom:var(--s-1)}
.legal .short{background:#fff;border-radius:20px;padding:20px;box-shadow:0 0 0 .5px var(--line)}
.legal .short p{margin:0}
.legal-foot{max-width:680px;margin:0 auto;padding:24px 20px 48px;border-top:1px solid var(--line);display:flex;flex-wrap:wrap;gap:var(--s-1) 20px;font-size:var(--t-small);color:var(--ink-3)}
.legal-foot a{text-decoration:none}
.legal-foot a:hover{color:var(--ink-1)}

/* Internal pages (/product, /dashboard): the legal layout plus a gate and a diagram */
.gate{min-height:100svh;display:grid;place-items:center;padding:20px}
.gate-form{display:flex;flex-direction:column;align-items:center;gap:12px;width:240px}
.gate-form .mark{width:34px;height:34px;font-size:16px;margin-bottom:12px}
.gate-label{font-size:var(--t-small);color:var(--ink-2)}
.gate-form input{font:inherit;font-size:var(--t-body);text-align:center;color:var(--ink-1);background:transparent;border:0;border-bottom:1px solid rgba(15,15,14,.16);border-radius:0;padding:6px 0;width:100%;outline:none}
.gate-form input:focus{border-bottom-color:var(--ink-1)}
.gate-status{margin:0;min-height:1.5em;font-size:var(--t-small);color:var(--ink-2)}
.gate-submit{background:var(--ink-1);color:#fff;border:0;font:inherit;font-size:var(--t-small);font-weight:500;padding:10px 22px;border-radius:999px;cursor:pointer}
.legal .lede{font-size:var(--t-body);color:var(--ink-1)}
.legal ol{padding-left:20px}
.legal ol li{margin-bottom:var(--s-1)}
.legal .diagram{margin:var(--s-2) 0 var(--s-1)}
.legal .diagram svg{width:100%;height:auto;display:block;font-family:var(--sans)}
.legal .cap{font-size:var(--t-small);color:var(--ink-3);margin:0 0 var(--s-2)}
.legal table{width:100%;border-collapse:collapse;font-size:var(--t-small);margin:var(--s-1) 0 var(--s-2)}
.legal th,.legal td{text-align:left;vertical-align:top;padding:8px 12px 8px 0;border-bottom:1px solid var(--line);color:#4A4945}
.legal th{color:var(--ink-1);font-weight:600}
.legal .loop{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--s-2);margin:var(--s-2) 0}
.legal .loop div{font-size:var(--t-small);color:#4A4945}
.legal .loop b{display:block;color:var(--ink-1);font-weight:600;margin-bottom:4px}
.legal .loop span{display:block;color:var(--ink-3);margin-bottom:4px}
@media (max-width:600px){.legal .loop{grid-template-columns:1fr 1fr}}

/* Dashboard and wiki */
.internal-nav{display:flex;gap:16px;font-size:var(--t-small)}
.internal-nav a{text-decoration:none;color:var(--ink-2)}
.internal-nav a.on,.internal-nav a:hover{color:var(--ink-1)}
.legal.dash,.legal.wiki{max-width:860px}
.legal .graph svg{width:100%;height:auto;display:block;font-family:var(--sans)}
.legal .numbers{display:flex;gap:24px;flex-wrap:wrap;font-size:var(--t-small);color:var(--ink-2);margin:var(--s-1) 0 var(--s-2)}
.legal .numbers b{color:var(--ink-1);font-weight:600;font-size:var(--t-body)}
.legal .muted{color:var(--ink-3)}
.legal .flags{list-style:none;padding:0}
.legal .flags li{padding:10px 14px;background:#fff;border-radius:14px;box-shadow:0 0 0 .5px var(--line);margin-bottom:var(--s-1)}
.legal .texts{list-style:none;padding:0}
.legal .text-card{padding:16px 18px;background:#fff;border-radius:20px;box-shadow:0 0 0 .5px var(--line);margin-bottom:var(--s-2)}
.legal .text-card .to{margin:0 0 6px;font-size:var(--t-small);color:var(--ink-2)}
.legal .text-card .to a{color:var(--ink-1);text-decoration:none;font-weight:500}
.legal .text-card .body{margin:0 0 12px;color:var(--ink-1)}
.legal .text-card form,.legal td form{display:flex;gap:8px;margin:0}
.legal .callme{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 var(--s-2)}
.legal .callme select{font:inherit;font-size:var(--t-small);color:var(--ink-1);background:#fff;border:0;box-shadow:0 0 0 .5px var(--line);border-radius:999px;padding:8px 14px}
.legal td.actions{white-space:nowrap}.legal td.actions form{display:inline-flex;margin-right:6px}
.legal button{background:var(--ink-1);color:#fff;border:0;font:inherit;font-size:var(--t-small);font-weight:500;padding:8px 16px;border-radius:999px;cursor:pointer}
.legal button.quiet{background:transparent;color:var(--ink-2);box-shadow:0 0 0 1px var(--line)}
.legal td a{color:var(--ink-1)}
.legal .turn{margin:0 0 12px}
.legal .wiki-list{list-style:none;padding:0}
.legal .wiki-list li{margin-bottom:var(--s-1)}
.legal .wiki-list a{text-decoration:none;color:var(--ink-1);font-weight:500}
