/* ═══════════════════════════════════════════════════════
   NALANI — configurator
   Loads after styles.css and inherits every brand token.
   ═══════════════════════════════════════════════════════ */

.cfg{
  display:grid;
  grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);
  gap:clamp(2rem,4vw,4.5rem);
  max-width:var(--maxw);
  margin-inline:auto;
  padding:clamp(7rem,10vw,9rem) var(--pad) clamp(4rem,8vw,7rem);
  align-items:start;
}
@media (max-width:980px){
  .cfg{grid-template-columns:1fr;padding-top:6.5rem}
}

/* ─── left: live drawing ───────────────────────────── */
.cfg__view{position:sticky;top:6rem}
@media (max-width:980px){.cfg__view{position:static}}

.stage{
  --wood:#A9662F;--grain:#8A5124;
  background:
    radial-gradient(120% 90% at 50% 12%,rgba(198,161,90,.10),transparent 60%),
    var(--ink-2);
  border:1px solid var(--line-2);
  padding:clamp(1.6rem,4vw,3rem) clamp(1.2rem,3vw,2.4rem) clamp(2rem,4vw,3rem);
  display:grid;
  place-items:center;
  min-height:clamp(19rem,32vw,26rem);
  overflow:hidden;
}

/* the tub elevation. --ratio is width ÷ height, set per model. */
.tub{
  --ratio:2.46;
  width:min(100%,calc(var(--ratio) * 8.2rem));
  transition:width .55s var(--ease);
  filter:drop-shadow(0 22px 40px rgba(0,0,0,.5));
}

.tub__body{
  position:relative;
  aspect-ratio:var(--ratio);
  background:
    repeating-linear-gradient(90deg,
      transparent 0 calc(100% / 22 - 1px),
      color-mix(in srgb,var(--grain) 70%,transparent) calc(100% / 22 - 1px) calc(100% / 22)),
    linear-gradient(178deg,
      color-mix(in srgb,var(--wood) 88%,white) 0%,
      var(--wood) 34%,
      color-mix(in srgb,var(--grain) 60%,var(--wood)) 100%);
  border:1px solid color-mix(in srgb,var(--grain) 80%,black);
  border-radius:3px;
  transition:background .5s var(--ease),border-color .5s var(--ease);
  display:grid;
  place-items:center;
}
/* the lid lip */
.tub__body::before{
  content:"";position:absolute;inset:0 0 auto;height:11%;
  background:linear-gradient(180deg,
    color-mix(in srgb,var(--wood) 94%,white),
    color-mix(in srgb,var(--grain) 45%,var(--wood)));
  border-bottom:1px solid color-mix(in srgb,var(--grain) 85%,black);
}
/* sun glare across the panel */
.tub__body::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(104deg,transparent 38%,rgba(255,235,200,.16) 50%,transparent 62%);
}

/* engraved area */
.brandplate{
  position:relative;z-index:2;
  display:grid;place-items:center;gap:.5em;
  translate:0 6%;
  width:min(70%,22rem);
}
.markLayer{
  width:clamp(34px,4.4vw,60px);height:clamp(30px,3.8vw,52px);
  color:color-mix(in srgb,var(--grain) 55%,black);
  display:grid;place-items:center;
}
.markLayer svg{width:100%;height:100%}
/* once a logo is uploaded the gate hides and the image engraves */
.markLayer.is-custom{
  background-repeat:no-repeat;background-position:center;background-size:contain;
  width:clamp(52px,7vw,96px);height:clamp(40px,5.4vw,74px);
  filter:sepia(1) saturate(.5) brightness(.32) contrast(1.3);
  mix-blend-mode:multiply;opacity:.92;
}
.markLayer.is-custom svg{display:none}

.nameLayer{
  font-family:var(--serif);
  font-size:clamp(.52rem,1.15vw,.86rem);
  letter-spacing:.26em;text-transform:uppercase;
  color:color-mix(in srgb,var(--grain) 45%,black);
  mix-blend-mode:multiply;
  text-shadow:0 1px 0 color-mix(in srgb,var(--wood) 70%,white);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;
  padding-left:.34em;
}

/* the two steps */
.tub__steps{display:grid;gap:2px;margin-top:2px}
.tub__step{
  height:clamp(9px,1.5vw,17px);
  background:linear-gradient(180deg,
    color-mix(in srgb,var(--wood) 92%,white),
    color-mix(in srgb,var(--grain) 55%,var(--wood)));
  border:1px solid color-mix(in srgb,var(--grain) 80%,black);
  border-radius:2px;
  transition:background .5s var(--ease);
}
.tub__step:nth-child(1){margin-inline:6%}
.tub__step:nth-child(2){margin-inline:2%}

