/* ==========================================================================
   Durd — home & hotel textile storefront
   --------------------------------------------------------------------------
   Layered ON TOP of Bootstrap 5.3.8, which OpenCart 4.1 already loads. Nothing
   here edits a core file; every template that uses these classes lives in
   extension/ocmod/. Bootstrap stays because the pages this theme does not
   restyle (account, information, returns) must still look deliberate.

   Two storefronts share this sheet. The wholesale showcase is the same design
   with the money removed: <body class="durd-wholesale"> is the only switch.
   ========================================================================== */

/* ---------------------------------------------------------------- fonts
   Self-hosted, not loaded from Google. A Turkish shop that pulls fonts from a
   third party sends every visitor's IP address there on every page view, which
   is a KVKK question we do not need to answer. Two subsets each: `latin` alone
   is missing the Turkish letters, so the shop's own copy would fall back
   mid-word.

   One family for the whole shop now. The Fraunces/Inter pair was retired in the
   2026-09-01 redesign and their files deleted, so nothing may reference them. */

/* 200 and 300 were added 2026-09-03: the wordmark, page heads, category tile
   titles and their Keşfet row were all set at 600-700, which the operator read
   as too heavy for a textile shop. Light is now the display weight. */

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-200-latin.woff2') format('woff2');
  font-weight: 200;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-200-latin-ext.woff2') format('woff2');
  font-weight: 200;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-300-latin.woff2') format('woff2');
  font-weight: 300;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-300-latin-ext.woff2') format('woff2');
  font-weight: 300;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-400-latin.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-400-latin-ext.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-500-latin.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-500-latin-ext.woff2') format('woff2');
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-600-latin.woff2') format('woff2');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-600-latin-ext.woff2') format('woff2');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-700-latin.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins-700-latin-ext.woff2') format('woff2');
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* ---------------------------------------------------------------- tokens */

/* The 2026-09-01 redesign moved the shop off the warm cream/green palette onto
   a white ground with black type. The reference the operator chose is built on
   three surfaces (white, #f5f5f5 grey, #f0f5f9 pale blue) and one ink.

   Token NAMES are kept: --durd-green is still "the primary action colour", it
   is simply black now. Renaming it would have touched sixty call sites across
   this sheet for no behavioural gain. */

:root {
  color-scheme: light;

  --durd-bg: #ffffff;
  --durd-bg-deep: #f5f5f5;
  --durd-surface: #ffffff;
  --durd-surface-2: #fafafa;
  --durd-line: #e5e5e5;
  --durd-line-strong: #d4d4d4;

  /* The pale blue band: hero, footer, and the quiet full-bleed sections. */
  --durd-band: #f0f5f9;

  --durd-ink: #000000;
  --durd-ink-2: #888888;
  --durd-ink-3: #a8a8a8;

  --durd-green: #000000;
  --durd-green-hover: #262626;
  --durd-green-soft: #f0f5f9;

  /* The one warm accent: item counts, discount flags. Used sparingly. */
  --durd-clay: #dc512c;
  --durd-clay-soft: #fdeeea;

  --durd-danger: #c0392b;

  /* Square blocks, pill buttons — the reference draws no rounded cards. */
  --durd-radius: 0px;
  --durd-radius-sm: 0px;
  --durd-radius-xs: 0px;
  --durd-pill: 999px;

  --durd-shadow: none;
  --durd-shadow-lift: 0 10px 30px rgba(0, 0, 0, .08);

  --durd-sans: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  /* Kept as an alias so templates asking for the display face still resolve. */
  --durd-serif: var(--durd-sans);

  /* Display weights, one place. The shop shipped every heading, the wordmark and
     the category tile titles at 700, which the operator read as too heavy for a
     textile brand (2026-09-03). Light carries the display type now; the wordmark
     stays a step heavier because it is set small in the header and Light loses
     its stroke at 1.35rem. Change these two numbers to retune the whole shop. */
  --durd-w-display: 300;
  --durd-w-brand: 400;
  /* The emphasis weight. Everything that used to be 600 or 700 in the shop
     chrome — buttons, active nav, prices, table values, form labels — is one
     step of Medium now, so nothing on the page shouts next to Light display
     type. Hierarchy is carried by SIZE from here on, not by weight. */
  --durd-w-strong: 500;

  --durd-header-h: 62px;

  /* Bootstrap retheme, so pages this theme does not touch inherit the palette. */
  --bs-body-bg: var(--durd-bg);
  --bs-body-color: var(--durd-ink);
  --bs-body-font-family: var(--durd-sans);
  --bs-primary: #000000;
  --bs-primary-rgb: 0, 0, 0;
  --bs-link-color: #000000;
  --bs-link-color-rgb: 0, 0, 0;
  --bs-link-hover-color: #dc512c;
  --bs-border-color: var(--durd-line);
  --bs-border-radius: 0px;
  --bs-focus-ring-color: rgba(0, 0, 0, .25);
}

@media (min-width: 992px) {
  :root { --durd-header-h: 84px; }
}

/* ---------------------------------------------------------------- base */

* { -webkit-tap-highlight-color: rgba(30, 77, 59, .12); }

html { -webkit-text-size-adjust: 100%; }

body {
  background: var(--durd-bg);
  color: var(--durd-ink);
  font-family: var(--durd-sans);
  font-size: 14px;
  line-height: 1.8;
  letter-spacing: 0;
  overflow-x: hidden;
  touch-action: manipulation;
  padding-bottom: env(safe-area-inset-bottom);
}

h1, h2, h3, h4, h5, .durd-display {
  font-family: var(--durd-serif);
  font-weight: var(--durd-w-display);
  letter-spacing: .2px;
  line-height: 1.25;
  text-wrap: balance;
  color: var(--durd-ink);
}

h1 { font-size: clamp(1.6rem, 1.15rem + 2vw, 2.5rem); }
h2 { font-size: clamp(1.35rem, 1.1rem + 1.1vw, 1.75rem); }
h3 { font-size: 1.15rem; }
h4, h5 { font-size: 1rem; }

a { text-decoration: none; }
a:hover { text-decoration: underline; text-underline-offset: 3px; }

hr { border-color: var(--durd-line); opacity: 1; }

/* Prices and every other figure the eye has to compare down a column. */
.durd-num, .price, .price-new, .price-old, .durd-price, td.text-end, .durd-total td:last-child {
  font-variant-numeric: tabular-nums;
}

/* --- focus. Never removed, only replaced. ------------------------------- */

:focus-visible {
  outline: 2px solid var(--durd-green);
  outline-offset: 2px;
  border-radius: var(--durd-radius-xs);
}

.btn:focus-visible,
.form-control:focus-visible,
.form-select:focus-visible {
  outline: 2px solid var(--durd-green);
  outline-offset: 2px;
  box-shadow: none;
}

.durd-skip {
  position: absolute;
  left: 12px;
  top: -100px;
  z-index: 1080;
  background: var(--durd-green);
  color: #fff;
  padding: .7rem 1.1rem;
  border-radius: var(--durd-radius-xs);
  transition: top .15s ease;
}

.durd-skip:focus { top: 12px; color: #fff; text-decoration: none; }

/* An in-page anchor (#content from the skip link, #durd-reviews from the rating
   line) lands under the sticky header without this — the visitor jumps to the
   right place and sees the wrong thing. Keyboard focus is moved by the same
   scrolling, so both cases are covered. */
:target,
[id],
:focus-visible { scroll-margin-top: calc(var(--durd-header-h) + 16px); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}

/* ---------------------------------------------------------------- buttons */

.btn {
  --bs-btn-border-radius: var(--durd-pill);
  font-family: var(--durd-sans);
  /* Regular, not the emphasis weight — operator, 2026-09-03. A button is already
     marked out by its pill and its fill; it does not also need to be heavier than
     the sentence next to it. The primary CTA still reads as primary because it is
     white on black, which is a stronger signal than 100 units of weight. */
  font-weight: 400;
  letter-spacing: -.01em;
  padding: .62rem 1.35rem;
  border-radius: var(--durd-pill);
  transition: background-color .18s ease, color .18s ease, border-color .18s ease, transform .12s ease;
}

.btn:active { transform: translateY(1px); }

.btn-primary,
.btn-durd {
  background: var(--durd-green);
  border-color: var(--durd-green);
  color: #fff;
}

.btn-primary:hover, .btn-primary:focus,
.btn-durd:hover, .btn-durd:focus {
  background: var(--durd-green-hover);
  border-color: var(--durd-green-hover);
  color: #fff;
}

.btn-outline-durd {
  background: transparent;
  border: 1px solid var(--durd-line-strong);
  color: var(--durd-ink);
}

.btn-outline-durd:hover, .btn-outline-durd:focus {
  background: var(--durd-ink);
  border-color: var(--durd-ink);
  color: #fff;
}

.btn-light, .btn-secondary, .btn-default {
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  color: var(--durd-ink);
}

.btn-light:hover, .btn-secondary:hover, .btn-default:hover {
  background: var(--durd-bg-deep);
  border-color: var(--durd-line-strong);
  color: var(--durd-ink);
}

.btn-danger {
  background: var(--durd-danger);
  border-color: var(--durd-danger);
}

.btn-lg { padding: .85rem 1.7rem; font-size: 1rem; }
.btn-sm { padding: .4rem .9rem; font-size: .85rem; }

/* Icon-only round button (search toggle, cart, remove-from-cart). */
.durd-icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  padding: 0;
  border: 1px solid transparent;
  border-radius: var(--durd-pill);
  background: transparent;
  color: var(--durd-ink);
  position: relative;
  transition: background-color .18s ease, color .18s ease;
}

.durd-icon-btn:hover { background: var(--durd-bg-deep); color: var(--durd-ink); }

.durd-badge {
  position: absolute;
  top: 2px;
  inset-inline-end: 0;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: var(--durd-pill);
  background: var(--durd-clay);
  color: #fff;
  font-size: 11px;
  font-weight: var(--durd-w-strong);
  line-height: 18px;
  text-align: center;
  font-variant-numeric: tabular-nums;
}

/* ---------------------------------------------------------------- forms */

.form-control, .form-select {
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius-sm);
  background-color: var(--durd-surface);
  color: var(--durd-ink);
  padding: .68rem .9rem;
  font-size: 15px;
  /* Light, to match the display face. Fields carry a border and a background of
     their own, so the type inside them does not have to do the work of saying
     "this is a control". */
  font-weight: var(--durd-w-display);
  transition: border-color .18s ease, box-shadow .18s ease;
}

.form-control::placeholder { color: var(--durd-ink-3); }

.form-control:focus, .form-select:focus {
  border-color: var(--durd-green);
  box-shadow: 0 0 0 3px rgba(30, 77, 59, .12);
  background-color: var(--durd-surface);
  color: var(--durd-ink);
}

/* Windows dark mode paints native selects black-on-black without this. */
.form-select { background-color: var(--durd-surface); color: var(--durd-ink); }
.form-select option { background-color: var(--durd-surface); color: var(--durd-ink); }

label, .col-form-label, .form-label { font-weight: var(--durd-w-strong); color: var(--durd-ink); }

.form-check-input { border-color: var(--durd-line-strong); }
.form-check-input:checked { background-color: var(--durd-green); border-color: var(--durd-green); }
.form-check-input:focus-visible { outline: 2px solid var(--durd-green); outline-offset: 2px; box-shadow: none; }
/* One hit target: the label sits next to the box with no dead gap.
   The negative margin is scoped to a `.form-check` PARENT on purpose. Unscoped it
   also hit every bare `.form-check-input`, and upstream emits five of those with no
   wrapper at all in the product page's rating row (`#input-rating`) — so the five
   radios were each pulled 1.9em left, stacked on top of one another and over the
   "Kötü" label. The rating was unpickable: a customer could not leave a review.
   Found 2026-09-02 by walking the inner pages. */
.form-check { padding-left: 1.9em; min-height: 1.9rem; }
.form-check > .form-check-input { margin-left: -1.9em; }
.form-check-input { width: 1.15em; height: 1.15em; margin-top: .25em; }
.form-check-label { cursor: pointer; padding-left: .1rem; }

.input-group-text {
  background: var(--durd-surface-2);
  border-color: var(--durd-line);
  color: var(--durd-ink-2);
}

.invalid-feedback { color: var(--durd-danger); font-size: .85rem; }
.was-validated .form-control:invalid, .form-control.is-invalid { border-color: var(--durd-danger); }

/* ---------------------------------------------------------------- shell */

#container { display: flex; flex-direction: column; min-height: 100vh; }
main { flex: 1 0 auto; }

/* The toast is a child of .durd-header (see common/header.twig) and hangs off
   its bottom edge, so it clears the header whether the page is scrolled or not.
   Anchored to the viewport at `top: var(--durd-header-h)` it covered the header
   at scroll 0 — the announcement strip above the header is not counted in that
   variable, and scroll 0 is exactly where an Add to Cart happens. */
#alert {
  position: absolute;
  top: calc(100% + 12px);
  inset-inline: 0;
  z-index: 1090;
  margin-inline: auto;
  width: min(560px, calc(100% - 24px));
  pointer-events: none;
}

#alert .alert { pointer-events: auto; box-shadow: var(--durd-shadow-lift); }

.alert {
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius-sm);
  background: var(--durd-surface);
  color: var(--durd-ink);
}

.alert-success { border-inline-start: 4px solid var(--durd-green); }
.alert-danger { border-inline-start: 4px solid var(--durd-danger); color: var(--durd-danger); }

/* --- announcement strip ------------------------------------------------- */

.durd-announce {
  background: var(--durd-green);
  color: #e9f0eb;
  font-size: 13px;
  padding: .5rem 0;
  padding-top: calc(.5rem + env(safe-area-inset-top));
}

