/* ==========================================================================
   Shared components — used by two or more blocks or templates.
   Enqueued site-wide (and on the editor canvas) after global.css, before any
   block CSS. A rule used by exactly one block belongs in that block's own CSS.
   ========================================================================== */


/* --- Card ----------------------------------------------------------------- */

.card{
  display:flex;flex-direction:column;gap:1rem;
  padding:clamp(20px, 2.4vw, 32px);min-height:200px;
  background:var(--grey-50);color:var(--ink);
  text-decoration:none;
  transition:transform var(--speed) var(--ease);
}
a.card:hover{transform:translateY(-4px)}
.card__media{margin:calc(-1 * clamp(20px, 2.4vw, 32px)) calc(-1 * clamp(20px, 2.4vw, 32px)) 0;aspect-ratio:4 / 3;overflow:hidden}
.card__media img{width:100%;height:100%;object-fit:cover;background:var(--grey-100)}
.card__label{font-size:var(--step-micro)}
.card__title{font-family:var(--font-display);font-size:var(--step-body);font-weight:700;line-height:1.25}
.card__body{font-size:var(--step-small)}
.card .link-arrow{margin-top:auto;align-self:flex-start}

.card--white {background:var(--white)}
.card--brand {background:var(--brand);color:var(--white)}
.card--accent{background:var(--accent);color:var(--white)}

@media (prefers-reduced-motion: reduce){
  a.card:hover{transform:none}
}


/* --- Card grid (archives, listing blocks) --------------------------------- */

.card-grid{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));gap:var(--gap)}
@media (max-width: 1024px){.card-grid{grid-template-columns:repeat(2, minmax(0, 1fr))}}
@media (max-width: 560px){.card-grid{grid-template-columns:1fr}}


/* --- Collage (three overlapping photos) ----------------------------------
   Images sit on a 12x12 grid so they can overlap. Place children with
   grid-area in the block's own CSS. Below 700px the small accent drops out.
   ------------------------------------------------------------------------ */

.collage{
  display:grid;
  grid-template-columns:repeat(12, 1fr);
  grid-template-rows:repeat(12, 1fr);
  aspect-ratio:4 / 3;
}
.collage>*{min-width:0;min-height:0;overflow:hidden}
.collage img{width:100%;height:100%;object-fit:cover;background:var(--grey-100)}

@media (max-width: 700px){
  .collage.collage{aspect-ratio:1 / 1}
  .collage__accent{display:none}
}


/* --- Media pair (two overlapping photos) --------------------------------- */

.media-pair{
  display:grid;
  grid-template-columns:repeat(12, 1fr);
  grid-template-rows:repeat(12, 1fr);
  aspect-ratio:4 / 3;
}
.media-pair>*{min-width:0;min-height:0;overflow:hidden}
.media-pair img{width:100%;height:100%;object-fit:cover;background:var(--grey-100)}
.media-pair__a{grid-area:1 / 1 / 8 / 9}
.media-pair__b{grid-area:4 / 6 / 13 / 13}

@media (max-width: 700px){
  .media-pair{grid-template-columns:repeat(2, 1fr);grid-template-rows:none;gap:8px;aspect-ratio:auto}
  .media-pair>*{grid-area:auto !important;aspect-ratio:4 / 3}
}


/* --- Breadcrumb ----------------------------------------------------------
   Rendered by theme_breadcrumb() inside hero blocks and CPT singles.
   Inherits its colour from the surface it sits on.
   ------------------------------------------------------------------------ */

.breadcrumb{margin-bottom:clamp(20px, 2.4vw, 40px)}
.breadcrumb__list{
  display:flex;flex-wrap:wrap;align-items:center;gap:0.5rem;
  margin:0;padding:0;list-style:none;
  font-size:var(--step-micro);font-weight:500;
}
.breadcrumb__list>li{display:flex;align-items:center;gap:0.5rem}
.breadcrumb__list>li+li::before{
  content:"";width:5px;height:5px;
  border-top:1.5px solid currentColor;border-right:1.5px solid currentColor;
  transform:rotate(45deg);opacity:0.7;
}
.breadcrumb a{text-decoration:none;opacity:0.75}
.breadcrumb a:hover{opacity:1;text-decoration:underline}
.breadcrumb [aria-current="page"]{font-weight:700}
.breadcrumb__home{display:inline-flex}
.breadcrumb__home svg{width:clamp(15px,1.15vw,20px);height:auto}