.stage__cap{
  margin:1.4rem 0 0;text-align:center;
  font-size:.76rem;letter-spacing:.14em;text-transform:uppercase;color:var(--txt-faint);
}

/* real photos under the drawing */
.realstrip{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;margin-top:2px}
.realstrip img{width:100%;aspect-ratio:1;object-fit:cover;filter:saturate(.92)}

/* ─── right: the controls ──────────────────────────── */
.cfg__form{min-width:0}

.step{margin-bottom:clamp(2.2rem,4vw,3.2rem)}
.step__h{
  display:flex;align-items:baseline;gap:.85rem;
  padding-bottom:.9rem;margin-bottom:1.2rem;
  border-bottom:1px solid var(--line-2);
}
.step__n{
  font-size:.68rem;letter-spacing:.24em;color:var(--gold);
  font-variant-numeric:tabular-nums;
}
.step__h h2{
  font-size:clamp(1.25rem,1.1rem + .6vw,1.6rem);
  margin:0;color:var(--sand);
}
.step__note{margin:-.4rem 0 1.2rem;font-size:.87rem;color:var(--txt-faint)}

.opts{display:grid;gap:.6rem}
.opts--2{grid-template-columns:1fr 1fr}
@media (max-width:520px){.opts--2{grid-template-columns:1fr}}

.opt{
  position:relative;text-align:left;width:100%;
  display:grid;gap:.28rem;
  padding:1.05rem 3.2rem 1.05rem 1.15rem;
  background:var(--ink-2);
  border:1px solid var(--line-2);
  transition:border-color .3s var(--ease),background .3s var(--ease);
}
.opt:hover{border-color:rgba(198,161,90,.4)}
.opt.is-on{border-color:var(--gold);background:var(--ink-3)}
.opt__t{font-size:.98rem;color:var(--sand);line-height:1.3}
.opt__m{font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;color:var(--gold)}
.opt__d{font-size:.84rem;color:var(--txt-faint);line-height:1.5}
.opt__p{
  position:absolute;top:1.05rem;right:1.15rem;
  font-size:.82rem;color:var(--txt-dim);font-variant-numeric:tabular-nums;
}
.opt.is-on .opt__p{color:var(--gold)}

/* wood swatch */
.opt--wood{padding-left:3.9rem}
.sw{
  position:absolute;left:1.15rem;top:1.15rem;
  width:2rem;height:2rem;border-radius:50%;
  background:
    repeating-linear-gradient(74deg,transparent 0 3px,color-mix(in srgb,var(--sw2) 75%,transparent) 3px 4px),
    linear-gradient(150deg,color-mix(in srgb,var(--sw) 88%,white),var(--sw) 55%,var(--sw2));
  box-shadow:0 0 0 1px rgba(0,0,0,.45) inset;
}

/* checkbox-style extras */
.opt--check{padding-left:3.4rem}
.tick{
  position:absolute;left:1.15rem;top:1.2rem;
  width:1.35rem;height:1.35rem;
  border:1px solid var(--line);
  transition:background .25s var(--ease),border-color .25s var(--ease);
}
.opt--check.is-on .tick{background:var(--gold);border-color:var(--gold)}
.opt--check.is-on .tick::after{
  content:"";position:absolute;left:.42rem;top:.16rem;
  width:.34rem;height:.68rem;
  border:solid var(--ink);border-width:0 2px 2px 0;rotate:45deg;
}

/* custom stain row */
.stain{
  display:flex;align-items:center;gap:1rem;flex-wrap:wrap;
  margin-top:.75rem;padding:1rem 1.15rem;
  background:var(--ink-3);border:1px solid var(--line-2);
}
.stain label{font-size:.8rem;letter-spacing:.16em;text-transform:uppercase;color:var(--txt-faint)}
.stain input[type=color]{
  inline-size:3.6rem;block-size:2.4rem;padding:0;cursor:pointer;
  background:none;border:1px solid var(--line);
}
.stain input[type=color]::-webkit-color-swatch-wrapper{padding:3px}
.stain input[type=color]::-webkit-color-swatch{border:none}
.stain code{
  font-size:.85rem;color:var(--gold);letter-spacing:.08em;
  font-variant-numeric:tabular-nums;
}

