/* 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);
  /* filas EXPLICITAS: auto para la intro, el resto para la foto. Sin esto el
     carril (que abarca las dos filas) estira la fila 1 y deja ~395px de vacio
     entre la intro y la foto -- medido antes de arreglarlo. */
  grid-template-rows:auto minmax(0,1fr);
  gap:16px clamp(24px,3vw,44px);align-items:start}
/* SEGUNDA vuelta del dueno (26 Ago): cabecera a dos columnas. El titulo y la
   intro van angostos a la IZQUIERDA (fila 1), la foto debajo (fila 2), y el
   carril de pasos ocupa la columna derecha DESDE ARRIBA -- "el 01 puede llegar
   hasta donde marco la raya roja". La regla de la vuelta 1 ("no angostar los
   ledes, +56px al envolver") la retiro el mismo: era correcta con todo
   apilado; lado a lado, el texto alto no empuja nada. El carril se coloca
   explicito; intro y foto caen solas en la columna 1 por el auto-placement. */
.dr-viz-side{grid-column:2;grid-row:1 / span 2}
.dr-viz-intro{grid-column:1;min-width:0}
.dr-viz-intro h1{font-size:clamp(28px,2.6vw,36px);line-height:1.08;margin:0}
.dr-viz-intro .dr-rule{margin:10px 0}
.dr-viz-intro .dr-lede{font-size:15.5px;line-height:1.6;margin-bottom:6px}
.dr-viz-intro .dr-lede:last-child{margin-bottom:0}
@media(max-width:960px){.dr-viz{grid-template-columns:minmax(0,1fr);grid-template-rows:none}
  /* en una columna el orden vuelve a ser titulo, texto, foto, carril */
  .dr-viz-side{grid-column:1;grid-row:auto}}

/* ---------- 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}
/* los puntos MEDIOS: mas chicos y huecos, para que se lean como "doblar el
   lado" y no como una quinta esquina. Doble toque = el lado vuelve recto. */
.dr-viz-handle.mid{fill:rgba(23,19,16,.55);stroke:var(--dr-brass);stroke-width:2}
/* vertice INSERTADO (arrastrando un puntito hueco): solido, algo menor que
   las 4 anclas de perspectiva; doble toque lo quita */
.dr-viz-handle.ins{fill:#d5a066;stroke:var(--dr-bg);stroke-width:2}
.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:16px;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 ---------- */
/* Tarjetas mas apretadas que en la calculadora, a proposito: aqui la meta es
   que la tira de piedras del paso 03 asome sin hacer scroll en 1366x768. */
.dr-viz-side{display:flex;flex-direction:column;gap:12px}
.dr-viz-card{border:1px solid var(--dr-line);background:var(--dr-panel);padding:14px 16px}
.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:14.5px;line-height:1.55;color:var(--dr-muted);margin:0 0 10px}

.dr-viz-f{display:flex;flex-direction:column;gap:7px;margin-bottom:14px;min-width:0}
/* Linea y Color en una sola fila: 86px menos de tarjeta antes de la tira de
   piedras, que es lo que el dueno quiere ver sin bajar. En columna angosta
   vuelven a apilarse solos. */
.dr-viz-frow{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(150px,100%),1fr));gap:0 12px}
.dr-viz-f:last-child{margin-bottom:0}
.dr-viz-f>label{font-size:12.5px;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:10px 13px;
  font-family:var(--dr-sans);font-size:17px;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}

/* La piedra ELEGIDA. Vuelta 1 la subio a 176x132; vuelta 2 el dueno pidio
   "mas grande, la default, la roca" -- ahora llena el ancho de la tarjeta,
   la imagen mas grande de todo el carril. Borde de laton: es la elegida. */
.dr-viz-swatch{display:block;margin-top:10px}
.dr-viz-swatch img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;
  display:block;border:1px solid var(--dr-brass)}
.dr-viz-swatch a{display:inline-block;margin-top:8px;font-size:12.5px;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}
/* card 01: the privacy note rides beside the button instead of under the card,
   part of the owner's squeeze; the row wraps on narrow columns */
.dr-viz-acts:has(.dr-viz-privacy){flex-direction:row;flex-wrap:wrap;align-items:center;gap:8px 14px}
.dr-viz-acts .dr-viz-privacy{flex:1 1 120px;min-width:0;margin:0;font-size:12px;line-height:1.45}
/* 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:14px;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:13.5px;line-height:1.55;color:var(--dr-dim);margin:12px 0 0;text-align:center}
.dr-viz-privacy{font-size:13.5px;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:15px;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:12.5px;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}

/* ---------- el apreton de la portada, SOLO en esta pagina ----------
   El dueno, con una raya roja del encabezado al paso 01: "apriete todo hacia
   arriba, que al abrir ya se vea el paso de la piedra, que es lo visual".
   Esta hoja la cargan solo visualizador.html y su gemela inglesa y va DESPUES
   de decorock-lujo.css, asi que esto aprieta esta pagina sin tocar el resto.
   Los dos parrafos de entrada se quedan a lo ancho A PROPOSITO: son una linea
   cada uno; angostarlos los parte en dos y BAJA la tira 56px, lo contrario de
   lo pedido (medido antes de decidir). */
.dr-section:has(.dr-viz){padding-top:22px}
.dr-crumb{padding-top:90px}
/* (vuelta 2: el <header> apilado ya no existe -- la intro vive dentro de la
   rejilla como .dr-viz-intro, estilizada junto a la rejilla arriba) */
/* el parrafo del paso 03 vive ahora debajo de la tira; sin margen fantasma */
.dr-viz-card>p:last-child{margin-bottom:0}

