/* ==========================================================================
   Hizjaab — Product detail
   Shared chrome, cards, swatches and size pills come from components.css.
   ========================================================================== */

.pdp-band{background:var(--surface-base);transition:background-color .25s ease;padding-bottom:28px}
.pdp-band .breadcrumb{padding-top:4px}

.pdp{background:var(--surface-inverse);transition:background-color .25s ease;padding:44px 0 88px}
.pdp-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:56px;align-items:start}
@media (max-width:980px){.pdp-grid{grid-template-columns:1fr;gap:36px}}

/* ---------- gallery ----------
   The main frame is capped in absolute terms as well as by ratio: on a tall
   desktop window an unbounded 4:5 box pushed the buy buttons below the fold,
   which is the one thing this page cannot afford. */
.gallery{display:grid;grid-template-columns:72px 1fr;gap:14px}
.gallery-thumbs{display:flex;flex-direction:column;gap:10px}
.gallery-thumb{
  padding:0;border:1px solid var(--surface-inverse-card-border);border-radius:12px;
  overflow:hidden;height:78px;cursor:pointer;background:var(--surface-inverse-card);
  transition:border-color .2s ease,box-shadow .2s ease;
}
.gallery-thumb .img-slot{height:100%;border-radius:0}
.gallery-thumb.is-active{border-color:transparent;box-shadow:0 0 0 2px var(--taupe-400)}

