/* ---------- main-page splash loader ---------- */
.main-loader{
  position:fixed; inset:0; z-index:9999;
  display:flex; align-items:center; justify-content:center;
  transition: opacity .5s ease, visibility .5s ease;
}
.main-loader.is-hidden{ opacity:0; visibility:hidden; pointer-events:none; }
.main-loader-panel{
  display:flex; flex-direction:column; align-items:center; gap:16px;
  padding: 46px 58px;
  text-align:center;
}
.main-loader-mark{
  position:relative; width:60px; height:60px;
  animation: main-loader-spin 1.4s linear infinite;
}
.main-loader-mark span{
  position:absolute; width:10px; height:10px; border-radius:50%;
  box-shadow: 0 0 12px currentColor;
}
.main-loader-mark span:nth-child(1){ top:0; left:50%; transform:translateX(-50%); color:var(--kiln); background:var(--kiln); }
.main-loader-mark span:nth-child(2){ top:50%; right:0; transform:translateY(-50%); color:var(--clay); background:var(--clay); }
.main-loader-mark span:nth-child(3){ bottom:0; left:50%; transform:translateX(-50%); color:var(--teal); background:var(--teal); }
.main-loader-mark span:nth-child(4){ top:50%; left:0; transform:translateY(-50%); color:var(--kiln-light); background:var(--kiln-light); }
@keyframes main-loader-spin{ to{ transform:rotate(360deg); } }
.main-loader-logo{
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  width:30px; height:30px; border-radius:8px; object-fit:cover;
}
.main-loader-text{
  font-family: var(--font-display);
  font-size:1.2rem; margin:0; color:var(--bone);
}
.main-loader-sub{ margin:0; }
@media (prefers-reduced-motion: reduce){
  .main-loader-mark{ animation:none; }
}

/* ---------- hero ---------- */
.hero{
  position:relative;
  min-height: 88vh;
  display:flex;
  align-items:center;
  overflow:hidden;
}
.hero-media{
  position:absolute; inset:0;
  z-index:0;
}
.hero-media img{
  width:100%; height:100%; object-fit:cover;
  filter: saturate(1.05) contrast(1.05);
}
.hero-media-overlay{
  position:absolute; inset:0;
  background:
    linear-gradient(100deg, rgba(20,16,13,0.94) 10%, rgba(20,16,13,0.55) 55%, rgba(20,16,13,0.35) 100%),
    linear-gradient(0deg, rgba(20,16,13,0.9), transparent 40%);
}
.hero-inner{ position:relative; z-index:1; padding: 100px 0; }
.hero-panel{
  max-width: 620px;
  padding: 48px;
}
.hero-panel h1{
  font-size: clamp(2.4rem, 5vw, 3.6rem);
  margin: .3em 0 .5em;
}
.hero-copy{ font-size:1.02rem; max-width: 520px; }
.hero-actions{ display:flex; gap:14px; margin: 20px 0 22px; flex-wrap:wrap; }
.hero-motto{
  font-family: var(--font-display);
  font-style: italic;
  color: var(--kiln-light);
  font-size:1.1rem;
  margin:0;
}

/* ---------- mission/values ---------- */
.mv-grid{
  display:grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 22px;
  margin: 70px auto;
}
.mv-card{ padding: 30px; }
.mv-card h3{ margin: .3em 0 .5em; font-size:1.3rem; }

/* ---------- featured ---------- */
.featured{ margin: 90px auto; }
.section-head{
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  margin-bottom: 30px;
  gap: 16px;
  flex-wrap:wrap;
}
.section-head h2{ font-size: clamp(1.6rem, 3vw, 2.2rem); margin:.2em 0 0; }

/* ---------- workshop ---------- */
.workshop{
  display:grid;
  grid-template-columns: 1fr 1fr;
  gap: 50px;
  align-items:center;
  margin: 90px auto;
}
.workshop-media{
  border-radius: var(--radius-lg);
  overflow:hidden;
  aspect-ratio: 4/3.2;
}
.workshop-media img{ width:100%; height:100%; object-fit:cover; }
.workshop-copy h2{ font-size: clamp(1.7rem, 3vw, 2.3rem); }
.workshop-stats{
  display:flex;
  gap: 28px;
  margin: 22px 0 26px;
  flex-wrap:wrap;
}
.workshop-stats strong{
  display:block;
  font-family: var(--font-display);
  font-size:1.4rem;
  color: var(--kiln-light);
}
.workshop-stats span{
  font-family: var(--font-mono);
  font-size:.7rem;
  text-transform:uppercase;
  letter-spacing:.06em;
  color: var(--bone-dim);
}

