/* Deco Rock — visualizador de piedra / stone visualiser.
   Loaded only by visualizador.html and en/stone-visualizer.html.
   Uses the lujo tokens from decorock-lujo.css; defines no colours of its own. */

.dr-viz{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);
  gap:clamp(24px,3vw,44px);align-items:start}
@media(max-width:960px){.dr-viz{grid-template-columns:1fr}}

/* ---------- the picture ---------- */
.dr-viz-stage{position:relative;background:var(--dr-deep);border:1px solid var(--dr-line);
  min-height:220px;display:flex;align-items:center;justify-content:center;
  transition:background .18s ease,border-color .18s ease}
/* a file is being dragged over: light up so the drop is obviously going to land */
.dr-viz-stage.is-drop{border-color:var(--dr-brass);border-style:dashed;
  background:rgba(192,138,74,.14)}
.dr-viz-stage.is-drop>*{pointer-events:none}
/* Before a photo is chosen the canvas is a 16x9 placeholder — but it is still a
   flex sibling of the empty state and was taking half the width from it, which
   is why the drawing came out small. It only exists once there is a photo. */
.dr-viz-stage canvas{display:none;width:100%;height:auto;max-width:100%}
.dr-viz.has-photo .dr-viz-stage canvas{display:block}
.dr-viz-overlay{position:absolute;inset:0;width:100%;height:100%;
  touch-action:none;cursor:grab}
.dr-viz-overlay:active{cursor:grabbing}
/* has-photo sits on #drviz itself, so this was a descendant selector that
   could never match */
.dr-viz.has-photo .dr-viz-overlay{cursor:crosshair}

.dr-viz-quad{fill:rgba(192,138,74,.10);stroke:var(--dr-brass);stroke-width:2;
  vector-effect:non-scaling-stroke;stroke-dasharray:7 5}
.dr-viz-handle{fill:var(--dr-brass);stroke:var(--dr-bg);stroke-width:2;
  vector-effect:non-scaling-stroke}

/* the empty state, before a photo is chosen */
/* the stage centres this as a flex item, so it must be given a width of its
   own — otherwise it shrinks to its text and the drawing collapses with it */
.dr-viz-empty{padding:clamp(34px,6vw,64px) 24px;text-align:center;color:var(--dr-brass);
  flex:1 1 100%;max-width:560px;margin:0 auto}
.dr-viz-art{display:block;margin:0 auto 22px;width:min(400px,82%);height:auto;
  opacity:.34;transition:opacity .18s ease}
.dr-viz-empty .t{font-family:var(--dr-serif);font-weight:300;
  font-size:clamp(24px,3.4vw,34px);line-height:1.15;color:var(--dr-cream);
  margin:0 0 10px;letter-spacing:.01em}
.dr-viz-empty .s{font-size:14.5px;line-height:1.7;color:var(--dr-muted);
  max-width:42ch;margin:0 auto}
/* while a file is over the zone the drawing steps forward */
.dr-viz-stage.is-drop .dr-viz-art{opacity:.85}
.dr-viz-stage.is-drop .dr-viz-empty .t{color:var(--dr-brass)}

/* ---------- controls ---------- */
.dr-viz-side{display:flex;flex-direction:column;gap:18px}
.dr-viz-card{border:1px solid var(--dr-line);background:var(--dr-panel);padding:18px 20px}
.dr-viz-card>h2{font-size:20px;margin:0 0 4px;display:flex;align-items:baseline;gap:12px}
.dr-viz-card>h2 i{font-style:normal;font-family:var(--dr-serif);font-size:30px;line-height:1;
  color:var(--dr-brass);flex:none;min-width:1.4em}
.dr-viz-card>p{font-size:13px;line-height:1.65;color:var(--dr-muted);margin:0 0 14px}

.dr-viz-f{display:flex;flex-direction:column;gap:7px;margin-bottom:14px;min-width:0}
.dr-viz-f:last-child{margin-bottom:0}
.dr-viz-f>label{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--dr-muted)}
.dr-viz select{width:100%;min-width:0;background:var(--dr-deep);color:var(--dr-cream);
  border:1px solid var(--dr-line);border-radius:0;padding:12px 13px;
  font-family:var(--dr-sans);font-size:16px;font-weight:300;-webkit-appearance:none;appearance:none;
  background-image:linear-gradient(45deg,transparent 50%,var(--dr-brass) 50%),
    linear-gradient(135deg,var(--dr-brass) 50%,transparent 50%);
  background-position:calc(100% - 19px) 21px,calc(100% - 13px) 21px;
  background-size:6px 6px,6px 6px;background-repeat:no-repeat;padding-right:38px}