/* --- Tabs (category links) ------------------------------------------------ */

.tabs{display:flex;flex-wrap:wrap;gap:clamp(1.25rem, 3vw, 2.5rem)}
.tabs a{
  padding-bottom:6px;border-bottom:2px solid transparent;
  font-size:var(--step-nav);text-decoration:none;
}
.tabs a:hover{border-bottom-color:currentColor}
.tabs [aria-current="page"]{font-weight:700;border-bottom-color:currentColor}


/* --- Filter pills + pagination (resources/js/filter-grid.js) -------------- */

.pills{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:clamp(24px, 3vw, 44px)}
.pill{
  display:inline-flex;align-items:center;padding:.75em 1.5em;border:0;border-radius:var(--radius-pill);
  font:inherit;font-size:var(--step-small);font-weight:700;line-height:1;white-space:nowrap;cursor:pointer;
  background:var(--grey-100);color:var(--ink);
  transition:background var(--speed) var(--ease),color var(--speed) var(--ease);
}
.pill:hover{background:var(--hairline)}
.pill.is-active{background:var(--brand);color:var(--white)}

.is-hidden{display:none !important}

.pagination{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px;margin-top:clamp(32px, 4vw, 56px)}
.pagination__num,.pagination__arrow{
  display:inline-grid;place-items:center;min-width:42px;height:42px;padding:0 10px;
  border:1px solid var(--hairline);border-radius:var(--radius-pill);background:none;
  font:inherit;font-size:var(--step-small);color:var(--ink);cursor:pointer;
}
.pagination__num:hover,.pagination__arrow:hover{border-color:var(--ink)}
.pagination__num.is-current{background:var(--brand);border-color:var(--brand);color:var(--white);cursor:default}
.pagination__arrow svg{width:16px;height:16px}
.pagination__arrow.is-disabled{opacity:.35;cursor:default}

/* WordPress the_posts_pagination() markup */
.nav-links{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:clamp(32px, 4vw, 56px)}
.nav-links .page-numbers{display:inline-grid;place-items:center;min-width:42px;height:42px;padding:0 12px;border:1px solid var(--hairline);border-radius:var(--radius-pill)}
.nav-links .page-numbers.current{background:var(--brand);border-color:var(--brand);color:var(--white)}


/* --- Carousel (resources/js/ui.js) ----------------------------------------- */

.carousel{position:relative}
.carousel__track{
  display:grid;grid-auto-flow:column;grid-auto-columns:minmax(260px, calc((100% - 2 * var(--gap)) / 3));
  gap:var(--gap);overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;
}
.carousel__track::-webkit-scrollbar{display:none}
.carousel__track>*{scroll-snap-align:start}
.carousel__nav{display:flex;gap:10px;justify-content:flex-end;margin-top:20px}
.arrow-btn{
  display:inline-grid;place-items:center;width:46px;height:46px;flex:none;
  border:0;border-radius:50%;cursor:pointer;
  background:var(--brand);color:var(--white);
  transition:background var(--speed) var(--ease);
}
.arrow-btn:hover{background:var(--brand-deep)}
.arrow-btn svg{width:18px;height:18px}
@media (max-width: 700px){
  .carousel__track{grid-auto-columns:85%}
}


/* --- Accordion -----------------------------------------------------------
   Real <details>/<summary> with a shared name, so one opens at a time and it
   works with JavaScript off. The +/− is CSS off [open].
   ------------------------------------------------------------------------ */

.accordion{border-top:1px solid currentColor}
.accordion__item{border-bottom:1px solid currentColor}

