/* ksh-ds.css — keshesh.com shared design-system stylesheet.
   AUTHORED LOCALLY in the project folder (site/mu-plugins/keshesh-assets/), then deployed.
   Layers: 0 font · 1 tokens (verbatim from design-system/tokens/) · 2 base · 3 components.
   Registry of every class: docs/patterns.md. */

/* ════ 0 · FONT — same file Blocksy registers as "ct_font_doran_v_f" and the preload
   mu-plugin fetches, declared under the design-system family name "Doran".
   Absolute https URL on purpose: FlyingPress's minify rewrites relative url() against the
   stylesheet href, which came out http:// and was blocked as mixed content. ════ */
@font-face{font-family:"Doran";src:url("https://keshesh.com/wp-content/uploads/2026/09/Doran-VF-1.woff2") format("woff2");font-weight:100 900;font-style:normal;font-display:swap}

/* ════ 1 · TOKENS — copied verbatim from design-system/tokens/. Never edit here: edit the token file and re-copy. ════ */
/* Keshesh — colour system.
   Brand colours (violet + gold + iridescent signature) are fixed.
   The content palette is a support palette for styling, scene-setting and
   accessories: harmonise WITHIN a row, never mix rows. */
:root{
  /* --- Brand core --- */
  --keshesh-violet:#5B2D9E;      /* 91 · 45 · 158 */
  --deep-aubergine:#2E1560;      /* 46 · 21 · 96  */
  --lavender-paper:#F7F4FB;
  --ink:#161021;

  /* --- Signature gradient (iridescent) --- */
  --iridescent-blue:#8FA8E8;
  --iridescent-lavender:#C3AEE8;
  --iridescent-pink:#E9B9CE;
  --iridescent-peach:#F2C9AE;
  --gradient-signature:linear-gradient(115deg,var(--iridescent-blue) 0%,var(--iridescent-lavender) 34%,var(--iridescent-pink) 68%,var(--iridescent-peach) 100%); /* @kind color */
  --gradient-veil:linear-gradient(180deg,rgba(22,16,33,0) 0%,rgba(22,16,33,.72) 100%); /* @kind color */
  --gradient-violet-depth:linear-gradient(160deg,var(--keshesh-violet) 0%,var(--deep-aubergine) 100%); /* @kind color */
  /* The moon: the one geometric form, lit from the upper left */
  --gradient-moon:radial-gradient(circle at 34% 30%,#F4E9D8 0%,var(--iridescent-lavender) 46%,#8F79C4 78%,#4B2E86 100%); /* @kind color */

  /* --- Gold --- */
  --gold:#DDAE3A;
  --gold-deep:#A57D5A;

  /* --- Content palette · everyday neutrals --- */
  --beige:#EFD1B5;
  --cream:#F7F0D6;
  --taupe:#AC9784;
  --camel:#A57D5A;
  --mocha:#8C5A43;
  --coffee-charcoal:#5E3D33;
  --grey-charcoal:#31393B;

  /* --- Content palette · soft / muted --- */
  --blush:#E5BEAD;
  --dusty-rose:#DEAA9C;
  --mauve:#AD827B;
  --mauve-deep:#946C6A;
  --lavender-grey:#94929D;
  --olive:#7B8763;
  --sage:#62704C;

  /* --- Content palette · rich / deep --- */
  --emerald:#29493A;
  --crimson:#8B3129;
  --crimson-deep:#7B242A;
  --wine:#6B2D32;
  --forest:#183531;
  --teal-deep:#213D4A;
  --indigo:#213152;

  /* --- Content palette · bright pops --- */
  --red:#CE3D3A;
  --cobalt:#213A5B;
  --coral:#DC5A42;
  --mustard:#E7925B;
  --gold-yellow:#DDAE3A;

  /* --- Neutral ramp (derived from ink / lavender paper) --- */
  --n-0:#FFFFFF;
  --n-50:var(--lavender-paper);
  --n-100:#EFEAF4;
  --n-200:#DFD8E6;
  --n-300:#C4BBCE;
  --n-400:#9A90A6;
  --n-500:#726981;
  --n-600:#514860;
  --n-700:#38304A;
  --n-800:#241B34;
  --n-900:var(--ink);

  /* --- Semantic: surface --- */
  --surface-page:var(--lavender-paper);
  --surface-raised:var(--n-0);
  --surface-card:var(--n-0);
  --surface-sunken:var(--n-100);
  --surface-inverse:var(--ink);
  --surface-brand:var(--deep-aubergine);
  --surface-accent:var(--keshesh-violet);
  --surface-overlay:rgba(22,16,33,.62);
  --surface-glass:rgba(247,244,251,.72);
  --surface-glass-ink:rgba(22,16,33,.56);

  /* --- Semantic: text --- */
  --text-body:var(--n-800);
  --text-heading:var(--ink);
  --text-muted:var(--n-500);
  --text-faint:var(--n-400);
  --text-on-dark:var(--lavender-paper);
  --text-on-dark-muted:rgba(247,244,251,.62);
  --text-accent:var(--keshesh-violet);
  --text-gold:var(--gold);
  --text-link:var(--keshesh-violet);
  --text-link-hover:var(--deep-aubergine);

  /* --- Semantic: line --- */
  --line-hairline:rgba(22,16,33,.12);
  --line-strong:rgba(22,16,33,.28);
  --line-inverse:rgba(247,244,251,.22);
  --line-accent:var(--keshesh-violet);

  /* --- Semantic: state --- */
  --state-available:var(--emerald);
  --state-limited:var(--gold);
  --state-sold:var(--n-400);
  --state-error:var(--crimson);
  --focus-ring:rgba(91,45,158,.45);
}

/* Keshesh — typography.
   FA: Doran — identity, headings, numerals, short phrases and body copy.
   EN: Helvetica or a neutral same-family grotesque. Weights 300 / 400 / 700 only.
   FA and EN layouts are never mirrors of each other — each language sets its own
   composition, tracking, headline length and image/text ratio. */
:root{
  --font-fa-display:"Doran",system-ui,sans-serif; /* @kind font */
  --font-fa-body:"Doran",system-ui,sans-serif; /* @kind font */
  --font-en:"Helvetica Neue",Helvetica,Arial,sans-serif; /* @kind font */
  --font-display:var(--font-en); /* @kind font */
  --font-body:var(--font-en); /* @kind font */

  --fw-light:300; /* @kind font */
  --fw-regular:400; /* @kind font */
  --fw-bold:700; /* @kind font */

  /* Scale — 1.25 major-third-ish, tuned for a quiet editorial page */
  --fs-display-1:clamp(48px,6.4vw,104px); /* @kind font */
  --fs-display-2:clamp(38px,4.6vw,72px); /* @kind font */
  --fs-h1:clamp(30px,3.2vw,48px); /* @kind font */
  --fs-h2:clamp(24px,2.2vw,34px); /* @kind font */
  --fs-h3:20px; /* @kind font */
  --fs-body-lg:18px; /* @kind font */
  --fs-body:16px; /* @kind font */
  --fs-body-sm:14px; /* @kind font */
  --fs-caption:12px; /* @kind font */
  --fs-eyebrow:11px; /* @kind font */

  --lh-tight:1.04; /* @kind font */
  --lh-heading:1.18; /* @kind font */
  --lh-body:1.7; /* @kind font */
  --lh-body-fa:1.95; /* @kind font */

  /* Wide-tracked uppercase Latin is a core Keshesh signature */
  --tracking-display:-0.01em; /* @kind font */
  --tracking-normal:0; /* @kind font */
  --tracking-wide:0.14em; /* @kind font */
  --tracking-eyebrow:0.28em; /* @kind font */
  --tracking-menu:0.2em; /* @kind font */

  /* The signature is Latin. A label set in Persian resolves these three to the
     Persian face, no tracking and no case change — the components reference the
     -label tokens inline, so one RTL scope switches every one of them. */
  --font-label:var(--font-en); /* @kind font */
  --tracking-label:var(--tracking-eyebrow); /* @kind font */
  --label-case:uppercase; /* @kind other */
  /* Button tracks per size, so it scales its own literal instead of reading a
     token. Persian sets the scale to zero. */
  --label-tracking-scale:1; /* @kind other */
}

[dir="rtl"]{
  --font-label:var(--font-fa-body); /* @kind font */
  --tracking-label:0; /* @kind font */
  --label-case:none; /* @kind other */
  --label-tracking-scale:0; /* @kind other */
  /* The menu keeps its own tracking in Latin; in Persian it has none. */
  --tracking-menu:0; /* @kind font */
  --tracking-wide:0; /* @kind font */
  --tracking-eyebrow:0; /* @kind font */
  /* Doran's ink box runs ~1.79x the font size — dots above, descenders
     below. Any leading under that and one line's ink lands in the next, so the
     Latin display/heading leadings cannot be reused. --lh-body-fa already set
     the precedent for body copy; these are its display and heading halves. */
  --lh-tight:1.8; /* @kind font */
  --lh-heading:1.75; /* @kind font */
  /* Without the tracking, 11px Persian sits too tight to read as a label. */
  --fs-eyebrow:12px; /* @kind font */
}

/* Keshesh — spacing & layout. Generous emptiness is a brand requirement. */
:root{
  --space-0:0px;
  --space-1:4px;
  --space-2:8px;
  --space-3:12px;
  --space-4:16px;
  --space-5:24px;
  --space-6:32px;
  --space-7:48px;
  --space-8:64px;
  --space-9:96px;
  --space-10:128px;
  --space-11:160px;
  --space-12:200px;

  --section-y:var(--space-10);
  --section-y-tight:var(--space-9);
  --gutter:24px;
  --gutter-lg:48px;
  --measure:64ch; /* @kind other */
  --container:1440px; /* @kind other */
  --container-narrow:760px; /* @kind other */
  --grid-columns:12; /* @kind other */
  --header-h:76px;
}

/* Keshesh — borders, radii, elevation, blur.
   Corners are square by default. Radius is reserved: pill for the appointment CTA,
   filter chips and tags; a 2px softening for inputs and image frames only. */
:root{
  --radius-none:0px;
  --radius-xs:2px;
  --radius-sm:4px;
  --radius-pill:999px;

  --border-hairline:1px solid var(--line-hairline); /* @kind other */
  --border-strong:1px solid var(--line-strong); /* @kind other */
  --border-inverse:1px solid var(--line-inverse); /* @kind other */
  --border-accent:1px solid var(--line-accent); /* @kind other */

  /* Shadows are light-behaviour, not UI chrome: violet-tinted, wide, very low alpha */
  --shadow-none:none;
  --shadow-lift:0 1px 2px rgba(22,16,33,.04),0 8px 24px rgba(46,21,96,.06);
  --shadow-float:0 2px 6px rgba(22,16,33,.05),0 24px 60px rgba(46,21,96,.1);
  --shadow-dialog:0 40px 120px rgba(22,16,33,.28);
  --shadow-inset-hairline:inset 0 0 0 1px var(--line-hairline);
  --glow-violet:0 0 0 1px rgba(91,45,158,.18),0 12px 48px rgba(91,45,158,.18);

  --blur-glass:blur(18px) saturate(1.05); /* @kind other */
  --blur-veil:blur(48px); /* @kind other */
}

/* Keshesh — motion. Soft, limited, meaningful.
   Yes: calm fades, small parallax on scroll, controlled scale change,
   a reflection that lags slightly behind, a jewel leaving gravity for a moment.
   No: animation in every section, scroll-jacking, heavy 3D, fast trendy moves,
   delayed information, long tiring intros. Always honour prefers-reduced-motion. */
:root{
  --dur-instant:120ms; /* @kind other */
  --dur-fast:220ms; /* @kind other */
  --dur-base:400ms; /* @kind other */
  --dur-slow:700ms; /* @kind other */
  --dur-scene:1200ms; /* @kind other */

  --ease-soft:cubic-bezier(.22,1,.36,1); /* @kind other */
  --ease-inout:cubic-bezier(.65,.05,.36,1); /* @kind other */
  --ease-exit:cubic-bezier(.4,0,1,1); /* @kind other */

  --transition-color:color var(--dur-fast) var(--ease-soft),background-color var(--dur-fast) var(--ease-soft),border-color var(--dur-fast) var(--ease-soft); /* @kind other */
  --transition-veil:opacity var(--dur-slow) var(--ease-soft); /* @kind other */
  --hover-scale:1.012; /* @kind other */
  --press-scale:.985; /* @kind other */
  --hover-image-scale:1.03; /* @kind other */
}
@media (prefers-reduced-motion:reduce){
  :root{
    --dur-fast:1ms; /* @kind other */
    --dur-base:1ms; /* @kind other */
    --dur-slow:1ms; /* @kind other */
    --dur-scene:1ms; /* @kind other */
    --hover-scale:1; /* @kind other */
    --press-scale:1; /* @kind other */
    --hover-image-scale:1; /* @kind other */
  }
}

/* ════════════════════════════════════════════════════════════════════
   2 · BASE — scoped to ksh- classes only. Never restyle bare elements:
   WooCommerce, Blocksy and Elementor depend on them.
   ════════════════════════════════════════════════════════════════════ */
[class*="ksh-"]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:3px}

