@font-face{font-family:Geist;src:url('/robofox/fonts/Geist-Variable.woff2') format('woff2');font-weight:100 900;font-display:swap}
@font-face{font-family:GeistMono;src:url('/robofox/fonts/GeistMono-Variable.woff2') format('woff2');font-weight:100 900;font-display:swap}

:root{
  color-scheme:dark;
  --wf-bg:#09090b;
  --wf-surface:#15161b;
  --wf-raised:#1b1c22;
  --wf-line:#27272a;
  --wf-line-strong:#3f3f46;
  --wf-text:#f4f4f5;
  --wf-muted:#a1a1aa;
  --wf-faint:#71717a;
  --wf-accent:#22d3ee;
  --wf-accent-ink:#06242a;
  --wf-success:#73e0b1;
  --wf-danger:#fb9a9a;
  --wf-control-bg:#101014;
  --wf-card-start:#17181e;
  --wf-card-end:#121318;
  --wf-accent-soft:#22d3ee0b;
  --wf-accent-glow:#22d3ee26;
  --wf-accent-halo:#22d3ee1f;
  --wf-accent-orbit:#86a8d42b;
  --wf-accent-track:#22d3ee33;
  --wf-accent-focus:#22d3ee55;
  --wf-success-glow:#73e0b177;
  --wf-shadow-faint:#0004;
  --wf-shadow-card:#0007;
  --wf-shadow-toast:#0008;
  --wf-bright-accent:#67e8f9;
  --wf-edge:clamp(18px,4vw,48px);
  --scene-gap:clamp(24px,4vw,52px);
  --rail-width:clamp(270px,26vw,340px);
  --bg:var(--wf-bg);
  --surface:var(--wf-surface);
  --surface-raised:var(--wf-raised);
  --line:var(--wf-line);
  --line-strong:var(--wf-line-strong);
  --text:var(--wf-text);
  --muted:var(--wf-muted);
  --faint:var(--wf-faint);
  --cyan:var(--wf-accent);
  --cyan-ink:var(--wf-accent-ink);
  font-family:Geist,Arial,sans-serif;
  font-synthesis:none;
}

*{box-sizing:border-box}
html{min-width:320px;background:var(--wf-bg);scroll-behavior:smooth}
body{
  min-width:320px;
  min-height:100dvh;
  margin:0;
  background:
    radial-gradient(ellipse at 50% 22%,var(--wf-accent-soft),transparent 42rem),
    var(--wf-bg);
  color:var(--wf-text);
  font-size:14px;
}
button,input,select,textarea{font:inherit}
button{cursor:pointer}
button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--wf-accent);outline-offset:3px}
[hidden],.controller-hooks,#mic{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

.experience{
  display:grid;
  grid-template-columns:minmax(0,1fr) var(--rail-width);
  grid-template-rows:auto auto;
  column-gap:var(--scene-gap);
  row-gap:14px;
  width:min(1180px,calc(100% - 2 * var(--wf-edge)));
  min-height:100dvh;
  margin:0 auto;
  padding:clamp(24px,6vh,72px) 0 max(24px,env(safe-area-inset-bottom));
}

.fox-stage{
  position:relative;
  z-index:1;
  grid-column:1/-1;
  grid-row:1;
  align-self:start;
  justify-self:end;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:10px;
  width:100%;
  padding:clamp(10px,2vh,24px) 0 64px;
  text-align:center;
  pointer-events:none;
  transition:width .62s cubic-bezier(.2,.75,.2,1),padding .5s ease;
}
.portrait{
  position:relative;
  width:min(540px,62vw);
  aspect-ratio:1.34;
  isolation:isolate;
  transform-origin:center;
  transition:width .62s cubic-bezier(.2,.75,.2,1),transform .62s cubic-bezier(.2,.75,.2,1);
}
#viewport{position:absolute;inset:0;z-index:2}
#viewport canvas{display:block;width:100%;height:100%}
#status{
  position:absolute;
  z-index:4;
  top:46%;
  inset-inline:10%;
  margin:0;
  color:var(--wf-muted);
  font-size:12px;
  line-height:1.5;
  text-align:center;
}
.retry-control{
  position:absolute;
  z-index:5;
  top:58%;
  left:50%;
  min-height:34px;
  transform:translateX(-50%);
  border:1px solid var(--wf-line-strong);
  border-radius:999px;
  padding:7px 13px;
  background:var(--wf-surface);
  color:var(--wf-text);
  pointer-events:auto;
}

