/* ─────────────────────────────────────────────
   Azul Maison · atelier de azulejos
   ───────────────────────────────────────────── */

:root{
  --porcelain:#FAFAF8;
  --paper:#FFFFFF;
  --ink:#16305E;
  --ink-80:rgba(22,48,94,.80);
  --ink-55:rgba(22,48,94,.55);
  --ink-40:rgba(22,48,94,.40);
  --azure:#2F63AC;
  --mist:#EAEFF7;
  --line:rgba(22,48,94,.16);
  --hair:rgba(22,48,94,.085);
  --display:"Cormorant Garamond",Georgia,"Times New Roman",serif;
  --ui:"Jost",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --stage:min(500px,74vw);
  --ratio:1;
  --grout:#DFE5EE;
}

*{box-sizing:border-box}
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  background:var(--porcelain);
  color:var(--ink);
  font-family:var(--ui);
  font-weight:300;
  font-size:15px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
button,input{font:inherit;color:inherit}
button{cursor:pointer}
h1,h2{margin:0;font-weight:400}

/* ── Masthead ───────────────────────────────── */
.masthead{
  padding:40px 24px 30px;
  text-align:center;
  background:linear-gradient(180deg,#fff 0%,var(--porcelain) 100%);
  border-bottom:1px solid var(--hair);
}
/* El h1 lleva la frase que se busca y la marca: cada una con su aspecto de siempre. */
.masthead__titulo{margin:0;font-weight:inherit}
.masthead__titulo>span{display:block}
.masthead__eyebrow{
  margin:0 0 14px;
  font-size:.63rem;
  letter-spacing:.34em;
  text-transform:uppercase;
  color:var(--ink-40);
}
.masthead__brand{
  font-family:var(--display);
  font-weight:300;
  font-size:clamp(2.6rem,7vw,4.4rem);
  line-height:1;
  letter-spacing:.06em;
}
.masthead__rule{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:14px;
  max-width:300px;
  margin:16px auto 14px;
}
.masthead__rule span{flex:1;height:1px;background:var(--line)}
.masthead__rule em{font-style:normal;font-size:.7rem;color:var(--ink-40)}
.masthead__tag{
  margin:0;
  font-family:var(--display);
  font-style:italic;
  font-size:1.12rem;
  color:var(--ink-55);
  line-height:1.55;
}

/* ── Layout ─────────────────────────────────── */
/* Nota que vale para todas las rejillas de aquí abajo: una pista `1fr` tiene
   min-width:auto, así que el hijo más ancho la empuja y la página se va de
   lado. Con minmax(0,1fr) la pista manda y el hijo se encoge. En un móvil de
   360 px eso era desplazamiento horizontal en la primera pantalla. */
.atelier{
  display:grid;
  grid-template-columns:minmax(0,1fr) 430px;
  max-width:1440px;
  margin:0 auto;
  align-items:start;
}

/* ── Escenario ──────────────────────────────── */
.stage{
  position:sticky;
  top:0;
  padding:30px 34px 38px;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:20px;
  min-height:min(100vh,720px);
  justify-content:center;
  border-right:1px solid var(--hair);
  background:
    radial-gradient(120% 80% at 50% 0%,#F2F6FC 0%,rgba(242,246,252,0) 62%),
    var(--porcelain);
}
.stage__modes{display:flex;gap:26px}
.mode{
  background:none;border:0;padding:0 0 6px;
  font-size:.66rem;letter-spacing:.26em;text-transform:uppercase;
  color:var(--ink-40);border-bottom:1px solid transparent;transition:.2s;
}
.mode:hover{color:var(--ink-80)}
.mode.is-on{color:var(--ink);border-bottom-color:var(--ink)}

.stage__viewport{display:flex;align-items:center;justify-content:center}

/* max-width:100% es la red: --stage se calcula con vw, y vw incluye la barra
   de desplazamiento del navegador mientras que el hueco de verdad no. Sin esto,
   cuadrar el tamaño al píxel depende de acertar el margen; con esto, si el
   cálculo se pasa, la pieza se encoge a su hueco y NUNCA hay desplazamiento
   horizontal. Vale para el azulejo, para la cota y para el paño. */
.tile-wrap{width:calc(var(--stage) * var(--ratio));max-width:100%;
 transition:width .45s cubic-bezier(.4,0,.2,1)}
.tile{
  position:relative;
  width:100%;
  aspect-ratio:1;
  border-radius:2px;
  overflow:hidden;
  box-shadow:
    0 34px 62px -30px rgba(22,48,94,.48),
    0 3px 10px -4px rgba(22,48,94,.18),
    inset 0 0 0 1px rgba(22,48,94,.08);
}
.tile{cursor:grab;touch-action:none}
.tile.is-dragging{cursor:grabbing}
.tile svg{display:block;width:100%;height:100%}
.tile::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    linear-gradient(118deg,rgba(255,255,255,.55) 0%,rgba(255,255,255,.12) 26%,rgba(255,255,255,0) 44%),
    radial-gradient(130% 100% at 50% 118%,rgba(22,48,94,.07),rgba(22,48,94,0) 58%);
}

/* paño 3×3 */
.pano{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:2px;
  background:var(--grout);
  padding:2px;
  width:calc(var(--stage) * .96);
  max-width:100%;
  box-shadow:0 34px 62px -30px rgba(22,48,94,.42),inset 0 0 0 1px rgba(22,48,94,.08);
}
.pano svg{display:block;width:100%;height:auto}

/* cota */
.stage__measure{
  display:flex;align-items:center;gap:12px;
  width:calc(var(--stage) * var(--ratio));max-width:100%;
  transition:width .45s cubic-bezier(.4,0,.2,1);
}
.measure__line{flex:1;height:1px;background:var(--line);position:relative}
.measure__line::before,.measure__line::after{
  content:"";position:absolute;top:-3px;width:1px;height:7px;background:var(--line);
}
.measure__line::before{left:0}
.measure__line::after{right:0}
.measure__label{
  font-size:.6rem;letter-spacing:.24em;text-transform:uppercase;color:var(--ink-40);
}
.stage__caption{
  margin:0;text-align:center;
  font-family:var(--display);font-style:italic;font-size:1.16rem;color:var(--ink-55);
}
.stage__alt{
  display:flex;align-items:center;gap:9px;
  font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-55);cursor:pointer;
}
.stage__alt input{accent-color:var(--ink);width:14px;height:14px}
.stage__alt.esta-apagado{opacity:.4;pointer-events:none}