/* ════════════════════════════════════════════════════════════════════
   3 · COMPONENTS
   ════════════════════════════════════════════════════════════════════ */

/* Frame — ImageFrame. Ratio by modifier; empty plate in --n-100. */
.ksh-frame{position:relative;overflow:hidden;background:var(--n-100);aspect-ratio:4/5}
.ksh-frame--1x1{aspect-ratio:1/1}
.ksh-frame--3x4{aspect-ratio:3/4}
.ksh-frame--4x3{aspect-ratio:4/3}
.ksh-frame--3x2{aspect-ratio:3/2}
.ksh-frame .elementor-widget-container,
.ksh-frame .jet-listing-dynamic-image,
.ksh-frame .jet-listing-dynamic-image__link{display:block;width:100%;height:100%}
/* Second selector out-ranks JetEngine's .jet-listing-dynamic-image img.wp-post-image{width:auto}. */
.ksh-frame img,
.ksh-frame .jet-listing-dynamic-image img.wp-post-image{display:block;width:100%;height:100%;max-width:none;object-fit:cover;transition:transform var(--dur-slow) var(--ease-soft)}

/* Card — ProductCard / EditorialCard as a JetEngine listing item.
   No chrome: no fill, border, radius, shadow or lift. Hover = the title
   turns violet and the image scales 1.03. Elementor containers read their
   layout from custom properties, so those are reset here too. */
.ksh-card.e-con{
  --flex-direction:column;--align-items:stretch;--justify-content:flex-start;
  --gap:var(--space-1);--row-gap:var(--space-1);--column-gap:var(--space-1);--widgets-spacing:var(--space-1);
  --padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;
  --border-radius:0px;
  flex-direction:column;align-items:stretch;gap:var(--space-4);
  padding:0;background:none;border:0;border-radius:0;box-shadow:none;
  text-align:start;font-family:var(--font-fa-body)
}
.ksh-card.e-con{--gap:var(--space-4);--row-gap:var(--space-4)}
/* Text block under the frame (ProductCard's text div): lines 4px apart. */
.ksh-card .ksh-card__body.e-con{
  --flex-direction:column;--align-items:stretch;--gap:var(--space-1);--row-gap:var(--space-1);--widgets-spacing:var(--space-1);
  --padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;
  flex-direction:column;align-items:stretch;gap:var(--space-1);padding:0;min-width:0
}
.ksh-card:hover .ksh-card__frame img{transform:scale(var(--hover-image-scale))}

.ksh-card .ksh-card__title .elementor-heading-title{
  margin:0;font-family:var(--font-fa-body);font-size:var(--fs-body);font-weight:var(--fw-regular);
  line-height:var(--lh-heading);letter-spacing:var(--tracking-normal);color:var(--text-heading);
  transition:var(--transition-color)
}
.ksh-card:hover .ksh-card__title .elementor-heading-title{color:var(--keshesh-violet)}