.voice-control{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:9px;
  min-height:42px;
  padding:9px 17px;
  border:1px solid var(--wf-accent);
  border-radius:999px;
  background:var(--wf-accent);
  color:var(--wf-accent-ink);
  font-size:12px;
  font-weight:680;
  box-shadow:0 0 30px var(--wf-accent-glow);
  pointer-events:auto;
  transition:background .2s ease,box-shadow .2s ease,transform .2s ease;
}
.voice-control:hover{background:var(--wf-bright-accent);box-shadow:0 0 40px var(--wf-accent-glow);transform:translateY(-1px)}
.voice-control[aria-pressed=true]{background:var(--wf-surface);color:var(--wf-text)}
.voice-control::before{content:"";width:10px;height:15px;border:2px solid currentColor;border-radius:7px;box-shadow:0 7px 0 -5px currentColor}
.voice-status{
  max-width:440px;
  min-height:0;
  margin:0;
  color:var(--wf-danger);
  font-size:11px;
  line-height:1.5;
  pointer-events:auto;
}
.voice-status:empty{display:none}
.caption{
  width:min(650px,86%);
  min-height:42px;
  padding:2px 12px;
  pointer-events:auto;
}
#caption-text{margin:0;color:var(--wf-muted);font-size:14px;line-height:1.65;overflow-wrap:anywhere}

.journey-shell{
  position:relative;
  z-index:2;
  grid-column:1;
  grid-row:1;
  align-self:end;
  width:min(720px,100%);
  transform:translateX(calc((var(--rail-width) + var(--scene-gap))/2));
  transition:transform .62s cubic-bezier(.2,.75,.2,1);
}
.screen{min-height:40px}
.quick-answers{display:flex;justify-content:center;flex-wrap:wrap;gap:8px}
.quiet,.text-button{
  min-height:32px;
  padding:6px 10px;
  border:1px solid transparent;
  border-radius:999px;
  background:transparent;
  color:var(--wf-muted);
  font-size:11px;
}
.quiet:hover,.text-button:hover{border-color:var(--wf-line);color:var(--wf-text)}
/* The quiet way to a call on the card step (owner, 2026-09-28): there, never pushed. */
.call-link{margin:4px 0 0;text-align:center}
/* "Please type it in the chat": the chat box is pointed out for a moment (owner, 2026-09-28). */
#chat-form[data-attention="true"]{box-shadow:0 0 0 2px var(--wf-accent-focus);transition:box-shadow .2s}

.composer{
  align-self:start;
  position:relative;
  z-index:3;
  grid-column:1;
  grid-row:2;
  display:flex;
  align-items:center;
  gap:6px;
  width:min(650px,100%);
  margin-inline:auto;
  padding:6px 7px 6px 15px;
  transform:translateX(calc((var(--rail-width) + var(--scene-gap))/2));
  border:1px solid var(--wf-line);
  border-radius:14px;
  background:var(--wf-control-bg);
  box-shadow:0 14px 44px var(--wf-shadow-faint);
  transition:transform .62s cubic-bezier(.2,.75,.2,1),border-color .2s ease,box-shadow .2s ease;
}
.composer:focus-within{border-color:var(--wf-line-strong);box-shadow:0 0 0 1px var(--wf-accent-focus),0 14px 44px var(--wf-shadow-faint)}
#chat-input{width:100%;min-width:0;min-height:36px;border:0;background:transparent;color:var(--wf-text);font-size:14px;outline:0}
#chat-input::placeholder{color:var(--wf-faint)}
.sound-control,.send-control{display:grid;place-items:center;flex:0 0 auto;border:0}
.sound-control{
  order:2;
  position:relative;
  width:30px;
  height:30px;
  padding:0;
  border-radius:8px;
  background:transparent;
  color:var(--wf-faint);
  font-size:0;
}
.sound-control:hover{background:var(--wf-surface);color:var(--wf-text)}
.sound-control::before{content:"";width:15px;height:14px;background:currentColor;clip-path:polygon(0 35%,34% 35%,72% 0,72% 100%,34% 65%,0 65%)}
.sound-control::after{content:"";position:absolute;right:3px;width:8px;height:12px;border:1.5px solid currentColor;border-block-color:transparent;border-left:0;border-radius:0 10px 10px 0}
.sound-control[aria-pressed=false]::after{width:11px;height:1.5px;right:2px;transform:rotate(-45deg);border:0;border-radius:1px;background:currentColor}
.send-control{order:3;width:36px;height:36px;border-radius:10px;background:var(--wf-accent);color:var(--wf-accent-ink)}
.send-control:hover{background:var(--wf-bright-accent)}
.send-control:disabled{cursor:default;background:var(--wf-line);color:var(--wf-faint)}
.send-control svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}