/* mandos del paño */
.pano__mandos{display:flex;flex-direction:column;align-items:center;gap:10px}
.pano__tam{display:flex;gap:8px}
.pano__tam button{
  background:none;border:1px solid var(--line);padding:6px 11px;
  font-size:.6rem;letter-spacing:.16em;color:var(--ink-55);transition:.18s;
}
.pano__tam button:hover{border-color:var(--ink-55);color:var(--ink)}
.pano__tam button.is-on{border-color:var(--ink);color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.pano__nota{
  margin:0;max-width:34ch;text-align:center;
  font-size:.63rem;letter-spacing:.04em;line-height:1.5;color:var(--ink-40);
}
/* el paño en la cesta, en miniatura */
.linea__art--pano{display:grid;grid-template-columns:repeat(var(--c),1fr);gap:1px;background:var(--grout)}
.linea__art--pano svg{width:100%;height:auto;display:block}

/* ── Panel ──────────────────────────────────── */
.panel{padding:34px 38px 60px;background:var(--paper);min-height:100vh}
.step{padding:24px 0;border-top:1px solid var(--hair)}
.step:first-child{border-top:0;padding-top:6px}
.step::before{
  content:attr(data-num);
  display:block;margin-bottom:5px;
  font-size:.58rem;letter-spacing:.3em;color:var(--ink-40);
}
.step__title{
  font-family:var(--display);
  font-size:1.55rem;
  letter-spacing:.015em;
  margin-bottom:16px;
}

/* opciones */
.opts{display:grid;gap:10px}
.opts--base{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.opts--size{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.opts--size .opt{flex-direction:column;align-items:center;text-align:center;gap:9px;padding:14px 8px}
.opts--size .opt__name{font-size:.76rem}
.opt{
  display:flex;align-items:center;gap:13px;
  padding:13px 14px;
  background:var(--paper);
  border:1px solid var(--line);
  text-align:left;
  transition:border-color .18s,box-shadow .18s;
}
.opt:hover{border-color:var(--ink-55)}
.opt.is-on{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.opt__name{font-size:.8rem;letter-spacing:.03em;line-height:1.25}
.opt__sub{display:block;font-size:.63rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-40)}
.opt__square{background:var(--mist);border:1px solid var(--line);flex:none}
.opt__dot{width:26px;height:26px;border-radius:50%;border:1px solid var(--line);flex:none}

/* estilo: grabado o mosaico */
.opts--estilo{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.opt__estilo{width:34px;height:34px;flex:none;color:var(--ink)}
.opt.esta-apagado{opacity:.45;cursor:not-allowed}
.opt.esta-apagado:hover{border-color:var(--line)}
.opts--estilo + .hint{margin-top:12px}
/* Con mosaico no hay marco, ni tamaño, ni giro, ni encaje: se esconde lo que no
   aplica en vez de dejar mandos que no hacen nada, y se enseña lo que sí. */
.es-mosaico .solo-grabado{display:none}
.atelier:not(.es-mosaico) .solo-mosaico{display:none}
.es-mosaico .actions__row{grid-template-columns:minmax(0,1fr)}
.es-mosaico .tile{cursor:default;touch-action:auto}
.mode:disabled{opacity:.35;cursor:not-allowed}
.mode:disabled:hover{color:var(--ink-40)}
/* El aviso de que el mosaico en pantalla es una aproximación. Tiene que verse:
   es una tarjeta que flota —sombra, un «≈» azul y, bajo el azulejo, un vaivén
   suave— y no una nota al pie. Es el mismo aviso en tres sitios (el paso de
   estilo, bajo el azulejo y el resumen del pedido) y se ve igual en los tres. */
.aviso-mosaico,.stage__aviso,.sheet__aviso{
  position:relative;margin:16px 0 0;padding:14px 18px 14px 62px;
  background:var(--paper);border:1px solid rgba(47,99,172,.3);border-radius:16px;
  box-shadow:0 18px 34px -14px rgba(22,48,94,.42),0 4px 10px -4px rgba(22,48,94,.2);
  font-size:.8rem;line-height:1.55;letter-spacing:.015em;color:var(--ink-80);text-align:left;
}
.aviso-mosaico::before,.stage__aviso::before,.sheet__aviso::before{
  content:"≈";position:absolute;left:15px;top:50%;margin-top:-17px;width:34px;height:34px;border-radius:50%;
  display:grid;place-items:center;background:var(--azure);color:#fff;
  font:500 1.35rem/1 var(--ui);box-shadow:0 6px 12px -4px rgba(47,99,172,.6);
}
.aviso-mosaico b,.stage__aviso b,.sheet__aviso b{font-weight:600;color:var(--azure)}
.stage__aviso{
  margin:10px auto 0;max-width:46ch;
  animation:aviso-flota 3.4s ease-in-out infinite alternate;
}
@keyframes aviso-flota{from{transform:translateY(0)}to{transform:translateY(-6px)}}
@media (prefers-reduced-motion:reduce){.stage__aviso{animation:none}}
/* mientras llega el mosaico, la pieza respira en vez de quedarse en blanco */
.tile svg[data-mosaico="cargando"]{animation:mosaico-espera 1.1s ease-in-out infinite alternate}
@keyframes mosaico-espera{from{opacity:.55}to{opacity:1}}
@media (prefers-reduced-motion:reduce){.tile svg[data-mosaico="cargando"]{animation:none}}

/* tabs + búsqueda */
.tabs{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:14px}
.tab{
  background:none;border:0;padding:0 0 4px;
  font-size:.63rem;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink-40);border-bottom:1px solid transparent;transition:.18s;
}
.tab:hover{color:var(--ink-80)}
.tab.is-on{color:var(--ink);border-bottom-color:var(--ink)}
.search{
  display:flex;align-items:center;gap:9px;
  border:1px solid var(--line);padding:9px 12px;margin-bottom:12px;background:var(--paper);
}
.search:focus-within{border-color:var(--ink)}
.search svg{width:15px;height:15px;fill:none;stroke:var(--ink-40);stroke-width:1.6;flex:none}
.search input{border:0;outline:0;background:none;width:100%;font-size:.82rem;letter-spacing:.02em}
.search input::placeholder{color:var(--ink-40)}

/* rejillas */
.grid{display:grid;gap:9px}
.grid--motifs{grid-template-columns:repeat(4,minmax(0,1fr));max-height:352px;overflow-y:auto;padding-right:4px}
.grid--frames{grid-template-columns:repeat(3,minmax(0,1fr))}
.grid::-webkit-scrollbar{width:5px}
.grid::-webkit-scrollbar-thumb{background:var(--line)}
.chip{
  border:1px solid var(--line);background:var(--paper);padding:0;
  display:flex;flex-direction:column;transition:border-color .18s,box-shadow .18s;
}
.chip:hover{border-color:var(--ink-55)}
.chip.is-on{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.chip__art{width:100%;aspect-ratio:1;display:block;color:var(--ink)}
.chip__art svg{display:block;width:100%;height:100%}
.chip__name{
  font-size:.55rem;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-55);
  padding:5px 3px;text-align:center;line-height:1.25;
  border-top:1px solid var(--hair);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.chip.is-on .chip__name{color:var(--ink)}
.chip__art--empty{
  display:flex;align-items:center;justify-content:center;
  font-family:var(--display);font-style:italic;font-size:1.5rem;color:var(--ink-40);
  background:repeating-linear-gradient(45deg,transparent,transparent 6px,var(--hair) 6px,var(--hair) 7px);
}

/* tintas + sliders */
.inks{display:flex;gap:11px;margin-bottom:18px;flex-wrap:wrap}
/* Un color de drop: separado de los azules y con un anillo fino, para que se lea como edición especial. */
.ink--especial{margin-left:10px;box-shadow:0 0 0 2px var(--paper),0 0 0 3px #A8842F}
.hint--especial{margin-top:-8px;color:#8A6A22}
.ink{
  width:30px;height:30px;border-radius:50%;border:1px solid var(--line);padding:0;
  position:relative;transition:transform .16s;
}
.ink:hover{transform:scale(1.08)}
.ink.is-on::after{
  content:"";position:absolute;inset:-5px;border:1px solid var(--ink);border-radius:50%;
}
.slider{display:block;margin-bottom:14px}
.slider__label{
  display:flex;justify-content:space-between;
  font-size:.63rem;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-55);margin-bottom:7px;
}
.slider__label b{font-weight:400;color:var(--ink);font-variant-numeric:tabular-nums}
input[type=range]{
  -webkit-appearance:none;appearance:none;width:100%;background:none;height:18px;
}
input[type=range]::-webkit-slider-runnable-track{height:1px;background:var(--line)}
input[type=range]::-moz-range-track{height:1px;background:var(--line)}
input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;width:13px;height:13px;background:var(--paper);
  border:1px solid var(--ink);border-radius:50%;margin-top:-6px;transition:background .15s;
}
input[type=range]::-moz-range-thumb{
  width:13px;height:13px;background:var(--paper);border:1px solid var(--ink);border-radius:50%;
}
input[type=range]:active::-webkit-slider-thumb{background:var(--ink)}

/* botones */
.btn{
  border:1px solid var(--line);background:var(--paper);color:var(--ink);
  padding:12px 16px;width:100%;
  font-size:.63rem;letter-spacing:.2em;text-transform:uppercase;
  transition:border-color .18s,background .18s,color .18s;
}
.btn:hover{border-color:var(--ink)}
.btn--solid{background:var(--ink);border-color:var(--ink);color:#fff}
.btn--solid:hover{background:var(--azure);border-color:var(--azure)}
.btn--ghost{border-style:dashed;color:var(--ink-55)}
.btn--ghost:hover{color:var(--ink)}
.btn--sm{padding:9px 12px}
.actions{display:grid;gap:9px}
.actions__row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:9px}
.upload{margin-top:12px}
.upload__hint{
  margin:7px 0 0;font-size:.63rem;letter-spacing:.04em;color:var(--ink-40);line-height:1.5;text-align:center;
}
/* Encargo por WhatsApp. Es un <a>, así que necesita el display y el centrado
   que .btn da por hechos en un <button>. En azul y no en verde: el botón
   fuerte de la página es "Añadir a la cesta" y este no debe disputárselo. */
.encargo{margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}
.btn--encargo{
  display:flex;align-items:center;justify-content:center;gap:8px;
  text-decoration:none;box-sizing:border-box;
}
.btn--encargo svg{
  width:15px;height:15px;flex:none;fill:none;
  stroke:currentColor;stroke-width:1.6;stroke-linejoin:round;
}
.ficha{
  margin:0 0 16px;padding:14px 16px;background:var(--mist);
  font-family:var(--display);font-size:1.02rem;line-height:1.7;color:var(--ink-80);
}
.ficha b{font-weight:500;color:var(--ink)}

/* precio y cesta */
.desglose{list-style:none;margin:0 0 12px;padding:0;display:grid;gap:6px}
.desglose li{
  display:flex;justify-content:space-between;gap:12px;align-items:baseline;
  font-size:.72rem;letter-spacing:.02em;color:var(--ink-55);
}
.desglose li:first-child{color:var(--ink-80)}
.desglose li span:last-child{font-variant-numeric:tabular-nums;white-space:nowrap}
.desglose li+li span:last-child{color:var(--ink)}
.chip__extra{
  font-size:.55rem;letter-spacing:.08em;color:var(--ink-40);
  padding:0 3px 5px;text-align:center;font-variant-numeric:tabular-nums;
}
.chip.is-on .chip__extra{color:var(--ink-55)}

.precio{
  margin:0 0 14px;display:flex;align-items:baseline;gap:9px;
  font-family:var(--display);font-size:1.7rem;color:var(--ink);
}
.precio small{
  font-family:var(--ui);font-size:.6rem;letter-spacing:.2em;
  text-transform:uppercase;color:var(--ink-40);
}
.hint.hint--c{text-align:center;margin-top:12px}

.cart{display:grid;gap:12px;margin-bottom:16px}
.linea{
  display:grid;grid-template-columns:56px minmax(0,1fr) auto;gap:12px;align-items:center;
  padding:8px 0 12px;border-bottom:1px solid var(--hair);position:relative;
}
.linea__art{width:56px;border:1px solid var(--line)}
.linea__art svg{display:block;width:100%;height:auto}
.linea__txt{min-width:0}
.linea__nom{font-size:.82rem;letter-spacing:.02em;line-height:1.3}
.linea__det{
  display:block;font-size:.58rem;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink-40);margin-top:3px;line-height:1.5;
}
.linea__ref{
  display:block;font-size:.55rem;letter-spacing:.06em;color:var(--ink-40);
  margin-top:3px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
}
.linea__der{display:flex;flex-direction:column;align-items:flex-end;gap:7px}
.linea__eur{font-size:.85rem;font-variant-numeric:tabular-nums}
.linea__eur s{color:var(--ink-40);font-size:.72rem;text-decoration-thickness:1px}
.linea__dto{
  font-size:.55rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink);background:var(--mist);padding:2px 6px;
}
.paso{display:flex;align-items:center;border:1px solid var(--line)}
.paso button{
  width:24px;height:24px;border:0;background:none;color:var(--ink-55);
  font-size:.85rem;line-height:1;padding:0;
}
.paso button:hover{color:var(--ink)}
.paso input{
  width:34px;border:0;outline:0;background:none;text-align:center;
  font-size:.78rem;font-variant-numeric:tabular-nums;-moz-appearance:textfield;
}
.paso input::-webkit-outer-spin-button,.paso input::-webkit-inner-spin-button{
  -webkit-appearance:none;margin:0;
}
.linea__quitar{
  position:absolute;top:-4px;right:-6px;width:22px;height:22px;border:0;background:none;
  color:var(--ink-40);font-size:.8rem;line-height:1;padding:0;
}
.linea__quitar:hover{color:var(--ink)}

.totales{margin:0 0 16px;display:grid;grid-template-columns:1fr auto;gap:5px 12px}
.totales dt{font-size:.63rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-40)}
.totales dd{margin:0;text-align:right;font-size:.85rem;font-variant-numeric:tabular-nums}
.totales .t-final dt,.totales .t-final dd{
  font-family:var(--display);font-size:1.25rem;color:var(--ink);
  letter-spacing:0;text-transform:none;padding-top:7px;border-top:1px solid var(--hair);
}
.step--cart .btn--ghost{margin-top:9px}

/* la línea de la cesta que lleva mosaico, con lo que falta saber de él */
.linea__aviso{
  display:block;margin-top:3px;font-size:.6rem;letter-spacing:.04em;line-height:1.45;color:var(--ink-55);
}

/* hoja de pedido */
.sheet{
  position:fixed;inset:0;z-index:40;overflow-y:auto;
  background:rgba(22,48,94,.32);backdrop-filter:blur(4px);
  padding:28px 20px;
}
.sheet__box{
  position:relative;max-width:520px;margin:0 auto;
  background:var(--paper);border:1px solid var(--line);padding:38px 38px 34px;
  box-shadow:0 40px 90px -30px rgba(22,48,94,.5);
}
.sheet__close{
  position:absolute;top:14px;right:16px;width:28px;height:28px;
  border:0;background:none;color:var(--ink-40);font-size:1.25rem;line-height:1;padding:0;
}
.sheet__close:hover{color:var(--ink)}
.sheet__eyebrow{
  margin:0 0 6px;font-size:.58rem;letter-spacing:.3em;text-transform:uppercase;color:var(--ink-40);
}
.sheet__title{font-family:var(--display);font-size:2rem;margin-bottom:20px;line-height:1.1}
.sheet__resumen{
  background:var(--mist);padding:16px 18px;margin-bottom:22px;
  font-size:.78rem;line-height:1.7;
}
.sheet__resumen b{font-weight:500}
.sheet__resumen .r-total{
  display:flex;justify-content:space-between;margin-top:9px;padding-top:9px;
  border-top:1px solid var(--line);font-family:var(--display);font-size:1.15rem;
}

.form{display:grid;gap:13px}
.form__row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:13px}
/* min-width:0 y width:100%: sin ellos un campo del formulario no se encoge por debajo
   de su ancho de serie (unos 20 caracteres), y en la fila de código postal,
   población y provincia el último se salía de la hoja por la derecha. */