.ksh-card .ksh-card__meta,
.ksh-card .ksh-card__meta :is(.jet-listing-dynamic-field__content,.jet-listing-dynamic-terms,.jet-listing-dynamic-terms__link){
  font-family:var(--font-fa-body);font-size:var(--fs-body-sm);font-weight:var(--fw-light);
  line-height:var(--lh-body-fa);color:var(--text-muted);text-align:start
}
.ksh-card .ksh-card__meta :is(.jet-listing-dynamic-field,.jet-listing-dynamic-terms){display:block;justify-content:flex-start}

/* Meta row: «مجسمه · ۱۴۰۵». Items sit on one baseline, a faint dot between. */
.ksh-card .ksh-card__row.e-con{
  --flex-direction:row;--gap:var(--space-2);--row-gap:var(--space-1);--column-gap:var(--space-2);
  --padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;
  flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:var(--space-1) var(--space-2);padding:0
}
.ksh-card .ksh-card__row > .elementor-element{width:auto;display:flex;align-items:baseline}
.ksh-card .ksh-card__row > .elementor-element:empty{display:none}
/* ponytail: dot keyed on DOM order; an empty-but-rendered first item would still leave a leading dot */
.ksh-card .ksh-card__row > .elementor-element + .elementor-element::before{content:"·";margin-inline-end:var(--space-2);color:var(--text-faint)}

.ksh-card .ksh-card__cta{margin-top:var(--space-2)}
.ksh-card .ksh-card__cta .elementor-heading-title{
  margin:0;font-family:var(--font-label);font-size:var(--fs-caption);font-weight:var(--fw-regular);
  letter-spacing:var(--tracking-label);text-transform:var(--label-case);color:var(--text-link);
  transition:var(--transition-color)
}
.ksh-card:hover .ksh-card__cta .elementor-heading-title{color:var(--text-link-hover)}

/* Grid modifier: drop the artist line where the page is already about that artist. */
.ksh-cards--no-artist .ksh-card__artist{display:none}

/* Feature row — DESIGN_SYSTEM.md §9.1: a grid holding exactly one item shows it as
   a two-column row (image | text), never a lone card in a multi-column grid.
   Opt-in per grid with ksh-cards--feature-one. Parts marked ksh-card__feature-only
   (lede, artist CTA) exist in the template but show only in this state. */
.ksh-card .ksh-card__feature-only{display:none}
.ksh-card .ksh-card__lede{max-width:44ch;margin-top:var(--space-5)}
.ksh-card .ksh-card__lede :is(.jet-listing-dynamic-field__content,.jet-listing-dynamic-field){font-family:var(--font-fa-body);font-size:var(--fs-body);font-weight:var(--fw-light);line-height:var(--lh-body-fa);color:var(--text-body);text-align:start;display:block}
@media (min-width:768px){
  .ksh-cards--feature-one .jet-listing-grid__items > .jet-listing-grid__item:only-child{flex:0 0 100%;max-width:100%;width:100%}
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card.e-con{--flex-direction:row;flex-direction:row;align-items:center;gap:var(--space-9)}
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card__frame{flex:0 0 40%;max-width:40%}
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card__body.e-con{flex:1 1 0}
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card__feature-only{display:block}
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card__artist{display:none}
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card__title .elementor-heading-title{font-size:var(--fs-h1);font-weight:var(--fw-light);line-height:var(--lh-heading);letter-spacing:var(--tracking-display)}
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card__body > :nth-child(2){margin-top:var(--space-2)}
  /* CTA becomes Button secondary sm */
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card__cta{margin-top:var(--space-5)}
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card__cta .elementor-heading-title{display:inline-flex;align-items:center;padding:var(--space-2) var(--space-4);border:1px solid var(--line-strong);color:var(--text-heading);line-height:1}
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card:hover .ksh-card__cta .elementor-heading-title{border-color:var(--keshesh-violet);color:var(--keshesh-violet)}
  /* Artwork: cover 3:4 takes 1.3fr of 2fr, text sits on the baseline. */
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card--artwork.e-con{align-items:flex-end}
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card--artwork .ksh-card__frame{flex-basis:65%;max-width:65%;aspect-ratio:3/4}
}
@media (min-width:768px) and (max-width:1024px){
  .ksh-cards--feature-one .jet-listing-grid__item:only-child .ksh-card.e-con{gap:var(--space-7)}
}

/* Whole-card link = JetEngine "listing_link" overlay around the item. */
.jet-engine-listing-overlay-wrap:has(> .ksh-card),
.jet-engine-listing-overlay-wrap:has(.ksh-card){cursor:pointer}
.jet-engine-listing-overlay-wrap:has(.jet-engine-listing-overlay-link:focus-visible){outline:2px solid var(--focus-ring);outline-offset:3px}

/* Signature — the curator line under a statement (CycleScreen): hairline above,
   label + name on one baseline. Wrap in ksh-hide-if-empty so it vanishes with no name. */
.ksh-signature.e-con{
  --flex-direction:row;--align-items:baseline;--gap:var(--space-4);--row-gap:var(--space-2);--column-gap:var(--space-4);
  --padding-top:var(--space-4);--padding-bottom:0px;--padding-left:0px;--padding-right:0px;--margin-top:var(--space-7);
  flex-direction:row;flex-wrap:wrap;align-items:baseline;gap:var(--space-2) var(--space-4);
  align-self:stretch;width:100%;max-width:58ch;
  margin-top:var(--space-7);padding:var(--space-4) 0 0;border-top:1px solid var(--line-hairline)
}
.ksh-signature.e-con > .elementor-widget{width:auto;max-width:none}
.ksh-signature .ksh-signature__label .elementor-heading-title{
  margin:0;font-family:var(--font-label);font-size:var(--fs-eyebrow);font-weight:var(--fw-regular);
  letter-spacing:var(--tracking-label);text-transform:var(--label-case);color:var(--text-faint);line-height:var(--lh-body-fa)
}
.ksh-signature .ksh-signature__name :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){
  display:block;font-family:var(--font-fa-body);font-size:var(--fs-body);font-weight:var(--fw-light);
  line-height:var(--lh-body-fa);color:var(--text-body);text-align:start
}

/* Gallery — detail views of one artwork (ArtworkScreen): one column per image,
   max 4 per row (the shortcode sets --ksh-gallery-cols), 3:4 frames, square, 16px apart. */
.ksh-gallery{display:grid;grid-template-columns:repeat(var(--ksh-gallery-cols,4),minmax(0,1fr));gap:var(--space-4);width:100%}
.ksh-gallery__item{display:block;position:relative;overflow:hidden;aspect-ratio:3/4;background:var(--n-100)}
.ksh-gallery__item img{display:block;width:100%;height:100%;max-width:none;object-fit:cover;transition:transform var(--dur-slow) var(--ease-soft)}
.ksh-gallery__item:hover img{transform:scale(var(--hover-image-scale))}

/* Responsive rhythm — copied from design-system/tokens/base.css (vertical air contracts below 1024 / 720). */
@media (max-width:1024px){:root{--section-y:var(--space-9);--section-y-tight:var(--space-8);--gutter:20px}}
@media (max-width:720px){:root{--section-y:var(--space-8);--section-y-tight:var(--space-7);--gutter:16px}}

/* Badge — core/Badge: square, label face, 1px border; filled = tone as background. */
.ksh-badge{display:inline-flex;align-items:center;padding:5px 10px;font-family:var(--font-label);font-size:var(--fs-eyebrow);letter-spacing:var(--tracking-wide);text-transform:var(--label-case);line-height:1;white-space:nowrap;color:var(--text-muted);background:transparent;border:1px solid var(--line-hairline);border-radius:var(--radius-none)}
.ksh-badge--available{color:var(--state-available);border-color:var(--state-available)}
.ksh-badge--available.ksh-badge--filled{color:var(--lavender-paper);background:var(--state-available)}
.ksh-badge--inverse{color:var(--text-on-dark);border-color:var(--line-inverse)}

/* Hero (split) — CycleScreen: tone band, breadcrumb, then text | image 4:5 on one
   bottom line. Aubergine for a current cycle, ink once the badge says archived. */