.durd-announce a { color: #fff; text-decoration: underline; text-underline-offset: 3px; }
.durd-announce a:hover { color: #fff; }

/* --- header ------------------------------------------------------------- */

.durd-header {
  position: sticky;
  top: 0;
  z-index: 1030;
  background: rgba(247, 242, 234, .92);
  backdrop-filter: saturate(160%) blur(12px);
  border-bottom: 1px solid var(--durd-line);
}

.durd-header__bar {
  display: flex;
  align-items: center;
  gap: .35rem;
  height: var(--durd-header-h);
}

.durd-wordmark {
  font-family: var(--durd-serif);
  font-size: 1.35rem;
  font-weight: var(--durd-w-strong);
  letter-spacing: -.02em;
  color: var(--durd-ink);
  white-space: nowrap;
  margin: 0;
  line-height: 1;
}

.durd-wordmark a { color: inherit; }
.durd-wordmark a:hover { color: var(--durd-green); text-decoration: none; }

.durd-wordmark__sub {
  display: block;
  font-family: var(--durd-sans);
  font-size: 10px;
  font-weight: 500;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--durd-ink-3);
  margin-top: 3px;
}

@media (min-width: 992px) {
  .durd-wordmark { font-size: 1.6rem; }
}

.durd-header__actions { display: flex; align-items: center; gap: .15rem; margin-inline-start: auto; }

/* --- category pill nav -------------------------------------------------- */

.durd-nav { border-bottom: 1px solid var(--durd-line); background: var(--durd-bg); }

.durd-nav__scroll {
  display: flex;
  gap: .4rem;
  padding: .6rem 0;
  overflow-x: auto;
  scrollbar-width: none;
  overscroll-behavior-x: contain;
}

.durd-nav__scroll::-webkit-scrollbar { display: none; }

.durd-pill {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  flex: 0 0 auto;
  padding: .45rem 1rem;
  border: 1px solid var(--durd-line-strong);
  border-radius: var(--durd-pill);
  background: var(--durd-surface);
  color: var(--durd-ink);
  font-size: 14px;
  font-weight: 400;
  white-space: nowrap;
  transition: background-color .18s ease, color .18s ease, border-color .18s ease;
}

.durd-pill:hover { background: var(--durd-ink); border-color: var(--durd-ink); color: #fff; text-decoration: none; }
.durd-pill[aria-current="page"], .durd-pill.is-active { background: var(--durd-ink); border-color: var(--durd-ink); color: #fff; }

/* --- offcanvas / dropdown ---------------------------------------------- */

.offcanvas, .dropdown-menu {
  background: var(--durd-surface);
  border-color: var(--durd-line);
  border-radius: var(--durd-radius);
  box-shadow: var(--durd-shadow-lift);
  overscroll-behavior: contain;
}

.offcanvas { border-radius: 0; }
.offcanvas-header { border-bottom: 1px solid var(--durd-line); }
.offcanvas-title { font-family: var(--durd-serif); }

.dropdown-menu { padding: .5rem; min-width: 240px; }

.dropdown-item {
  border-radius: var(--durd-radius-xs);
  padding: .5rem .7rem;
  color: var(--durd-ink);
  white-space: normal;
}

.dropdown-item:hover, .dropdown-item:focus { background: var(--durd-bg-deep); color: var(--durd-ink); }

/* Mobile menu tree */
.durd-menu__group + .durd-menu__group { border-top: 1px solid var(--durd-line); }
.durd-menu__top {
  display: flex;
  width: 100%;
  align-items: center;
  justify-content: space-between;
  gap: .5rem;
  padding: .85rem .25rem;
  background: none;
  border: 0;
  font-family: var(--durd-serif);
  font-size: 1.05rem;
  font-weight: var(--durd-w-strong);
  color: var(--durd-ink);
  text-align: start;
}
.durd-menu__top i { transition: transform .2s ease; }
.durd-menu__top[aria-expanded="true"] i { transform: rotate(180deg); }
.durd-menu__child { display: block; padding: .5rem .25rem .5rem 1rem; color: var(--durd-ink-2); }
.durd-menu__child:hover { color: var(--durd-green); }

/* --- search ------------------------------------------------------------- */

.durd-search { position: relative; }

.durd-search input[type="search"], .durd-search input[type="text"] {
  border-radius: var(--durd-pill);
  padding-inline-start: 2.6rem;
  padding-inline-end: 1rem;
  background: var(--durd-surface);
}

.durd-search__icon {
  position: absolute;
  inset-inline-start: .95rem;
  top: 50%;
  transform: translateY(-50%);
  color: var(--durd-ink-3);
  pointer-events: none;
}

.durd-search__submit {
  position: absolute;
  inset-inline-end: .3rem;
  top: 50%;
  transform: translateY(-50%);
}

/* Mobile: the search row collapses under the header bar. */
#durd-search-row { border-bottom: 1px solid var(--durd-line); }
#durd-search-row .durd-search { padding: .7rem 0; }

/* --- cart dropdown ------------------------------------------------------ */

.durd-minicart { width: min(360px, calc(100vw - 24px)); max-height: 70vh; overflow-y: auto; }
.durd-minicart__row { display: flex; gap: .7rem; align-items: flex-start; padding: .6rem 0; border-bottom: 1px solid var(--durd-line); }
.durd-minicart__row:last-of-type { border-bottom: 0; }
.durd-minicart__img { flex: 0 0 56px; width: 56px; height: 70px; object-fit: cover; border-radius: var(--durd-radius-xs); background: var(--durd-bg-deep); }
.durd-minicart__body { flex: 1 1 auto; min-width: 0; }
.durd-minicart__name { display: block; color: var(--durd-ink); font-weight: var(--durd-w-strong); font-size: 14px; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.durd-minicart__meta { font-size: 12px; color: var(--durd-ink-3); margin: 0; }
.durd-minicart__empty { padding: 2rem 1rem; text-align: center; color: var(--durd-ink-2); }

/* ---------------------------------------------------------------- page furniture */

.durd-page { padding-block: clamp(1.25rem, .8rem + 2vw, 2.5rem); }

.breadcrumb {
  font-size: 13px;
  margin-bottom: 1rem;
  --bs-breadcrumb-divider: '›';
}

.breadcrumb-item + .breadcrumb-item::before { color: var(--durd-ink-3); content: '›'; }
.breadcrumb-item a { color: var(--durd-ink-2); }
.breadcrumb-item a:hover { color: var(--durd-green); }
.breadcrumb-item:last-child a { color: var(--durd-ink); font-weight: var(--durd-w-strong); }

.durd-card {
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius);
  box-shadow: var(--durd-shadow);
}

.durd-eyebrow {
  font-size: 11px;
  font-weight: var(--durd-w-strong);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--durd-ink-3);
  margin-bottom: .5rem;
}

.durd-lede { color: var(--durd-ink-2); font-size: 1rem; max-width: 60ch; }

.durd-section { margin-block: clamp(2rem, 1.5rem + 3vw, 4rem); }

/* The footer already carries its own top margin; a trailing section margin on
   top of it left ~100px of empty ground under the home page. */
.durd-section:last-child { margin-bottom: 0; }
.durd-section__head { display: flex; align-items: flex-end; justify-content: space-between; gap: 1rem; margin-bottom: 1.25rem; flex-wrap: wrap; }

/* --- the selvedge rule ---------------------------------------------------
   The theme's one recurring motif, and the only place decoration is spent: a
   woven edge, drawn in CSS from the two brand colours, under every section
   heading and across the hero panel. It is the material the shop sells, not an
   ornament borrowed from somewhere else — which is the whole argument for using
   it rather than another hairline. Used in exactly two places on purpose. */
.durd-section__head::after {
  content: '';
  order: 3;
  flex: 1 0 100%;
  height: 3px;
  border-radius: 2px;
  background:
    repeating-linear-gradient(90deg,
      var(--durd-green) 0 5px,
      transparent 5px 10px),
    repeating-linear-gradient(90deg,
      var(--durd-clay) 0 2px,
      transparent 2px 7px),
    var(--durd-line);
  opacity: .55;
}

.pagination { --bs-pagination-border-radius: var(--durd-pill); gap: .3rem; }
.page-link { border-radius: var(--durd-pill); border-color: var(--durd-line); color: var(--durd-ink); min-width: 40px; text-align: center; }
.page-item.active .page-link { background: var(--durd-green); border-color: var(--durd-green); }

/* ---------------------------------------------------------------- product card */

.product-thumb {
  display: flex;
  flex-direction: column;
  height: 100%;
  background: transparent;
  border: 0;
}

.product-thumb .image, .durd-thumb__image {
  position: relative;
  display: block;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border-radius: var(--durd-radius);
  background: var(--durd-bg-deep);
}

.product-thumb .image img, .durd-thumb__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform .5s cubic-bezier(.2, .7, .3, 1);
}

.product-thumb:hover .image img { transform: scale(1.04); }

.durd-thumb__wish {
  position: absolute;
  top: .6rem;
  inset-inline-end: .6rem;
  width: 36px;
  height: 36px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 0;
  border-radius: var(--durd-pill);
  background: rgba(255, 255, 255, .92);
  color: var(--durd-ink);
  box-shadow: var(--durd-shadow);
  transition: background-color .18s ease, color .18s ease;
}

.durd-thumb__wish:hover { background: #fff; color: var(--durd-clay); }

.durd-thumb__flag {
  position: absolute;
  top: .6rem;
  inset-inline-start: .6rem;
  padding: .22rem .6rem;
  border-radius: var(--durd-pill);
  background: var(--durd-clay);
  color: #fff;
  font-size: 11px;
  font-weight: var(--durd-w-strong);
  letter-spacing: .02em;
}

.product-thumb .content, .durd-thumb__body { padding-top: .85rem; display: flex; flex-direction: column; flex: 1 1 auto; gap: .3rem; }

.product-thumb h4, .durd-thumb__name {
  font-family: var(--durd-serif);
  font-size: 1.02rem;
  font-weight: var(--durd-w-strong);
  margin: 0;
  line-height: 1.25;
}

.product-thumb h4 a, .durd-thumb__name a { color: var(--durd-ink); }
.product-thumb h4 a:hover, .durd-thumb__name a:hover { color: var(--durd-green); text-decoration: none; }

.product-thumb .description, .durd-thumb__desc {
  color: var(--durd-ink-2);
  font-size: 13.5px;
  margin: 0;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
}

.durd-thumb__price { margin-top: auto; padding-top: .45rem; display: flex; align-items: baseline; gap: .5rem; flex-wrap: wrap; }
.price-new, .durd-thumb__price .durd-price { font-size: 1.05rem; font-weight: var(--durd-w-strong); color: var(--durd-ink); }
.price-old { color: var(--durd-ink-3); text-decoration: line-through; font-size: .9rem; }

.durd-thumb__cta { margin-top: .6rem; }
.durd-thumb__cta .btn { width: 100%; }

.durd-rating { display: inline-flex; align-items: center; gap: .18rem; color: var(--durd-clay); font-size: 12px; }
.durd-rating__count { color: var(--durd-ink-3); margin-inline-start: .25rem; }

/* Ask-for-a-quote line, wholesale showcase only. */
.durd-quote {
  margin-top: auto;
  padding-top: .55rem;
  font-size: 13.5px;
  font-weight: var(--durd-w-strong);
  color: var(--durd-green);
}

/* ---------------------------------------------------------------- category page */

.durd-toolbar {
  display: flex;
  align-items: center;
  gap: .6rem;
  flex-wrap: wrap;
  margin-bottom: 1.25rem;
}

.durd-toolbar__count { color: var(--durd-ink-2); font-size: 14px; margin-inline-end: auto; font-variant-numeric: tabular-nums; }

.durd-toolbar .form-select {
  width: auto;
  border-radius: var(--durd-pill);
  padding: .45rem 2.2rem .45rem 1rem;
  font-size: 14px;
  border-color: var(--durd-line-strong);
}

/* NEVER set `position` on .durd-filters outside the lg media query: below 992px
   the element IS the Bootstrap offcanvas drawer and must stay position:fixed,
   or the hidden 400px panel lands in the flow and pushes the grid off-screen. */
.durd-filters .durd-card + .durd-card { margin-top: .85rem; }

.durd-filters h3, .durd-filters h5, .durd-filters .card-header {
  font-family: var(--durd-serif);
  font-size: 1.05rem;
  font-weight: var(--durd-w-strong);
  background: transparent;
  border: 0;
  padding: 1rem 1.1rem .35rem;
  margin: 0;
}

.durd-filters .card, .durd-filters .list-group {
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius);
  box-shadow: var(--durd-shadow);
  overflow: hidden;
}

.durd-filters .card-body, .durd-filters .list-group-item { border: 0; background: transparent; padding: .35rem 1.1rem; }
.durd-filters .card-footer { background: transparent; border-top: 1px solid var(--durd-line); padding: .85rem 1.1rem; }
.durd-filters .list-group-item + .list-group-item { border-top: 1px solid var(--durd-line); }
.durd-filters .list-group-item a { color: var(--durd-ink-2); }
.durd-filters .list-group-item a:hover { color: var(--durd-green); }

.durd-refine { display: flex; flex-wrap: wrap; gap: .45rem; margin-bottom: 1.5rem; }

/* One empty state for the whole shop: the 404, the brand index, the empty cart,
   a category with nothing in it. Three different dead ends looked like three
   different bugs. */
.durd-empty { text-align: center; padding: clamp(2rem, 6vw, 4rem) 1rem; color: var(--durd-ink-2); }
.durd-empty h2 { margin-bottom: .5rem; }

.durd-empty--page {
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius);
  box-shadow: var(--durd-shadow);
  padding: clamp(2rem, 5vw, 3.5rem) clamp(1.1rem, 4vw, 3rem);
  max-width: 640px;
  margin-inline: auto;
}

.durd-empty--page h1, .durd-empty--page h2 { margin-bottom: .6rem; }

.durd-empty__code {
  font-family: var(--durd-serif);
  font-size: clamp(3.5rem, 12vw, 5.5rem);
  font-weight: var(--durd-w-strong);
  line-height: 1;
  letter-spacing: -.04em;
  color: var(--durd-line-strong);
  margin: 0 0 .4rem;
}

.durd-empty__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  margin-bottom: 1rem;
  border-radius: var(--durd-pill);
  background: var(--durd-green-soft);
  color: var(--durd-green);
  font-size: 1.35rem;
}

.durd-empty__lede { color: var(--durd-ink-2); max-width: 46ch; margin-inline: auto; margin-bottom: 1.5rem; }

.durd-empty__search { margin-bottom: 1.5rem; text-align: start; }

.durd-empty__actions { display: flex; flex-wrap: wrap; gap: .5rem; justify-content: center; }

/* ---------------------------------------------------------------- product page */

/* SQUARE, and every box the shop resizes a photograph into is square with it —
   the card (`aspect-ratio: 1/1`, the reference storefront's shape), this gallery,
   the filmstrip and the minicart. It has to be one shape everywhere: OpenCart pads
   a photograph out to whatever box it is asked for with a WHITE background, so a
   4:5 master shown in a square card carried white bars down both sides, and a
   square master shown in a 4:5 gallery would carry them top and bottom. Neither is
   visible on a product shot standing on #f5f5f5, which is why it survived so long,
   and both are glaring on a full-bleed photograph. Operator, 2026-09-02. */
.durd-gallery__main {
  display: block;
  aspect-ratio: 1 / 1;
  overflow: hidden;
  border-radius: var(--durd-radius);
  background: var(--durd-bg-deep);
}

.durd-gallery__main img { width: 100%; height: 100%; object-fit: cover; }

.durd-gallery__strip { display: flex; gap: .5rem; margin-top: .6rem; overflow-x: auto; scrollbar-width: none; overscroll-behavior-x: contain; }
.durd-gallery__strip::-webkit-scrollbar { display: none; }

.durd-gallery__thumb {
  flex: 0 0 68px;
  width: 68px;
  height: 68px;
  border-radius: var(--durd-radius-sm);
  overflow: hidden;
  background: var(--durd-bg-deep);
  border: 1px solid var(--durd-line);
  padding: 0;
}

.durd-gallery__thumb img { width: 100%; height: 100%; object-fit: cover; }
.durd-gallery__thumb[aria-current="true"] { border-color: var(--durd-ink); }

.durd-buybox { display: flex; flex-direction: column; gap: 1.1rem; }

@media (min-width: 992px) {
  .durd-buybox { position: sticky; top: calc(var(--durd-header-h) + 20px); }
}

.durd-buybox__price { font-family: var(--durd-serif); font-size: clamp(1.6rem, 1.3rem + 1.2vw, 2.1rem); font-weight: var(--durd-w-strong); }
.durd-buybox__price .price-old { font-family: var(--durd-sans); font-size: 1rem; margin-inline-start: .5rem; }
.durd-buybox__tax { font-size: 13px; color: var(--durd-ink-3); }

.durd-optionset { display: flex; flex-direction: column; gap: .45rem; }
.durd-optionset__label { font-size: 13px; font-weight: var(--durd-w-strong); letter-spacing: .02em; color: var(--durd-ink-2); }

.durd-qty { display: inline-flex; align-items: center; border: 1px solid var(--durd-line-strong); border-radius: var(--durd-pill); overflow: hidden; background: var(--durd-surface); }
.durd-qty button { width: 42px; height: 44px; border: 0; background: transparent; color: var(--durd-ink); font-size: 1.1rem; }
.durd-qty button:hover { background: var(--durd-bg-deep); }
.durd-qty input { width: 52px; height: 44px; border: 0; text-align: center; background: transparent; font-variant-numeric: tabular-nums; font-weight: var(--durd-w-strong); padding: 0; }
.durd-qty input:focus { outline: none; }
.durd-qty:focus-within { outline: 2px solid var(--durd-green); outline-offset: 2px; }

.durd-assurance { display: grid; gap: .6rem; }
.durd-assurance li { display: flex; gap: .6rem; align-items: flex-start; color: var(--durd-ink-2); font-size: 14px; }
.durd-assurance i { color: var(--durd-green); margin-top: .15rem; }

.durd-spec { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 14px; }
.durd-spec caption { caption-side: top; font-family: var(--durd-serif); font-size: 1.15rem; font-weight: var(--durd-w-display); color: var(--durd-ink); padding-bottom: .6rem; text-align: start; }
.durd-spec th, .durd-spec td { padding: .7rem .9rem; text-align: start; vertical-align: top; }
.durd-spec th { font-weight: 400; color: var(--durd-ink-2); width: 45%; }
.durd-spec td { font-weight: var(--durd-w-strong); }
.durd-spec tr:nth-child(odd) th, .durd-spec tr:nth-child(odd) td { background: var(--durd-surface-2); }
.durd-spec tr:first-child th { border-start-start-radius: var(--durd-radius-sm); }
.durd-spec tr:first-child td { border-start-end-radius: var(--durd-radius-sm); }
.durd-spec tr:last-child th { border-end-start-radius: var(--durd-radius-sm); }
.durd-spec tr:last-child td { border-end-end-radius: var(--durd-radius-sm); }

.durd-prose { color: var(--durd-ink-2); max-width: 68ch; }
.durd-prose img { max-width: 100%; height: auto; border-radius: var(--durd-radius-sm); }
.durd-prose h2, .durd-prose h3 { color: var(--durd-ink); margin-top: 1.6rem; }

.nav-tabs { border-bottom: 1px solid var(--durd-line); gap: .3rem; }
.nav-tabs .nav-link { border: 0; border-bottom: 2px solid transparent; border-radius: 0; color: var(--durd-ink-2); font-weight: var(--durd-w-strong); padding: .7rem .2rem; margin-inline-end: 1.2rem; }
.nav-tabs .nav-link:hover { color: var(--durd-ink); border-bottom-color: var(--durd-line-strong); }
.nav-tabs .nav-link.active { color: var(--durd-ink); background: transparent; border-bottom-color: var(--durd-ink); }

/* ---------------------------------------------------------------- cart & checkout */

.durd-cartline { display: flex; gap: 1rem; padding: 1.1rem 0; border-bottom: 1px solid var(--durd-line); align-items: flex-start; }
.durd-cartline__img { flex: 0 0 84px; width: 84px; height: 105px; object-fit: cover; border-radius: var(--durd-radius-sm); background: var(--durd-bg-deep); }
.durd-cartline__body { flex: 1 1 auto; min-width: 0; }

.durd-summary { position: sticky; top: calc(var(--durd-header-h) + 20px); }
.durd-summary__row { display: flex; justify-content: space-between; gap: 1rem; padding: .45rem 0; font-size: 14px; color: var(--durd-ink-2); }
.durd-summary__row span:last-child { font-variant-numeric: tabular-nums; color: var(--durd-ink); font-weight: var(--durd-w-strong); }
.durd-summary__row--total { border-top: 1px solid var(--durd-line); margin-top: .5rem; padding-top: .9rem; font-size: 1.1rem; }
.durd-summary__row--total span { color: var(--durd-ink); font-weight: var(--durd-w-strong); }
.durd-summary__row--total span:last-child { font-family: var(--durd-serif); font-size: 1.35rem; }

/* The stock checkout ships six separate panels; give them one shared skin. */
#checkout-checkout .card,
#checkout-cart .card {
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius);
  box-shadow: var(--durd-shadow);
  margin-bottom: 1rem;
}

#checkout-checkout .card-header,
#checkout-cart .card-header {
  background: transparent;
  border-bottom: 1px solid var(--durd-line);
  font-family: var(--durd-serif);
  font-size: 1.1rem;
  font-weight: var(--durd-w-strong);
  padding: 1rem 1.25rem;
}

#checkout-checkout .card-body,
#checkout-cart .card-body { padding: 1.25rem; }

#checkout-checkout .table, #checkout-cart .table { --bs-table-bg: transparent; color: var(--durd-ink); }
#checkout-checkout .table > :not(caption) > * > *,
#checkout-cart .table > :not(caption) > * > * { border-color: var(--durd-line); }

.table > thead th { font-weight: var(--durd-w-strong); color: var(--durd-ink-2); font-size: 13px; letter-spacing: .02em; }

/* ---------------------------------------------------------------- footer */

.durd-footer {
  background: var(--durd-ink);
  color: #cfc6b8;
  margin-top: clamp(2rem, 1.4rem + 2.5vw, 3rem);
  padding-top: clamp(2.5rem, 2rem + 3vw, 4rem);
  padding-bottom: calc(1.5rem + env(safe-area-inset-bottom));
}