/* text + file inputs */
.field{display:block;margin-bottom:1rem}
.field span{
  display:block;margin-bottom:.55rem;
  font-size:.7rem;letter-spacing:.22em;text-transform:uppercase;color:var(--txt-faint);
}
.field input[type=text]{
  width:100%;padding:.95rem 1.1rem;
  background:rgba(231,226,215,.04);border:1px solid var(--line);
  color:var(--sand);font-family:var(--sans);font-size:.98rem;font-weight:300;
}
.field input[type=text]:focus{outline:none;border-color:var(--gold);background:rgba(231,226,215,.07)}

.drop{
  display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;
  padding:1.3rem 1.15rem;
  background:rgba(231,226,215,.03);
  border:1px dashed var(--line);
  transition:border-color .3s var(--ease);
}
.drop:hover{border-color:var(--gold)}
.drop input[type=file]{
  font-size:.85rem;color:var(--txt-dim);max-width:100%;
}
.drop input[type=file]::file-selector-button{
  margin-right:1rem;padding:.6rem 1.1rem;cursor:pointer;
  background:transparent;color:var(--gold);
  border:1px solid rgba(198,161,90,.5);
  font-family:var(--sans);font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;
}
.drop input[type=file]::file-selector-button:hover{background:var(--gold);color:var(--ink)}

.note{margin:.8rem 0 0;font-size:.84rem;color:var(--txt-faint)}
.note--ok{color:var(--gold-lt)}
.note--err{color:#E09070}

.linkbtn{
  font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--txt-faint);border-bottom:1px solid var(--line);padding-bottom:.2rem;
}
.linkbtn:hover{color:var(--gold);border-color:var(--gold)}

/* ─── summary ──────────────────────────────────────── */
.summary{
  background:var(--ink-2);
  border:1px solid var(--line-2);
  border-top:2px solid var(--gold);
  padding:clamp(1.5rem,3vw,2.2rem);
}
.summary h3{font-size:1.3rem;margin-bottom:1.2rem}

.summary dl{margin:0 0 1.4rem}
.summary dl>div{
  display:flex;justify-content:space-between;gap:1.2rem;
  padding:.62rem 0;border-bottom:1px solid var(--line-2);
}
.summary dt{color:var(--txt-faint);font-size:.85rem;flex:none}
.summary dd{
  margin:0;text-align:right;color:var(--sand);font-size:.9rem;
  font-variant-numeric:tabular-nums;
}

.total{
  display:flex;align-items:baseline;justify-content:space-between;gap:1rem;
  padding:1.2rem 0 .4rem;border-top:1px solid rgba(198,161,90,.35);
}
.total__l{font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;color:var(--txt-faint)}
.total__v{
  font-family:var(--serif);font-size:clamp(1.7rem,1.3rem + 1.5vw,2.5rem);
  color:var(--gold);line-height:1;font-variant-numeric:tabular-nums;
}
.total__n{margin:.2rem 0 1.6rem;font-size:.8rem;color:var(--txt-faint)}

.acts{display:grid;gap:.7rem}
.acts .btn{justify-content:center}
.acts__row{display:flex;gap:.7rem;flex-wrap:wrap}
.acts__row .btn{flex:1}

.included{list-style:none;margin:1.8rem 0 0;padding:1.4rem 0 0;border-top:1px solid var(--line-2)}
.included li{
  position:relative;padding:.3rem 0 .3rem 1.4rem;
  font-size:.85rem;color:var(--txt-faint);
}
.included li::before{
  content:"";position:absolute;left:0;top:.85rem;
  width:5px;height:5px;border:1px solid var(--gold);rotate:45deg;
}

/* ─── sticky mobile price bar ──────────────────────── */
.bar{
  position:fixed;inset:auto 0 0;z-index:90;
  display:none;align-items:center;justify-content:space-between;gap:1rem;
  padding:.85rem var(--pad);
  background:rgba(18,16,14,.94);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-top:1px solid var(--line-2);
  transform:translateY(100%);transition:transform .4s var(--ease);
}
.bar.is-up{transform:none}
.bar__v{font-family:var(--serif);font-size:1.35rem;color:var(--gold);line-height:1}
.bar__l{font-size:.64rem;letter-spacing:.2em;text-transform:uppercase;color:var(--txt-faint)}
@media (max-width:980px){.bar{display:flex}}

@media (prefers-reduced-motion:reduce){
  .tub,.tub__body,.tub__step,.bar{transition:none}
}