.journey-card{
  border:1px solid var(--wf-line);
  border-radius:18px;
  padding:clamp(20px,3vw,30px);
  background:linear-gradient(145deg,var(--wf-card-start),var(--wf-card-end));
  box-shadow:0 22px 70px var(--wf-shadow-card);
  animation:card-enter .28s ease-out;
}
.card-kicker{margin:0 0 9px;color:var(--wf-accent);font:10px GeistMono,monospace;letter-spacing:.11em}
.journey-card h1{max-width:600px;margin:0;color:var(--wf-text);font-size:clamp(21px,3vw,30px);font-weight:560;letter-spacing:-.03em;line-height:1.13}
.card-help{max-width:610px;margin:10px 0 20px;color:var(--wf-muted);font-size:13px;line-height:1.6}
.field-label{display:flex;flex-direction:column;gap:8px;color:var(--wf-faint);font:10px GeistMono,monospace;letter-spacing:.05em;text-transform:uppercase}
.field-control input,.field-control select,.answer-edit{width:100%;min-height:46px;padding:11px 12px;border:1px solid var(--wf-line-strong);border-radius:9px;background:var(--wf-control-bg);color:var(--wf-text);font-family:Geist,Arial,sans-serif;font-size:14px;text-transform:none;letter-spacing:0}
.field-control input:focus,.field-control select:focus,.answer-edit:focus{border-color:var(--wf-accent);outline:0;box-shadow:0 0 0 1px var(--wf-accent-focus)}
.card-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;margin-top:22px}
.card-button{min-height:38px;padding:8px 14px;border-radius:8px;font-size:12px}
.primary-card-button{border:1px solid var(--wf-accent);background:var(--wf-accent);color:var(--wf-accent-ink);font-weight:650}
.primary-card-button:hover{background:var(--wf-bright-accent)}
.secondary-card-button{border:1px solid var(--wf-line-strong);background:transparent;color:var(--wf-text)}
.secondary-card-button:hover{border-color:var(--wf-accent);color:var(--wf-accent)}
.card-error{margin:14px 0 0;color:var(--wf-danger);font-size:12px;line-height:1.5}
.card-note{color:var(--wf-muted);font-size:12px;line-height:1.55}
.answer-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.answer-row{display:flex;flex-direction:column;gap:7px;min-width:0;padding:10px 11px;border:1px solid var(--wf-line);border-radius:9px;background:var(--wf-control-bg);color:var(--wf-faint);font-size:10px}
.answer-row strong{color:var(--wf-text);font-size:12px;font-weight:500;line-height:1.45}
.answer-edit-wrap{width:100%}
.answer-edit-wrap input,.answer-edit-wrap select{min-height:36px;padding:7px 9px;font-size:12px}
.answer-row:focus-within{border-color:var(--wf-accent)}
.estimate-range{padding:18px;border:1px solid var(--wf-line-strong);border-radius:12px;background:var(--wf-control-bg)}
.estimate-range-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.estimate-range-head strong{font-size:26px;font-weight:600;letter-spacing:-.03em}
.estimate-range-head span,.estimate-range-foot{color:var(--wf-muted);font-size:11px}
.range-track{position:relative;height:10px;margin:22px 2px 9px;border-radius:8px;background:linear-gradient(90deg,var(--wf-accent-track),var(--wf-accent),var(--wf-accent-track))}
.range-track span{position:absolute;top:50%;width:9px;height:9px;transform:translate(-50%,-50%);border:2px solid var(--wf-bg);border-radius:50%;background:var(--wf-text)}
.estimate-range-foot,.estimate-upfront,.estimate-lines div{display:flex;justify-content:space-between;gap:12px}
.estimate-upfront{margin-top:10px;padding:11px 13px;border:1px solid var(--wf-line);border-radius:9px;color:var(--wf-muted);font-size:12px}
.estimate-upfront strong,.estimate-lines strong{color:var(--wf-text);font-weight:500}
.estimate-details{margin-top:13px;border-top:1px solid var(--wf-line);padding-top:12px}
.estimate-details summary{cursor:pointer;color:var(--wf-muted);font-size:12px}
.estimate-lines{display:grid;gap:5px;margin-top:10px}
.estimate-lines div{color:var(--wf-muted);font-size:11px}
.assumption-list{margin:14px 0 0;padding-left:17px;color:var(--wf-faint);font-size:11px;line-height:1.55}
.estimate-unavailable,.secure-placeholder{display:grid;gap:4px;padding:18px;border:1px dashed var(--wf-line-strong);border-radius:11px;color:var(--wf-muted);font-size:12px}
.secure-placeholder small{color:var(--wf-faint);font-size:10px}
.secure-icon{color:var(--wf-accent);font-size:21px}
/* The real card field (Phase C): Stripe's Card Element mounts in .card-input and adds its own
   StripeElement--focus / --invalid classes, which the page never strips (morph skips the mount). */