.durd-footer h2, .durd-footer h5 { color: #fff; font-size: .95rem; font-family: var(--durd-sans); font-weight: var(--durd-w-strong); letter-spacing: .04em; text-transform: uppercase; margin-bottom: .9rem; }
.durd-footer a { color: #cfc6b8; }
.durd-footer a:hover { color: #fff; }
.durd-footer__wordmark { font-family: var(--durd-serif); font-size: 1.6rem; color: #fff; text-transform: none; letter-spacing: -.02em; }
.durd-footer__legal { border-top: 1px solid rgba(255, 255, 255, .12); margin-top: 2.5rem; padding-top: 1.25rem; font-size: 12.5px; color: #9c9182; }
.durd-footer ul { list-style: none; padding: 0; margin: 0; display: grid; gap: .5rem; font-size: 14px; }

/* ---------------------------------------------------------------- wholesale skin
   Same layout, money removed, and a warmer "call us" surface so a dealer can tell
   at a glance which of the two shops they are looking at. */

.durd-wholesale { --durd-bg: #f4f1ec; --durd-bg-deep: #e8e3da; }

.durd-wholesale .durd-announce { background: var(--durd-ink); }

.durd-contactbar {
  background: var(--durd-green);
  color: #fff;
  border-radius: var(--durd-radius);
  padding: 1.25rem 1.4rem;
  display: flex;
  gap: 1rem;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
}

.durd-contactbar h2, .durd-contactbar p { color: #fff; margin: 0; }
.durd-contactbar p { color: #d5e3d9; font-size: 14px; }
.durd-contactbar .btn { background: #fff; border-color: #fff; color: var(--durd-green); }
.durd-contactbar .btn:hover { background: var(--durd-bg); border-color: var(--durd-bg); color: var(--durd-green-hover); }

/* ---------------------------------------------------------------- home */

.durd-tile {
  position: relative;
  display: block;
  aspect-ratio: 3 / 4;
  border-radius: var(--durd-radius);
  overflow: hidden;
  background: var(--durd-bg-deep);
}

.durd-tile img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s cubic-bezier(.2, .7, .3, 1); }
.durd-tile:hover img { transform: scale(1.05); }

.durd-tile__label {
  position: absolute;
  inset-inline: .75rem;
  bottom: .75rem;
  background: rgba(255, 255, 255, .94);
  border-radius: var(--durd-pill);
  padding: .5rem 1rem;
  font-family: var(--durd-serif);
  font-size: 1rem;
  font-weight: var(--durd-w-strong);
  color: var(--durd-ink);
  text-align: center;
}

.durd-usp { display: grid; gap: 1rem; grid-template-columns: 1fr; }

@media (min-width: 768px) { .durd-usp { grid-template-columns: repeat(3, 1fr); } }

.durd-usp__item { background: var(--durd-surface); border: 1px solid var(--durd-line); border-radius: var(--durd-radius); padding: 1.4rem; }
.durd-usp__item i { font-size: 1.4rem; color: var(--durd-green); display: block; margin-bottom: .6rem; }
.durd-usp__item h3 { font-size: 1.05rem; margin-bottom: .3rem; }
.durd-usp__item p { color: var(--durd-ink-2); font-size: 14px; margin: 0; }

/* ---------------------------------------------------------------- mega menu */

/* Full-width panel under the pill row — see common/menu.twig for why it is not
   a dropdown. */
.durd-mega { background: var(--durd-surface); border-top: 1px solid var(--durd-line); }
.durd-mega > .container { padding-block: 1rem 1.15rem; }

.durd-mega__grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .1rem 1rem; }

@media (min-width: 576px) { .durd-mega__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 992px) { .durd-mega__grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

.durd-mega__item {
  display: block;
  padding: .45rem .2rem;
  color: var(--durd-ink-2);
  font-size: 14px;
  border-radius: var(--durd-radius-xs);
}

.durd-mega__item:hover { color: var(--durd-green); background: var(--durd-surface-2); text-decoration: none; }

.durd-mega__all {
  display: inline-block;
  margin-top: .75rem;
  border-top: 1px solid var(--durd-line);
  padding-top: .75rem;
  font-weight: var(--durd-w-strong);
  color: var(--durd-green);
}

/* The chevron says which way the panel will move. */
.durd-pill__chevron { transition: transform .2s ease; }
.durd-pill[aria-expanded="true"] { background: var(--durd-ink); border-color: var(--durd-ink); color: #fff; }
.durd-pill[aria-expanded="true"] .durd-pill__chevron { transform: rotate(180deg); }

/* ---------------------------------------------------------------- home hero & tiles */

/* Split hero: one photograph beside the copy. The photo is the product here —
   textile is bought on how it looks — so it gets real estate rather than an
   ornament. It stacks photo-first on a phone: the header is ~120px and the
   image ~0.6vw tall, so the h1 still lands inside the first screen.

   The card clips it: the image is a child of a rounded, bordered card, so the
   card owns `overflow: hidden` and the image needs no radius of its own. */
.durd-hero {
  position: relative;
  overflow: hidden;
  display: grid;
  background:
    radial-gradient(120% 90% at 100% 0%, rgba(180, 100, 60, .10), transparent 60%),
    radial-gradient(100% 80% at 0% 100%, rgba(30, 77, 59, .10), transparent 60%),
    var(--durd-surface);
}

.durd-hero__body { padding: clamp(1.75rem, 1.2rem + 3vw, 3.5rem); }

.durd-hero__media { order: -1; }

.durd-hero__media img {
  display: block;
  width: 100%;
  height: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
}

@media (min-width: 768px) {
  /* Photo left, copy right. The copy column is the narrower of the two, but not
     so narrow that a long Turkish headline breaks to two words a line. */
  .durd-hero { grid-template-columns: minmax(0, 1fr) minmax(0, .82fr); align-items: stretch; }
  .durd-hero__media { order: 0; }
  .durd-hero__media img { height: 100%; aspect-ratio: auto; min-height: 340px; }
}

.durd-hero h1 { max-width: 18ch; }

.durd-tilegrid { display: grid; gap: .75rem; grid-template-columns: repeat(2, minmax(0, 1fr)); }

@media (min-width: 576px) { .durd-tilegrid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 992px) { .durd-tilegrid { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1rem; } }

/* Typographic tile — the stand-in until real category photography exists. The
   oversized, clipped word is the artwork; the pill below is the readable label. */
.durd-tile--type {
  aspect-ratio: 4 / 3;
  container-type: inline-size;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: .75rem;
  border: 1px solid var(--durd-line);
  overflow: hidden;
}

/* The word is the artwork, but it has to be a WORD. Sized off the tile's own
   width and its character count it stays as large as it can while still fitting:
   "Yorgan" fills the tile, "Bebek ve Çocuk Tekstili" shrinks instead of being
   clipped to "ve Çocuk T", which read as a broken page rather than a crop.
   1.85 is the reciprocal of Fraunces' average advance width at this weight. */
.durd-tile__word {
  font-family: var(--durd-serif);
  font-size: min(3.4rem, calc(185cqw / max(var(--durd-word-chars, 8), 4)));
  font-weight: var(--durd-w-strong);
  line-height: .95;
  letter-spacing: -.03em;
  color: rgba(34, 29, 23, .10);
  white-space: nowrap;
  transform: rotate(-4deg);
  transition: transform .5s cubic-bezier(.2, .7, .3, 1);
  user-select: none;
}

.durd-tile--type:hover .durd-tile__word { transform: rotate(-4deg) scale(1.06); }
.durd-tile--type:hover { text-decoration: none; }

.durd-tile--t0 { background: #efe7da; }
.durd-tile--t1 { background: #e7ece8; }
.durd-tile--t2 { background: #f2e7df; }
.durd-tile--t3 { background: #eae6df; }

.durd-tile--type .durd-tile__label { inset-inline: .6rem; bottom: .6rem; font-size: .92rem; padding: .45rem .8rem; }

/* Photo tile. 4:3 like the typographic one it replaces, not the base tile's 3:4 —
   a doorway into a section, and a portrait doorway in a four-column row pushes the
   next section off the first screen.

   The label pill is near-opaque white, so it reads on any photograph on its own;
   the scrim underneath is there for the tile as a whole, so a bright-bottomed shot
   does not make the pill float on nothing. Decorative, hence a ::after. */
.durd-tile--photo { aspect-ratio: 4 / 3; background: var(--durd-bg-deep); }

.durd-tile--photo::after {
  content: '';
  position: absolute;
  inset-inline: 0;
  bottom: 0;
  height: 45%;
  pointer-events: none;
  background: linear-gradient(to top, rgba(34, 29, 23, .35), transparent);
}

.durd-tile--photo .durd-tile__label { z-index: 1; }
.durd-tile--photo:hover { text-decoration: none; }

/* ---------------------------------------------------------------- filter panel */

.durd-filtergroup { border: 0; padding: 0; margin: 0; }
.durd-filtergroup + .durd-filtergroup { border-top: 1px solid var(--durd-line); margin-top: .75rem; padding-top: .75rem; }

.durd-filtergroup__legend {
  float: none;
  width: auto;
  font-size: 12px;
  font-weight: var(--durd-w-strong);
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--durd-ink-3);
  margin-bottom: .45rem;
}

/* ---------------------------------------------------------------- extension modules
   The module templates under extension/opencart/ are NOT overridden. OpenCart
   4.1's override lookup and its template loader disagree on where an extension's
   ocmod template lives (the file is stat'ed at one path and loaded from another),
   so an override there needs the same file in two places. Not worth it — the
   stock markup is sound (real <label>s, real checkboxes) and only needed a skin. */

/* --- the column, restored ------------------------------------------------
   common/column_left.twig and column_right.twig are layout-neutral on purpose:
   the category page needs the same block to be the contents of an offcanvas,
   so they may not carry a col-* class of their own. Upstream's own pages,
   however, drop {{ column_right }} straight into a Bootstrap .row next to
   <div id="content" class="col">. With no width the block wrapped underneath,
   so every account page (login, register, hesabım, adres defteri, siparişler,
   favorilerim) printed its account menu as a full-width list under the content
   instead of beside it. The width belongs to the page, not to the module, so it
   is given here — only where the block really is a row child. */

.row > .durd-modules {
  flex: 0 0 auto;
  width: 100%;
  padding-inline: calc(var(--bs-gutter-x) * .5);
  margin-top: 2rem;
}

@media (min-width: 992px) {
  .row > .durd-modules { width: 26%; margin-top: 0; }
}

/* The account menu is a plain .list-group (not -flush), so it needs its own
   card treatment rather than inheriting the filter sidebar's. */
.durd-modules > .list-group {
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius);
  box-shadow: var(--durd-shadow);
  overflow: hidden;
  --bs-list-group-border-radius: 0;
}

.durd-modules > .list-group > .list-group-item {
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--durd-line);
  padding: .7rem 1.1rem;
  color: var(--durd-ink-2);
  font-size: 14px;
}

.durd-modules > .list-group > .list-group-item:last-child { border-bottom: 0; }
.durd-modules > .list-group > a.list-group-item:hover { background: var(--durd-surface-2); color: var(--durd-green); }
.durd-modules > .list-group > .list-group-item.active { background: var(--durd-green-soft); color: var(--durd-green); font-weight: var(--durd-w-strong); }

/* The featured / latest / bestseller / related modules ship
   `row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-xl-4`. The phone end of that
   is wrong for this shop: ONE card per screen, against 2-up on the category grid
   and 2-up on the category tiles, so the home page was 5 700px tall and the same
   product looked like a different card depending on which page you met it on.
   Only the phone end is changed; from 992px up the upstream rhythm is kept.
   The selector names the module's exact class list so it cannot catch another
   row. CSS rather than a template override because these module templates are
   skinned, not overridden (§6). */
.row.row-cols-1.row-cols-sm-2.row-cols-md-3.row-cols-xl-4 > * {
  flex: 0 0 auto;
  width: 50%;
}

@media (min-width: 992px) {
  .row.row-cols-1.row-cols-sm-2.row-cols-md-3.row-cols-xl-4 > * { width: 33.3333%; }
}

@media (min-width: 1200px) {
  .row.row-cols-1.row-cols-sm-2.row-cols-md-3.row-cols-xl-4 > * { width: 25%; }
}

/* Module heading: featured / latest / bestseller / special all emit a bare h3. */
#content > .durd-modules h3,
.durd-page > .container > h3,
#common-home h3 { margin-bottom: 1.25rem; }

/* Filter + category modules in the sidebar. */
.durd-modules .card {
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius);
  box-shadow: var(--durd-shadow);
  overflow: hidden;
  margin-bottom: 1rem;
}

.durd-modules .card-header {
  background: transparent;
  border-bottom: 1px solid var(--durd-line);
  font-family: var(--durd-serif);
  font-size: 1.05rem;
  font-weight: var(--durd-w-strong);
  padding: .9rem 1.1rem;
}

.durd-modules .card-header i { display: none; }
.durd-modules .card-body { padding: .9rem 1.1rem; }
.durd-modules .card-footer { background: transparent; border-top: 1px solid var(--durd-line); padding: .9rem 1.1rem; }
.durd-modules .card-footer .btn { width: 100%; }

.durd-modules .list-group-flush > .list-group-item {
  background: transparent;
  border-color: var(--durd-line);
  padding: .6rem 1.1rem;
  color: var(--durd-ink);
}

/* The filter module emits a bare <a class="list-group-item"> as a group heading. */
.durd-modules a.list-group-item:not([href]) { font-size: 12px; font-weight: var(--durd-w-strong); letter-spacing: .08em; text-transform: uppercase; color: var(--durd-ink-3); border-bottom: 0; padding-bottom: .2rem; }
.durd-modules .list-group-item + a.list-group-item:not([href]) { border-top: 1px solid var(--durd-line); margin-top: .3rem; padding-top: .8rem; }
.durd-modules .list-group-item a { color: var(--durd-ink-2); }
.durd-modules .list-group-item a:hover { color: var(--durd-green); }
.durd-modules .form-check { margin-bottom: .1rem; }

/* Under 992px the filter panel is a drawer: fixed-position, zero height in the
   flow — but its .col-lg-3 wrapper still collected the row's vertical gutter, so
   every listing page opened with ~48px of empty ground between the heading and
   the toolbar that looked like a rendering fault. The column cannot simply be
   display:none — the drawer inside it has to stay openable. */
@media (max-width: 991.98px) {
  #product-category > .container > .row > .col-lg-3:has(.durd-filters),
  #product-search > .container > .row > .col-lg-3:has(.durd-filters) { display: contents; }
}

@media (min-width: 992px) {
  .durd-filters { position: sticky; top: calc(var(--durd-header-h) + 12px); }
  .durd-filters .offcanvas-header { display: none; }
  .durd-filters .offcanvas-body { padding: 0; }
}

/* ---------------------------------------------------------------- search form
   product/search.twig is overridden; this is the criteria card on top of it. */

.durd-searchform { padding: 1.1rem; margin-bottom: 1.5rem; }
.durd-searchform__grid { display: grid; gap: 1rem; }

@media (min-width: 768px) {
  .durd-searchform { padding: 1.4rem; }
  .durd-searchform__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.25rem; }
}

/* ---------------------------------------------------------------- sitemap
   Upstream renders nested <ul> bullets. Skinned, not overridden: the markup is
   correct, it just needed to stop looking like a directory listing. */

#information-sitemap #content > .row > [class^="col"] > ul,
#information-sitemap #content > .row > [class*=" col"] > ul { list-style: none; padding-inline-start: 0; margin-bottom: 1.5rem; }

#information-sitemap #content ul ul { list-style: none; padding-inline-start: .9rem; border-inline-start: 1px solid var(--durd-line); margin-block: .3rem .8rem; }

#information-sitemap #content li { margin-bottom: .3rem; }

#information-sitemap #content > .row > [class^="col"] > ul > li > a,
#information-sitemap #content > .row > [class*=" col"] > ul > li > a {
  font-family: var(--durd-serif);
  font-size: 1.1rem;
  font-weight: var(--durd-w-strong);
  color: var(--durd-ink);
}

#information-sitemap #content ul ul a { color: var(--durd-ink-2); font-size: 14px; }
#information-sitemap #content a:hover { color: var(--durd-green); }

/* ---------------------------------------------------------------- account pages
   Skinned, not overridden. Upstream's account area is correct markup — headings
   followed by <ul class="list-unstyled"> of links — that simply had no design on
   it at all, so next to the rest of the shop it read as an unfinished page. */

#account-account #content > ul.list-unstyled {
  display: grid;
  gap: .5rem;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  margin-bottom: 2rem;
}

#account-account #content > ul.list-unstyled > li { margin: 0; }

#account-account #content > ul.list-unstyled > li > a {
  display: block;
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius-sm);
  padding: .85rem 1rem;
  color: var(--durd-ink);
  font-weight: var(--durd-w-strong);
  transition: border-color .18s ease, box-shadow .18s ease, color .18s ease;
}

#account-account #content > ul.list-unstyled > li > a:hover {
  border-color: var(--durd-line-strong);
  box-shadow: var(--durd-shadow);
  color: var(--durd-green);
  text-decoration: none;
}

#account-account #content > h2 { font-size: 1.25rem; margin-bottom: .9rem; }

/* Login / register / forgotten: two upstream panels built from .border.rounded. */
[id^="account-"] #content .border.rounded,
#checkout-checkout #content .border.rounded {
  background: var(--durd-surface);
  border-color: var(--durd-line) !important;
  border-radius: var(--durd-radius) !important;
  box-shadow: var(--durd-shadow);
  padding: 1.25rem !important;
}

/* Upstream right-aligns the submit on every account form; full width on a phone
   is both easier to hit and consistent with the buy box. */
@media (max-width: 575.98px) {
  [id^="account-"] #content .text-end .btn,
  #information-contact #content .text-end .btn,
  #product-manufacturer #content .text-end .btn { width: 100%; }
}

/* --- checkout: the parts upstream leaves outside a fieldset ---------------
   The checkout panels are skinned by their <fieldset>, which covers most of the
   page — but the consent switches, the submit button and the order comment sit
   in bare <div class="row">s, so they floated loose on the page ground between
   two white cards. Given the same card so the column reads as one stack. */

#checkout-checkout #form-register > .row:last-child > .col:has(.form-switch),
#checkout-checkout #checkout-payment-method > .mb-2:has(#input-comment) {
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius);
  box-shadow: var(--durd-shadow);
  padding: 1.25rem;
  margin-bottom: 1rem;
}