.dr-viz select:focus{outline:0;border-color:var(--dr-brass)}
.dr-viz optgroup{background:var(--dr-panel);color:var(--dr-brass);font-style:normal}
.dr-viz option{background:var(--dr-panel);color:var(--dr-cream)}

.dr-viz input[type=range]{width:100%;-webkit-appearance:none;appearance:none;
  background:transparent;height:24px;cursor:pointer}
.dr-viz input[type=range]::-webkit-slider-runnable-track{height:2px;background:var(--dr-line)}
.dr-viz input[type=range]::-moz-range-track{height:2px;background:var(--dr-line)}
.dr-viz input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;
  width:18px;height:18px;border-radius:50%;background:var(--dr-brass);margin-top:-8px;border:0}
.dr-viz input[type=range]::-moz-range-thumb{width:18px;height:18px;border-radius:50%;
  background:var(--dr-brass);border:0}

.dr-viz-swatch{display:flex;gap:14px;align-items:center;margin-top:4px}
.dr-viz-swatch img{width:78px;height:60px;object-fit:cover;flex:none;border:1px solid var(--dr-line)}
.dr-viz-swatch a{font-size:11px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--dr-brass);border-bottom:1px solid var(--dr-brass-line)}

.dr-viz-acts{display:flex;flex-direction:column;gap:10px}
/* The doing-buttons sit under the picture, not in the side column: that is
   where the eye already is once a render appears, and on a phone it means no
   scrolling past the whole control panel to press "download". They lay out as
   a wrapping row so they read as one strip rather than a stack. */
.dr-viz-acts.main{flex-direction:row;flex-wrap:wrap;margin-top:14px}
.dr-viz-acts.main .dr-btn{flex:1 1 190px;min-width:0}
.dr-viz-acts.main .dr-btn.solid{flex-basis:100%}
@media(max-width:520px){.dr-viz-acts.main{flex-direction:column}
  .dr-viz-acts.main .dr-btn{flex:1 1 auto}}
.dr-viz-acts .dr-btn{text-align:center;padding:14px 20px;cursor:pointer;
  font-family:var(--dr-sans);background:none;color:var(--dr-cream)}
.dr-viz-acts .dr-btn:hover{color:var(--dr-brass);border-color:var(--dr-brass);
  background:rgba(192,138,74,.10)}
.dr-viz-acts .dr-btn.is-drop{color:var(--dr-brass);border-color:var(--dr-brass);
  border-style:dashed;background:rgba(192,138,74,.18)}
.dr-viz-acts .dr-btn.solid{background:var(--dr-brass);border-color:var(--dr-brass);
  color:var(--dr-bg)}
.dr-viz-acts .dr-btn.solid:hover{background:#d5a066;color:var(--dr-bg)}
.dr-viz-acts .dr-btn[disabled]{opacity:.5;cursor:default}

.dr-viz-msg{font-size:12.5px;line-height:1.6;color:var(--dr-muted);margin:14px 0 0;
  padding:11px 13px;border-left:2px solid var(--dr-brass);background:rgba(192,138,74,.07)}
.dr-viz-msg.warn{border-left-color:#c0714a}
.dr-viz-hint{font-size:12px;line-height:1.55;color:var(--dr-dim);margin:12px 0 0;text-align:center}
.dr-viz-privacy{font-size:12px;line-height:1.6;color:var(--dr-dim);margin:0}

@media print{.dr-viz-side,.dr-viz-overlay{display:none !important}}

/* ---------- object detection + retouch brush ---------- */
.dr-viz-check{display:flex;align-items:flex-start;gap:10px;cursor:pointer;
  font-size:13.5px;line-height:1.5;color:var(--dr-cream)}
.dr-viz-check input{flex:none;margin-top:2px;width:17px;height:17px;accent-color:var(--dr-brass)}

.dr-viz-modes{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}
.dr-viz-chip{position:relative}
.dr-viz-chip input{position:absolute;opacity:0;pointer-events:none}
.dr-viz-chip span{display:block;border:1px solid var(--dr-line);padding:9px 14px;
  font-size:11px;letter-spacing:.14em;text-transform:uppercase;cursor:pointer;
  transition:.2s ease;white-space:nowrap;color:var(--dr-muted)}
.dr-viz-chip input:checked+span{border-color:var(--dr-brass);
  background:rgba(192,138,74,.12);color:var(--dr-brass)}
.dr-viz-chip input:focus-visible+span{outline:2px solid var(--dr-brass);outline-offset:2px}