.gallery-main{
  position:relative;border-radius:22px;overflow:hidden;
  background:var(--surface-inverse-media);
  aspect-ratio:1/1.12;
  max-height:520px;
}
.gallery-main .img-slot{height:100%;border-radius:0}
.gallery-main .product-tag{top:14px;left:14px}
.gallery-zoom{
  position:absolute;right:14px;bottom:14px;z-index:2;
  width:36px;height:36px;border-radius:50%;
  background:rgba(20,15,17,.5);border:1px solid rgba(255,255,255,.2);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.gallery-zoom svg{width:15px;height:15px;color:#fff}
.gallery-count{
  position:absolute;left:14px;bottom:14px;z-index:2;
  font-size:11px;letter-spacing:var(--tracking-wide);
  color:#fff;background:rgba(20,15,17,.5);
  border-radius:var(--radius-pill);padding:6px 12px;
}
/* Wishlist lives on the image, not in the buy row — it is a save-for-later
   action and should not compete with the two buttons that drive revenue. */
.gallery-wish{
  position:absolute;right:14px;top:14px;z-index:2;
  width:36px;height:36px;border-radius:50%;
  background:rgba(20,15,17,.5);border:1px solid rgba(255,255,255,.2);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  transition:background-color .2s ease,border-color .2s ease;
}
.gallery-wish svg{width:15px;height:15px;color:#fff}
.gallery-wish.is-active{background:var(--state-error);border-color:transparent}
.gallery-wish.is-active svg{fill:#fff}

/* ---------- mobile swipe gallery ----------
   Stacking four full-width images below the hero shot made the page feel
   endless. On phones the images become a snap carousel instead. */
.gallery-swipe{display:none}
@media (max-width:620px){
  .gallery{grid-template-columns:1fr;gap:0}
  .gallery-thumbs, .gallery-main{display:none}
  .gallery-swipe{display:block;position:relative}
}
.gallery-track{
  display:flex;gap:10px;
  overflow-x:auto;scroll-snap-type:x mandatory;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
}
.gallery-track::-webkit-scrollbar{display:none}
.gallery-slide{
  flex:0 0 100%;scroll-snap-align:center;
  position:relative;border-radius:20px;overflow:hidden;
  aspect-ratio:1/1.1;background:var(--surface-inverse-media);
}
.gallery-slide .img-slot{height:100%;border-radius:0}
.gallery-swipe .product-tag{top:12px;left:12px;z-index:2}
.gallery-swipe .gallery-wish{top:12px;right:12px}
.gallery-dots{display:flex;justify-content:center;align-items:center;gap:7px;margin-top:14px}
.gallery-dot{
  width:7px;height:7px;padding:0;border:none;border-radius:50%;cursor:pointer;
  background:var(--surface-inverse-control-border);
  transition:width .22s ease,background-color .22s ease;
}
.gallery-dot.is-active{width:22px;border-radius:var(--radius-pill);background:var(--taupe-400)}
.gallery-hint{
  display:flex;align-items:center;justify-content:center;gap:6px;
  font-size:11px;color:var(--text-on-base-muted);margin-top:10px;
}
.gallery-hint svg{width:13px;height:13px}

/* ---------- info panel ---------- */
.pdp-info{position:sticky;top:24px}
@media (max-width:980px){.pdp-info{position:static}}

.pdp-eyebrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.pdp-eyebrow .cat{
  font-size:11px;letter-spacing:var(--tracking-wider);text-transform:uppercase;
  color:var(--text-on-base-muted);
}
.fabric-badge{
  display:inline-flex;align-items:center;gap:6px;
  font-size:11px;letter-spacing:var(--tracking-wide);
  color:var(--taupe-400);background:var(--pill-bg);
  border:1px solid var(--pill-border);border-radius:var(--radius-pill);
  padding:5px 12px;
}
.fabric-badge svg{width:12px;height:12px}

.pdp-title{
  font-family:var(--font-display);font-weight:600;
  font-size:clamp(30px,4vw,44px);line-height:var(--leading-snug);
  color:var(--text-on-base-heading);margin:0;
}

.pdp-rating{display:flex;align-items:center;gap:12px;margin:14px 0 0;flex-wrap:wrap}
.stars{display:flex;gap:2px}
.stars svg{width:14px;height:14px;color:var(--taupe-400);fill:var(--taupe-400)}
.stars svg.is-empty{fill:none;opacity:.4}
.pdp-rating .meta{font-size:12px;color:var(--text-on-base-muted)}
.pdp-rating .meta a{color:var(--text-on-base-muted);text-decoration:underline;text-underline-offset:3px}

.pdp-price{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;margin:20px 0 0}
.pdp-price .now{font-family:var(--font-display);font-size:32px;color:var(--text-on-base-heading)}
.pdp-price .was{font-size:15px;color:var(--text-on-base-muted);text-decoration:line-through}
.pdp-price .save{
  font-size:11px;letter-spacing:var(--tracking-wide);text-transform:uppercase;
  background:var(--state-error);color:#fff;border-radius:var(--radius-pill);padding:5px 12px;
}
.pdp-vat{font-size:12px;color:var(--text-on-base-muted);margin:8px 0 0}

.pdp-blurb{
  font-family:var(--font-serif);font-style:italic;font-size:17px;line-height:1.6;
  color:var(--text-on-base-muted);margin:22px 0 0;
}

.pdp-hr{border:none;border-top:1px solid var(--hairline-on-base);margin:26px 0}

/* ---------- options ---------- */
.opt-block + .opt-block{margin-top:24px}
.opt-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:12px}
.opt-head .label{
  font-size:11px;letter-spacing:var(--tracking-wider);text-transform:uppercase;
  color:var(--text-on-base-muted);
}
.opt-head .value{font-size:13px;color:var(--text-on-base-heading)}
.opt-head .link{
  font-size:12px;color:var(--taupe-400);background:none;border:none;cursor:pointer;padding:0;
  display:inline-flex;align-items:center;gap:5px;
}
.opt-head .link svg{width:13px;height:13px}
.opt-head .link:hover{color:var(--text-on-base)}

/* Colour variants show the actual product per colourway — a dot cannot tell
   the customer what mauve looks like on this particular cut.
   The box must be display:block; as a bare <span> it ignored width/height and
   collapsed into a tall inline box. */
.variant-grid{display:flex;flex-wrap:wrap;gap:10px}
.variant{
  width:62px;padding:0;cursor:pointer;background:none;border:none;
}
.variant__box{
  display:block;position:relative;
  width:100%;aspect-ratio:3/4;
  border-radius:12px;overflow:hidden;
  border:1px solid var(--surface-inverse-control-border);
  background:var(--surface-inverse-media);
  transition:border-color .18s ease,box-shadow .18s ease;
}
.variant__box .img-slot{height:100%;border-radius:0;background:var(--surface-inverse-media)}
.variant__box .img-contain{padding:6%}
.variant:hover .variant__box{border-color:var(--taupe-400)}
.variant.is-active .variant__box{
  border-color:transparent;
  box-shadow:0 0 0 2px var(--taupe-400);
}
/* A tick on the selected card reads faster than a ring alone, especially on
   dark colourways where the ring sits close to the garment. */
.variant__check{
  position:absolute;top:5px;right:5px;
  width:17px;height:17px;border-radius:50%;
  background:var(--taupe-400);
  display:none;align-items:center;justify-content:center;
}
.variant.is-active .variant__check{display:flex}
.variant__check svg{width:10px;height:10px;color:var(--plum-950)}
.variant__name{
  display:flex;align-items:center;justify-content:center;gap:5px;
  margin-top:8px;font-size:11px;
  color:var(--text-on-base-muted);
}
.variant.is-active .variant__name{color:var(--text-on-base-heading);font-weight:600}
.variant__dot{
  width:8px;height:8px;border-radius:50%;flex-shrink:0;
  border:1px solid rgba(255,255,255,.35);
}

/* On phones the colourways become a single swipeable row that bleeds to the
   screen edge, so a product with six colours never wraps into a tall block. */
@media (max-width:620px){
  .variant-grid{
    flex-wrap:nowrap;overflow-x:auto;
    scroll-snap-type:x proximity;
    gap:12px;margin:0 -24px;padding:2px 24px 6px;
    scrollbar-width:none;
  }
  .variant-grid::-webkit-scrollbar{display:none}
  .variant{flex:0 0 76px;width:76px;scroll-snap-align:start}
  .variant__name{font-size:12px}
}

.stock-line{display:flex;align-items:center;gap:8px;font-size:12px;margin-top:14px}
.stock-line .dot{width:7px;height:7px;border-radius:50%;background:var(--state-success)}
.stock-line.is-low .dot{background:var(--taupe-600)}
.stock-line.is-out .dot{background:var(--state-error)}
.stock-line span{color:var(--text-on-base-muted)}

/* ---------- quantity ----------
   The stepper itself is a shared component; this only places it in the row.
   Below 520px the label takes its own line — squeezing label, stepper and
   total onto one line was clipping the label on phones. */
.qty-row{
  display:flex;align-items:center;gap:14px;margin-top:24px;min-width:0;
}
.qty-row__label{
  font-size:11px;letter-spacing:var(--tracking-wider);text-transform:uppercase;
  color:var(--text-on-base-muted);white-space:nowrap;
}
.qty-row__total{
  margin-left:auto;font-size:13px;color:var(--text-on-base-muted);white-space:nowrap;
}
.qty-row__total strong{
  font-family:var(--font-display);font-size:17px;color:var(--text-on-base-heading);
  margin-left:6px;font-weight:500;
}
@media (max-width:520px){
  .qty-row{flex-wrap:wrap;gap:10px 14px}
  .qty-row__label{flex:0 0 100%}
}

/* ---------- buy row ----------
   Both actions sit on one line at equal weight: Buy now is filled because it
   is the path most single-item orders take, Add to bag stays outlined. */
.buy-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:16px}
@media (max-width:420px){.buy-row{grid-template-columns:1fr}}

.btn-bag, .btn-buy{
  font-family:var(--font-sans);font-size:12px;font-weight:600;
  letter-spacing:var(--tracking-wide);text-transform:uppercase;
  padding:16px 20px;border-radius:var(--radius-pill);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  transition:background-color .2s ease,border-color .2s ease,color .2s ease;
}
.btn-bag svg, .btn-buy svg{width:15px;height:15px;flex-shrink:0}
.btn-bag{
  background:transparent;color:var(--text-on-base);
  border:1px solid var(--surface-inverse-control-border);
}
.btn-bag:hover{background:var(--pill-bg);border-color:var(--taupe-400)}
.btn-buy{
  background:var(--taupe-400);color:var(--plum-950);border:1px solid transparent;
}
.btn-buy:hover{background:var(--taupe-600);color:#fff}
.btn-bag:disabled, .btn-buy:disabled{opacity:.55;cursor:not-allowed}

.buy-note{
  display:flex;align-items:center;gap:8px;
  font-size:12px;color:var(--text-on-base-muted);margin-top:14px;
}
.buy-note svg{width:14px;height:14px;color:var(--taupe-400);flex-shrink:0}

.help-btn{margin-top:18px}

/* ---------- trust row ---------- */
.pdp-trust{
  display:grid;grid-template-columns:repeat(3,1fr);gap:16px;
  border-top:1px solid var(--hairline-on-base);
  border-bottom:1px solid var(--hairline-on-base);
  margin-top:28px;padding:22px 0;
}
@media (max-width:560px){.pdp-trust{grid-template-columns:1fr;gap:14px}}
.trust-item{display:flex;gap:11px;align-items:flex-start}
.trust-item svg{width:17px;height:17px;color:var(--taupe-400);flex-shrink:0;margin-top:1px}
.trust-item strong{display:block;font-size:12px;font-weight:600;color:var(--text-on-base-heading)}
.trust-item span{font-size:11px;color:var(--text-on-base-muted);line-height:1.45}

/* ---------- accordion ---------- */
.acc{margin-top:8px}
.acc-item{border-bottom:1px solid var(--hairline-on-base)}
.acc-head{
  width:100%;display:flex;justify-content:space-between;align-items:center;gap:16px;
  background:none;border:none;cursor:pointer;padding:20px 0;
  font-family:var(--font-sans);font-size:13px;letter-spacing:var(--tracking-wide);
  text-transform:uppercase;color:var(--text-on-base-heading);text-align:left;
}
.acc-head svg{width:16px;height:16px;color:var(--text-on-base-muted);transition:transform .22s ease;flex-shrink:0}
.acc-item.is-open .acc-head svg{transform:rotate(45deg)}
.acc-body{display:none;padding:0 0 22px}
.acc-item.is-open .acc-body{display:block}
.acc-body p{font-size:14px;line-height:1.7;color:var(--text-on-base-muted);margin:0 0 14px}
.acc-body p:last-child{margin-bottom:0}
.acc-body ul{margin:0;padding-left:18px}
.acc-body li{font-size:14px;line-height:1.7;color:var(--text-on-base-muted);margin-bottom:6px}

/* ---------- highlights band ---------- */
.pdp-highlights{background:var(--cream-100);padding:72px 0}
.highlight-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:32px}
@media (max-width:860px){.highlight-grid{grid-template-columns:1fr;gap:28px}}
.highlight-card{display:flex;gap:18px;align-items:flex-start}
.highlight-card .ring{
  width:54px;height:54px;border:1px solid var(--border-subtle);border-radius:50%;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
}
.highlight-card .ring svg{width:21px;height:21px;color:var(--umber-600)}
.highlight-card h3{font-family:var(--font-display);font-size:20px;color:var(--text-primary);margin:0 0 7px}
.highlight-card p{font-size:13px;line-height:1.6;color:var(--text-muted);margin:0}

/* ---------- reviews ---------- */
.pdp-reviews{background:var(--surface-inverse);transition:background-color .25s ease;padding:80px 0}
.reviews-grid{display:grid;grid-template-columns:300px 1fr;gap:44px;align-items:start}
@media (max-width:900px){.reviews-grid{grid-template-columns:1fr;gap:28px}}
.review-summary{
  background:var(--surface-inverse-card);border:1px solid var(--surface-inverse-card-border);
  border-radius:25px;padding:28px;
  transition:background-color .25s ease,border-color .25s ease;
}
.review-summary .score{font-family:var(--font-display);font-size:52px;line-height:1;color:var(--text-on-base-heading)}
.review-summary .out{font-size:13px;color:var(--text-on-base-muted);margin-left:6px}
.review-summary .stars{margin:14px 0 6px}
.review-summary .total{font-size:12px;color:var(--text-on-base-muted)}
.bar-row{display:flex;align-items:center;gap:10px;margin-top:11px}
.bar-row .n{font-size:11px;color:var(--text-on-base-muted);width:12px}
.bar-row .track{flex:1;height:4px;border-radius:var(--radius-pill);background:var(--surface-inverse-control-border)}
.bar-row .track span{display:block;height:100%;border-radius:var(--radius-pill);background:var(--taupe-400)}
.bar-row .pct{font-size:11px;color:var(--text-on-base-muted);width:30px;text-align:right}
.review-summary .btn-ghost{width:100%;justify-content:center;margin-top:24px}

.review-list{display:grid;gap:16px}
.review-card{
  background:var(--surface-inverse-card);border:1px solid var(--surface-inverse-card-border);
  border-radius:25px;padding:24px 26px;
  transition:background-color .25s ease,border-color .25s ease;
}
.review-card__head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}
.review-card__who{display:flex;align-items:center;gap:12px}
.review-avatar{
  width:38px;height:38px;border-radius:50%;flex-shrink:0;
  background:var(--surface-inverse-media);border:1px solid var(--surface-inverse-control-border);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-display);font-size:15px;color:var(--taupe-400);
}
.review-card__name{font-size:13px;color:var(--text-on-base-heading)}
.review-card__meta{font-size:11px;color:var(--text-on-base-muted);margin-top:2px}
.review-card__verified{
  display:inline-flex;align-items:center;gap:5px;
  font-size:10px;letter-spacing:var(--tracking-wide);text-transform:uppercase;
  color:var(--state-success);
}
.review-card__verified svg{width:12px;height:12px}
.review-card h4{font-family:var(--font-display);font-size:17px;color:var(--text-on-base-heading);margin:16px 0 7px}
.review-card p{font-size:14px;line-height:1.65;color:var(--text-on-base-muted);margin:0}