/* The switch and the "I have read" agreement are the two things a buyer must not
   miss; upstream stacks them with no gap at all. */
#checkout-checkout .form-switch + .form-switch { margin-top: .5rem; }

/* Upstream puts the password fieldset in one half of a two-column row whose
   other half is the captcha — and with no captcha module installed that half is
   an empty div, so the password card rendered at half width beside nothing. */
#checkout-checkout #form-register #password:has(+ .col:empty) { flex: 0 0 100%; width: 100%; }
#checkout-checkout #form-register #password + .col:empty { display: none; }

/* A bare <br> between panels adds a stray line box on top of the card margins. */
#checkout-checkout #checkout-payment-method > br,
#checkout-checkout #checkout-shipping-method > br { display: none; }

/* --- address fields in Turkish reading order ------------------------------
   Upstream orders an address Firma → Adres → Adres (devamı) → City → Posta Kodu
   → Ülke → Zone. In OpenCart "city" is the district and "zone" is the province
   (Phase 1 relabelled them İlçe and İl for exactly that reason), so the form
   asked a Turkish buyer for the district BEFORE the province, and put the
   province last of all, under the country.

   Reordered visually only: the country <select> still precedes the province in
   the DOM and in the tab order is re-established by the order property, and the
   JS that repopulates the province list on a country change is unaffected — it
   works off ids, not position.

   Anything not named here (a custom field) keeps order 20 and lands at the end. */

#checkout-checkout .row > .col,
[id^="account-address"] .row > .col { order: 20; }

#checkout-checkout .row > .col:has([id$="-company"]),
[id^="account-address"] .row > .col:has([id$="-company"]) { order: 1; }

#checkout-checkout .row > .col:has([id$="-address-1"]),
[id^="account-address"] .row > .col:has([id$="-address-1"]) { order: 2; }

#checkout-checkout .row > .col:has([id$="-address-2"]),
[id^="account-address"] .row > .col:has([id$="-address-2"]) { order: 3; }

#checkout-checkout .row > .col:has([id$="-country"]),
[id^="account-address"] .row > .col:has([id$="-country"]) { order: 4; }

#checkout-checkout .row > .col:has([id$="-zone"]),
[id^="account-address"] .row > .col:has([id$="-zone"]) { order: 5; }

#checkout-checkout .row > .col:has([id$="-city"]),
[id^="account-address"] .row > .col:has([id$="-city"]) { order: 6; }

#checkout-checkout .row > .col:has([id$="-postcode"]),
[id^="account-address"] .row > .col:has([id$="-postcode"]) { order: 7; }

/* ---------------------------------------------------------------- cookie notice */

#cookie {
  position: fixed;
  inset-inline: 0;
  bottom: 0;
  z-index: 1080;
  background: var(--durd-ink);
  color: #ece6dd;
  padding-bottom: env(safe-area-inset-bottom);
  box-shadow: 0 -8px 32px rgba(34, 29, 23, .18);
}

#cookie p { margin-bottom: .75rem; font-size: 14px; }
#cookie .btn.bg-primary { background: var(--durd-green) !important; border-color: var(--durd-green); }
#cookie .btn-light { background: transparent; border-color: rgba(255, 255, 255, .35); color: #ece6dd; }
#cookie .btn-light:hover { background: rgba(255, 255, 255, .1); color: #fff; }

/* ---------------------------------------------------------------- misc resets
   Left over from OpenCart's stylesheet.css, which this theme no longer loads. */

.rating .fa-stack { width: 1em; }
.visually-hidden { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }

/* ---------------------------------------------------------------- product page extras */

.durd-tiers { border: 1px solid var(--durd-line); border-radius: var(--durd-radius-sm); overflow: hidden; }
.durd-tiers li { display: flex; justify-content: space-between; gap: 1rem; padding: .55rem .9rem; font-size: 14px; color: var(--durd-ink-2); }
.durd-tiers li:nth-child(odd) { background: var(--durd-surface-2); }
.durd-tiers li span:last-child { font-weight: var(--durd-w-strong); color: var(--durd-ink); }

.durd-specgrid { display: grid; gap: 1.25rem; grid-template-columns: 1fr; }

@media (min-width: 768px) { .durd-specgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* Option swatches. The radio itself stays in the DOM and keeps the focus ring —
   `appearance:none` would take the keyboard affordance with it. */
.durd-swatches { display: flex; flex-wrap: wrap; gap: .5rem; }

.durd-swatch__input {
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
}

.durd-swatch {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  padding: .45rem .9rem;
  border: 1px solid var(--durd-line-strong);
  border-radius: var(--durd-pill);
  background: var(--durd-surface);
  font-size: 14px;
  cursor: pointer;
  transition: border-color .18s ease, background-color .18s ease, color .18s ease;
}

.durd-swatch img { width: 22px; height: 22px; border-radius: var(--durd-pill); object-fit: cover; }
.durd-swatch:hover { border-color: var(--durd-ink); }
.durd-swatch__input:checked + .durd-swatch { background: var(--durd-ink); border-color: var(--durd-ink); color: #fff; }
.durd-swatch__input:focus-visible + .durd-swatch { outline: 2px solid var(--durd-green); outline-offset: 2px; }
.durd-swatch__input.is-invalid + .durd-swatch { border-color: var(--durd-danger); }

/* A required option is marked in the label, not only by a red border after failure. */
.durd-optionset.required > .durd-optionset__label::after { content: ' *'; color: var(--durd-danger); }

/* Related products come through the same module markup as featured. */
#product-info .durd-modules { margin-top: 0; }

/* ---------------------------------------------------------------- cart page */

.durd-cartline:last-of-type { border-bottom: 0; }
.durd-cartline__body h2 a { color: var(--durd-ink); }
.durd-cartline__body h2 a:hover { color: var(--durd-green); }

.durd-cartline__remove {
  background: transparent;
  border: 1px solid transparent;
  color: var(--durd-ink-3);
  padding: .4rem .7rem;
}

.durd-cartline__remove:hover { color: var(--durd-danger); border-color: var(--durd-line); background: var(--durd-surface); text-decoration: none; }

.durd-summary { position: static; }

@media (min-width: 992px) {
  .durd-summary { position: sticky; top: calc(var(--durd-header-h) + 20px); }
}

/* ---------------------------------------------------------------- gallery height
   A square is right on a phone; on a wide screen the same ratio makes an 800px
   photo that pushes everything under the buy box off the first screen. Capping
   the HEIGHT and letting the ratio compute the width keeps one crop at every
   breakpoint — dropping the ratio on desktop instead meant a photo shot to the
   §8 standard was cropped one way on a phone and another on a laptop. */

@media (min-width: 992px) {
  .durd-gallery__main {
    max-height: min(68vh, 660px);
    max-width: min(68vh, 660px);
    margin-inline: auto;
  }
}

/* ---------------------------------------------------------------- checkout panels
   The upstream checkout panels are <fieldset><legend> — skinned here rather than
   overridden, so ~2000 lines of validation wiring stay upstream's problem. */

#checkout-checkout fieldset,
#checkout-checkout #form-register > fieldset {
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius);
  box-shadow: var(--durd-shadow);
  padding: 1.25rem;
  margin-bottom: 1rem;
}

/* A <legend> straddles the fieldset border by default and sits ON it once the
   fieldset gets a background. Floating it makes it an ordinary block heading. */
#checkout-checkout legend {
  float: left;
  width: 100%;
  font-family: var(--durd-serif);
  font-size: 1.15rem;
  font-weight: var(--durd-w-strong);
  color: var(--durd-ink);
  margin-bottom: 1rem;
  padding: 0;
}

#checkout-checkout #form-register > p { color: var(--durd-ink-2); font-size: 14px; }
#checkout-checkout .form-label { font-size: 13px; font-weight: var(--durd-w-strong); color: var(--durd-ink-2); }
#checkout-checkout .required > .form-label::after,
#checkout-checkout .required > label::after { content: ' *'; color: var(--durd-danger); }

/* Restored from OpenCart's stylesheet.css, which this theme no longer loads. */
.form-switch-lg .form-check-input { width: 2.6em; height: 1.4em; margin-top: .15em; }
.form-check-reverse { padding-right: 1.9em; padding-left: 0; text-align: right; }
.form-check-reverse .form-check-input { float: right; margin-right: -1.9em; margin-left: 0; }

.durd-confirm__row { display: flex; justify-content: space-between; gap: 1rem; padding: .55rem 0; border-bottom: 1px solid var(--durd-line); font-size: 14px; }
.durd-confirm__row:last-child { border-bottom: 0; }
.durd-confirm__name { font-weight: var(--durd-w-strong); }
.durd-confirm__name a { color: var(--durd-ink); }
.min-w-0 { min-width: 0; }

#checkout-payment .btn { width: 100%; }

/* ---------------------------------------------------------------- generic cards
   For every page this theme does not template directly — account, information,
   returns, sitemap. They are plain Bootstrap cards; without a skin they render
   transparent on the cream ground and read as unfinished. */

.card {
  background: var(--durd-surface);
  border: 1px solid var(--durd-line);
  border-radius: var(--durd-radius);
  box-shadow: var(--durd-shadow);
}

.card-header {
  background: transparent;
  border-bottom: 1px solid var(--durd-line);
  font-family: var(--durd-serif);
  font-size: 1.1rem;
  font-weight: var(--durd-w-strong);
  padding: 1rem 1.25rem;
}

.card-body { padding: 1.25rem; }
.card-footer { background: transparent; border-top: 1px solid var(--durd-line); padding: 1rem 1.25rem; }

fieldset > legend { font-family: var(--durd-serif); font-size: 1.15rem; font-weight: var(--durd-w-strong); float: left; width: 100%; margin-bottom: .75rem; }

/* Filter module: the group heading is a bare <a class="list-group-item"> with no
   href, so it must not carry the row borders the real rows do. */
.durd-modules a.list-group-item:not([href]) { border: 0; }
.durd-modules .list-group-flush > .list-group-item:last-child { border-bottom: 0; }

/* ==========================================================================
   REDESIGN LAYER — 2026-09-01
   --------------------------------------------------------------------------
   The operator picked a reference storefront and asked for its look. What is
   reproduced is the LANGUAGE, written from scratch here: white ground, one pale
   blue band, black geometric type, square blocks with pill buttons, a short
   black rule above every heading, and a header whose menu sits on the same line
   as the logo. No file, image or stylesheet from the reference is used.

   One change was made against the reference on purpose: its hero band is pinned
   to the left of a wide viewport, leaving a dead strip down the right. Ours is a
   centred container like every other section on the page.

   This layer sits at the END of the sheet so it wins on order alone — the blocks
   above are the previous design and are left intact rather than surgically
   unpicked, which would have meant touching two hundred rules to change a look.
   ========================================================================== */

/* --- the short black rule, replacing the woven selvedge ------------------ */

/* Drawn as a full-width flex item so it takes a line of its own — the heading
   and its link then sit on the line below, where space-between puts them at the
   two edges. Capping the WIDTH instead (max-width: 34px) looks identical in the
   inspector and is wrong: flex line-breaking uses the capped size, so all three
   items shared one line and the heading ended up centred between them. Only the
   first 34px of the item is painted. */
.durd-section__head::after {
  content: '';
  order: -1;
  flex: 0 0 100%;
  height: 2px;
  border-radius: 0;
  background: linear-gradient(90deg, var(--durd-ink) 0 34px, transparent 34px);
  opacity: 1;
  margin-bottom: .9rem;
}

.durd-section__head { align-items: center; }
.durd-section__head h2 { text-transform: none; }

/* The featured-products module emits a bare <h3> of its own. Give it the same
   rule so it reads as a section heading rather than a stray line of bold text. */
.durd-page--home .durd-section > h3 {
  font-size: clamp(1.35rem, 1.1rem + 1.1vw, 1.75rem);
  margin-bottom: 1.25rem;
}

.durd-page--home .durd-section > h3::before {
  content: '';
  display: block;
  width: 34px;
  height: 2px;
  background: var(--durd-ink);
  margin-bottom: .9rem;
}

/* --- announcement strip: quiet, not a black band ------------------------- */

.durd-announce {
  background: var(--durd-band);
  color: var(--durd-ink-2);
  border-bottom: 0;
  font-size: 12px;
  padding-block: .45rem;
}

.durd-announce a { color: var(--durd-ink); text-decoration: none; }
.durd-announce a:hover { color: var(--durd-clay); }
.durd-wholesale .durd-announce { background: var(--durd-bg-deep); }

/* --- header -------------------------------------------------------------- */

.durd-header {
  background: #fff;
  backdrop-filter: none;
  border-bottom: 1px solid var(--durd-line);
}

.durd-header__bar { gap: .25rem; }

.durd-wordmark {
  font-weight: var(--durd-w-brand);
  letter-spacing: -.04em;
  font-size: 1.5rem;
}

.durd-wordmark a:hover { color: var(--durd-clay); }

.durd-wordmark__sub {
  font-size: 9px;
  letter-spacing: .2em;
  color: var(--durd-ink-2);
}

@media (min-width: 992px) {
  .durd-wordmark {
    font-size: 1.9rem;
    padding-inline-end: 1.75rem;
    margin-inline-end: 1.75rem;
    border-inline-end: 1px solid var(--durd-line);
  }
}

.durd-header__actions { gap: .35rem; }

/* The account control is a labelled link on desktop, an icon on a phone. */
.durd-account__label { display: none; font-size: 13px; font-weight: 500; }

@media (min-width: 992px) {
  .durd-account .durd-icon-btn { width: auto; padding-inline: .6rem; gap: .4rem; }
  .durd-account__label { display: inline; }
}

/* The cart: a filled black disc, the one heavy object in the header. */
.durd-cartbtn {
  width: 48px;
  height: 48px;
  background: var(--durd-ink);
  color: #fff;
  border: 0;
}