.ksh-hero.e-con{
  --padding-top:var(--section-y-tight);--padding-bottom:var(--section-y-tight);--padding-left:var(--gutter-lg);--padding-right:var(--gutter-lg);
  --gap:0px;--row-gap:0px;--column-gap:0px;
  padding:var(--section-y-tight) var(--gutter-lg);gap:0;background:var(--deep-aubergine);color:var(--text-on-dark)
}
.ksh-hero.e-con:has(.ksh-badge--inverse){background:var(--ink)}
.ksh-hero .ksh-hero__crumbs,
.ksh-hero .ksh-hero__crumbs :is(a,span,p,li,nav){font-family:var(--font-label);font-size:var(--fs-caption);color:var(--text-on-dark-muted)}
.ksh-hero .ksh-hero__crumbs a:hover{color:var(--text-on-dark)}
.ksh-hero .ksh-hero__grid.e-con{
  --flex-direction:row;--align-items:flex-end;--gap:var(--space-9);--row-gap:var(--space-7);--column-gap:var(--space-9);
  --padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;
  flex-direction:row;align-items:flex-end;gap:var(--space-7) var(--space-9);padding:0;margin-top:var(--space-7)
}
.ksh-hero .ksh-hero__grid.e-con > *{flex:1 1 0;min-width:0;width:auto}
.ksh-hero .ksh-hero__text.e-con,
.ksh-hero .ksh-hero__meta.e-con{
  --gap:0px;--row-gap:0px;--column-gap:var(--space-4);
  --padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;
  padding:0;gap:0
}
.ksh-hero .ksh-hero__text.e-con{--flex-direction:column;--align-items:flex-start;flex-direction:column;align-items:flex-start}
.ksh-hero .ksh-hero__meta.e-con{--flex-direction:row;--align-items:center;flex-direction:row;align-items:center;gap:var(--space-4)}
.ksh-hero .ksh-hero__meta.e-con > .elementor-widget{width:auto}
.ksh-hero .ksh-hero__text :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){display:block;text-align:start;justify-content:flex-start}
.ksh-hero .ksh-hero__eyebrow .jet-listing-dynamic-field__content{font-family:var(--font-label);font-size:var(--fs-eyebrow);letter-spacing:var(--tracking-label);text-transform:var(--label-case);color:var(--text-on-dark-muted)}
.ksh-hero .ksh-hero__kicker.elementor-widget{margin-top:var(--space-6)}
.ksh-hero .ksh-hero__kicker .jet-listing-dynamic-field__content{font-family:var(--font-fa-display);font-size:var(--fs-h3);font-weight:var(--fw-light);line-height:var(--lh-heading);color:var(--text-on-dark-muted)}
.ksh-hero .ksh-hero__title.elementor-widget{margin-top:var(--space-2)}
.ksh-hero .ksh-hero__title .jet-listing-dynamic-field__content{margin:0;font-family:var(--font-fa-display);font-size:var(--fs-display-1);font-weight:var(--fw-light);line-height:var(--lh-tight);letter-spacing:var(--tracking-display);color:var(--text-on-dark)}
.ksh-hero .ksh-hero__line.elementor-widget{margin-top:var(--space-2)}
.ksh-hero .ksh-hero__line.ksh-hero__line--first.elementor-widget{margin-top:var(--space-6)}
.ksh-hero .ksh-hero__line .jet-listing-dynamic-field__content{font-size:var(--fs-body);font-weight:var(--fw-light);line-height:var(--lh-body-fa);color:var(--text-on-dark)}
.ksh-hero .ksh-hero__line--muted .jet-listing-dynamic-field__content{color:var(--text-on-dark-muted)}
.ksh-hero .ksh-hero__lede.elementor-widget{margin-top:var(--space-6);max-width:40ch}
.ksh-hero .ksh-hero__lede .jet-listing-dynamic-field__content{margin:0;font-size:var(--fs-body);font-weight:var(--fw-light);line-height:var(--lh-body-fa);color:var(--text-on-dark-muted)}
.ksh-frame--dark{background:var(--deep-aubergine)}
@media (max-width:767px){
  .ksh-hero.e-con{--padding-left:var(--gutter);--padding-right:var(--gutter);padding-left:var(--gutter);padding-right:var(--gutter)}
  .ksh-hero .ksh-hero__grid.e-con{--flex-direction:column;flex-direction:column;align-items:stretch}
  .ksh-hero .ksh-hero__grid.e-con > *{flex:0 0 auto;width:100%}
}

/* Installation grid (cycle page) — 4 columns, the first frame spans 2×2 and fills its
   two rows; 5 / 9 / 13 frames close the grid. Below 720px it folds to one column, like the kit. */
.ksh-gallery.ksh-gallery--install{grid-template-columns:repeat(4,minmax(0,1fr))}
.ksh-gallery--install .ksh-gallery__item:first-child{grid-column:span 2;grid-row:span 2;aspect-ratio:auto;height:100%}
@media (max-width:720px){.ksh-gallery.ksh-gallery--install{grid-template-columns:minmax(0,1fr)}.ksh-gallery--install .ksh-gallery__item:first-child{grid-column:auto;grid-row:auto;aspect-ratio:3/4;height:auto}}

/* Conversation row — ArtistScreen: raised band; question | vertical video (max 340px), centred.
   Paired with ksh-hide-if-empty on the root so the band disappears without media. */
.ksh-convo.e-con{
  --padding-top:var(--section-y-tight);--padding-bottom:var(--section-y-tight);--padding-left:var(--gutter-lg);--padding-right:var(--gutter-lg);
  padding:var(--section-y-tight) var(--gutter-lg);background:var(--surface-raised)
}
.ksh-convo .ksh-convo__row.e-con{
  --flex-direction:row;--align-items:center;--gap:var(--space-9);--row-gap:var(--space-7);--column-gap:var(--space-9);
  --padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;
  flex-direction:row;align-items:center;gap:var(--space-7) var(--space-9);padding:0
}
.ksh-convo .ksh-convo__text.e-con{
  --flex-direction:column;--align-items:flex-start;--gap:0px;--row-gap:0px;
  --padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;
  flex:1.2 1 0;min-width:0;flex-direction:column;align-items:flex-start;gap:0;padding:0
}
.ksh-convo .ksh-convo__media.elementor-widget{flex:0.8 1 0;min-width:0;width:auto}
.ksh-convo .ksh-convo__eyebrow :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){display:block;margin:0;text-align:start;font-family:var(--font-label);font-size:var(--fs-eyebrow);font-weight:var(--fw-regular);letter-spacing:var(--tracking-label);text-transform:var(--label-case);line-height:var(--lh-body-fa);color:var(--text-muted)}
.ksh-convo .ksh-convo__question.elementor-widget{margin-top:var(--space-5);max-width:30ch}
.ksh-convo .ksh-convo__question .elementor-heading-title{margin:0;font-family:var(--font-fa-display);font-size:var(--fs-h2);font-weight:var(--fw-light);font-style:normal;line-height:var(--lh-heading);color:var(--text-heading)}
.ksh-convo .ksh-convo__media :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){display:block;width:100%;max-width:340px;margin-inline:auto}
/* mediaelement writes inline width/height on its wrappers; !important overrides that plugin default. */
.ksh-convo .ksh-convo__media :is(.wp-video,.mejs-container,video){width:100%!important;max-width:340px;height:auto!important;aspect-ratio:9/16;background:var(--deep-aubergine);border-radius:0}
.ksh-convo .ksh-convo__media video{object-fit:cover}
.ksh-convo .ksh-convo__media :is(.wp-audio-shortcode,audio){width:100%!important;max-width:100%;aspect-ratio:auto}
/* mediaelement sets Helvetica/Arial on the player and every child (timer, labels). */
.ksh-convo .ksh-convo__media :is(.mejs-container,.mejs-container *){font-family:var(--font-fa-body)}
@media (max-width:767px){
  .ksh-convo.e-con{--padding-left:var(--gutter);--padding-right:var(--gutter);padding-left:var(--gutter);padding-right:var(--gutter)}
  .ksh-convo .ksh-convo__row.e-con{--flex-direction:column;flex-direction:column;align-items:stretch}
  .ksh-convo .ksh-convo__text.e-con,.ksh-convo .ksh-convo__media.elementor-widget{flex:0 0 auto;width:100%}
}

