:root{color-scheme:light;--bg:#faf8f4;--text:#272521;--muted:#78746d;--line:#e3dfd7;--orange:#d95728;--surface:#fffdfa;--radius:6px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:16px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}header{max-width:1466px;margin:auto;padding:30px 48px 24px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{font:26px Georgia,serif;white-space:nowrap}.brand small{font:12px -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--muted);margin-left:18px}nav{display:flex;gap:22px}main{max-width:1466px;margin:auto;padding:52px 48px 0}h1{font:48px/1.13 Georgia,serif;letter-spacing:-1.5px;margin:0 0 17px;font-weight:400}.intro>p{margin:0;color:var(--muted);font-size:17px}.intro{margin-bottom:38px}.conversation-layout{display:grid;grid-template-columns:minmax(0,2.1fr) minmax(310px,1fr);gap:28px;align-items:start}.stage{overflow:hidden;border-radius:9px;background:#32291f}.stage img{display:block;width:100%;aspect-ratio:1672/941;object-fit:cover}.stage-controls{display:flex;gap:20px;align-items:center;justify-content:space-between;padding:23px 0 0}.identity{display:flex;flex-direction:column;flex-shrink:0}.identity strong{font-size:16px;font-weight:550}.identity span{color:var(--muted);font-size:13px;margin-top:2px}.actions{display:flex;gap:10px;align-items:center}button,input,textarea,select{font:14px/1.4 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}button{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--line);background:transparent;color:var(--text);border-radius:var(--radius);min-height:44px;padding:10px 16px;cursor:pointer;white-space:nowrap}button:hover:not(:disabled){background:#eeeae3}button.primary{background:var(--orange);border-color:var(--orange);color:white}button.primary:hover:not(:disabled){background:#bd431b}button:disabled{cursor:not-allowed;opacity:.45}button.text-button{border:0;padding:8px 0;min-height:40px;border-radius:0;font-size:13px}.text-button:hover:not(:disabled){background:transparent;text-decoration:underline}.timer{display:flex;align-items:center;gap:7px;margin-left:7px;font-size:14px;font-variant-numeric:tabular-nums}.timer svg{width:16px;height:16px;color:var(--muted)}svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.chat{border:1px solid var(--line);border-radius:9px;background:var(--surface);height:calc((100vw - 124px) * .215 + 122px);min-height:440px;max-height:606px;display:flex;flex-direction:column;overflow:hidden}.chat-heading{padding:23px 24px 19px;border-bottom:1px solid var(--line)}h2{margin:0;font-size:18px;font-weight:550}.chat-heading p{font-size:12px;color:var(--muted);margin:6px 0 0}.messages{flex:1;min-height:0;overflow:auto;padding:20px 24px;display:flex;flex-direction:column;gap:20px}.empty{margin:auto;text-align:center;color:var(--muted)}.empty svg{width:36px;height:36px;margin-bottom:13px;color:#9b958b;stroke-width:1.4}.empty h3{font-size:16px;font-weight:500;color:var(--text);margin:0 0 8px}.empty p{font-size:13px;line-height:1.65;margin:0}.message{font-size:14px;white-space:pre-wrap;overflow-wrap:anywhere}.message strong{display:block;font-size:11px;letter-spacing:.04em;color:var(--muted);margin-bottom:5px}.message p{margin:0}.message.user{border-bottom:1px solid var(--line);padding-bottom:16px}#question-form{display:flex;gap:10px;margin:12px 18px 18px;border:1px solid var(--line);border-radius:6px;padding:6px;background:var(--bg)}textarea,input,select{color:var(--text);background:var(--surface);border:1px solid var(--line);border-radius:6px;padding:11px;max-width:100%}#question{resize:none;background:transparent;border:0;flex:1;min-width:0;max-height:100px;padding:10px 6px;line-height:24px}.icon-button{padding:8px;width:42px;min-height:42px;align-self:flex-end}.interrupt{align-self:center;margin:-9px 0 8px}.notice{font-size:12px;min-height:19px;color:var(--muted);margin:15px 0 0}.notice.warn{color:#9a3c16}footer{border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:20px;font-size:11px;color:var(--muted);margin-top:35px;padding:19px 0 30px}.login{max-width:530px;padding-top:95px}.login h1{font-size:44px}.login>p{color:var(--muted)}form label{display:flex;flex-direction:column;gap:7px;margin:18px 0;font-size:13px}#login-form .primary{width:100%;margin-top:8px}#error,#control-error,#feedback-error{color:#a42f1b;font-size:13px}.small{font-size:12px}.muted{color:var(--muted)}dialog{border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text);padding:26px;max-width:520px;width:calc(100% - 32px);box-shadow:0 20px 80px #25211925}dialog::backdrop{background:#25211955}.dialog-heading{display:flex;align-items:center;justify-content:space-between}.dialog-actions{display:flex;gap:10px;flex-wrap:wrap}.danger{color:#a42f1b;border-color:#d8b9b1}dl{display:grid;grid-template-columns:1fr 1fr;font-size:13px;gap:12px}dt{color:var(--muted)}dd{margin:0;text-align:right;overflow-wrap:anywhere}dialog>p{font-size:14px}.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}[hidden]{display:none!important}:focus-visible{outline:2px solid var(--orange);outline-offset:4px}@media(min-width:1466px){.chat{height:528px}}@media(max-width:1180px){.stage-controls{align-items:flex-start;flex-direction:column;gap:14px}.chat{height:490px}.brand small{margin-left:12px}.actions{gap:7px}.actions button{padding:10px 12px}}@media(max-width:820px){header{padding:22px 24px}.brand small{display:none}main{padding:35px 24px 0}h1{font-size:36px;letter-spacing:-.8px}.intro>p{font-size:15px}.conversation-layout{grid-template-columns:1fr;gap:20px}.chat{height:440px;min-height:400px}.stage-controls{flex-direction:row;align-items:center;flex-wrap:wrap}.actions{flex-wrap:wrap}.intro{margin-bottom:26px}footer{flex-direction:column;gap:7px;margin-top:25px}nav{gap:16px}.login{padding-top:65px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}

/* Concept fidelity: editorial serif typography, large controls, open rail. */
body{font-family:Georgia,"Times New Roman",serif;background:#fcfaf7}
header{max-width:1428px;margin:0 auto;padding:19px 20px 17px;height:99px}
.brand{font-size:40px;font-weight:600;line-height:1}.brand small{display:block;font:20px/1.2 Georgia,serif;margin:2px 0 0;color:#93908b}
nav{gap:36px}nav .text-button{font:20px Georgia,serif}nav .text-button+button{border-left:1px solid var(--line);padding-left:36px}
main{max-width:1505px;padding:28px 39px 0}.intro{padding-left:20px;margin-bottom:23px}h1{font-size:54px;line-height:1.15;letter-spacing:-1.5px;margin-bottom:4px;font-weight:500}.intro>p{font-size:29px;line-height:1.4}
.conversation-layout{grid-template-columns:minmax(0,2.14fr) minmax(340px,1fr);gap:19px}.stage img{aspect-ratio:1.70;object-fit:cover}.stage-controls{padding-top:24px;gap:14px}.identity strong{font:30px/1.2 Georgia,serif}.identity span{font:19px/1.4 Georgia,serif}
.actions{gap:12px}.actions button{font:18px Georgia,serif;min-height:56px;padding:12px 22px}.timer{font:21px Georgia,serif;border-left:1px solid var(--line);padding-left:26px;margin-left:10px}.timer svg{display:none}
.chat{height:auto;min-height:0;max-height:none;align-self:stretch;margin-bottom:26px}.chat-heading{border:0;padding:24px 24px 15px}h2{font:32px/1.2 Georgia,serif}.chat-heading p{font:19px/1.4 Georgia,serif;margin-top:0}.empty h3{font:30px/1.25 Georgia,serif}.empty p{font:19px/1.5 Georgia,serif}.empty svg{width:45px;height:45px;margin-bottom:24px}.messages{padding:20px 24px;min-height:240px}.message{font:17px/1.5 Georgia,serif}.message strong{font:11px/1.5 -apple-system,sans-serif}
#question-form{border:0;background:transparent;padding:0;margin:16px 21px 20px;gap:13px}#question{border:1px solid var(--line);background:#fffdfa;font:19px/30px Georgia,serif;padding:10px 14px;border-radius:8px}.icon-button{width:56px;min-height:56px;flex-shrink:0}.icon-button svg{width:26px;height:26px}.notice{font:12px/1.5 -apple-system,sans-serif}
footer{font:16px/1.5 Georgia,serif;padding-top:25px;margin-top:30px}dialog h2{font-size:28px}.login{max-width:530px;padding-top:75px}.login h1{font-size:44px}.login header{height:auto}
@media(max-width:1300px){header{margin:0 30px}.stage-controls{flex-direction:column;align-items:flex-start}.actions button{padding:10px 18px;font-size:16px}.identity strong{font-size:25px}.identity span{font-size:16px}.chat{margin-bottom:0}.timer{font-size:18px;padding-left:14px}h1{font-size:47px}.intro>p{font-size:24px}footer{font-size:14px}}
@media(max-width:820px){header{margin:0 24px;padding:18px 0;height:88px}.brand{font-size:29px}.brand small{font-size:15px}nav{gap:14px}nav .text-button{font-size:14px}nav .text-button+button{padding-left:14px}main{padding:30px 24px 0}.intro{padding-left:0;margin-bottom:25px}h1{font-size:36px}.intro>p{font-size:21px}.conversation-layout{grid-template-columns:1fr;gap:24px}.chat{height:450px}.stage-controls{flex-direction:row;align-items:center}.identity strong{font-size:25px}.identity span{font-size:16px}.actions{flex-wrap:wrap;gap:8px}.actions button{min-height:44px;padding:10px 14px}.timer{padding-left:12px;margin-left:0}.empty h3{font-size:27px}.empty p{font-size:17px}.chat-heading h2{font-size:29px}.chat-heading p{font-size:17px}footer{font-size:13px}.login{padding-top:55px}}

#iteration-dialog{width:min(620px,calc(100vw - 40px))}#iteration-dialog label{display:block;margin:18px 0 8px}#iteration-text{display:block;box-sizing:border-box;width:100%;min-height:160px;font:16px/1.5 -apple-system,sans-serif;padding:12px}#iteration-status{font:14px/1.5 -apple-system,sans-serif;margin:16px 0}#iteration-send{width:100%}

.stage{position:relative}.stage .avatar-source{position:absolute;opacity:0;pointer-events:none}.stage .avatar-canvas{display:block;width:100%;height:auto;aspect-ratio:4/3}

/* Owner feedback: transcript growth must never displace Ruben. */
.conversation-layout{align-items:start}.ruben{position:sticky;top:12px}
.chat{height:clamp(440px,70dvh,680px);min-height:0;max-height:680px;overflow:hidden}
.messages{min-height:0;overscroll-behavior:contain;overflow-anchor:none}.message{flex-shrink:0}
@media(max-width:820px){
 .ruben{top:0;z-index:2;background:var(--bg);padding-bottom:10px}
 .stage .avatar-canvas{max-height:30dvh;object-fit:contain}
 .stage-controls{padding-top:10px;gap:8px}.ruben .notice{margin-top:8px}
 .chat{height:420px;max-height:60dvh}
}
@media(min-width:821px){.stage .avatar-canvas{max-height:48dvh;object-fit:contain}.stage-controls{flex-wrap:wrap}.actions{flex-wrap:wrap}}
/* Compact the active workspace so input focus cannot scroll the face away. */
.conversation-active header{height:64px;padding-top:8px;padding-bottom:8px}
.conversation-active .intro,.conversation-active main>details,.conversation-active footer{display:none}
.conversation-active main{padding-top:12px}
.conversation-active .chat{height:calc(100dvh - 96px);min-height:0;max-height:none}
.conversation-active .stage .avatar-canvas{max-height:max(100px,calc(100dvh - 310px));object-fit:contain}
@media(max-width:820px){
 .conversation-active .conversation-layout{gap:10px}
 .conversation-active .ruben{position:relative}
 .conversation-active .stage .avatar-canvas{max-height:22dvh}
 .conversation-active .identity{display:none}
 .conversation-active .actions button{font-size:12px;padding:8px;min-height:40px}
 .conversation-active .chat{height:40dvh}
 .conversation-active .chat-heading{padding:8px 16px}.conversation-active .chat-heading p{display:none}
}

/* Phone landscape: an uninterrupted conversation, with portrait as the controls view.
   Keep the same canvas/audio/mic instances; orientation changes only presentation. */
@media (orientation:landscape) and (max-height:600px) and (max-width:1100px) and (pointer:coarse){
 body.conversation-active{overflow:hidden;background:#32291f}
 .conversation-active header,.conversation-active .chat,
 .conversation-active .stage-controls,.conversation-active .ruben>.notice{display:none}
 .conversation-active main{margin:0;padding:0;max-width:none}
 .conversation-active .conversation-layout{display:block;margin:0}
 .conversation-active .ruben{position:fixed;inset:0;margin:0;padding:0;width:100vw;width:100dvw;height:100vh;height:100dvh;z-index:10;background:#32291f}
 .conversation-active .stage{width:100%;height:100%;border-radius:0}
 .conversation-active .stage .avatar-canvas,
 .conversation-active .stage img:not(.avatar-source){width:100%;height:100%;max-height:none;aspect-ratio:auto;object-fit:cover;object-position:50% 20%}
}

#memory-dialog{max-height:85dvh;overflow-y:auto;width:min(640px,90vw)}#memory-form label{display:block;margin:16px 0 8px}#memory-instructions{width:100%;box-sizing:border-box}#memory-entries details{padding:12px 0;border-bottom:1px solid #ddd;overflow-wrap:anywhere}#memory-entries p{white-space:pre-wrap}

/* Mobile quality requirement: 2 October 2026; preserves the existing conversation layout. */
html { -webkit-text-size-adjust: 100%; }
input, textarea, select { font-size: 16px; min-height: 44px; }
button.text-button { min-height: 44px; min-width: 44px; }
button, input, textarea, select { touch-action: manipulation; }
@media (max-width: 820px) {
  .login { padding-inline: max(20px, env(safe-area-inset-left)); padding-bottom: max(24px, env(safe-area-inset-bottom)); }
  .login h1 { font-size: clamp(34px, 9vw, 44px); overflow-wrap: break-word; }
  .login form { min-width: 0; }
  .login input, .login button { min-height: 48px; }
}