/* ---------- related ---------- */
.pdp-related{background:var(--surface-inverse);transition:background-color .25s ease;padding:0 0 96px}

/* Modal, contact popup and toast styles live in components.css — checkout
   reuses the same dialogs. */

/* ---------- mobile sticky buy bar ---------- */
.buy-bar{
  position:fixed;left:0;right:0;bottom:0;z-index:35;
  display:none;align-items:center;gap:14px;
  padding:12px 20px calc(12px + env(safe-area-inset-bottom));
  background:var(--surface-inverse-card);
  border-top:1px solid var(--surface-inverse-card-border);
  box-shadow:0 -8px 28px rgba(20,12,16,.28);
}
.buy-bar__price{flex-shrink:0}
.buy-bar__price .n{font-family:var(--font-display);font-size:19px;color:var(--text-on-base-heading)}
.buy-bar__price .l{font-size:10px;color:var(--text-on-base-muted)}
.buy-bar .btn-buy{padding:15px 24px;min-width:0;flex:1}
.buy-bar .icon-btn{flex-shrink:0;width:48px;height:48px}
.buy-bar .icon-btn svg{width:18px;height:18px}
@media (max-width:760px){
  .buy-bar{display:flex}
  .pdp-related{padding-bottom:130px}
}

@media (max-width:760px){.toast{bottom:96px}}