.accordion__summary{
  display:flex;align-items:center;justify-content:space-between;gap:2rem;
  padding:clamp(14px, 1.8vw, 28px) 0;
  font-family:var(--font-display);font-size:var(--step-h3);font-weight:300;line-height:1.2;
  cursor:pointer;list-style:none;
}
.accordion__summary::-webkit-details-marker{display:none}
.accordion__summary:hover{opacity:0.72}
.accordion__summary::after{
  content:"";flex:none;width:20px;height:20px;
  background:
    linear-gradient(currentColor, currentColor) center / 100% 1.5px no-repeat,
    linear-gradient(currentColor, currentColor) center / 1.5px 100% no-repeat;
  transition:transform var(--speed) var(--ease);
}
.accordion__item[open] .accordion__summary::after{
  background:linear-gradient(currentColor, currentColor) center / 100% 1.5px no-repeat;
  transform:rotate(180deg);
}
.accordion__body{padding:0 clamp(2rem, 6vw, 5rem) clamp(20px, 2.4vw, 32px) 0;max-width:68ch}
.accordion__body>*{margin:0}
.accordion__body>*+*{margin-top:1rem}


/* --- Panel (inset padding; surface-* supplies the colour) ----------------- */

.panel{padding:clamp(28px, 4vw, 56px)}
.panel--flush{padding:0}


/* --- Small eyebrow (cards and feature panels) ----------------------------- */

.eyebrow--sm{font-size:var(--step-micro);font-weight:400;margin:0 0 0.875rem}


/* --- Page band (archives, search, 404 — templates without a hero block) --- */

.page-band{padding-block:clamp(40px, 5vw, 88px) clamp(28px, 3vw, 48px);background:var(--grey-50)}
.page-band__title{margin:0;font-family:var(--font-display);font-size:var(--step-h1);font-weight:700;line-height:1.14;letter-spacing:-0.02em}
.page-band__lead{margin:1rem 0 0;font-size:var(--step-lead);max-width:52ch}


/* --- Compare slider (resources/js/ui.js, [data-compare]) ------------------
   Two stacked layers; the top one is clipped by a draggable handle driven by
   a range input. Used by before-after and seasons.
   ------------------------------------------------------------------------ */

.compare{position:relative;aspect-ratio:4 / 3;border-radius:var(--radius-photo);overflow:hidden;background:var(--grey-50);user-select:none;touch-action:pan-y}
.compare__layer{position:absolute;inset:0}
.compare__layer img{width:100%;height:100%;object-fit:cover}
.compare__layer--top{clip-path:inset(0 calc(100% - var(--pos, 50%)) 0 0)}
.compare__handle{position:absolute;top:0;bottom:0;left:var(--pos, 50%);width:3px;background:var(--white);transform:translateX(-50%);pointer-events:none;z-index:2}
.compare__handle::after{
  content:"";position:absolute;top:50%;left:50%;width:44px;height:44px;border-radius:50%;
  background:var(--accent) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231E2A2E' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9 6l-5 6 5 6M15 6l5 6-5 6'/%3E%3C/svg%3E") center / 22px no-repeat;
  border:3px solid var(--white);transform:translate(-50%, -50%);box-shadow:0 2px 8px rgba(0,0,0,.25);
}
.compare__range{position:absolute;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:ew-resize;z-index:3}
.compare:has(.compare__range:focus-visible){box-shadow:0 0 0 3px var(--white),0 0 0 6px var(--ink)}
.compare__tag{position:absolute;top:.75rem;z-index:1;padding:.3rem .7rem;border-radius:var(--radius-pill);font-size:var(--step-micro);font-weight:650;background:rgba(30,42,46,.75);color:var(--white);pointer-events:none}
.compare__tag--left{left:.75rem}
.compare__tag--right{right:.75rem}
.compare__placeholder{width:100%;height:100%;display:flex;align-items:flex-end;padding:1rem;color:var(--white);background:repeating-linear-gradient(135deg, #3A4A50 0 14px, #34434A 14px 28px)}
.compare__placeholder span{background:rgba(30,42,46,.85);padding:.4rem .8rem;border-radius:var(--radius-pill);font-weight:600;font-size:var(--step-micro);white-space:nowrap}


/* --- Square bullets (lists in prose columns and fact lists) --------------- */

.bullets{list-style:none;margin:0;padding:0;display:grid;gap:.45rem}
.bullets li{padding-left:1.25rem;position:relative}
.bullets li::before{content:"";position:absolute;left:0;top:.6em;width:8px;height:8px;border-radius:2px;background:var(--accent)}