.card-field{display:grid;gap:6px}
.card-field-label{margin:0;color:var(--wf-muted);font-size:12px}
.card-input{min-height:44px;padding:12px 14px;border:1px solid var(--wf-line-strong);border-radius:11px;background:var(--wf-control-bg);color:var(--wf-text);font-size:15px;transition:border-color .18s,box-shadow .18s}
.card-input.StripeElement--focus{border-color:var(--wf-accent);box-shadow:0 0 0 1px var(--wf-accent-focus)}
.card-input.StripeElement--invalid{border-color:var(--wf-danger)}
.card-input-error{margin:0;color:var(--wf-danger);font-size:12px;line-height:1.45}
.card-secure{color:var(--wf-faint);font-size:10px}
.card-unavailable{margin:0;padding:14px 16px;border:1px dashed var(--wf-line-strong);border-radius:11px;color:var(--wf-muted);font-size:13px;line-height:1.5}
.card-button:disabled{cursor:not-allowed;border-color:var(--wf-line);background:var(--wf-line);color:var(--wf-faint);opacity:.75}

.toast{position:fixed;z-index:50;bottom:max(20px,env(safe-area-inset-bottom));left:50%;width:max-content;max-width:calc(100vw - 32px);transform:translateX(-50%);padding:11px 15px;border:1px solid var(--wf-accent);border-radius:8px;background:var(--wf-raised);color:var(--wf-text);font-size:12px;box-shadow:0 12px 45px var(--wf-shadow-toast)}

body[data-focus=card] .fox-stage{width:var(--rail-width);padding-top:8px;padding-bottom:0}
body[data-focus=card] .portrait{width:min(310px,100%);transform:translateY(-6px)}
body[data-focus=card] .caption{width:100%;padding-inline:5px}
body[data-focus=card] .journey-shell{align-self:start;transform:none}
body[data-focus=card] .composer{transform:none}