.durd-cartbtn:hover, .durd-cartbtn:focus { background: var(--durd-green-hover); color: #fff; }

.durd-cartbtn .durd-badge {
  top: -2px;
  inset-inline-end: -2px;
  background: #fff;
  color: var(--durd-ink);
  border: 1px solid var(--durd-line);
}

/* --- the in-header menu bar (desktop) ------------------------------------ */

.durd-menubar { display: none; }

@media (min-width: 992px) {
  .durd-menubar {
    display: flex;
    align-items: center;
    gap: 2.1rem;
    list-style: none;
    margin: 0;
    padding: 0;
  }
}

.durd-menubar > li { position: relative; }

.durd-menubar__link {
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  height: var(--durd-header-h);
  font-size: 13.5px;
  font-weight: 500;
  color: var(--durd-ink);
  white-space: nowrap;
  background: none;
  border: 0;
  padding: 0;
}

.durd-menubar__link:hover, .durd-menubar > li:focus-within > .durd-menubar__link {
  color: var(--durd-clay);
  text-decoration: none;
}

.durd-menubar__panel {
  position: absolute;
  top: 100%;
  inset-inline-start: -1.25rem;
  z-index: 1040;
  width: max-content;
  max-width: min(620px, 80vw);
  background: #fff;
  border: 1px solid var(--durd-line);
  box-shadow: var(--durd-shadow-lift);
  padding: 1.15rem 1.5rem;
  columns: 2;
  column-gap: 2.5rem;
  opacity: 0;
  visibility: hidden;
  transform: translateY(8px);
  transition: opacity .18s ease, transform .18s ease, visibility .18s;
}

.durd-menubar > li:hover > .durd-menubar__panel,
.durd-menubar > li:focus-within > .durd-menubar__panel {
  opacity: 1;
  visibility: visible;
  transform: none;
}

.durd-menubar__panel a {
  display: block;
  break-inside: avoid;
  padding: .3rem 0;
  font-size: 13px;
  color: var(--durd-ink-2);
}

.durd-menubar__panel a:hover { color: var(--durd-ink); text-decoration: none; }
.durd-menubar__panel a.is-all { color: var(--durd-ink); font-weight: var(--durd-w-strong); margin-top: .5rem; }

/* --- the fixed telephone rail, left edge --------------------------------- */

.durd-phonerail { display: none; }

@media (min-width: 1500px) {
  .durd-phonerail {
    position: fixed;
    inset-inline-start: 20px;
    top: 50%;
    transform: translateY(-50%);
    z-index: 1020;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
    color: var(--durd-ink);
  }
}

.durd-phonerail__num {
  writing-mode: vertical-rl;
  transform: rotate(180deg);
  font-size: 12px;
  font-weight: var(--durd-w-strong);
  letter-spacing: .05em;
  font-variant-numeric: tabular-nums;
}

.durd-phonerail__btn {
  width: 46px;
  height: 46px;
  border-radius: var(--durd-pill);
  background: var(--durd-band);
  display: grid;
  place-items: center;
  color: var(--durd-ink);
}

.durd-phonerail a:hover { text-decoration: none; color: var(--durd-clay); }
.durd-phonerail__btn:hover { background: var(--durd-ink); color: #fff; }

/* --- buttons ------------------------------------------------------------- */

.btn { letter-spacing: .02em; font-size: 13px; }
.btn-lg { font-size: 14px; }

/* The reference's one hero button: a white pill on the pale band. */
.btn-hero {
  background: #fff;
  border: 1px solid #fff;
  color: var(--durd-ink);
  padding: .95rem 2.4rem;
  font-size: 13px;
  font-weight: var(--durd-w-strong);
}

.btn-hero:hover, .btn-hero:focus { background: var(--durd-ink); border-color: var(--durd-ink); color: #fff; }

/* "Keşfet →" — a text label with a circled arrow, used on tiles and bands. */
.durd-more {
  display: inline-flex;
  align-items: center;
  gap: .75rem;
  font-size: 13px;
  font-weight: var(--durd-w-strong);
  color: var(--durd-ink);
}

.durd-more::after {
  content: '\f061'; /* fa-arrow-right */
  font-family: 'Font Awesome 7 Free', 'Font Awesome 6 Free', 'FontAwesome';
  font-weight: 900;
  font-size: 11px;
  width: 32px;
  height: 32px;
  border-radius: var(--durd-pill);
  background: #fff;
  color: var(--durd-ink);
  display: grid;
  place-items: center;
  transition: background-color .18s ease, color .18s ease;
}

.durd-more:hover { text-decoration: none; color: var(--durd-ink); }
.durd-more:hover::after { background: var(--durd-ink); color: #fff; }

/* --- hero ---------------------------------------------------------------- */

.durd-hero2 { margin-bottom: clamp(2rem, 4vw, 3.5rem); }

.durd-hero2__band {
  background: var(--durd-band);
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
}

.durd-hero2__copy { padding: clamp(2rem, 5vw, 3.5rem) clamp(1.5rem, 4vw, 3.5rem); }

.durd-hero2__copy h1 {
  font-size: clamp(1.9rem, 1.2rem + 3.2vw, 3.2rem);
  line-height: 1.2;
  letter-spacing: -.5px;
  margin-bottom: 1rem;
  max-width: 14ch;
}

.durd-hero2__copy .durd-lede { color: #6a6a6a; font-size: 13.5px; max-width: 42ch; margin-bottom: 2rem; }

.durd-hero2__media { position: relative; }

.durd-hero2__media img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

@media (min-width: 992px) {
  .durd-hero2 { padding-top: 42px; }
  .durd-hero2__band { grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); align-items: center; min-height: 460px; }

  /* The reference lets the hero photograph break the band's top and bottom
     edges. That overhang is the whole reason the hero reads as designed rather
     than as a two-column layout, so it is kept — hence the section's padding-top
     above, which is what the image overhangs into. */
  .durd-hero2__media { align-self: stretch; margin-block: -42px; }
}

/* --- the three service columns ------------------------------------------- */

.durd-services {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2rem;
  list-style: none;
  padding: 0;
  margin: 0;
}

@media (min-width: 768px) {
  .durd-services { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 3rem; }
}

.durd-service::before {
  content: '';
  display: block;
  width: 34px;
  height: 2px;
  background: var(--durd-ink);
  margin-bottom: 1.1rem;
}

.durd-service h3 { font-size: 1rem; margin-bottom: .35rem; }
.durd-service p { color: var(--durd-ink-2); font-size: 13px; margin: 0; line-height: 1.7; }

/* --- the welcome split --------------------------------------------------- */

.durd-welcome { display: grid; grid-template-columns: 1fr; gap: 1.25rem; }

@media (min-width: 768px) {
  .durd-welcome { grid-template-columns: minmax(0, .42fr) minmax(0, 1fr); gap: 3rem; align-items: center; }
  .durd-welcome__text { border-inline-start: 1px solid var(--durd-line); padding-inline-start: 3rem; }
}

.durd-welcome h2 { font-size: clamp(1.5rem, 1.1rem + 1.8vw, 2.2rem); margin: 0; letter-spacing: -.3px; }
.durd-welcome__text p { color: var(--durd-ink-2); font-size: 13.5px; margin: 0; }

/* --- the full-bleed contact band ----------------------------------------- */

.durd-band {
  background: var(--durd-band);
  padding: clamp(2.25rem, 5vw, 3.75rem) clamp(1.5rem, 4vw, 3.5rem);
  display: grid;
  gap: 1.5rem;
}

@media (min-width: 768px) {
  .durd-band { grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 3rem; }
}

.durd-band h2 { font-size: clamp(1.4rem, 1.1rem + 1.2vw, 1.9rem); margin-bottom: .5rem; letter-spacing: -.2px; }
.durd-band p { color: var(--durd-ink-2); font-size: 13.5px; margin: 0; max-width: 56ch; }
.durd-band__actions { display: flex; flex-wrap: wrap; gap: .6rem; }

/* --- footer -------------------------------------------------------------- */

.durd-footer {
  background: var(--durd-band);
  color: var(--durd-ink-2);
  border-top: 0;
}

.durd-footer h2, .durd-footer h5 {
  color: var(--durd-ink);
  font-size: 15px;
  font-weight: var(--durd-w-strong);
  letter-spacing: .2px;
  text-transform: none;
  margin-bottom: 1.1rem;
}

.durd-footer a { color: var(--durd-ink-2); }
.durd-footer a:hover { color: var(--durd-clay); }

.durd-footer__wordmark {
  color: var(--durd-ink);
  font-weight: var(--durd-w-brand);
  font-size: 1.7rem;
  letter-spacing: -.04em;
}

.durd-footer ul { font-size: 13px; gap: .45rem; }
.durd-footer p { font-size: 13px; }

.durd-footer__legal {
  border-top: 1px solid rgba(0, 0, 0, .09);
  color: var(--durd-ink-2);
  font-size: 12px;
}

/* The legal identity line. Turkish law requires it to be READABLE, not merely
   present, so it does not get the shrunk-and-greyed treatment small print usually
   gets — same size as the rest of the legal row, just not bold. It wraps onto two
   lines on a phone and that is fine. */
.durd-footer__company { line-height: 1.6; max-width: 100ch; }

/* --- legal documents ------------------------------------------------------
   Seven long documents (Scripts/legal/) rendered inside .durd-prose. They are read
   in a hurry by someone looking for one clause, so the shape has to help: numbered
   headings that stand out from the body, tables that scroll instead of squashing on
   a phone, and the identity block as a two-column definition list. */

.durd-legal { max-width: 74ch; }
.durd-legal h2 { font-size: 1.15rem; margin-top: 2.2rem; margin-bottom: .6rem; }
.durd-legal h3 { font-size: 1rem; margin-top: 1.4rem; margin-bottom: .4rem; }
.durd-legal p, .durd-legal li { line-height: 1.75; }
.durd-legal ul, .durd-legal ol { padding-inline-start: 1.2rem; display: grid; gap: .45rem; }

.durd-legal__lead { font-size: 1.05rem; color: var(--durd-ink); }
.durd-legal__meta { margin-top: 2.5rem; font-size: 12.5px; color: var(--durd-ink-2); }

/* The company identity block: label above value on a phone, two columns from sm up.
   A <dl> rather than a table because it is pairs, not rows of data. */
.durd-legal__id { display: grid; gap: .1rem .9rem; margin: 1rem 0 1.4rem; }
.durd-legal__id dt { color: var(--durd-ink-2); font-weight: 500; font-size: 13px; }
.durd-legal__id dd { color: var(--durd-ink); font-weight: var(--durd-w-strong); margin: 0 0 .5rem; }

@media (min-width: 576px) {
  .durd-legal__id { grid-template-columns: 15rem 1fr; align-items: baseline; }
  .durd-legal__id dt { padding-top: .1rem; }
  .durd-legal__id dd { margin-bottom: .35rem; }
}

/* A wide table must scroll inside itself, never push the page sideways. */
.durd-legal table { width: 100%; border-collapse: collapse; margin: 1rem 0 1.5rem; font-size: 14px; display: block; overflow-x: auto; }
.durd-legal th, .durd-legal td { border: 1px solid var(--durd-line); padding: .6rem .75rem; text-align: start; vertical-align: top; }
.durd-legal th { background: var(--durd-surface); color: var(--durd-ink); font-weight: var(--durd-w-strong); }

/* The unfilled-value marker, «DOLDURULACAK: …». It is meant to be impossible to miss
   and impossible to mistake for real copy: a legal page carrying an invented phone
   number is a false statement, while one carrying a visible hole is an honest draft.
   Scripts/lint/legal-texts.sh blocks go-live while any remain. */
.durd-legal__todo {
  background: #fdece7;
  color: #a8331a;
  border: 1px dashed #e0a394;
  border-radius: 3px;
  padding: .05em .4em;
  font-weight: var(--durd-w-strong);
  font-size: .92em;
  white-space: normal;
}

/* --- back to top --------------------------------------------------------- */

.durd-totop {
  position: fixed;
  inset-inline-end: 18px;
  bottom: 18px;
  z-index: 1035;
  width: 46px;
  height: 46px;
  border: 0;
  border-radius: var(--durd-pill);
  background: var(--durd-ink);
  color: #fff;
  display: grid;
  place-items: center;
  opacity: 0;
  visibility: hidden;
  transform: translateY(10px);
  transition: opacity .2s ease, transform .2s ease, visibility .2s;
}

.durd-totop.is-on { opacity: 1; visibility: visible; transform: none; }
.durd-totop:hover { background: var(--durd-clay); color: #fff; }

/* --- the wholesale showcase --------------------------------------------- */

/* The two shops are told apart by a tint, not by a different design. The older
   skin tinted the whole page cream, which reads as a different brand under the
   white palette — so the ground is now white on both and only the bands differ:
   pale blue on retail, warm stone on the showcase. */
.durd-wholesale {
  --durd-bg: #ffffff;
  --durd-bg-deep: #f4f3f0;
  --durd-band: #f3f2ee;
}

.durd-wholesale .durd-announce { background: var(--durd-band); }

/* --- odds and ends the palette change leaves behind ---------------------- */

.durd-card { border-radius: 0; box-shadow: none; }
.durd-eyebrow { color: var(--durd-clay); letter-spacing: .12em; }
.durd-pill { border-radius: var(--durd-pill); }
.durd-mega, .offcanvas { border-radius: 0; }
.durd-contactbar { border-radius: 0; }
.durd-usp__item { border-radius: 0; }
.durd-quote { color: var(--durd-clay); }
.durd-gallery__main, .durd-gallery__thumb { border-radius: 0; }
.durd-buybox__price { font-weight: var(--durd-w-display); }
.durd-tiers, .durd-swatch, .form-control, .form-select { border-radius: 0; }
.durd-qty { border-radius: 0; }
.durd-search input[type="search"], .durd-search input[type="text"] { border-radius: 0; }

/* ==========================================================================
   REDESIGN, SECOND PASS — matching the reference's LAYOUT, not just its palette
   --------------------------------------------------------------------------
   The first pass reproduced the reference's colour, type and spacing and then
   kept this theme's own page composition underneath. The operator compared the
   two side by side and was right: the width, the category mosaic and the product
   hover are what make that storefront look like itself, and none of the three
   had been done. They are done here.
   ========================================================================== */

/* --- width ---------------------------------------------------------------
   Bootstrap's container tops out at 1320px (1296 of content), and on a 1920px
   screen that leaves 312px of dead margin down each side while the reference
   keeps filling. Measured: reference ~1410px at a 2000px viewport, ours 1296px
   at 1920px. One rule, and every page in the shop widens with it. */

.container,
.container-fluid,
.container-lg,
.container-md,
.container-sm,
.container-xl,
.container-xxl {
  width: min(92%, 1560px);
  max-width: none;
  padding-inline: 0;
  margin-inline: auto;
}

/* --- hero, at the reference's scale -------------------------------------- */

@media (min-width: 992px) {
  .durd-hero2 { padding-top: 60px; }
  .durd-hero2__band { min-height: 540px; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); }
  .durd-hero2__media { margin-block: -60px; }
  .durd-hero2__copy { padding-inline: clamp(2.5rem, 4vw, 5rem); }
}

.durd-hero2__copy h1 { font-size: clamp(2rem, 1.1rem + 3.6vw, 3.6rem); }
.durd-hero2__copy .durd-lede { font-size: 14px; max-width: 44ch; }

/* --- the category mosaic -------------------------------------------------
   The reference's signature block: a three-column grid where the tiles are
   deliberately unequal — two tall, one wide, three square, repeating every six.
   A uniform grid of identical rectangles is what this theme had before, and it
   is exactly what the operator meant by "neredeyse sabit".

   The pattern tiles perfectly on 3 columns x 3 rows = 9 cells per 6 tiles:

     +-------+-------+-------+
     |       |   2   |       |     1 : tall  (col 1, rows 1-2)
     |   1   +-------+   3   |     3 : tall  (col 3, rows 1-2)
     |       |   4   |       |     5 : wide  (cols 1-2, row 3)
     +-------+-------+-------+
     |       5       |   6   |
     +---------------+-------+

   Two rules make it hold:

   `grid-auto-flow: dense` — without it, item 4 will not drop back into the hole
   at (row 2, col 2) that the tall tiles left; it steps past to row 3 and the
   mosaic falls apart.

   `:nth-last-child(...)` on every span — a tall tile borrows a cell from the row
   BELOW it and a wide tile borrows the cell beside it, so a tile can only take
   extra space when enough tiles follow to close the shape. Otel Tekstili has five
   children; without the guard tile 1 went tall and left three empty cells in the
   middle of the page. Tall needs 5 tiles after it, wide needs 1. */

.durd-tilegrid { display: grid; gap: 16px; grid-template-columns: repeat(2, minmax(0, 1fr)); }

@media (min-width: 768px) {
  .durd-tilegrid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    grid-auto-rows: 240px;
    grid-auto-flow: dense;
  }

  .durd-tile--photo { aspect-ratio: auto; height: 100%; }
}

/* THREE columns only — capped with max-width, not left open.
   These rules used to run to any width, and the four-column block below tried to
   undo them with `.durd-tilegrid > *:nth-child(6n + 1) { grid-row: auto; }`. That
   reset never fired: one pseudo-class loses to two on specificity no matter which
   comes later in the file, so at 1200px+ the LOOSER three-column guards were still
   the ones in force and the stricter four-column ones underneath them were dead
   letters. Capping the media query is the fix that does not depend on specificity. */
@media (min-width: 768px) and (max-width: 1199.98px) {
  .durd-tilegrid--mosaic > *:nth-child(6n + 1):nth-last-child(n + 6) { grid-row: span 2; }
  .durd-tilegrid--mosaic > *:nth-child(6n + 3):nth-last-child(n + 4) { grid-row: span 2; }
  .durd-tilegrid--mosaic > *:nth-child(6n + 5):nth-last-child(n + 2) { grid-column: span 2; }
}

@media (min-width: 1400px) {
  .durd-tilegrid { grid-auto-rows: 285px; }
}

.durd-tile {
  position: relative;
  display: block;
  overflow: hidden;
  border-radius: 0;
  background: var(--durd-bg-deep);
}

.durd-tile img { width: 100%; height: 100%; object-fit: cover; transition: transform .6s cubic-bezier(.2, .7, .3, 1); }
.durd-tile:hover img { transform: scale(1.06); }
.durd-tile:hover { text-decoration: none; }

/* Two scrims rather than one: the tile carries text at the top AND the bottom,
   and a single bottom-up gradient leaves the count line unreadable on a pale
   photograph. */
.durd-tile--photo::after {
  content: '';
  position: absolute;
  inset: 0;
  /* One long ramp per edge, and the legibility carried mainly by the text
     shadow. Short or multi-stop ramps looked correct as numbers and drew a
     visible horizontal seam across every pale photograph — the eye finds the
     end of a gradient long before it finds the gradient. */
  background:
    linear-gradient(to bottom, rgba(0, 0, 0, .52), rgba(0, 0, 0, 0) 62%),
    linear-gradient(to top, rgba(0, 0, 0, .48), rgba(0, 0, 0, 0) 58%);
  pointer-events: none;
}

.durd-tile__head {
  position: absolute;
  z-index: 1;
  top: 0;
  inset-inline: 0;
  padding: 1.15rem 1.3rem;
  display: block;
}

.durd-tile__count {
  display: block;
  color: #ff9b7d;
  font-size: 12px;
  font-weight: var(--durd-w-strong);
  margin-bottom: .1rem;
  text-shadow: 0 1px 8px rgba(0, 0, 0, .55);
}

.durd-tile__title {
  display: block;
  color: #fff;
  font-size: clamp(1.05rem, .9rem + .5vw, 1.35rem);
  font-weight: var(--durd-w-display);
  letter-spacing: .2px;
  line-height: 1.25;
  text-shadow: 0 1px 3px rgba(0, 0, 0, .55), 0 2px 16px rgba(0, 0, 0, .45);
}

.durd-tile__more {
  position: absolute;
  z-index: 1;
  bottom: 1.15rem;
  inset-inline-start: 1.3rem;
  display: inline-flex;
  align-items: center;
  gap: .7rem;
  color: #fff;
  font-size: 12.5px;
  font-weight: 400;
  text-shadow: 0 1px 3px rgba(0, 0, 0, .6), 0 2px 14px rgba(0, 0, 0, .5);
}

.durd-tile__more::after {
  content: '\f061';
  font-family: 'Font Awesome 7 Free', 'Font Awesome 6 Free', 'FontAwesome';
  font-weight: 900;
  font-size: 10px;
  width: 32px;
  height: 32px;
  border-radius: var(--durd-pill);
  background: #fff;
  color: var(--durd-ink);
  display: grid;
  place-items: center;
  transition: background-color .2s ease, color .2s ease;
}

.durd-tile:hover .durd-tile__more::after { background: var(--durd-clay); color: #fff; }

/* The typographic fallback tile, for a category with no photograph yet. */
.durd-tile--type::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(0, 0, 0, .12), rgba(0, 0, 0, 0) 45%);
}

.durd-tile--type .durd-tile__title,
.durd-tile--type .durd-tile__more { color: var(--durd-ink); text-shadow: none; }
.durd-tile--type .durd-tile__count { color: var(--durd-clay); }
.durd-tile--type .durd-tile__more::after { background: var(--durd-ink); color: #fff; }

/* On a phone the tile is half the viewport wide, so a two-word category name
   wraps to two lines and — with the head pinned to the top and the "Keşfet" row
   to the bottom — the two collided inside a 4:3 box. A square tile plus a
   two-line clamp gives the title room without letting a long name push the
   action off the tile. */
@media (max-width: 767px) {
  .durd-tile--photo { aspect-ratio: 1 / 1; }
  .durd-tile__head { padding: .8rem .9rem; }
  .durd-tile__title {
    font-size: .95rem;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }
  .durd-tile__count { font-size: 11px; }
  .durd-tile__more { bottom: .8rem; inset-inline-start: .9rem; font-size: 11.5px; gap: .5rem; }
  .durd-tile__more::after { width: 26px; height: 26px; }
}

/* --- product card, with the reference's hover ---------------------------- */

.product-thumb .image, .durd-thumb__image {
  background: var(--durd-bg-deep);
  border-radius: 0;
  aspect-ratio: 1 / 1;
}

.product-thumb .image > a { display: block; width: 100%; height: 100%; position: relative; }
.product-thumb .image img { width: 100%; height: 100%; object-fit: cover; }

/* The second photograph, wiped in from the left. `scaleX` from the left edge is
   the reference's own move and it is worth copying: a plain cross-fade of two
   photographs of the same object reads as a rendering glitch, a wipe reads as a
   deliberate reveal. */
.durd-thumb__back {
  position: absolute;
  inset: 0;
  opacity: 0;
  transform: scaleX(0);
  transform-origin: left center;
  transition: opacity .45s ease, transform .5s ease;
}

.product-thumb:hover .durd-thumb__back,
.product-thumb:focus-within .durd-thumb__back { opacity: 1; transform: scaleX(1); }

/* No second photograph yet — the twelve demo products have one each — so the
   card still has to answer the pointer. A slow zoom does it, and it is switched
   off on the cards that DO have a second image so the two never fight. */
.product-thumb:hover .durd-thumb__front { transform: scale(1.05); }
.product-thumb .durd-thumb__front { transition: transform .6s cubic-bezier(.2, .7, .3, 1); }
.product-thumb:has(.durd-thumb__back):hover .durd-thumb__front { transform: none; }

/* The action stack: round black discs that drop in from above the card. */
.durd-thumb__actions {
  position: absolute;
  z-index: 2;
  top: 12px;
  inset-inline-start: 12px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  opacity: 0;
  transform: translateY(-14px);
  transition: opacity .35s ease, transform .35s ease;
}

.product-thumb:hover .durd-thumb__actions,
.product-thumb:focus-within .durd-thumb__actions { opacity: 1; transform: none; }

.durd-thumb__act {
  width: 36px;
  height: 36px;
  border: 0;
  border-radius: var(--durd-pill);
  background: var(--durd-ink);
  color: #fff;
  display: grid;
  place-items: center;
  font-size: 13px;
  transition: background-color .18s ease, color .18s ease;
}

.durd-thumb__act:hover, .durd-thumb__act:focus { background: var(--durd-clay); color: #fff; text-decoration: none; }

/* A coarse pointer has no hover, so the stack would never appear. Show it. */
@media (hover: none) {
  .durd-thumb__actions { opacity: 1; transform: none; }
}

.product-thumb .content, .durd-thumb__body { padding-top: 1rem; gap: .35rem; }
.product-thumb h4, .durd-thumb__name { font-size: .95rem; font-weight: var(--durd-w-strong); letter-spacing: .1px; }
.product-thumb h4 a:hover, .durd-thumb__name a:hover { color: var(--durd-clay); }
.durd-thumb__flag { border-radius: 0; letter-spacing: .04em; text-transform: uppercase; }
.price-new, .durd-thumb__price .durd-price { font-size: 1.05rem; font-weight: var(--durd-w-strong); }

/* The reference's add-to-cart is a filled black pill, not an outline. */
.durd-thumb__cta .btn {
  background: var(--durd-ink);
  border-color: var(--durd-ink);
  color: #fff;
  padding-block: .7rem;
}

.durd-thumb__cta .btn:hover, .durd-thumb__cta .btn:focus {
  background: var(--durd-clay);
  border-color: var(--durd-clay);
  color: #fff;
}

.durd-thumb__cta .btn:disabled { background: var(--durd-line); border-color: var(--durd-line); color: var(--durd-ink-2); }

/* --- product rows, four across on a wide screen -------------------------- */

@media (min-width: 1400px) {
  .product-grid.col-lg-4 { flex: 0 0 25%; max-width: 25%; }
}

/* --- product carousel ----------------------------------------------------
   The reference slides its product rows behind two arrows. This is built ON the
   markup the featured and related modules already emit — a Bootstrap .row whose
   children carry row-cols widths — rather than by overriding those templates,
   which OpenCart 4.1 cannot do reliably for extensions.

   The row becomes a nowrap scroller with snap points; durd.js adds the arrows
   and hides them when everything already fits. With JavaScript off it is still a
   horizontal scroller, which is the whole behaviour on a touch screen anyway. */

.durd-carousel { position: relative; }

.durd-carousel > h3 { padding-inline-end: 104px; }

.durd-carousel__track {
  flex-wrap: nowrap;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -ms-overflow-style: none;
  overscroll-behavior-x: contain;
  /* The action discs and the focus ring sit slightly outside the card box. */
  padding-block: 2px;
}

.durd-carousel__track::-webkit-scrollbar { display: none; }

/* Bootstrap's row does its spacing with negative margins on the row and padding
   on each column, which leaves the last card inset from the container's right
   edge while the section heading and the category tiles above it sit flush. In a
   scroller that inset also eats into the snap positions. Replaced with a plain
   `gap`, and the column widths restated to match — these override
   `.row-cols-* > *` on equal specificity and later source order, which holds
   because Bootstrap is linked before this sheet. */
.durd-carousel__track {
  --bs-gutter-x: 0;
  margin-inline: 0;
  gap: 16px;
}

.durd-carousel__track > * {
  scroll-snap-align: start;
  flex: 0 0 auto;
  padding-inline: 0;
  /* Under 576px the card is deliberately not a whole viewport: a sliver of the
     next one is the only thing that tells a thumb the row scrolls at all. */
  width: calc(72% - 8px);
}

@media (min-width: 576px) { .durd-carousel__track > * { width: calc((100% - 16px) / 2); } }
@media (min-width: 768px) { .durd-carousel__track > * { width: calc((100% - 32px) / 3); } }
@media (min-width: 1200px) { .durd-carousel__track > * { width: calc((100% - 48px) / 4); } }

.durd-carousel__nav {
  position: absolute;
  top: 2px;
  inset-inline-end: 0;
  display: flex;
  gap: .5rem;
  z-index: 2;
}

.durd-carousel__btn {
  width: 42px;
  height: 42px;
  padding: 0;
  border: 1px solid var(--durd-line-strong);
  border-radius: var(--durd-pill);
  background: #fff;
  color: var(--durd-ink);
  display: grid;
  place-items: center;
  font-size: 12px;
  transition: background-color .18s ease, color .18s ease, border-color .18s ease, opacity .18s ease;
}

.durd-carousel__btn:hover:not(:disabled),
.durd-carousel__btn:focus-visible:not(:disabled) {
  background: var(--durd-ink);
  border-color: var(--durd-ink);
  color: #fff;
}

.durd-carousel__btn:disabled { opacity: .25; cursor: default; }

/* On a phone there is no room beside the heading, so the arrows drop below the
   row — which is also where the DOM already puts them, the nav being appended
   after the track. */
@media (max-width: 575px) {
  .durd-carousel > h3 { padding-inline-end: 0; }
  .durd-carousel__nav { position: static; justify-content: flex-end; margin-top: .25rem; }
  .durd-carousel__btn { width: 38px; height: 38px; }
}

@media (prefers-reduced-motion: reduce) {
  .durd-carousel__track { scroll-behavior: auto; }
}

/* ==========================================================================
   REDESIGN, THIRD PASS — the LISTING page
   --------------------------------------------------------------------------
   The home page had been matched to the reference; the category page had not,
   and the operator put the two side by side. Five structural things were
   missing, all of them visible in one glance: the page-head band, the sidebar
   category tree, the grid/list toggle, four products across instead of three,
   and a rating row on every card rather than only on reviewed ones.
   ========================================================================== */

/* --- the page-head band -------------------------------------------------- */

.durd-pagehead {
  background: var(--durd-band);
  padding-block: clamp(1.75rem, 1.2rem + 2vw, 3rem);
  text-align: center;
}

.durd-pagehead__title {
  font-size: clamp(1.15rem, 1rem + .8vw, 1.6rem);
  font-weight: var(--durd-w-display);
  letter-spacing: 1.2px;
  text-transform: uppercase;
  margin: 0 0 .4rem;
}

.durd-pagehead__crumbs {
  justify-content: center;
  font-size: 12.5px;
  margin: 0;
}

.durd-pagehead__crumbs .breadcrumb-item a { color: var(--durd-ink-2); }
.durd-pagehead__crumbs .breadcrumb-item a:hover { color: var(--durd-clay); }
.durd-pagehead__crumbs .breadcrumb-item:last-child a { color: var(--durd-ink); font-weight: var(--durd-w-strong); }

/* The band is the first thing under the sticky header, so the page below it no
   longer needs its own top padding. */
.durd-pagehead + .durd-page { padding-top: clamp(1.25rem, .8rem + 2vw, 2.25rem); }

/* --- the category's own photograph, as a listing banner ------------------ */

/* .durd-catbanner is gone with the markup that used it — see product/category.twig
   for why a category banner cannot be built out of the tile picture. */

/* --- the sidebar ---------------------------------------------------------
   The reference draws each sidebar block as a bordered box with a heading. The
   category tree is OpenCart's own `category` module, enabled on the Category
   layout — its markup is a bare .list-group, so all of this is skin. */

.durd-filters .list-group,
.durd-modules > .list-group {
  border: 1px solid var(--durd-line);
  border-radius: 0;
  padding: .4rem 0;
}

.durd-modules > .list-group > .list-group-item {
  border: 0;
  padding: .45rem 1.15rem;
  font-size: 13.5px;
  background: transparent;
  color: var(--durd-ink-2);
}

.durd-modules > .list-group > a.list-group-item:hover { background: transparent; color: var(--durd-clay); }

.durd-modules > .list-group > .list-group-item.active {
  background: transparent;
  color: var(--durd-ink);
  font-weight: var(--durd-w-strong);
}

/* --- toolbar ------------------------------------------------------------- */

.durd-toolbar {
  border-block: 1px solid var(--durd-line);
  padding-block: .65rem;
  margin-bottom: 1.5rem;
}

.durd-viewtoggle { display: none; gap: .3rem; }

@media (min-width: 768px) {
  .durd-viewtoggle { display: inline-flex; }
}

.durd-viewtoggle__btn {
  width: 34px;
  height: 34px;
  border: 1px solid var(--durd-line);
  border-radius: 0;
  background: #fff;
  color: var(--durd-ink-3);
  display: grid;
  place-items: center;
  font-size: 12px;
  transition: background-color .18s ease, color .18s ease, border-color .18s ease;
}

.durd-viewtoggle__btn:hover { color: var(--durd-ink); border-color: var(--durd-line-strong); }

.durd-viewtoggle__btn[aria-pressed="true"] {
  background: var(--durd-ink);
  border-color: var(--durd-ink);
  color: #fff;
}

/* --- list view -----------------------------------------------------------
   One row per product: photograph left, everything else beside it. Kept off
   phones entirely — at 390px a "list" of horizontal cards is just a worse grid. */

@media (min-width: 768px) {
  .durd-view-list > * { width: 100%; }

  .durd-view-list .product-thumb {
    flex-direction: row;
    align-items: flex-start;
    gap: 1.5rem;
  }

  .durd-view-list .product-thumb .image { flex: 0 0 220px; width: 220px; }
  .durd-view-list .product-thumb .content { padding-top: .25rem; }
  .durd-view-list .durd-thumb__desc { -webkit-line-clamp: 3; max-width: 70ch; }
  .durd-view-list .durd-thumb__cta { max-width: 220px; }
}

/* --- product card: the sale flag ----------------------------------------
   Black, square, top-right — the reference's own. It used to be a clay pill at
   the top LEFT, which is now where the hover action stack lives. */

.durd-thumb__flag {
  top: 0;
  inset-inline-start: auto;
  inset-inline-end: 0;
  padding: .3rem .7rem;
  background: var(--durd-ink);
  border-radius: 0;
  font-size: 10.5px;
  letter-spacing: .06em;
}

.durd-rating { color: #f5a623; font-size: 11px; gap: .1rem; }

/* --- four across on a wide screen ---------------------------------------- */

@media (min-width: 1400px) {
  .row-cols-xxl-4 > * { flex: 0 0 auto; width: 25%; }
}

/* ==========================================================================
   REDESIGN, FOURTH PASS — measured against the reference, not remembered
   --------------------------------------------------------------------------
   Scripts/compare.sh renders the reference and this shop at the same viewport
   and puts them side by side. Everything below came out of reading that image
   rather than out of recollection, which is why it is mostly numbers.

     header       the reference has NO announcement strip and exactly three
                  actions (account, search, cart). Both fixed in the template.
     hero         its copy sits ~235px inside the band; ours sat at 60px. Its
                  heading is smaller and more letter-spaced than ours was, and
                  its band is ~475px tall against our 600px.
     rhythm       it separates the upper sections with a hairline rule and about
                  twice the vertical air we had.
     tiles        its category tiles are LIGHT GREY with the product sitting on
                  the grey and the type in black beside it — not white type over
                  a full-bleed photograph. That is the structure built here; it
                  will look right once the cut-out product images land, which the
                  operator has already said is the next job.
   ========================================================================== */

/* --- header -------------------------------------------------------------- */

@media (min-width: 992px) {
  :root { --durd-header-h: 100px; }
}

.durd-wordmark { font-size: 1.35rem; }

@media (min-width: 992px) {
  .durd-wordmark { font-size: 2rem; }
}

/* --- hero ---------------------------------------------------------------- */

.durd-hero2 { margin-bottom: clamp(2.5rem, 5vw, 4.5rem); }

.durd-hero2__copy h1 {
  font-size: clamp(1.7rem, 1rem + 2.2vw, 2.6rem);
  letter-spacing: .5px;
  line-height: 1.28;
  margin-bottom: 1.1rem;
  max-width: 13ch;
}

.durd-hero2__copy .durd-lede { margin-bottom: 2.6rem; }

@media (min-width: 992px) {
  .durd-hero2 { padding-top: 56px; }
  .durd-hero2__band { min-height: 470px; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  /* The reference indents its hero copy hard — a third of the band's own width
     before the first letter. It is the single biggest reason its hero reads as
     composed rather than as a two-column layout. */
  .durd-hero2__copy { padding-inline: clamp(3rem, 16%, 15rem) 2rem; }
  .durd-hero2__media { margin-block: -56px; }
}

.btn-hero { padding: .8rem 2rem; font-size: 12.5px; }

/* --- section rhythm ------------------------------------------------------ */

.durd-rule {
  border: 0;
  border-top: 1px solid var(--durd-line);
  opacity: 1;
  margin-block: clamp(2.5rem, 5vw, 4.5rem);
}

.durd-page--home .durd-section { margin-block: clamp(2.75rem, 2rem + 3vw, 5rem); }
.durd-services { padding-block: clamp(.5rem, 2vw, 1.5rem); }
.durd-welcome h2 { font-size: clamp(1.6rem, 1.1rem + 2vw, 2.4rem); }

/* --- category tiles, the reference's way ---------------------------------
   Light grey block; the product sits ON the grey; the type is black and lives
   beside the product, not on top of it. The scrims, the white type and the text
   shadows the previous pass added are all unwound here — they existed only to
   make type legible over a photograph, which is not what this tile is. */

.durd-tile {
  background: var(--durd-bg-deep);
  display: flex;
  flex-direction: column;
  padding: 1.4rem 1.5rem;
  gap: .75rem;
}

.durd-tile--photo::after,
.durd-tile--type::after { content: none; }

.durd-tile img {
  flex: 1 1 auto;
  min-height: 0;
  width: 100%;
  object-fit: contain;
  mix-blend-mode: multiply;
}

.durd-tile__head { position: static; padding: 0; }

.durd-tile__count {
  color: var(--durd-clay);
  font-size: 12px;
  font-weight: 500;
  text-shadow: none;
  margin-bottom: .15rem;
}

.durd-tile__title {
  color: var(--durd-ink);
  font-size: clamp(1rem, .85rem + .45vw, 1.3rem);
  font-weight: var(--durd-w-display);
  letter-spacing: .2px;
  text-shadow: none;
}

.durd-tile__more {
  position: static;
  color: var(--durd-ink);
  font-size: 12.5px;
  text-shadow: none;
  margin-top: auto;
}

.durd-tile__more::after {
  background: #fff;
  color: var(--durd-ink);
  box-shadow: 0 2px 10px rgba(0, 0, 0, .07);
}

.durd-tile:hover img { transform: scale(1.04); }
.durd-tile:hover .durd-tile__title { color: var(--durd-clay); }

@media (max-width: 767px) {
  .durd-tile { padding: 1rem 1.05rem; gap: .5rem; }
  .durd-tile--photo { aspect-ratio: 1 / 1; }
}

/* --- newsletter ---------------------------------------------------------- */

.durd-news { display: grid; gap: 1.5rem; }

@media (min-width: 768px) {
  .durd-news { grid-template-columns: minmax(0, 1fr) minmax(0, 460px); align-items: center; gap: 3rem; }
}

.durd-news h2 { font-size: clamp(1.4rem, 1.1rem + 1.2vw, 1.9rem); margin-bottom: .5rem; }
.durd-news p { color: var(--durd-ink-2); font-size: 13.5px; margin: 0; }

.durd-news__form {
  position: relative;
  display: flex;
  align-items: center;
  background: var(--durd-bg-deep);
  border-radius: var(--durd-pill);
  padding: .35rem .35rem .35rem 1.4rem;
}

.durd-news__input {
  flex: 1 1 auto;
  border: 0;
  background: transparent;
  font-size: 13.5px;
  padding-block: .7rem;
  color: var(--durd-ink);
}

.durd-news__input:focus { outline: none; }
.durd-news__form:focus-within { outline: 2px solid var(--durd-ink); outline-offset: 2px; }

.durd-news__submit {
  flex: 0 0 44px;
  width: 44px;
  height: 44px;
  border: 0;
  border-radius: var(--durd-pill);
  background: transparent;
  color: var(--durd-ink);
  display: grid;
  place-items: center;
  transition: background-color .18s ease, color .18s ease;
}

.durd-news__submit:hover { background: var(--durd-ink); color: #fff; }

/* --- customer quote ------------------------------------------------------ */

.durd-quoteblock { display: grid; gap: 1.25rem; }

@media (min-width: 768px) {
  .durd-quoteblock { grid-template-columns: minmax(0, .32fr) minmax(0, 1fr); gap: 3rem; align-items: center; }
  .durd-quoteblock blockquote { border-inline-start: 1px solid var(--durd-line); padding-inline-start: 3rem; }
}

.durd-quoteblock h2 { font-size: clamp(1.5rem, 1.1rem + 1.8vw, 2.2rem); margin: 0; }
.durd-quoteblock blockquote { margin: 0; }
.durd-quoteblock blockquote p { color: var(--durd-ink-2); font-size: 14px; margin-bottom: .75rem; }
.durd-quoteblock footer { display: flex; align-items: center; gap: .6rem; font-size: 13px; }
.durd-quoteblock footer i { color: var(--durd-clay); }
.durd-quoteblock cite { font-style: normal; font-weight: var(--durd-w-strong); color: var(--durd-ink); }
.durd-quoteblock footer a { color: var(--durd-ink-2); }

/* --- the telephone rail, at the width the reference shows it -------------- */

@media (min-width: 1360px) {
  .durd-phonerail {
    position: fixed;
    inset-inline-start: 20px;
    top: 50%;
    transform: translateY(-50%);
    z-index: 1020;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
    color: var(--durd-ink);
  }
}

/* ==========================================================================
   REFERENCE PORT — values read out of the reference's own stylesheet
   --------------------------------------------------------------------------
   Everything above this line was built by looking at the reference. Everything
   below was read out of its CSS (fetched to /tmp during the 2026-09-01 session)
   and transcribed. Where a number appears here it is THEIR number, not a
   judgement — which is the whole point, because the previous passes proved that
   rebuilding a design from memory does not converge on it.

   WHAT CANNOT BE PORTED, and why — this is the honest limit of the copy:

   The reference's hero is ONE image. `main-banner-1-1798x715.jpg` contains the
   pale ground, the heading "Wooden Chair Collection", the paragraph, the white
   "Explore All" button AND the chair. Its category mosaic is EIGHT more images
   (`category-banner1.jpg` … `category-banner8.jpg`) with the item counts and the
   titles likewise baked in; the only markup over them is a "Discover More" link
   or an "Explore All" pill.

   So those two blocks cannot be matched by CSS at all — they are Photoshop
   files. What is built here is the same geometry, the same overlays and the same
   hover behaviour, driven by real catalogue data instead. When the shop's own
   banner artwork exists, it drops into the same containers.
   ========================================================================== */

/* --- base type: theirs -------------------------------------------------- */

body { font-size: 13px; line-height: 26px; color: #808080; }
.durd-lede, .durd-prose { letter-spacing: .8px; line-height: 26px; color: #808080; }

/* --- service columns ----------------------------------------------------
   Their `#czservicecmsblock`: 70px block padding over a 1px #e5e5e5 rule; the
   heading's 50px bar GROWS to 100px and greys on hover, and the heading greys
   with it. That growing bar is the effect the operator noticed was missing. */

.durd-services { padding-block: 30px; }

.durd-service::before {
  width: 50px;
  height: 0;
  border-top: 2px solid #000;
  background: none;
  margin-bottom: 30px;
  transition: width .5s ease, border-color .5s ease;
}

.durd-service:hover::before { width: 100px; border-color: #888888; }

.durd-service h3 {
  font-size: 18px;
  font-weight: 500;
  color: #000000;
  letter-spacing: 0;
  margin-bottom: 15px;
  transition: color .5s ease;
}

.durd-service:hover h3 { color: #888888; }

.durd-service p {
  font-size: 13px;
  letter-spacing: .8px;
  font-weight: 400;
  line-height: 26px;
  color: #808080;
  margin: 0;
}

/* --- welcome split ------------------------------------------------------- */

.durd-welcome h2 {
  font-size: 38px;
  letter-spacing: .1px;
  font-weight: var(--durd-w-display);
  color: #000000;
  line-height: 52px;
}

.durd-welcome__text p { font-size: 13px; color: #808080; letter-spacing: .8px; line-height: 26px; }

@media (max-width: 767px) {
  .durd-welcome h2 { font-size: 26px; line-height: 35px; text-align: center; }
  .durd-welcome__text { text-align: center; }
}

/* --- category tiles ------------------------------------------------------
   Reverting the "contained product on grey" experiment two passes ago: the grey
   in the reference is part of the banner IMAGE, not a tile background, so
   contain-fitting a room photograph onto grey was solving a problem the
   reference does not have. The photograph fills the tile again.

   Ported exactly: the hover overlay is an inset rectangle — 10px in on every
   side, rgba(0,0,0,.09) — that scales in on the Y axis over 0.5s. */

.durd-tile { display: block; padding: 0; background: var(--durd-bg-deep); }
.durd-tile img { object-fit: cover; mix-blend-mode: normal; height: 100%; }

.durd-tile::before {
  content: '';
  position: absolute;
  inset: 10px;
  z-index: 1;
  background: rgba(0, 0, 0, .09);
  opacity: 0;
  transform: scaleY(0);
  transition: all .5s ease 0s;
  pointer-events: none;
}

.durd-tile:hover::before { opacity: 1; transform: scaleY(1); }
.durd-tile:hover img { transform: none; }

.durd-tile__head { position: absolute; top: 0; inset-inline: 0; z-index: 2; padding: 30px 30px 0; }
.durd-tile__count { color: #dc512c; font-size: 12px; font-weight: 500; }
.durd-tile__title { color: #fff; font-size: 22px; font-weight: var(--durd-w-display); letter-spacing: .2px; }
.durd-tile--type .durd-tile__title { color: #000; }

/* "Discover More": a 14px/600 label with a 38px white disc 50px to its right,
   carrying the reference's exact shadow. Hover greys the label and blacks the
   disc. */
.durd-tile__more {
  position: absolute;
  z-index: 2;
  bottom: 30px;
  inset-inline-start: 30px;
  font-size: 14px;
  font-weight: 400;
  letter-spacing: 0;
  color: #fff;
  gap: 12px;
}

.durd-tile__more::after {
  width: 38px;
  height: 38px;
  font-size: 12px;
  background: #ffffff;
  color: #000;
  box-shadow: 0 2px 10px rgba(0, 0, 0, .1);
}

.durd-tile:hover .durd-tile__more { color: #888888; }
.durd-tile:hover .durd-tile__more::after { background: #000; color: #fff; }
.durd-tile:hover .durd-tile__title { color: #fff; }
.durd-tile--type:hover .durd-tile__title { color: #888888; }
.durd-tile--type .durd-tile__more { color: #000; }

@media (max-width: 767px) {
  .durd-tile__head { padding: 16px 16px 0; }
  .durd-tile__title { font-size: 16px; }
  .durd-tile__more { bottom: 16px; inset-inline-start: 16px; font-size: 12px; gap: 8px; }
  .durd-tile__more::after { width: 30px; height: 30px; }
}

/* --- product card -------------------------------------------------------- */

.product-thumb .content, .durd-thumb__body { padding-top: 15px; }

.product-thumb h4 a, .durd-thumb__name a {
  color: #808080;
  font-size: 12px;
  line-height: 1.1;
  letter-spacing: 1.2px;
  font-weight: 400;
}

.product-thumb:hover h4 a, .product-thumb:hover .durd-thumb__name a { color: #000000; }
.product-thumb h4, .durd-thumb__name { font-size: 12px; font-weight: 400; margin-bottom: 8px; }

.durd-thumb__price { padding-top: 0; margin-bottom: 15px; }
.price-new, .durd-thumb__price .durd-price { color: #000; font-size: 13px; font-weight: var(--durd-w-strong); letter-spacing: .6px; line-height: 27px; }
.price-old { color: #878787; font-size: 15px; font-weight: 400; line-height: 25px; }

/* Their sale flag: white on black, 11px, 4px/8px, 15px in from the top right —
   and it FADES OUT on hover, because the action discs take that corner. */
.durd-thumb__flag {
  top: 15px;
  inset-inline-end: 15px;
  inset-inline-start: auto;
  padding: 4px 8px;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: .8px;
  line-height: 14px;
  background: #000000;
  color: #fff;
  transition: opacity .3s ease 0s;
}

.product-thumb:hover .durd-thumb__flag { opacity: 0; }

/* The action stack: 35px black discs, 5px apart, dropping in from above the
   card (their `top: -60%` → `top: 10px`, 0.5s). */
.durd-thumb__actions {
  top: 10px;
  inset-inline-start: 10px;
  gap: 5px;
  transform: translateY(-60%);
  transition: opacity .5s ease 0s, transform .5s ease 0s;
}

.durd-thumb__act { width: 35px; height: 35px; font-size: 12px; }
.durd-thumb__back { transition: opacity .5s ease 0s, transform .5s ease 0s; }

/* --- newsletter ---------------------------------------------------------- */

.durd-news h2 { font-size: 26px; font-weight: var(--durd-w-display); color: #000; letter-spacing: 0; margin-bottom: 15px; }
.durd-news p { font-size: 13px; letter-spacing: .4px; line-height: 30px; color: #808080; }

.durd-news__form {
  background: #f7f7f7;
  border: 1px solid #f7f7f7;
  border-radius: 25px;
  padding: 0 6px 0 30px;
  height: 47px;
}

.durd-news__input { font-size: 13px; letter-spacing: .3px; color: #000; padding-block: 0; }
.durd-news__input::placeholder { color: #bbbbbb; }
.durd-news__form:focus-within { background: #ffffff; border-color: #ededed; outline: none; }
.durd-news__submit { width: 40px; flex-basis: 40px; height: 40px; }

/* --- customer quote ------------------------------------------------------ */

.durd-quoteblock { padding-top: 70px; border-top: 1px solid #e5e5e5; }
.durd-quoteblock h2 { font-size: 32px; font-weight: var(--durd-w-display); color: #000; letter-spacing: .1px; line-height: 44px; }
.durd-quoteblock blockquote p { font-size: 13px; line-height: 24px; letter-spacing: .8px; color: #808080; }
.durd-quoteblock cite { color: #2c2f32; font-size: 15px; font-weight: var(--durd-w-strong); letter-spacing: .5px; }

/* --- hero geometry, measured rather than estimated -----------------------
   Both pages rendered at 1440 and the pale band located by scanning pixels:

     reference   y 183 → 636 (453px tall), x 79 → 1439
     ours        y 197 → 666 (469px tall), x 57 → 1382

   The height was already within 16px. Two things were not:

   The reference's band runs to the RIGHT EDGE of the viewport and starts 79px
   in — `.main-slider { width: 94.5%; float: right }`. That is precisely the
   off-centre hero the operator asked to have centred, so ours stays centred and
   this difference is deliberate.

   Its copy is indented 236px from the band's own left edge (text at x 315, band
   at 79); ours was indented 113px. And its photograph breaks 55px above the
   band's top edge, which ours was not doing — a negative margin on a stretched
   grid item was silently doing nothing, so the photograph is positioned instead
   of nudged. */

@media (min-width: 992px) {
  .durd-hero2__copy { padding-inline: clamp(2rem, 36%, 16rem) 2rem; }

  .durd-hero2__band { position: relative; }

  .durd-hero2__media { position: static; margin-block: 0; }

  .durd-hero2__media img {
    position: absolute;
    top: -56px;
    bottom: 0;
    inset-inline-end: 0;
    width: 50%;
    height: calc(100% + 56px);
  }
}

/* ==========================================================================
   TYPOGRAPHY, TRANSCRIBED — the sidebar, the filters and the product caption
   --------------------------------------------------------------------------
   The operator's reading was right: the weights were ours, not theirs. Every
   value below is copied out of the reference's stylesheet.

     label                 13px / 500 / #262626   (ours: 600 / near-black)
     sidebar label         #555555, hover #888888
     filter group name     14px / 600 / #000, capitalize, 0 18px
     sidebar box heading   600 16px/24px, letter-spacing .6px, capitalize,
                           left-aligned, 20px of space under it
     "refine search"       15px / 600 / capitalize
     filter submit         a grey UNDERLINED text button, not a filled pill
     product name          12px / 400 / #808080 / 1.2px, black on hover
     product price         13px / 600 / #000 / .6px / 27px
   ========================================================================== */

label, .col-form-label, .form-label, .form-check-label {
  font-size: 13px;
  font-weight: 500;
  color: #262626;
  letter-spacing: 0;
}

.durd-filters label,
.durd-modules label,
.durd-filters .form-check-label,
.durd-modules .form-check-label { color: #555555; }

.durd-filters label:hover,
.durd-modules label:hover,
.durd-filters .form-check-label:hover,
.durd-modules .form-check-label:hover { color: #888888; }

/* The block headings in the sidebar: "Kategoriler", "Aramayı Daralt". */
/* The reference's sidebar headings sit at `padding: 0 0 20px 0` because its
   boxes have no border and no inset — the heading lines up with the box's own
   left edge. Ours DO have a border, and copying that padding verbatim pushed
   "Aramayı Daralt" flat against it while every row below stayed indented.
   The heading takes the same horizontal inset as the rows instead. */
.durd-filters h3,
.durd-filters h5,
.durd-filters .card-header,
.durd-modules .card-header {
  color: #000000;
  font: 600 16px/24px var(--durd-sans);
  letter-spacing: .6px;
  text-transform: none;
  text-align: start;
  padding: 1.05rem 1.1rem .5rem;
  margin: 0;
  border: 0;
  background: transparent;
}

/* The filter icon upstream puts in the header is noise next to a heading that
   already says what the box is. */
.durd-filters .card-header i,
.durd-modules .card-header i { display: none; }

/* The mobile drawer's own title keeps the offcanvas-header's padding. */
.durd-filters .offcanvas-title {
  color: #000000;
  font: 600 16px/24px var(--durd-sans);
  letter-spacing: .6px;
  text-transform: none;
}

/* The first group name sat a long way under the header — the header's bottom
   padding and the list's first row padding stacked. */
.durd-filters .list-group-flush > .list-group-item:first-child { padding-top: .9rem; }

/* The group names inside the filter panel: "Renk", "Kumaş Cinsi", "Yatak Ölçüsü".
   These were 12px uppercase grey and should be 14px semibold black. */
.durd-filtergroup__legend,
.durd-modules a.list-group-item:not([href]) {
  color: #000000;
  font-size: 14px;
  font-weight: var(--durd-w-strong);
  letter-spacing: 0;
  text-transform: none;
  margin-bottom: .5rem;
}

/* The category tree in the sidebar. */
.durd-modules > .list-group > .list-group-item { font-size: 13px; line-height: 22px; color: #555555; }
.durd-modules > .list-group > .list-group-item.active { color: #000000; font-weight: var(--durd-w-strong); }

/* Their filter submit is a grey underlined text button. Ours was a black pill,
   which read as the page's primary action when it is the sidebar's. */
.durd-filters .card-footer .btn,
.durd-filters .btn[id*="filter"],
#button-filter {
  background: none;
  border: 0;
  color: #888888;
  font-size: 14px;
  font-weight: 500;
  padding: 0;
  text-decoration: underline;
  text-underline-offset: 3px;
  width: auto;
}

.durd-filters .card-footer .btn:hover,
#button-filter:hover { color: #000000; text-decoration: none; background: none; }

/* --- product caption: their order and their weights ----------------------
   The reference's grid card reads rating → name → price, with no description
   and no visible cart button. Ours read name → description → rating → price
   with a full-width button. Reordered in CSS rather than in the template,
   because the LIST view wants the description and the button back. */

.product-thumb .content, .durd-thumb__body { display: flex; flex-direction: column; }
.durd-rating { order: -1; margin-bottom: .35rem; }
.durd-thumb__desc { display: none; }
.durd-thumb__cta { display: none; }

.durd-view-list .durd-thumb__desc { display: -webkit-box; }
.durd-view-list .durd-thumb__cta { display: block; }

/* A coarse pointer never sees the hover stack, so the button must stay. */
@media (hover: none) {
  .durd-thumb__cta { display: block; }
}

.durd-thumb__act:disabled { background: var(--durd-line-strong); cursor: default; }

/* --- toolbar: the reference labels its two selects ----------------------- */

.durd-toolbar__label { font-size: 13px; font-weight: 500; color: #262626; margin: 0; white-space: nowrap; }
.durd-toolbar .form-select { font-size: 13px; }

/* The reference draws NO rules inside its filter box — the group name is a bold
   label and the checkboxes follow it. Ours inherited Bootstrap's list-group
   dividers, so "Renk" ended up boxed in by a line above and a line below. */
.durd-filters .list-group,
.durd-filters .list-group-item,
.durd-filters .list-group-item + .list-group-item,
.durd-filters .list-group-flush > .list-group-item { border: 0; }

.durd-filters .list-group-flush > .list-group-item:first-child { padding-top: .25rem; }
.durd-filters a.list-group-item:not([href]) { padding-bottom: .35rem; }
.durd-filters .form-check { margin-bottom: .15rem; }
.durd-filters .card-footer { border-top: 1px solid var(--durd-line); }

/* One rule survived the sweep above on specificity alone and drew a line over
   every group name after the first ("Kumaş Cinsi", "Yatak Ölçüsü"). */
.durd-filters .list-group-item + a.list-group-item:not([href]),
.durd-modules .list-group-item + a.list-group-item:not([href]) {
  border-top: 0;
  margin-top: .9rem;
  padding-top: 0;
}

/* --- the hero product, cut out -------------------------------------------
   The hero image is now a transparent PNG/WebP of the product itself rather
   than a photograph filling half the band. It is `contain`, anchored to the
   bottom of the band, and allowed well past the band's top edge — which is
   where the reference's chair goes and why its hero reads as composed. */

.durd-hero2__media img { object-fit: contain; object-position: center bottom; }

@media (min-width: 992px) {
  .durd-hero2 { padding-top: 96px; }

  .durd-hero2__media img {
    top: -96px;
    bottom: 0;
    inset-inline-end: 4%;
    width: 42%;
    height: calc(100% + 96px);
    /* No drop-shadow. It darkened the band in the shape of the product and,
       on the pale blue retail band, read as a leftover background box — which
       is exactly what the operator saw. A cut-out on a flat band does not need
       one; the band's own edge is the depth cue. */
  }
}

@media (max-width: 991px) {
  .durd-hero2__media { padding: 0 1.5rem 1.5rem; }
  .durd-hero2__media img { max-height: 340px; margin-inline: auto; }
}

/* ==========================================================================
   CATEGORY MOSAIC — the reference's tile, measured
   --------------------------------------------------------------------------
   Measured off the reference at a 1440 viewport by scanning pixels: its tiles
   are 380px wide, in three columns at x 120-499 / 530-909 / 940-1319, with a
   30px gap. Heights are irregular (167, 257, 374, 427, 514) because each tile
   is its own banner image and the height follows the artwork.

   Ours were 500px wide on a 2000px screen, because three columns of a 1560px
   container is simply bigger than three columns of their 1170px one. Four
   columns of ours is 367px — their size. So the mosaic goes to four columns on
   a wide screen and stays at three in the middle range.

   The tile itself is now what theirs is: a light grey block with the product
   sitting ON the grey and the type in black beside it, not white type burned
   over a photograph. That only works with cut-out products, which is why it was
   reverted the first time it was tried and is right now.
   ========================================================================== */

/* 190px was the reference's SHORT tile height, and copying it verbatim was
   wrong for our tile: theirs carries no type at all in a short tile (the title
   is baked into the taller banners), ours carries a count, a title and a
   "Keşfet" row. Those take ~90px, which left 45px for the product. 250px gives
   the product the room the reference's own tiles give it. */
@media (min-width: 768px) {
  /* 315px -> 340px, 2026-09-03. The SQUARE tile's picture is limited by the
     tile's HEIGHT, not its width (measured: a 206px-wide box drew the product
     146px wide inside 158px of height), so height is the only lever that makes
     it bigger — the operator asked for exactly that on the home page's Nevresim
     Takımı tile. It is the opposite for the TALL tile, whose picture is already
     width-limited, so the extra height there buys whitespace and a little more
     width via the padding change below, which is the trade accepted here. */
  .durd-tilegrid { gap: 30px; grid-auto-rows: 340px; }
}

@media (min-width: 1200px) {
  .durd-tilegrid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  /* Four columns: a tall tile borrows from the row below, so it needs seven tiles
     after it to close both rows; a wide one needs three. No reset of the block
     above is needed any more — that block now stops at 1199.98px. */
  .durd-tilegrid--mosaic > *:nth-child(6n + 1):nth-last-child(n + 8) { grid-row: span 2; }
  .durd-tilegrid--mosaic > *:nth-child(6n + 3):nth-last-child(n + 6) { grid-row: span 2; }
  .durd-tilegrid--mosaic > *:nth-child(6n + 5):nth-last-child(n + 4) { grid-column: span 2; }
}

@media (min-width: 1400px) {
  .durd-tilegrid { grid-auto-rows: 350px; }
}

/* --- the tile: light grey, product on the grey, type in black ------------ */

.durd-tile {
  display: flex;
  flex-direction: column;
  background: #f7f7f7;
  /* Tightened from 26px/30px on 2026-09-03: every pixel of padding is a pixel
     the product cannot use, and the picture is the thing the tile is for. */
  padding: 20px 22px;
  gap: .3rem;
}

/* The reference's ONE tile hover, restored after it was killed here with
   `content: none` during the grey-tile pass. Transcribed from their sheet:

     #czcategorylistblock .categorylists-inner-block .cate_image a.banner-anchor:before
       { background: rgba(0,0,0,.09); top/left/bottom/right: 10px;
         opacity: 0; transform: scaleY(0); transition: all .5s ease 0s; }
     …  .cate_image:hover a.banner-anchor:before { opacity: 1; transform: scaleY(1); }

   Their overlay sits on the anchor that wraps the image, and `.cate-details`
   (the label and its disc) is a LATER sibling — so the type stays above the
   veil. Ours reproduces that with z-index rather than source order.

   `Scripts/lint/hover-effects.mjs` asserts this, because it is the effect that
   silently disappeared once already. */
.durd-tile::before {
  content: '';
  position: absolute;
  inset: 10px;
  z-index: 1;
  background: rgba(0, 0, 0, .09);
  opacity: 0;
  transform: scaleY(0);
  transition: all .5s ease 0s;
  pointer-events: none;
}

.durd-tile:hover::before { opacity: 1; transform: scaleY(1); }

/* The product fills the tile's free height. `flex: 1 1 auto` alone is not
   enough on an <img>: the flex item stretches but the image keeps its intrinsic
   size inside it, so a 600x450 tile photograph rendered at a third of the tile's
   width. `height: 100%` with `min-height: 0` is what makes contain-fitting
   actually use the space. */
/* `height: 100%` here was a bug that only showed once the tiles got taller: a
   percentage height on a flex item resolves against the FLEX CONTAINER, not
   against the space the item was given, so the image box was a full tile tall
   and the picture spilled over the title and the "Keşfet" row. `height: auto`
   plus flex-grow gives the item exactly the free space and no more. */
.durd-tile img {
  flex: 1 1 auto;
  min-height: 0;
  width: 100%;
  height: auto;
  object-fit: contain;
  /* Anchored right so the product sits off-centre against the type block on the
     left — operator, 2026-09-01. It used to be pulled 16px PAST the padding edge;
     the operator asked for it back off the edge on 2026-09-02, so this is now a
     positive inset and the product sits 36px in from the tile's right side.

     The negative block margins make the product bigger, and they are safe for
     the same reason the right anchor works: the type is on the LEFT. The picture
     grows into the empty right-hand end of the head row and of the "Keşfet" row,
     where there is nothing to overlap. */
  margin-inline-end: 6px;
  /* Most of the growth is taken from the TOP on purpose. Both the head and the
     "Keşfet" row carry z-index 2, so type always draws over the picture either
     way — but the "Keşfet" disc is a solid white circle that would read as
     clipped if a product ran under it, while the title is short left-aligned
     text with an empty right-hand end.

     -20px, and DO NOT raise it globally. It was taken to -36px on 2026-09-02
     because the operator asked for ONE tile — Nevresim Takımı — to be a little
     bigger; changing the shared rule instead grew every tile whose picture is
     limited by height, and on the tall ones (Runner ve Amerikan Servis, Mutfak
     Havlusu ve Önlük, Yatak Örtüsü, Klozet Takımı) the picture ran into the
     title. Two mistakes in one edit: the type's space is not the picture's to
     take, and a request about one tile is not a request about forty. */
  /* ZERO on the top edge, and it must stay zero.

     It was -20px, and that worked only because most categories were EMPTY: with
     no products there is no "N ürün" line, so the head was one line of type
     inside a box whose `min-height: 54px` reserves two — and the picture's 20px
     of climb was spent on reserved empty space, touching nothing. Seeding 41
     more products on 2026-09-02 gave every category a count, the head filled the
     line it had been reserving, and the same -20px landed on the title on every
     tile at once. Nothing about the type changed; what changed was the data
     underneath it.

     z-index keeps the words legible on top, but legible-on-top is not the same
     as not-overlapping, and a photograph running under a title is what the
     operator sees. So the picture starts where the head ends.

     ZERO on the bottom edge too, for the same reason one step later. -26px let
     the picture drop into the "Keşfet" row, and that was defended as safe
     because the disc sits on the LEFT while the product is anchored right. It
     was safe on a desktop and false on a phone: at 390px the tile is one column
     of a two-column grid, the picture spans its whole width, and the pillow
     printed straight through the arrow disc. The same "there is nothing behind
     it anyway" reasoning that the wide tile was caught on. The picture now lives
     strictly between the head and the "Keşfet" row, on every screen, and the
     height it gives up costs the product nothing on a desktop, which was measured
     rather than assumed: the picture there is limited by the tile's WIDTH, not
     its height, so the drawn product is the same 190px with the bleed and
     without it. Raising `grid-auto-rows` to compensate was tried and reverted —
     it bought empty space, not a bigger product.

     A POSITIVE top margin is a different thing and is safe: 12px of air under
     the head, asked for by the operator on 2026-09-03 because the product was
     starting on the title's baseline on the tiles whose picture fills the box.
     It costs 12px of picture and the padding change above returns more than
     that. The bottom stays hard zero. */
  margin-block: 12px 0;
  object-position: right center;
}

/* `width: 100%` pins the box to the container's width, so the negative margin
   above moved nothing. `align-self: stretch` sizes the cross axis AFTER margins,
   which is what actually lets the picture reach past the padding. */
.durd-tile img { width: auto; align-self: stretch; }

/* --- the WIDE tile: two real columns, not a picture floated over the type ---
   A wide tile is two grid columns by ONE row, so the thing limiting an
   `object-fit: contain` product is the tile's HEIGHT, not its width: a 3:2
   photograph fitted into ~165px of free height renders about 250px wide inside
   a 765px tile, and the operator sees a small product pinned right with a large
   empty half beside it (2026-09-02, Alez ve Yatak Koruyucu and Mutfak ve Masa
   Tekstili).

   The first fix was to take the image out of the flow — `position: absolute`,
   10px from the tile's top — so it could use the whole height. It looked right,
   and it was only ever right BY LUCK: the picture's box ran 70px above the head
   and 65px into the title's own text, and what kept the two apart on screen was
   the transparent margin around each cut-out. A cut-out drawn tighter in its
   frame — and they are generated, so one will be — would have printed a mattress
   straight through the word "Alez".

   So the wide tile is a GRID instead: the type owns column 1, the picture owns
   column 2 and every row of it. Nothing can overlap because nothing shares a
   cell. The picture still gets the tile's full height, which is what the
   absolute version was for, and it bleeds through the tile's own padding on the
   right and on both vertical edges so it stays as large as it was.

   The selectors below repeat the wide-span selectors EXACTLY, once per
   breakpoint. They must not be merged into one looser rule: `:nth-last-child(n
   + 2)` also matches tiles that are square at four columns, and those would get
   a two-column layout with no wide box to put it in. */
@media (min-width: 768px) and (max-width: 1199.98px) {
  .durd-tilegrid--mosaic > *:nth-child(6n + 5):nth-last-child(n + 2) {
    display: grid;
    /* The type column is the narrower one; the picture gets the rest. 1fr/1.35fr
       on a 765px tile leaves the title ~290px, which is wider than the longest
       category name at 20px bold, and a longer one simply wraps — safely, now
       that it has a column of its own. */
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.35fr);
    grid-template-rows: auto 1fr auto;
    column-gap: 16px;
  }

  .durd-tilegrid--mosaic > *:nth-child(6n + 5):nth-last-child(n + 2) .durd-tile__head { grid-column: 1; grid-row: 1; }
  .durd-tilegrid--mosaic > *:nth-child(6n + 5):nth-last-child(n + 2) .durd-tile__more { grid-column: 1; grid-row: 3; }

  .durd-tilegrid--mosaic > *:nth-child(6n + 5):nth-last-child(n + 2) img {
    grid-column: 2;
    grid-row: 1 / -1;
    position: static;
    width: 100%;
    height: 100%;
    max-width: none;
    max-height: none;
    /* Out through the tile's padding on the right and on both vertical edges —
       the three sides with nothing behind them. NOT on the left: that is the
       type's column and the whole point of the grid. These three numbers ARE the
       tile's padding — 20px/22px since 2026-09-03 — and must be changed with it,
       or the picture bleeds outside the tile instead of just through its
       padding. */
    margin: -20px -22px -20px 0;
    align-self: auto;
    object-fit: contain;
    object-position: right center;
  }
}

@media (min-width: 1200px) {
  .durd-tilegrid--mosaic > *:nth-child(6n + 5):nth-last-child(n + 4) {
    display: grid;
    /* The type column is the narrower one; the picture gets the rest. 1fr/1.35fr
       on a 765px tile leaves the title ~290px, which is wider than the longest
       category name at 20px bold, and a longer one simply wraps — safely, now
       that it has a column of its own. */
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.35fr);
    grid-template-rows: auto 1fr auto;
    column-gap: 16px;
  }

  .durd-tilegrid--mosaic > *:nth-child(6n + 5):nth-last-child(n + 4) .durd-tile__head { grid-column: 1; grid-row: 1; }
  .durd-tilegrid--mosaic > *:nth-child(6n + 5):nth-last-child(n + 4) .durd-tile__more { grid-column: 1; grid-row: 3; }

  .durd-tilegrid--mosaic > *:nth-child(6n + 5):nth-last-child(n + 4) img {
    grid-column: 2;
    grid-row: 1 / -1;
    position: static;
    width: 100%;
    height: 100%;
    max-width: none;
    max-height: none;
    /* Out through the tile's padding on the right and on both vertical edges —
       the three sides with nothing behind them. NOT on the left: that is the
       type's column and the whole point of the grid. These three numbers ARE the
       tile's padding — 20px/22px since 2026-09-03 — and must be changed with it,
       or the picture bleeds outside the tile instead of just through its
       padding. */
    margin: -20px -22px -20px 0;
    align-self: auto;
    object-fit: contain;
    object-position: right center;
  }
}

/* NO zoom on hover. The reference's tile does not move its image at all — its
   only hover is the inset veil above. A scale() here was ours, not theirs. */

/* `min-height` is not cosmetic. The head is one line when a category has no
   products and TWO when it has some ("2 ürün" above the title), and it is in the
   flex flow — so the picture below it was 28px shorter, and sat 28px higher, on
   exactly those tiles that happen to carry stock. The operator saw it on Nevresim
   Takımı ("hafif büyütülüp biraz aşağıya"), and it is a moving target rather than
   a fixed one: the same tile would shrink the day its first product is added.
   Reserving the two-line height makes every tile in a row compose identically. */
.durd-tile__head { position: relative; z-index: 2; padding: 0; min-height: 54px; }
.durd-tile__count { color: #dc512c; font-size: 12px; font-weight: 500; text-shadow: none; }

.durd-tile__title {
  color: #000000;
  font-size: 20px;
  font-weight: var(--durd-w-display);
  letter-spacing: .2px;
  line-height: 1.3;
  text-shadow: none;
}

.durd-tile__more {
  position: relative;
  z-index: 2;
  /* The tile's first build pinned this row with `position: absolute; bottom:
     30px; left: 30px`. Going back to flow needs those offsets CLEARED — a
     relatively positioned box still obeys them, and they lifted the row 30px up
     into the product and pushed it 30px right. */
  inset: auto;
  margin-top: auto;
  color: #000000;
  font-size: 14px;
  font-weight: 400;
  text-shadow: none;
  gap: 12px;
}

.durd-tile__more::after { background: #ffffff; color: #000; box-shadow: 0 2px 10px rgba(0, 0, 0, .1); }
.durd-tile:hover .durd-tile__more { color: #888888; }
.durd-tile:hover .durd-tile__more::after { background: #000; color: #fff; }

/* The TITLE deliberately does not change. The reference's titles are baked into
   the banner artwork, so nothing about them can move on hover — greying ours
   made the whole tile read as disabled under the veil. Asserted by
   Scripts/lint/hover-effects.mjs so it does not creep back. The typographic
   fallback tile had its own greying rule in an earlier layer; cancelled here so
   both kinds of tile behave the same. */
.durd-tile:hover .durd-tile__title,
.durd-tile--type:hover .durd-tile__title { color: #000000; }

@media (max-width: 767px) {
  .durd-tilegrid { gap: 14px; }
  .durd-tile { padding: 16px; }
  /* No aspect ratio on a phone. It was `1 / 1`, and a square is simply too short
     here: a 390px phone gives each of the two columns ~170px, so the tile was
     170px tall — 32px of padding, 54px of head, 30px of "Keşfet" row, and 54px
     left for the product. Half the category names wrap to two lines at this
     width, which took another 26px off, and the picture escaped the only way it
     could: straight down through the arrow disc.

     A fixed ratio cannot survive a head whose height depends on how long the
     category is called, so the tile is let grow instead and the PICTURE is given
     the floor. 110px is what the tile's own width allows anyway — at 138px of
     content width a 4:3 product draws 103px tall and no taller — so this
     reserves exactly the room the picture can use and nothing is wasted. Grid
     rows are auto here, so every tile in a row still ends up the same height. */
  .durd-tile--photo { aspect-ratio: auto; }
  .durd-tile img { min-height: 110px; }
  .durd-tile__title { font-size: 15px; }
  .durd-tile__more { font-size: 12px; gap: 8px; }
  .durd-tile__more::after { width: 30px; height: 30px; }
}

/* --- type scale ----------------------------------------------------------
   2026-09-03. The shop used to carry its hierarchy in WEIGHT: everything that
   mattered was 600 or 700 and the eye found it by looking for the black type.
   The operator read that as too heavy for a textile brand, so the display face
   is Light (300) now and the emphasis weight is Medium (500) — see
   --durd-w-display / --durd-w-strong at the top of this file.

   That leaves SIZE as the only thing carrying the hierarchy, so the steps have
   to be real. They are, largest first:

     1  hero headline, product title        30 → 46px   (h1, .durd-welcome h2)
     2  page head, the band title           22 → 32px   (.durd-pagehead__title)
     3  section head                        21 → 28px   (h2)
     4  card and panel titles               18 → 20px   (tile title, spec
                                                         caption, service h3)
     5  product name, price                 15px
     6  body                                14px
     7  meta: counts, crumbs, footer links  12–13px

   Two adjacent steps must differ by enough to be seen at a glance — the rule of
   thumb used here is a fifth. Level 5 exists because the product card had its
   name at 12px under a 13px price: the price was bigger AND darker than the
   thing it was pricing, which is backwards. */

.durd-pagehead__title {
  font-size: clamp(1.35rem, 1.1rem + 1.2vw, 2rem);
}

.product-thumb h4, .durd-thumb__name {
  font-size: 15px;
  line-height: 1.4;
  letter-spacing: .2px;
  margin-bottom: 6px;
}

.product-thumb h4 a, .durd-thumb__name a {
  font-size: 15px;
  line-height: 1.4;
  letter-spacing: .2px;
}

/* The resting grey -> black on hover is the reference theme's own behaviour and
   is asserted by Scripts/lint/hover-effects.mjs. Only the SIZE moves here. */

.price-new, .durd-thumb__price .durd-price {
  font-size: 15px;
  letter-spacing: .3px;
  line-height: 1.6;
}

.price-old { font-size: 13px; }