.field{display:grid;gap:5px;min-width:0}
.field>span{font-size:.6rem;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-55)}
.field>span em{font-style:normal;color:var(--ink-40);letter-spacing:.1em}
.field input,.field textarea{
  width:100%;min-width:0;
  border:1px solid var(--line);background:var(--paper);padding:10px 12px;
  font-size:.85rem;outline:0;resize:vertical;font-family:var(--ui);
}
.field input:focus,.field textarea:focus{border-color:var(--ink)}
.field input[aria-invalid="true"]{border-color:#B4472F}
/* El permiso de WhatsApp: una frase de las de leer, no de las de etiqueta. */
.consent{display:grid;gap:5px}
.consent__check{display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-size:.82rem;line-height:1.45;color:var(--ink)}
.consent__check input{accent-color:var(--ink);width:16px;height:16px;flex:none;margin:2px 0 0}
.consent__nota{margin:0 0 0 26px;font-size:.68rem;line-height:1.55;letter-spacing:.02em;color:var(--ink-55)}
.consent.es-error .consent__check{color:#B4472F}
.form__error{
  margin:0;font-size:.68rem;color:#B4472F;letter-spacing:.04em;
}
.sheet__ok{
  margin:0 0 8px;font-family:var(--display);font-size:1.6rem;color:var(--ink);
}
.sheet__msg{margin:0 0 16px;font-size:.82rem;line-height:1.6;color:var(--ink-80)}
.pedido{
  background:var(--mist);padding:14px 16px;margin:0 0 16px;max-height:230px;overflow:auto;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.66rem;line-height:1.7;
  white-space:pre-wrap;word-break:break-word;color:var(--ink-80);
}

/* colección guardada */
.saved{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}
.saved__item{position:relative}
.saved__load{display:block;width:100%;padding:0;border:1px solid var(--line);background:none;transition:border-color .18s}
.saved__load:hover{border-color:var(--ink)}
.saved__load svg{display:block;width:100%;height:auto}
.saved__del{
  position:absolute;top:-7px;right:-7px;width:20px;height:20px;line-height:1;
  border-radius:50%;border:1px solid var(--line);background:var(--paper);
  font-size:.7rem;color:var(--ink-55);display:flex;align-items:center;justify-content:center;
}
.saved__del:hover{color:#fff;background:var(--ink);border-color:var(--ink)}

/* qué es la tienda, en palabras, y sus colecciones (lo leen las personas y los buscadores) */
.sobre{max-width:760px;margin:24px auto 0;padding:0 24px;text-align:center;color:var(--ink-55)}
.sobre__titulo{font-family:var(--display);font-weight:400;font-size:1.35rem;color:var(--ink);margin:0 0 10px;letter-spacing:.01em}
.sobre p{font-size:.82rem;line-height:1.75;margin:0 0 10px}
.sobre a{color:var(--ink);text-underline-offset:3px}

/* pie */
.foot{padding:40px 24px 52px;text-align:center}
.foot__rule{width:60px;height:1px;background:var(--line);margin:0 auto 18px}
.foot p{
  margin:0;font-size:.62rem;letter-spacing:.24em;text-transform:uppercase;color:var(--ink-40);
}

.hint{
  margin:-4px 0 14px;font-size:.63rem;letter-spacing:.04em;color:var(--ink-40);line-height:1.5;
}
.check{
  display:flex;align-items:center;gap:9px;margin-bottom:14px;cursor:pointer;
  font-size:.63rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-55);
}
.check input{accent-color:var(--ink);width:14px;height:14px;flex:none}
.check:hover{color:var(--ink)}

/* acciones del escenario */
.stage__acciones{display:flex;gap:9px;flex-wrap:wrap;justify-content:center}
.btn--linea{
  width:auto;padding:9px 15px;background:none;border-color:var(--line);
  font-size:.6rem;letter-spacing:.18em;
}
.btn--linea:hover{border-color:var(--ink)}
.form__row--3{grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr) minmax(0,1fr)}

/* ver en mi casa */
.casa{
  position:fixed;inset:0;z-index:60;background:#0d1a2e;overflow:hidden;
  touch-action:none;user-select:none;-webkit-user-select:none;
}
.casa__fondo{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;
}
.casa__vacio{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  padding:30px;text-align:center;
}
.casa__vacio p{
  margin:0;font-family:var(--display);font-style:italic;font-size:1.15rem;
  color:rgba(255,255,255,.65);max-width:16em;line-height:1.6;
}
.casa__pano{
  position:absolute;top:50%;left:50%;
  display:grid;gap:2px;background:rgba(215,222,232,.9);padding:2px;
  transform-origin:50% 50%;
  box-shadow:0 20px 50px -18px rgba(0,0,0,.65);
  cursor:grab;
}
.casa__pano.arrastrando{cursor:grabbing}
.casa__pano svg{display:block;width:100%;height:auto}
.casa__pano::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(118deg,rgba(255,255,255,.30) 0%,rgba(255,255,255,.06) 30%,rgba(255,255,255,0) 52%);
}
.casa__barra{
  position:absolute;left:0;right:0;bottom:0;z-index:2;
  padding:14px 16px calc(14px + env(safe-area-inset-bottom));
  background:linear-gradient(180deg,rgba(13,26,46,0),rgba(13,26,46,.86) 26%);
  display:grid;gap:11px;
}
.casa__fila{display:flex;gap:9px;align-items:center;justify-content:center;flex-wrap:wrap}
.casa__fila--sliders{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px 14px}
.casa__fila--sliders label{display:grid;gap:3px}
.casa__fila--sliders span{
  font-size:.55rem;letter-spacing:.18em;text-transform:uppercase;color:rgba(255,255,255,.6);
}
.casa__fila--sliders input[type=range]{height:16px}
.casa__fila--sliders input[type=range]::-webkit-slider-runnable-track{background:rgba(255,255,255,.35)}
.casa__fila--sliders input[type=range]::-moz-range-track{background:rgba(255,255,255,.35)}
.casa__fila--sliders input[type=range]::-webkit-slider-thumb{background:#fff;border-color:#fff}
.casa__fila--sliders input[type=range]::-moz-range-thumb{background:#fff;border-color:#fff}
.cbtn{
  border:1px solid rgba(255,255,255,.34);background:rgba(255,255,255,.06);color:#fff;
  padding:9px 14px;font-size:.6rem;letter-spacing:.18em;text-transform:uppercase;
  backdrop-filter:blur(4px);
}
.cbtn:hover{border-color:#fff}
.cbtn--solid{background:#fff;color:var(--ink);border-color:#fff}
.casa__medida{
  font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:rgba(255,255,255,.7);
  font-variant-numeric:tabular-nums;
}
.casa__aviso{
  position:absolute;top:0;left:0;right:0;z-index:2;margin:0;
  padding:calc(12px + env(safe-area-inset-top)) 18px 12px;
  font-size:.62rem;letter-spacing:.05em;line-height:1.5;text-align:center;
  color:rgba(255,255,255,.72);
  background:linear-gradient(180deg,rgba(13,26,46,.8),rgba(13,26,46,0));
}
@media (max-width:520px){
  .casa__fila--sliders{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* diálogo */
.modal{
  position:fixed;inset:0;z-index:30;
  display:flex;align-items:center;justify-content:center;padding:24px;
  background:rgba(22,48,94,.28);backdrop-filter:blur(3px);
}
.modal__box{
  background:var(--paper);border:1px solid var(--line);
  padding:30px 32px;max-width:400px;width:100%;
  box-shadow:0 30px 70px -24px rgba(22,48,94,.5);
}
.modal__text{
  margin:0 0 22px;font-family:var(--display);font-size:1.15rem;line-height:1.6;color:var(--ink-80);
}
.modal__text b{font-weight:600;color:var(--ink)}
.modal__row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:9px}
.modal__row .btn{
  display:flex;align-items:center;justify-content:center;text-decoration:none;box-sizing:border-box;
}

/* resultado del grabado */
.modal__box--ancho{max-width:460px}
.grabado__lienzo{
  position:relative;overflow:hidden;
  background:var(--mist);border:1px solid var(--line);
  aspect-ratio:1;display:flex;align-items:center;justify-content:center;
  margin:0 0 18px;padding:14px;
}
/* Mientras llegan las pasadas intermedias. La imagen ya se ve —es el grabado
   de verdad, no un adorno—, así que la señal de "sigue" es tenue: un barrido
   de luz sobre el vidriado y nada más. */
.esta-grabando .grabado__lienzo::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(105deg,transparent 35%,rgba(255,255,255,.55) 50%,transparent 65%);
  background-size:280% 100%;
  animation:grabando 1.5s linear infinite;
}
@keyframes grabando{from{background-position:180% 0}to{background-position:-80% 0}}
@media (prefers-reduced-motion:reduce){
  .esta-grabando .grabado__lienzo::after{animation:none;background:none}
}
.btn:disabled{opacity:.4;pointer-events:none}
.grabado__pieza{width:100%;height:100%;display:flex;align-items:center;justify-content:center}
/* La pieza terminada: el azulejo con su base y su marco, como se va a servir. */
.grabado__pieza svg{width:100%;height:100%;display:block;
  box-shadow:0 12px 30px -14px rgba(22,48,94,.55)}
/* La lamina en crudo: mientras se recorta, o si el recorte falla. */
.grabado__cruda{max-width:100%;max-height:100%;display:block;mix-blend-mode:multiply}
/* Lo que se ve desde que se pulsa hasta que llega el primer trazo. */
.grabado__espera{
  margin:0;text-align:center;max-width:22ch;
  font-size:.7rem;letter-spacing:.06em;line-height:1.7;color:var(--ink-55);
}
.grabado__cerrar{
  display:block;width:100%;margin:14px 0 0;padding:0;border:0;background:none;
  font-size:.63rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-40);
}
.grabado__cerrar:hover{color:var(--ink)}
.btn--espera{opacity:.6;pointer-events:none}

/* toast */
.toast{
  position:fixed;left:50%;bottom:30px;transform:translate(-50%,14px);
  background:var(--ink);color:#fff;padding:11px 22px;
  font-size:.63rem;letter-spacing:.2em;text-transform:uppercase;
  opacity:0;pointer-events:none;transition:opacity .3s,transform .3s;z-index:20;
}
.toast.is-on{opacity:1;transform:translate(-50%,0)}

/* ── Responsive ─────────────────────────────── */
@media (max-width:1080px){
  /* minmax(0,1fr) y no 1fr a secas: una pista 1fr tiene min-width:auto, así que
     el contenido más ancho la empuja y la página se va de lado. En un móvil de
     390 px se salía 15, y eso en una tienda es desplazamiento horizontal en la
     primera pantalla. */
  .atelier{grid-template-columns:minmax(0,1fr)}
  .stage{
    position:static;min-height:0;padding:28px 20px 34px;
    border-right:0;border-bottom:1px solid var(--hair);
    /* En tableta sobran casi 300 px a los lados: aquí el tope era una decisión,
       no una pared, así que sube de 440 a 520. En teléfono no hay ese margen
       —ver el bloque de 480 px— y el tope lo pone la pantalla. */
    --stage:min(520px,86vw);
  }
  .panel{padding:26px 22px 56px;min-height:0}
  .masthead{padding:40px 20px 30px}
}
@media (max-width:480px){
  .sheet{padding:0}
  .sheet__box{padding:30px 22px 26px;min-height:100vh}
  .form__row{grid-template-columns:1fr}
  .grid--motifs{grid-template-columns:repeat(3,minmax(0,1fr));max-height:300px}
  .actions__row{grid-template-columns:1fr}
  /* Medido: con la pieza de 20 cm quedaban entre 2 y 10 px de aire a los lados
     según el teléfono. O sea que aquí la pieza YA llega a la pared y lo único
     que queda por ganar es el margen del escenario: de 12 px a 8. Son cuatro
     puntos, no veinte; el resto de la pantalla es el ancho del teléfono y eso
     no se negocia. Para verlo grande de verdad está el toque. */
  .stage{--stage:min(420px,calc(100vw - 16px));padding:26px 8px 32px}
  .opts--size .opt{padding:12px 5px}
}
@media (prefers-reduced-motion:reduce){
  *{transition:none!important}
}

/* enlace al catálogo en texto plano */
.foot__cat{margin:8px 0 0}
.foot__cat a{color:var(--ink-55);text-decoration:none;border-bottom:1px solid var(--line)}
.foot__cat a:hover{color:var(--ink);border-bottom-color:var(--ink)}
/* Hereda de .foot p la caja alta y el espaciado del pie; solo se toca el
   margen y el color de los enlaces, como en .foot__cat. */
.foot__legal{margin:10px 0 0}
.foot__legal a{color:var(--ink-55);text-decoration:none;border-bottom:1px solid transparent}
.foot__legal a:hover{color:var(--ink);border-bottom-color:var(--line)}
.sin-js{
  margin:0;padding:16px 24px;text-align:center;
  background:var(--mist);border-bottom:1px solid var(--line);
  font-size:.82rem;color:var(--ink-80);
}

/* ── Mandos de las esquinas ─────────────────── */
.esq{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.esq__tit{
  margin:0 0 12px;font-size:.63rem;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-55);
}
.esq__fila{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:14px}
.esq__grupo{display:flex}
.esq__grupo button{
  background:none;border:1px solid var(--line);padding:7px 13px;
  font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-55);transition:.18s;
}
.esq__grupo button + button{border-left:0}
.esq__grupo button:hover{color:var(--ink)}
.esq__grupo button.is-on{border-color:var(--ink);color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}

/* El cuadro es el azulejo en pequeño: cada botón está donde está su esquina. */
.esq__cuadro{
  display:grid;grid-template-columns:repeat(2,1fr);gap:3px;
  width:56px;height:56px;padding:3px;border:1px solid var(--line);background:var(--paper);flex:none;
}
.esq__cuadro button{
  border:0;background:var(--mist);padding:0;position:relative;transition:background .18s;
}
/* La marca de dentro gira lo que gire su adorno, así el cuadro enseña de un
   vistazo que cada esquina puede llevar su propio giro. */
.esq__cuadro button::after{
  content:"";position:absolute;inset:0;margin:auto;width:9px;height:9px;
  background:var(--line);transition:background .18s,transform .18s;
  clip-path:polygon(50% 0,100% 100%,0 100%);
  transform:rotate(var(--giro,0deg));
}
.esq__cuadro button.is-on{background:var(--ink)}
.esq__cuadro button.is-on::after{background:#fff}

/* Los botones de foco son pequeños: no eligen nada de la pieza, solo a quién
   escucha el deslizador. */
.esq__grupo--foco{margin-bottom:6px}
.esq__grupo--foco button{padding:5px 9px;font-size:.66rem;letter-spacing:.06em;text-transform:none}
.esq__grupo--foco button:first-child{
  font-size:.58rem;letter-spacing:.16em;text-transform:uppercase;padding:5px 11px;
}
.esq__grupo--foco button.esta-apagado{opacity:.42}
.esq__nota{
  margin:10px 0 0;font-size:.63rem;letter-spacing:.04em;line-height:1.5;color:var(--ink-40);
}

/* El botón de encargo cuando el generador está cerrado: mismo sitio y mismo
   texto, pero lleva a WhatsApp. Se marca en verde para que no parezca que va a
   pedir un archivo. */
.btn--encargo.btn--wa{border-color:#25806b;color:#1d6b58}
.btn--encargo.btn--wa:hover{background:rgba(37,128,107,.06)}


/* ── El pincel que no para ───────────────────
   La espera del grabado. Un pincel recorre el azulejo dejando la línea detrás,
   sobre una guía punteada que enseña lo que todavía falta: así la espera se
   entiende de un vistazo en vez de ser una rueda dando vueltas.

   Sustituye a la rueda y a la barra —lo pintado ES el avance— y el bucle es
   CSS puro: JavaScript solo escribe --avance cuando llega un aviso del
   servidor. Las clases van con prefijo pz- porque el SVG traía una .esq que
   chocaba con los mandos de las esquinas de la tienda.
   Diseño explorado en cuatro variantes; esta es la elegida. */
/* Ancho completo a propósito: sin esto la columna se encoge al ancho del texto
   y el porcentaje del pincel se calcula sobre ese ancho en vez de sobre el
   lienzo — se quedaba en dos tercios de lo que debía. */
.grabado__aviso{display:flex;flex-direction:column;align-items:center;width:100%}
.grabado__pintor{width:min(320px,86%);margin:0 auto}
.grabado__pintor svg{display:block;width:100%;height:auto}

/* ── Grabando el azulejo ──────────────────────────────────────────
   Dos relojes independientes. El BUCLE: el pincel recorre la pieza sin
   parar y deja estela de tinta fresca; no sabe nada del progreso, por
   eso nunca se congela. El AVANCE: --avance (0 a 1, lo pone el JS en
   el <svg> o en cualquier padre) dice cuánta línea queda entintada. */

@property --avance{syntax:"<number>";inherits:true;initial-value:0}

.pz-pintor{
  display:block;width:100%;height:auto;
  fill:none;stroke:var(--ink);stroke-width:1;
  stroke-linecap:round;stroke-linejoin:round;
  /* los escalones (0 · .33 · .67 · 1) llegan de golpe: se suavizan */
  transition:--avance .8s cubic-bezier(.35,0,.2,1);
  /* un escalón, una etapa: marco · florón · cenefa */
  --t1:clamp(0,var(--avance,0)/.33,1);
  --t2:clamp(0,(var(--avance,0) - .33)/.34,1);
  --t3:clamp(0,(var(--avance,0) - .67)/.33,1);
}

/* barro blanco y dibujo de transferencia, punteado */
.pz-pintor .pz-cara{fill:var(--paper);stroke:var(--line)}
.pz-pintor .pz-guia{stroke:var(--line);stroke-dasharray:1 4;
  opacity:calc(1 - .6*var(--avance,0));
  animation:pz-respirar 5s ease-in-out infinite}
@keyframes pz-respirar{0%,100%{stroke-opacity:.5}50%{stroke-opacity:1}}

/* la tinta ya puesta: cada etapa se descubre con su dasharray */
.pz-pintor .pz-e1,.pz-pintor .pz-f-o,.pz-pintor .pz-e3,.pz-pintor .pz-esq{stroke-dasharray:100px}
.pz-pintor .pz-e1{stroke-width:1.8;stroke-dashoffset:calc(100px*(1 - var(--t1,0)))}
.pz-pintor .pz-f-o{stroke-width:1.5;stroke-dashoffset:calc(100px*(1 - var(--t2,0)))}
.pz-pintor .pz-flor circle{stroke:var(--azure);stroke-width:1.3;
  stroke-dasharray:var(--c);stroke-dashoffset:calc(var(--c)*(1 - var(--t2,0)))}
.pz-pintor .pz-f-p{--c:113.1px}                          /* pétalo r18 */
.pz-pintor .pz-flor .pz-f-c{--c:44px;stroke:var(--ink)}     /* ojo r7, gana al azul */
.pz-pintor .pz-e3{stroke-width:1.4;stroke-dashoffset:calc(100px*(1 - var(--t3,0)))}
.pz-pintor .pz-esq{stroke:var(--azure);stroke-width:1.3;
  stroke-dashoffset:calc(100px*(1 - var(--t3,0)))}
.pz-pintor .pz-trama{stroke:var(--ink-40);stroke-width:.9;opacity:var(--t3,0)}

/* el pincel y su tinta fresca */
.pz-pintor .pz-pelo{fill:var(--ink);stroke-width:.8}
.pz-pintor .pz-virola{stroke:var(--azure);stroke-width:4}
.pz-pintor .pz-mango{stroke-width:2.4}
.pz-pintor .pz-estela{stroke:var(--ink-40);stroke-width:1.6;
  stroke-dasharray:2px 98px;stroke-dashoffset:2px}
.pz-pintor .pz-pincel,.pz-pintor .pz-estela{visibility:hidden}/* sin offset-path, nada */

@supports (offset-path:path("M0 0L1 1")){
  .pz-pintor .pz-pincel{
    visibility:visible;
    transform-box:fill-box;transform-origin:0 0;offset-anchor:0 0;
    offset-path:path("M18 18H182V182H18V18L70.3 70.3A42 42 0 1 1 129.7 129.7A42 42 0 1 1 70.3 70.3L30 30H170V170H30V30");
    offset-rotate:0deg;
    /* sin animación (movimiento reducido) el pincel marca la etapa */
    offset-distance:calc(var(--t1,0)*40.7% + var(--t2,0)*21% + var(--t3,0)*38.3%);
    animation:pz-recorrer 13s linear infinite;
  }
  .pz-pintor .pz-estela{visibility:visible;
    animation:pz-recorrer 13s linear infinite,pz-alzar 13s step-end infinite}
}
/* un mismo juego de fotogramas para pincel y estela: van clavados */
@keyframes pz-recorrer{
  from{offset-distance:0%;stroke-dashoffset:2px}
  to{offset-distance:100%;stroke-dashoffset:-98px}
}
/* el pincel se levanta en los dos saltos */
@keyframes pz-alzar{0%{opacity:1}40.7%{opacity:0}45.3%{opacity:1}61.7%{opacity:0}65.2%{opacity:1}}
.pz-pintor .pz-cuerpo{transform-box:fill-box;transform-origin:0 0;
  animation:pz-mecer 2.4s ease-in-out infinite}
@keyframes pz-mecer{0%,100%{rotate:-5deg}50%{rotate:5deg}}

/* sin movimiento: el dibujo se lee igual y el avance se sigue viendo:
   tinta por etapas y pincel aparcado en el punto que toca */
@media (prefers-reduced-motion:reduce){
  .pz-pintor{transition:none}
  .pz-pintor .pz-guia,.pz-pintor .pz-cuerpo,.pz-pintor .pz-pincel,.pz-pintor .pz-estela{animation:none}
  .pz-pintor .pz-estela{visibility:hidden}
  .pz-pintor .pz-guia{stroke-opacity:.8}
}

/* ── «¿Cómo va mi pedido?» ───────────────────
   El pedido se mira por su referencia, no por una cuenta. Así que hace
   falta una puerta visible: si no, quien pierda el enlace no tiene por
   dónde entrar. Arriba a la derecha en pantalla ancha; en móvil baja a
   su sitio, centrada bajo el lema, para no pelearse con el título. */
.masthead{position:relative}
.masthead__seguir{
  position:absolute;top:20px;right:24px;
  padding:8px 15px;border:1px solid var(--line);border-radius:99px;
  background:rgba(255,255,255,.72);
  font-size:.66rem;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink-55);text-decoration:none;transition:.2s;
}
.masthead__seguir:hover{color:var(--ink);border-color:var(--ink);background:#fff}
@media (max-width:760px){
  .masthead__seguir{position:static;display:inline-block;margin:20px 0 0}
}

/* ── La lista de espera (mientras la tienda no vende) ── */
.hint--espera{color:var(--ink);font-size:.72rem;margin:6px 0 14px}
.sheet__box--espera{max-width:560px;padding-top:44px;background:#F8F4EC}
.sheet__box--espera .sheet__title{font-size:2.35rem;margin-bottom:10px}
.espera__lema{margin:0 0 20px;font-family:var(--display);font-style:italic;font-size:1.12rem;line-height:1.45;color:var(--ink-80)}
.espera__regalo{display:flex;align-items:center;gap:16px;margin:0 0 18px;padding:14px 18px;
  background:var(--ink);color:#fff;box-shadow:0 18px 40px -22px rgba(22,48,94,.7)}
.espera__pct{font-family:var(--display);font-size:2.6rem;line-height:1;letter-spacing:-.01em;flex:none}
.espera__regalo-txt{display:grid;gap:3px;font-size:.8rem;line-height:1.35}
.espera__regalo-txt b{font-weight:500;letter-spacing:.02em}
.espera__regalo-txt span{font-size:.68rem;letter-spacing:.06em;color:rgba(255,255,255,.72)}
.espera__piezas{display:grid;gap:10px;margin:0 0 16px;padding:12px;border:1px solid var(--line);background:var(--paper)}
.espera__pieza{display:flex;align-items:center;gap:12px;font-size:.78rem;line-height:1.4;color:var(--ink-80)}
.espera__pieza .mini-azulejo{width:52px;height:52px;flex:none;box-shadow:0 6px 14px -8px rgba(22,48,94,.45)}
.espera__pieza .mini-azulejo svg{display:block;width:100%;height:100%}
.espera__pieza b{display:block;font-weight:500;color:var(--ink)}
.espera__precio{display:flex;justify-content:space-between;align-items:baseline;padding-top:10px;border-top:1px solid var(--line);font-size:.74rem;color:var(--ink-55)}
.espera__precio s{margin-right:8px;color:var(--ink-40)}
.espera__precio strong{font-family:var(--display);font-size:1.3rem;font-weight:500;color:var(--ink)}
.espera__ventajas{list-style:none;margin:0 0 18px;padding:0;display:grid;gap:7px}
.espera__ventajas li{position:relative;padding-left:24px;font-size:.8rem;color:var(--ink-80)}
.espera__ventajas li::before{content:"";position:absolute;left:2px;top:.32em;width:11px;height:6px;
  border-left:1.5px solid var(--azure);border-bottom:1.5px solid var(--azure);transform:rotate(-45deg)}
#esperaForm .btn--solid{padding:16px;font-size:.7rem;letter-spacing:.24em}
@media (max-width:760px){
  .sheet__box--espera .sheet__title{font-size:2rem}
  .espera__pct{font-size:2.2rem}
}

/* ── El azulejo en pequeño, al bajar (móvil) ──
   Sin esto se elige el motivo a ciegas: el azulejo se ha quedado arriba y
   lo que se ve son botones. La barra sale sola cuando el escenario se va
   de la pantalla y se esconde al volver.

   Está siempre en el HTML —no se crea ni se destruye— porque aparecer y
   desaparecer con scroll da tirones. Lo que cambia es dónde está y si se
   ve; con visibility, además, deja de estar en el orden de tabulación
   mientras está fuera. */
.mini{display:none}
@media (max-width:1080px){
  .mini{
    /* Por debajo de todo lo que se abre encima —la cesta (40), los avisos
       (30), «ver en mi casa» (60)—: si el cliente abre cualquiera de esos,
       la barra tiene que quedarse detrás, no flotar sobre ellos. */
    position:fixed;top:0;left:0;right:0;z-index:15;
    display:flex;align-items:center;gap:12px;
    width:100%;padding:8px 14px;
    border:0;border-bottom:1px solid var(--hair);
    background:rgba(250,250,248,.94);
    -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
    box-shadow:0 8px 20px -14px rgba(22,48,94,.5);
    font:inherit;color:inherit;text-align:left;cursor:pointer;
    visibility:hidden;transform:translateY(-101%);
    transition:transform .28s cubic-bezier(.4,0,.2,1),visibility 0s .28s;
  }
  .mini.esta-visible{
    visibility:visible;transform:none;
    transition:transform .28s cubic-bezier(.4,0,.2,1),visibility 0s;
  }
}
.mini__pieza{
  flex:none;width:44px;height:44px;border-radius:2px;overflow:hidden;
  box-shadow:0 2px 6px -2px rgba(22,48,94,.35),inset 0 0 0 1px rgba(22,48,94,.1);
}
.mini__pieza svg{display:block;width:100%;height:100%}
/* En modo paño la casilla lleva dentro las nueve piezas, con su llaga. */
.mini__pieza--pano{
  display:grid;gap:1px;background:var(--grout);padding:1px;
  box-shadow:inset 0 0 0 1px rgba(22,48,94,.1);
}
.mini__pieza--pano svg{height:auto}
.mini__txt{min-width:0;flex:1;display:flex;flex-direction:column;gap:1px}
.mini__cap{
  font-size:.78rem;color:var(--ink-80);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.mini__eur{font-size:.72rem;color:var(--ink-55);font-variant-numeric:tabular-nums}
.mini__flecha{flex:none;font-size:.9rem;color:var(--ink-40)}

/* ── El azulejo a pantalla completa ──────────
   La vista previa de un teléfono es pequeña por fuerza: no cabe más. Tocarla
   abre la pieza en todo lo que da la pantalla, que es donde se aprecia el
   grabado. Se cierra tocando en cualquier sitio, con la ✕ o con Escape. */
.stage__pista{display:none}
@media (max-width:1080px){
  .stage__pista{
    display:block;margin:-8px 0 0;text-align:center;
    font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-40);
  }
}
.lupa{
  position:fixed;inset:0;z-index:55;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;
  padding:20px;
  background:rgba(250,250,248,.98);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
  animation:lupaEntra .22s ease-out;
}
.lupa[hidden]{display:none}
@keyframes lupaEntra{from{opacity:0}to{opacity:1}}
/* El ancho lo pone el JS: un paño 2×3 es más alto que ancho y limitándolo
   solo por el ancho de pantalla se saldría por abajo. */
/* max-width:100% otra vez de red: el ancho va en vw y el hueco de verdad es
   el de dentro del padding. Sin esto la pieza se come el margen de la capa. */
.lupa__caja{width:min(92vw,70vh);max-width:100%}
.lupa__caja.es-pieza{
  border-radius:3px;overflow:hidden;
  box-shadow:0 40px 70px -34px rgba(22,48,94,.5),inset 0 0 0 1px rgba(22,48,94,.1);
}
.lupa__caja.es-pano{
  display:grid;gap:2px;background:var(--grout);padding:2px;
  box-shadow:0 40px 70px -34px rgba(22,48,94,.45),inset 0 0 0 1px rgba(22,48,94,.1);
}
.lupa__caja svg{display:block;width:100%;height:auto}
.lupa__pie{margin:0;max-width:92vw;text-align:center;font-size:.88rem;color:var(--ink-55)}
.lupa__cerrar{
  position:absolute;top:14px;right:14px;
  width:40px;height:40px;border:1px solid var(--line);border-radius:50%;
  background:#fff;color:var(--ink-55);font-size:.9rem;line-height:1;cursor:pointer;
}
.lupa__cerrar:hover{color:var(--ink);border-color:var(--ink)}
/* El foco se le pone a mano al abrir, para poder salir con teclado. El anillo
   de serie del navegador es naranja y aquí canta; se cambia por el azul de la
   casa, y solo cuando el navegador cree que hace falta verlo. */
.lupa__cerrar:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.lupa__cerrar:focus:not(:focus-visible){outline:none}
@media (prefers-reduced-motion:reduce){.lupa{animation:none}}

/* ── El texto sobre el azulejo ──────────────── */
.texto__caja{
  display:block;width:100%;min-width:0;box-sizing:border-box;resize:vertical;min-height:84px;
  border:1px solid var(--line);background:var(--paper);padding:11px 13px;
  font:inherit;font-size:.92rem;line-height:1.5;letter-spacing:.01em;color:var(--ink);outline:0;
}
.texto__caja:focus{border-color:var(--ink)}
.texto__caja::placeholder{color:var(--ink-40)}
.texto__cuenta{margin:6px 0 0;font-size:.62rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-40)}
.texto__nota{margin:4px 0 0;min-height:1px;font-size:.66rem;line-height:1.5;color:#B4472F}
.texto__nota:empty{display:none}
.texto__ortografia{margin-top:8px}
.texto__ortografia b{font-weight:500;color:var(--ink)}
.texto__pista{margin-top:12px;padding:10px 12px;background:var(--mist);border-left:2px solid var(--azure)}
.texto__pista .hint{margin:0 0 10px}
.texto__mandos{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.texto__mandos .esq__grupo{margin:14px 0}
.texto__mandos .check{margin-bottom:14px}
.fuentes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.fuente{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  min-height:70px;padding:10px 6px 8px;border:1px solid var(--line);background:var(--paper);
  color:var(--ink);cursor:pointer;transition:.18s;
}
.fuente svg{display:block;height:26px;width:auto;max-width:90%}
.fuente span{font-size:.56rem;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-55)}
.fuente:hover{border-color:var(--ink-40)}
.fuente.is-on{border-color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink)}
.fuente.is-on span{color:var(--ink)}
@media (max-width:420px){.fuentes{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* la frase en la línea de la cesta y en el resumen del pedido */
.linea__texto{
  display:block;margin-top:3px;font-size:.7rem;letter-spacing:.02em;line-height:1.4;color:var(--ink);
  overflow-wrap:anywhere;
}
.sheet__resumen .r-texto{margin:-2px 0 6px 14px;font-size:.74rem;line-height:1.4;color:var(--ink-80);overflow-wrap:anywhere}