@keyframes card-enter{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

@media(max-width:860px){
  :root{--wf-edge:16px}
  .experience{display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto auto;row-gap:12px;width:calc(100% - 2 * var(--wf-edge));padding-top:18px}
  .fox-stage,body[data-focus=card] .fox-stage{grid-column:1;grid-row:1;width:100%;padding:0;transition:none}
  .portrait,body[data-focus=card] .portrait{width:min(330px,88vw);transform:none}
  body[data-focus=card] .portrait{width:min(250px,68vw)}
  .journey-shell,body[data-focus=card] .journey-shell{grid-column:1;grid-row:2;width:100%;transform:none}
  .composer,body[data-focus=card] .composer{grid-column:1;grid-row:3;width:100%;transform:none}
  .answer-grid{grid-template-columns:1fr}
  .journey-card{padding:19px}
  .estimate-range-head{align-items:flex-start;flex-direction:column;gap:4px}
}

@media(max-width:460px){
  .portrait{width:min(285px,82vw)}
  body[data-focus=card] .portrait{width:min(220px,62vw)}
  .fox-stage{gap:7px}
  .card-actions{justify-content:stretch}
  .card-actions .card-button{flex:1 1 auto}
}

@media(max-width:860px) and (max-height:560px){
  .experience{padding-top:8px}
  .portrait,body[data-focus=card] .portrait{width:min(190px,48vw)}
}

@media(max-width:860px){
  body[data-keyboard=true] .experience,body[data-keyboard=open] .experience{padding-top:6px;padding-bottom:max(10px,env(safe-area-inset-bottom))}
  body[data-keyboard=true] .portrait,body[data-keyboard=open] .portrait{width:min(150px,42vw)}
  body[data-keyboard=true] .fox-stage,body[data-keyboard=open] .fox-stage{gap:4px}
  body[data-keyboard=true] .composer,body[data-keyboard=open] .composer{position:sticky;bottom:max(6px,env(safe-area-inset-bottom))}
}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* Presentation first: values read as information; inputs appear only while editing. */
.value-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.value-row{display:flex;flex-direction:column;gap:7px;min-width:0;padding:11px 12px;border:1px solid var(--wf-line);border-radius:9px;background:var(--wf-control-bg);color:var(--wf-faint);font:10px GeistMono,monospace;letter-spacing:.05em;text-transform:uppercase}
.value-row[data-focus=true]{border-color:var(--wf-line-strong)}
.value-row .value{color:var(--wf-text);font:500 14px/1.45 Geist,Arial,sans-serif;letter-spacing:0;text-transform:none;overflow-wrap:anywhere}
.value-row .value-empty{color:var(--wf-faint)}
.value-row input{width:100%;min-height:40px;padding:8px 10px;border:1px solid var(--wf-line-strong);border-radius:8px;background:var(--wf-bg);color:var(--wf-text);font:14px Geist,Arial,sans-serif;letter-spacing:0;text-transform:none}
.value-row input:focus{border-color:var(--wf-accent);outline:0;box-shadow:0 0 0 1px var(--wf-accent-focus)}
.start-control{min-height:44px;padding:10px 22px;border:1px solid var(--wf-accent);border-radius:999px;background:var(--wf-accent);color:var(--wf-accent-ink);font-size:13px;font-weight:680;box-shadow:none;pointer-events:auto}
.start-control:hover{background:var(--wf-bright-accent)}
@media(max-width:860px){.value-grid{grid-template-columns:1fr}}
/* Edit on four answers (B2): a small Edit (or Add) on the row, and the open row as one input with Save
   and Cancel. On a phone the row is part of the label/value list (stage.css), so the button sits at its
   end; the open row stacks the input over its buttons. */
.value-row{position:relative}
#screen .value-row[data-editable=true]{padding-right:62px}
.row-edit{position:absolute;top:5px;right:5px;min-height:30px;padding:5px 10px;border:1px solid transparent;border-radius:7px;background:transparent;color:var(--wf-accent);font:600 12px/1 Geist,Arial,sans-serif;letter-spacing:0;text-transform:none}
.row-edit:hover{border-color:var(--wf-line-strong)}
.value-row[data-editing=true]{border-color:var(--wf-accent)}
.row-editor{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.row-editor input{flex:1 1 180px;min-width:0}
.row-actions{display:flex;gap:6px;margin-left:auto}
.row-button{min-height:36px;padding:6px 12px;border:1px solid var(--wf-line-strong);border-radius:8px;background:transparent;color:var(--wf-text);font:600 12px/1 Geist,Arial,sans-serif;letter-spacing:0;text-transform:none}
.row-button:hover{border-color:var(--wf-accent);color:var(--wf-accent)}
.row-button-primary{border-color:var(--wf-accent);background:var(--wf-accent);color:var(--wf-accent-ink)}
.row-button-primary:hover{background:var(--wf-bright-accent);color:var(--wf-accent-ink)}
.lock-line{margin:10px 0 14px;color:var(--wf-muted)}
@media(max-width:860px){
  #screen .value-row[data-editable=true]{align-items:center;padding-right:0}
  #screen .row-edit{position:static;flex:0 0 auto;margin:-6px -8px -6px 0}
  #screen .value-row[data-editing=true]{flex-direction:column;align-items:stretch;gap:8px;padding:12px 2px}
  #screen .row-editor input{flex-basis:100%}
}
/* Touch targets and no iOS focus zoom (UI-MOBILE-1). */
@media(max-width:860px),(pointer:coarse){#screen .row-edit,#screen .row-button{min-width:44px;min-height:44px}}
@media(max-width:860px){#screen input,#screen select,#screen textarea,#chat-form #chat-input{font-size:16px}}