/* ---------- cta ---------- */
.cta-band{ margin: 90px auto 100px; }
.cta-panel{
  text-align:center;
  padding: 60px 30px;
}
.cta-panel h2{ font-size: clamp(1.8rem, 4vw, 2.6rem); }
.cta-panel p{ max-width: 460px; margin: 0 auto 22px; }

@media (max-width: 980px){
  .mv-grid{ grid-template-columns: 1fr; }
  .workshop{ grid-template-columns: 1fr; }
}
@media (max-width: 560px){
  .hero-panel{ padding: 30px 24px; }
}

/* ---------- featured card slider ----------
   The markup is a scroll-snapping row that already works with no JavaScript.
   CardSlider.js adds .is-enhanced and the per-card custom properties; every
   rule that depends on script is scoped to that class, so the unenhanced
   version stays a clean, usable strip rather than a broken effect. */
.card-slider{ position: relative; }

.card-slider-track{
  display: flex;
  gap: 26px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-padding: 0 24px;
  padding: 14px 4px 26px;
  /* Firefox and WebKit respectively — the scrollbar would sit across the
     bottom of the cards and there is a dot row doing that job already. */
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.card-slider-track::-webkit-scrollbar{ display: none; }
.card-slider-track:focus-visible{ outline: 2px solid var(--kiln); outline-offset: 4px; border-radius: 18px; }

.card-slide{
  flex: 0 0 clamp(240px, 78vw, 320px);
  scroll-snap-align: center;
}

/* Depth only once the script is driving it: without the custom properties
   these transforms would collapse every card to the same flat state. */
.card-slider.is-enhanced .card-slide{
  transform: perspective(1100px) rotateY(var(--slide-turn, 0deg)) scale(var(--slide-scale, 1));
  opacity: var(--slide-fade, 1);
  transition: transform .45s cubic-bezier(.22,.9,.3,1), opacity .45s ease;
  transform-origin: center;
}
.card-slider.is-enhanced .card-slide.is-focused{ z-index: 2; }
.card-slider-track.is-dragging{ cursor: grabbing; scroll-snap-type: none; }
.card-slider-track.is-dragging .card-slide{ transition: none; }

.slider-nav{
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  margin-top: 6px;
}
.slider-arrow{
  width: 42px; height: 42px; flex: none;
  display: grid; place-items: center;
  border-radius: 50%;
  border: 1px solid var(--glass-border, rgba(255,255,255,.14));
  background: var(--glass-bg, rgba(255,255,255,.06));
  color: inherit; cursor: pointer;
  transition: background .2s ease, border-color .2s ease, transform .2s ease;
}
.slider-arrow:hover:not([disabled]){ background: var(--kiln); color: #1a1410; border-color: var(--kiln); }
.slider-arrow:active:not([disabled]){ transform: scale(.94); }
.slider-arrow[disabled]{ opacity: .32; cursor: default; }

.slider-dots{ display: flex; align-items: center; gap: 8px; }
.slider-dot{
  width: 8px; height: 8px; padding: 0; border: 0; border-radius: 99px;
  background: var(--glass-border, rgba(255,255,255,.24));
  cursor: pointer; transition: width .28s ease, background .28s ease;
}
.slider-dot.active{ width: 26px; background: var(--kiln); }

@media (min-width: 900px){
  .card-slide{ flex-basis: 300px; }
  .card-slider-track{ gap: 30px; scroll-padding: 0 40px; }
}

/* Autoplay is already disabled in JS under reduced motion; this removes the
   easing on the effect itself so nothing slides or fades either. */
@media (prefers-reduced-motion: reduce){
  .card-slider.is-enhanced .card-slide{ transition: none; }
}