/* Eyebrow — .ks-eyebrow (tokens/base.css), on a heading widget or a dynamic field. */
.ksh-eyebrow :is(.elementor-heading-title,.jet-listing-dynamic-field__content){margin:0;font-family:var(--font-label);font-size:var(--fs-eyebrow);font-weight:var(--fw-regular);letter-spacing:var(--tracking-label);text-transform:var(--label-case);line-height:var(--lh-body-fa);color:var(--text-muted)}

/* Band — full-width tone section with a label column and a body column (1fr | 2.2fr),
   the text-section pattern of ArtistScreen / CycleScreen. Tone by modifier. */
.ksh-band.e-con{
  --padding-top:var(--section-y-tight);--padding-bottom:var(--section-y-tight);--padding-left:var(--gutter-lg);--padding-right:var(--gutter-lg);
  --flex-direction:row;--align-items:flex-start;--justify-content:flex-start;--gap:var(--space-9);--row-gap:var(--space-5);--column-gap:var(--space-9);
  padding:var(--section-y-tight) var(--gutter-lg)
}
.ksh-band .ksh-band__label.e-con,.ksh-band .ksh-band__body.e-con{
  --padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;--gap:var(--space-5);--row-gap:var(--space-5);
  width:auto;min-width:0;padding:0
}
.ksh-band .ksh-band__label.e-con{flex:1 1 0}
.ksh-band .ksh-band__body.e-con{flex:2.2 1 0}
.ksh-band--aubergine.e-con{background:var(--deep-aubergine);color:var(--text-on-dark)}
.ksh-band--aubergine .ksh-eyebrow :is(.elementor-heading-title,.jet-listing-dynamic-field__content){color:var(--text-on-dark-muted)}

/* Statement — a curatorial or artist statement: display face, h3 size, light, one paragraph, 58ch.
   Line-height 2 is the kit's literal for Persian statements (CycleScreen / ArtistScreen). */
.ksh-statement .jet-listing-dynamic-field{display:block}
.ksh-statement :is(.jet-listing-dynamic-field__content,p){margin:0;max-width:58ch;text-align:start;font-family:var(--font-fa-display);font-size:var(--fs-h3);font-weight:var(--fw-light);line-height:2;color:var(--text-heading);text-wrap:pretty}
.ksh-band--aubergine .ksh-statement :is(.jet-listing-dynamic-field__content,p){color:var(--text-on-dark)}
@media (max-width:767px){
  .ksh-band.e-con{--flex-direction:column;--padding-left:var(--gutter);--padding-right:var(--gutter);padding-left:var(--gutter);padding-right:var(--gutter)}
  .ksh-band .ksh-band__label.e-con,.ksh-band .ksh-band__body.e-con{flex:0 0 auto;width:100%}
}
.ksh-band--page.e-con{background:var(--surface-page)}
/* Signature inside a band: body gap (24) + 24 = the kit's 48 above the curator line. */
.ksh-band .ksh-band__body > .ksh-signature.e-con{--margin-top:var(--space-5);margin-top:var(--space-5)}
.ksh-band--aubergine .ksh-signature.e-con{border-top-color:var(--line-inverse)}
.ksh-band--aubergine .ksh-signature .ksh-signature__label .elementor-heading-title{color:var(--text-on-dark-muted)}
.ksh-band--aubergine .ksh-signature .ksh-signature__name :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){color:var(--text-on-dark)}

/* Icons — Lucide paths at the kit's stroke 1.25, used as masks so they take currentColor.
   Directional icons mirror in RTL (Icon.jsx DIRECTIONAL). */
:root{--ksh-icon-arrow-up-right:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%221.25%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M7 7h10v10%22/%3E%3Cpath d=%22M7 17 17 7%22/%3E%3C/svg%3E");--ksh-icon-arrow-right:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%221.25%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M5 12h14%22/%3E%3Cpath d=%22m12 5 7 7-7 7%22/%3E%3C/svg%3E");--ksh-icon-calendar:url("data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 24 24%22 fill=%22none%22 stroke=%22%23000%22 stroke-width=%221.25%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22%3E%3Cpath d=%22M8 2v4%22/%3E%3Cpath d=%22M16 2v4%22/%3E%3Crect width=%2218%22 height=%2218%22 x=%223%22 y=%224%22 rx=%222%22/%3E%3Cpath d=%22M3 10h18%22/%3E%3C/svg%3E")}

/* Editorial card — EditorialCard: frame, then eyebrow · title (h3 light) · excerpt · meta + arrow.
   Ratio by ksh-frame--4x3 (cycles) / --3x2 (journal). Same no-chrome rules as ksh-card. */
.ksh-card--editorial.e-con{--gap:var(--space-5);--row-gap:var(--space-5);gap:var(--space-5)}
.ksh-card--editorial .ksh-card__eyebrow :is(.jet-listing-dynamic-field__content,.jet-listing-dynamic-terms,.jet-listing-dynamic-terms__link){display:block;margin:0;text-align:start;font-family:var(--font-label);font-size:var(--fs-eyebrow);font-weight:var(--fw-regular);letter-spacing:var(--tracking-label);text-transform:var(--label-case);line-height:var(--lh-body-fa);color:var(--text-faint)}
.ksh-card--editorial .ksh-card__title.elementor-widget{margin-top:var(--space-2)}
.ksh-card.ksh-card--editorial .ksh-card__title .elementor-heading-title{font-size:var(--fs-h3);font-weight:var(--fw-light);line-height:var(--lh-heading)}
.ksh-card--editorial .ksh-card__excerpt.elementor-widget{margin-top:var(--space-2);max-width:46ch}
.ksh-card--editorial .ksh-card__excerpt :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){display:block;margin:0;text-align:start;font-size:var(--fs-body-sm);font-weight:var(--fw-light);line-height:var(--lh-body-fa);color:var(--text-muted)}
.ksh-card--editorial .ksh-card__foot.elementor-widget{margin-top:var(--space-3)}
.ksh-card--editorial .ksh-card__foot :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){display:flex;align-items:center;gap:var(--space-3);margin:0;font-size:var(--fs-caption);line-height:var(--lh-body-fa);color:var(--text-faint)}
.ksh-card--editorial .ksh-card__foot .jet-listing-dynamic-field__content::after{content:"";flex:none;width:16px;height:16px;background:var(--keshesh-violet);-webkit-mask:var(--ksh-icon-arrow-up-right) center/contain no-repeat;mask:var(--ksh-icon-arrow-up-right) center/contain no-repeat;transition:transform var(--dur-base) var(--ease-soft)}
.ksh-card--editorial:hover .ksh-card__foot .jet-listing-dynamic-field__content::after{transform:translateX(3px)}
[dir="rtl"] .ksh-card--editorial .ksh-card__foot .jet-listing-dynamic-field__content::after{transform:scaleX(-1)}
[dir="rtl"] .ksh-card--editorial:hover .ksh-card__foot .jet-listing-dynamic-field__content::after{transform:translateX(-3px) scaleX(-1)}

/* Button — core/Button, sm size, on an Elementor button or a JetEngine dynamic link.
   primary = violet, aubergine on hover; secondary = hairline, violet on hover. Square, label face. */
