/* KONO room visualizer (/visualizer/). Tokens come from site.css. */
.phead .h1 .ser{font-family:var(--serif);color:var(--gold);font-weight:600}
.lede{color:var(--muted);max-width:58ch;margin:0}
.viz-app .note{font-size:.8rem;color:var(--muted-2);max-width:56ch;margin:0}
.viz-grid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:32px;align-items:start}
@media (max-width:900px){.viz-grid{grid-template-columns:1fr}}
.viz-empty{border:1px dashed var(--line);padding:40px 24px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:16px}
.viz-or{color:var(--muted);margin:8px 0 0}
.viz-demos{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;width:100%;max-width:560px}
.viz-demos button{border:1px solid var(--line);background:none;padding:0;cursor:pointer;color:inherit;font:inherit}
.viz-demos img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover}
.viz-demos span{display:block;padding:6px 0;font-size:.85rem}
/* the frame shrink-wraps the photo, so a tall phone shot never runs past the screen */
.viz-ba{position:relative;overflow:hidden;background:var(--ink2);touch-action:pan-y;width:fit-content;max-width:100%;margin:0 auto;cursor:ew-resize;user-select:none;-webkit-user-select:none}
.viz-ba img,.viz-ba canvas{-webkit-user-drag:none}
.viz-ba img{display:block;max-width:100%;max-height:min(75vh,820px);width:auto;height:auto}
.viz-ba canvas{position:absolute;inset:0;width:100%;height:100%;clip-path:inset(0 0 0 50%)}
/* the range input stays for keyboard users; the pointer drags anywhere on the photo (visualizer.js) */
.viz-split{position:absolute;inset:0;width:100%;height:100%;opacity:0;margin:0;pointer-events:none}
.viz-knob{position:absolute;top:50%;left:var(--split,50%);width:40px;height:40px;margin:-20px 0 0 -19px;border-radius:50%;background:var(--gold);color:var(--ink);display:flex;align-items:center;justify-content:center;font:700 15px/1 var(--sans);box-shadow:0 2px 10px rgba(0,0,0,.45);pointer-events:none}
.viz-split:focus-visible~.viz-knob{outline:2px solid var(--paper);outline-offset:2px}
.viz-ba::after{content:"";position:absolute;top:0;bottom:0;left:var(--split,50%);width:2px;background:var(--gold);pointer-events:none}
.viz-lbl{position:absolute;top:10px;font:600 .7rem/1 var(--sans);letter-spacing:.2em;text-transform:uppercase;background:rgba(22,18,13,.7);color:var(--paper);padding:6px 8px;pointer-events:none}
.viz-lbl-b{left:10px}.viz-lbl-a{right:10px}
.viz-tag{position:absolute;left:10px;bottom:10px;margin:0;background:var(--gold);color:var(--ink);font:700 .7rem/1 var(--sans);letter-spacing:.16em;text-transform:uppercase;padding:6px 8px}
.viz-busy{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:rgba(22,18,13,.72);color:var(--paper)}
.viz-busy[hidden]{display:none}
.viz-spin{width:38px;height:38px;border:3px solid rgba(201,168,92,.3);border-top-color:var(--gold);border-radius:50%;animation:vizspin 1s linear infinite}
@keyframes vizspin{to{transform:rotate(360deg)}}
.viz-msg{min-height:1.4em;margin:12px 0 0}
.viz-msg[data-kind="err"]{color:#e0806b}
.viz-group{font:600 .7rem/1 var(--sans);letter-spacing:.24em;text-transform:uppercase;color:var(--gold);margin:16px 0 8px}
.viz-sw{display:grid;grid-template-columns:repeat(4,56px);gap:8px}
.viz-chip{width:56px;height:56px;padding:0;border:2px solid transparent;background:none;cursor:pointer}
.viz-chip img{display:block;width:100%;height:100%;object-fit:cover}
.viz-chip[aria-pressed="true"]{border-color:var(--gold)}
.viz-actions{display:flex;flex-wrap:wrap;gap:10px;margin:16px 0}
.viz-hint{font-size:.9rem;color:var(--muted)}
.viz-cta{display:flex;flex-direction:column;gap:10px;margin:20px 0;padding-top:20px;border-top:1px solid var(--line)}
.viz-cta-h{font-weight:700;margin:0}
#viz-mail{display:flex;flex-direction:column;gap:8px}