.ksh-btn.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link){
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  padding:8px 16px;font-family:var(--font-label);font-size:10px;font-weight:var(--fw-regular);
  letter-spacing:calc(0.2em * var(--label-tracking-scale));text-transform:var(--label-case);line-height:1;
  border:1px solid var(--keshesh-violet);border-radius:var(--radius-none);box-shadow:none;
  background:var(--keshesh-violet);color:var(--lavender-paper);
  transition:var(--transition-color),transform var(--dur-fast) var(--ease-soft)
}
.ksh-btn.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link):hover{background:var(--deep-aubergine);border-color:var(--deep-aubergine);color:var(--lavender-paper)}
.ksh-btn.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link):active{transform:scale(var(--press-scale))}
.ksh-btn--secondary.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link){background:transparent;color:var(--text-heading);border-color:var(--line-strong)}
.ksh-btn--secondary.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link):hover{background:transparent;border-color:var(--keshesh-violet);color:var(--keshesh-violet)}
.ksh-btn.elementor-widget .elementor-button-text{font:inherit;color:inherit}
.ksh-btn--arrow.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link)::after,
.ksh-btn--calendar.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link)::before{content:"";flex:none;width:14px;height:14px;background:currentColor;-webkit-mask:center/contain no-repeat;mask:center/contain no-repeat}
.ksh-btn--arrow.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link)::after{-webkit-mask-image:var(--ksh-icon-arrow-right);mask-image:var(--ksh-icon-arrow-right)}
[dir="rtl"] .ksh-btn--arrow.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link)::after{transform:scaleX(-1)}
.ksh-btn--calendar.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link)::before{-webkit-mask-image:var(--ksh-icon-calendar);mask-image:var(--ksh-icon-calendar)}

/* Cycle feature — ResidencyScreen «current residency»: image 4:5 (1.2) | text (1), top-aligned.
   Text: eyebrow, title at --fs-h1, artists, dates, location, one-liner (40ch), two sm buttons. */
.ksh-card--cycle-feature.e-con{--flex-direction:row;--align-items:flex-start;--gap:var(--space-9);--row-gap:var(--space-7);--column-gap:var(--space-9);flex-direction:row;align-items:flex-start;gap:var(--space-7) var(--space-9)}
.ksh-card--cycle-feature .ksh-card__frame{flex:1.2 1 0;min-width:0}
.ksh-card--cycle-feature .ksh-card__body.e-con{flex:1 1 0}
.ksh-card--cycle-feature .ksh-card__eyebrow :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){display:block;margin:0;text-align:start;font-family:var(--font-label);font-size:var(--fs-eyebrow);font-weight:var(--fw-regular);letter-spacing:var(--tracking-label);text-transform:var(--label-case);line-height:var(--lh-body-fa);color:var(--text-muted)}
.ksh-card--cycle-feature .ksh-card__title.elementor-widget{margin-top:var(--space-3)}
.ksh-card.ksh-card--cycle-feature .ksh-card__title :is(.elementor-heading-title,.jet-listing-dynamic-field__content){margin:0;font-family:var(--font-fa-display);font-size:var(--fs-h1);font-weight:var(--fw-light);line-height:var(--lh-heading);color:var(--text-heading)}
.ksh-card--cycle-feature .ksh-card__line.elementor-widget{margin-top:var(--space-1)}
.ksh-card--cycle-feature .ksh-card__line--first.elementor-widget{margin-top:var(--space-3)}
.ksh-card--cycle-feature .ksh-card__line :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content,.elementor-heading-title){display:block;margin:0;text-align:start;font-family:var(--font-fa-body);font-size:var(--fs-body-sm);font-weight:var(--fw-light);line-height:var(--lh-body-fa);color:var(--text-muted)}
.ksh-card--cycle-feature .ksh-card__line--strong :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){color:var(--text-body)}
.ksh-card--cycle-feature .ksh-card__lede.elementor-widget{margin-top:var(--space-4);max-width:40ch}
.ksh-card--cycle-feature .ksh-card__lede :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){display:block;margin:0;text-align:start;font-size:var(--fs-body);font-weight:var(--fw-light);line-height:var(--lh-body-fa);color:var(--text-body)}
.ksh-card--cycle-feature .ksh-card__actions.e-con{--flex-direction:row;--gap:var(--space-4);--row-gap:var(--space-3);--column-gap:var(--space-4);--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;flex-direction:row;flex-wrap:wrap;align-items:center;gap:var(--space-3) var(--space-4);padding:0;margin-top:var(--space-5)}
.ksh-card--cycle-feature .ksh-card__actions.e-con > .elementor-widget{width:auto}
@media (max-width:767px){
  .ksh-card--cycle-feature.e-con{--flex-direction:column;flex-direction:column;align-items:stretch}
  .ksh-card--cycle-feature .ksh-card__frame,.ksh-card--cycle-feature .ksh-card__body.e-con{flex:0 0 auto;width:100%}
}

/* Grid modifier: EditorialCard layout="horizontal" (HomeScreen residency): image 3:2 | text, 1fr | 1fr, centred. */
@media (min-width:768px){
  .ksh-cards--horizontal .ksh-card--editorial.e-con{--flex-direction:row;--align-items:center;flex-direction:row;align-items:center;gap:var(--space-7)}
  .ksh-cards--horizontal .ksh-card--editorial > :is(.ksh-card__frame,.ksh-card__body){flex:1 1 0;min-width:0}
  .ksh-cards--horizontal .ksh-card--editorial .ksh-frame{aspect-ratio:3/2}
}

/* Product card price — ProductCard: body-sm, --text-body, a step below the material line. */
.ksh-card .ksh-card__price.elementor-widget{margin-top:var(--space-1)}
.ksh-card .ksh-card__price :is(.jet-listing-dynamic-field,.jet-listing-dynamic-field__content){display:block;margin:0;text-align:start;font-family:var(--font-fa-body);font-size:var(--fs-body-sm);font-weight:var(--fw-regular);line-height:var(--lh-body-fa);color:var(--text-body)}

/* Button sizes and tones beyond sm/primary/secondary (core/Button). md = 13×26, 11px. */
.ksh-btn--md.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link){padding:13px 26px;font-size:11px;letter-spacing:calc(0.22em * var(--label-tracking-scale))}
.ksh-btn--md.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link)::after,.ksh-btn--md.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link)::before{width:16px;height:16px}
.ksh-btn--light.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link){background:var(--lavender-paper);color:var(--ink);border-color:var(--lavender-paper)}
.ksh-btn--light.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link):hover{background:var(--n-0);border-color:var(--n-0);color:var(--ink)}
.ksh-btn--inverse.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link){background:transparent;color:var(--text-on-dark);border-color:var(--line-inverse)}
.ksh-btn--inverse.elementor-widget :is(.elementor-button,.jet-listing-dynamic-link__link):hover{background:transparent;border-color:var(--lavender-paper);color:var(--text-on-dark)}

/* Card text direction. JetEngine prints text-align:left on every dynamic field by default,
   at (0,4,0) — it beat the start rules above and pushed eyebrows, meta and prices left in RTL. */
.ksh-card.e-con .elementor-widget.elementor-widget-jet-listing-dynamic-field .jet-listing-dynamic-field__content{text-align:start}
.ksh-badge--violet{color:var(--keshesh-violet);border-color:var(--keshesh-violet)}

/* Section — Home scenes (HomeScreen <Section tone>). Page tone by default, raised for residency. */
.ksh-section.e-con{
  --padding-top:var(--section-y);--padding-bottom:var(--section-y);--padding-left:var(--gutter-lg);--padding-right:var(--gutter-lg);
  --content-width:var(--container);--flex-direction:column;--gap:var(--space-8);--row-gap:var(--space-8);--widgets-spacing:var(--space-8);
  padding:var(--section-y) var(--gutter-lg);color:var(--text-body)
}
.ksh-section.e-con > .e-con-inner{--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;padding:0}
.ksh-section--page.e-con{background:var(--surface-page)}
.ksh-section--raised.e-con{background:var(--surface-raised)}
@media (max-width:1024px){.ksh-section.e-con{--padding-left:var(--gutter);--padding-right:var(--gutter);padding-left:var(--gutter);padding-right:var(--gutter)}}

/* Section heading — KS.SectionHeading: «۰۳ · رزیدنسی» eyebrow, a sentence title, CTA on the far side. */
.ksh-section-head.e-con{
  --flex-direction:row;--flex-wrap:wrap;--justify-content:space-between;--align-items:flex-end;--gap:var(--space-5);--row-gap:var(--space-5);
  --padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;
  flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:var(--space-5);padding:0
}
.ksh-section-head .ksh-section-head__text.e-con{
  --flex-direction:column;--gap:var(--space-3);--row-gap:var(--space-3);--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;
  flex-direction:column;gap:var(--space-3);padding:0;flex:1 1 420px;max-width:var(--container-narrow)
}
.ksh-section-head .ksh-section-head__title .elementor-heading-title{margin:0;text-align:start;font-family:var(--font-fa-display);font-size:var(--fs-h1);font-weight:var(--fw-light);line-height:var(--lh-heading);letter-spacing:var(--tracking-display);color:var(--text-heading);text-wrap:balance}
.ksh-section-head > .ksh-btn.elementor-widget{width:auto;flex:none}

/* Collection card — CollectionsIndexScreen lead: 21:9 cover, badge + year · pieces, display title,
   key line (52ch), «ورود به کالکشن» on the far side of the same bottom line. */
.ksh-frame--21x9{aspect-ratio:21/9}
.ksh-card--collection.e-con{--gap:var(--space-5);--row-gap:var(--space-5);gap:var(--space-5)}
.ksh-card--collection .ksh-card__lead.e-con{
  --flex-direction:row;--flex-wrap:wrap;--justify-content:space-between;--align-items:flex-end;--gap:var(--space-7);--row-gap:var(--space-5);
  --padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;
  flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:var(--space-5) var(--space-7);padding:0
}
.ksh-card--collection .ksh-card__lead > .ksh-card__body.e-con{flex:1 1 420px}
.ksh-card--collection .ksh-card__lead > .ksh-btn.elementor-widget{width:auto;flex:none}
.ksh-card--collection .ksh-card__meta .jet-listing-dynamic-field__content{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-4)}
.ksh-card.ksh-card--collection .ksh-card__title .jet-listing-dynamic-field__content{margin:var(--space-3) 0 0;font-family:var(--font-fa-display);font-size:var(--fs-display-2);font-weight:var(--fw-light);line-height:var(--lh-tight);letter-spacing:var(--tracking-display);color:var(--text-heading);transition:var(--transition-color)}
.ksh-card.ksh-card--collection:hover .ksh-card__title .jet-listing-dynamic-field__content{color:var(--keshesh-violet)}
.ksh-card--collection .ksh-card__lede{max-width:52ch;margin-top:var(--space-3)}
@media (max-width:720px){.ksh-frame--21x9{aspect-ratio:4/3}}
.ksh-motion .ksh-motion__item{transition:none}

/* Manifesto band — «فراتر از زیور»: centred display title and a short statement over the cloud image (still). */
.ksh-manifesto.e-con{
  --justify-content:center;--align-items:center;--gap:var(--space-4);--row-gap:var(--space-4);
  --padding-top:var(--section-y);--padding-bottom:var(--section-y);--padding-left:var(--gutter);--padding-right:var(--gutter);
  justify-content:center;align-items:center;gap:var(--space-4);padding:var(--section-y) var(--gutter);background-size:cover;background-position:center
}
.ksh-manifesto .ksh-manifesto__title .elementor-heading-title{margin:0;text-align:center;font-family:var(--font-fa-display);font-size:var(--fs-display-2);font-weight:var(--fw-light);line-height:var(--lh-tight);letter-spacing:var(--tracking-display);color:var(--ink)}
.ksh-manifesto .ksh-manifesto__text.elementor-widget{width:100%;max-width:52ch}
.ksh-manifesto .ksh-manifesto__text :is(.elementor-widget-container,p){margin:0;text-align:center;font-family:var(--font-fa-body);font-size:var(--fs-body-lg);font-weight:var(--fw-light);line-height:var(--lh-body-fa);color:var(--text-body)}
.ksh-manifesto .ksh-manifesto__text strong{font-weight:var(--fw-regular);color:var(--text-heading)}

/* Gravity Forms — shared brand skin for form 2 («درخواست حضور در رزیدنسی کشش»),
   used on the popup (13801) and the standalone page (14255). One class instead
   of per-element custom_css on each container that embeds the shortcode. */
.ksh-gform .gform_wrapper{direction:rtl;font-family:var(--font-fa-body)}
.ksh-gform .gform_wrapper .gform_fields{display:flex;flex-direction:column;gap:var(--space-7)}
.ksh-gform .gform_wrapper .gfield_label{display:block;margin:0 0 var(--space-2);font-family:var(--font-fa-body);font-size:var(--fs-body-sm);font-weight:var(--fw-regular);color:var(--text-heading)}
.ksh-gform .gform_wrapper .gfield_required{color:var(--keshesh-violet)}
.ksh-gform .gform_wrapper :is(input[type="text"],input[type="email"],input[type="tel"],input[type="url"],textarea,select:not(.gfield_select)){width:100%;font-family:var(--font-fa-body);font-size:var(--fs-body-sm);color:var(--text-heading);background:var(--n-0);border:var(--border-strong);border-radius:var(--radius-sm);padding:var(--space-3) var(--space-4)}
.ksh-gform .gform_wrapper textarea{min-height:110px;resize:vertical}
.ksh-gform .gform_wrapper :is(input,textarea,select):focus{outline:none;border-color:var(--keshesh-violet)}
.ksh-gform .gform_wrapper .gfield_description{margin-top:var(--space-2);font-size:var(--fs-caption);color:var(--text-muted)}
.ksh-gform .gform_wrapper .gform_fileupload_rules{display:block;margin-top:var(--space-2)}
/* File upload — same dashed dropzone for both the multi-file field and the single PDF field */
.ksh-gform .gform_wrapper .ginput_container_fileupload{border:1px dashed var(--line-strong);border-radius:var(--radius-sm);padding:var(--space-5);background:var(--n-0);text-align:center}
.ksh-gform .gform_wrapper .ginput_container_fileupload input[type="file"]{width:100%;font-family:var(--font-fa-body);font-size:var(--fs-body-sm);color:var(--text-muted)}
.ksh-gform .gform_wrapper .gform_drop_area{padding:var(--space-4)}
.ksh-gform .gform_wrapper .gform_button_select_files{font-family:var(--font-fa-body);font-size:var(--fs-body-sm);color:var(--text-heading);background:var(--n-0);border:var(--border-strong);border-radius:var(--radius-sm);padding:var(--space-3) var(--space-5);cursor:pointer}
/* Chosen (multiselect enhanced UI) — closed RTL dropdown to match the other inputs */
.ksh-gform .gform_wrapper .chosen-container{width:100% !important;font-family:var(--font-fa-body);font-size:var(--fs-body-sm)}
.ksh-gform .gform_wrapper .chosen-container .chosen-choices{width:100%;min-height:46px;background:var(--n-0);border:var(--border-strong);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-4);box-shadow:none}
.ksh-gform .gform_wrapper .chosen-container .chosen-choices li.search-choice{background:var(--lavender-paper);border:1px solid var(--line-hairline);border-radius:var(--radius-sm);color:var(--text-heading)}
.ksh-gform .gform_wrapper .chosen-container-active .chosen-choices{border-color:var(--keshesh-violet)}
/* Checkbox (consent) */
.ksh-gform .gform_wrapper .gfield--type-checkbox .gfield_label{margin-bottom:var(--space-3)}
.ksh-gform .gform_wrapper .gchoice{display:flex;align-items:flex-start;gap:var(--space-2)}
.ksh-gform .gform_wrapper .gchoice label{font-size:var(--fs-body-sm);color:var(--text-body)}
/* Footer / submit */
.ksh-gform .gform_wrapper .gform_footer{margin-top:var(--space-6);padding:0}
.ksh-gform .gform_wrapper .gform_footer input[type="submit"]{font-family:var(--font-fa-body);font-size:var(--fs-body-sm);color:var(--lavender-paper);background:var(--keshesh-violet);border:0;border-radius:var(--radius-sm);padding:var(--space-3) var(--space-6);cursor:pointer;transition:var(--transition-color)}
.ksh-gform .gform_wrapper .gform_footer input[type="submit"]:hover{background:var(--ink)}
.ksh-gform .gform_wrapper .validation_error{font-family:var(--font-fa-body);font-size:var(--fs-body-sm);color:var(--state-sold,#B23A3A);border-color:var(--state-sold,#B23A3A)}
.ksh-gform .gform_wrapper .gfield_validation_message{font-size:var(--fs-caption);color:var(--state-sold,#B23A3A)}
@media (max-width:600px){.ksh-gform .gform_wrapper .gform_fields{gap:var(--space-6)}}

/* Tones — collection stories. A section (Elementor container or story scene) declares its tone; still state paints it on
   the section. With motion, ksh-motion.js adds html.ksh-tones-on and one fixed wash cross-fades behind the page. */
.ksh-tone--ink,.e-con.ksh-tone--ink{background:var(--ink);color:var(--text-on-dark)}
.ksh-tone--lavender-paper,.e-con.ksh-tone--lavender-paper{background:var(--lavender-paper);color:var(--ink)}
.ksh-tone--indigo,.e-con.ksh-tone--indigo{background:var(--indigo);color:var(--text-on-dark)}
.ksh-tone--crimson-deep,.e-con.ksh-tone--crimson-deep{background:var(--crimson-deep);color:var(--text-on-dark)}
html.ksh-tones-on [class*="ksh-tone--"],html.ksh-tones-on .e-con[class*="ksh-tone--"]{background:transparent}
.ksh-tones{position:fixed;inset:0;z-index:-1;pointer-events:none}
.ksh-tones i{position:absolute;inset:0;opacity:0}

/* Chapter — a simple (Elementor) section of a collection story, between the code scenes. Label «۰۲ مقدمه», then one
   lead / display line / body / media. Text follows the section tone. */
.ksh-chapter.e-con{
  --padding-top:var(--section-y);--padding-bottom:var(--section-y);--padding-left:var(--gutter-lg);--padding-right:var(--gutter-lg);
  --content-width:var(--container);--flex-direction:column;--gap:var(--space-7);--row-gap:var(--space-7);--widgets-spacing:var(--space-7);
  padding:var(--section-y) var(--gutter-lg);font-family:var(--font-fa-body)
}
.ksh-chapter.e-con > .e-con-inner{--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;padding:0;gap:var(--space-7)}
.ksh-chapter--center.e-con,.ksh-chapter--center.e-con > .e-con-inner{--align-items:center;align-items:center;text-align:center}
.ksh-chapter :is(.elementor-heading-title,.elementor-widget-text-editor){font-family:var(--font-fa-body);color:inherit;letter-spacing:0}
.ksh-chapter .elementor-widget-text-editor p{margin:0}
.ksh-chapter__label .elementor-heading-title{display:flex;gap:var(--space-3);align-items:baseline;margin:0;font-size:var(--fs-body-sm);font-weight:var(--fw-regular);line-height:var(--lh-body-fa);color:var(--text-muted)}
.ksh-chapter__label .elementor-heading-title span{color:var(--gold-deep)}
:is(.ksh-tone--ink,.ksh-tone--indigo,.ksh-tone--crimson-deep) .ksh-chapter__label .elementor-heading-title{color:var(--text-on-dark-muted)}
:is(.ksh-tone--ink,.ksh-tone--indigo,.ksh-tone--crimson-deep) .ksh-chapter__label .elementor-heading-title span{color:var(--gold)}
.ksh-six{display:block;width:44px;height:auto;margin:0 auto var(--space-6);overflow:visible}.ksh-six line{stroke:var(--gold);stroke-width:1.5;stroke-linecap:square}
.ksh-chapter__lead.elementor-widget{max-width:34em;font-size:var(--fs-h2);font-weight:var(--fw-light);line-height:var(--lh-body-fa);text-wrap:pretty}
.ksh-chapter__display .elementor-heading-title{margin:0;font-size:var(--fs-display-2);font-weight:var(--fw-light);line-height:var(--lh-heading);max-width:14ch;text-wrap:balance}
.ksh-chapter--center .ksh-chapter__display .elementor-heading-title{margin-inline:auto}
.ksh-chapter__body.elementor-widget{max-width:44em;font-size:var(--fs-body-lg);font-weight:var(--fw-light);line-height:var(--lh-body-fa);color:var(--text-body)}
.ksh-chapter__body.elementor-widget p + p{margin-top:var(--space-5)}
.ksh-chapter__body strong{font-weight:var(--fw-regular);color:var(--gold-deep)}
.ksh-chapter__tale.elementor-widget{max-width:26em;font-size:var(--fs-h3);font-weight:var(--fw-light);line-height:var(--lh-body-fa)}
/* split: media on one side, text on the other; wraps to one column */
.ksh-chapter__split.e-con{--flex-direction:row;--flex-wrap:wrap;--align-items:center;--gap:var(--space-9);--row-gap:var(--space-7);--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;flex-direction:row;flex-wrap:wrap;align-items:center;gap:var(--space-7) var(--space-9);padding:0}
.ksh-chapter__text.e-con{--flex-direction:column;--gap:var(--space-6);--row-gap:var(--space-6);--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;flex:1 1 300px;flex-direction:column;gap:var(--space-6);padding:0}
/* (0,5,0): Elementor's .elementor.elementor .e-con > .elementor-widget (0,4,0) sets max-width:100% */
.elementor .ksh-chapter__split.e-con > .ksh-chapter__portrait.elementor-widget{flex:1 1 320px;max-width:min(100%,58vh)}
.ksh-chapter__portrait img{width:100%;height:auto;aspect-ratio:9/16;object-fit:cover}
.elementor .ksh-chapter__split.e-con > .ksh-chapter__photo.elementor-widget{flex:1 1 320px;max-width:min(100%,520px)}
.ksh-chapter__photo img{width:100%;height:auto}
.ksh-chapter .ksh-chapter__sign .elementor-heading-title{margin:0;font-family:var(--font-fa-display);font-size:var(--fs-h3);font-weight:var(--fw-light);line-height:var(--lh-heading)}
.ksh-chapter__media.e-con{--flex-direction:column;--gap:var(--space-4);--row-gap:var(--space-4);--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;flex:3 1 420px;min-width:0;flex-direction:column;align-items:flex-start;gap:var(--space-4);padding:0}
.ksh-chapter__media > .ksh-chapter__video.elementor-widget{width:100%}
.ksh-chapter__video video{display:block;width:100%;aspect-ratio:16/9;object-fit:contain;background:var(--n-0)}
/* grid: three images, bottoms aligned; renders on white sit on the paper */
.ksh-chapter__grid.e-con{--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:var(--space-5);align-items:end;padding:0}
.ksh-chapter__grid img{width:100%;height:auto;object-fit:cover}
.ksh-chapter__render img{mix-blend-mode:multiply}
/* mosaic: on-the-body photos at 4:5, close-ups and mid shots set off against each other */
.ksh-chapter__mosaic.e-con{--flex-direction:row;--flex-wrap:wrap;--align-items:flex-start;--gap:var(--space-5);--row-gap:var(--space-5);--padding-top:0px;--padding-bottom:0px;--padding-left:0px;--padding-right:0px;flex-direction:row;flex-wrap:wrap;align-items:flex-start;gap:var(--space-5);padding:0}
.ksh-chapter__mosaic.e-con > .elementor-widget{flex:2 1 220px;min-width:0}
.ksh-chapter__mosaic.e-con > .elementor-widget:is(:nth-child(1),:nth-child(4)){flex:3 1 300px}
.ksh-chapter__mosaic.e-con > .elementor-widget:nth-child(2){margin-top:var(--space-12)}
.ksh-chapter__mosaic.e-con > .elementor-widget:nth-child(4){margin-top:var(--space-10)}
.ksh-chapter__mosaic.e-con > .elementor-widget:nth-child(5){flex:0 1 420px;margin-inline:auto}
.ksh-chapter__mosaic img{width:100%;height:auto;aspect-ratio:4/5;object-fit:cover}
@media (max-width:1024px){.ksh-chapter.e-con{--padding-left:var(--gutter);--padding-right:var(--gutter);padding-left:var(--gutter);padding-right:var(--gutter)}}
@media (max-width:720px){.ksh-chapter__mosaic.e-con > .elementor-widget:is(:nth-child(2),:nth-child(4)){margin-top:0}}
