/* v3 yerleşimleri (#525, sahibi Ada). Sözleşme: docs/tasarim/v3/engine-contract.md §2-3; kaynak sistem.md §1.3-1.5, §2, §6.3-6.4, §7.
   Kurallar: her yerleşim body[data-layout="<key>"] ile; renk yalnız var(--inv-*) (hex yok), ID seçici yok, dekor gradyanı,
   cam efekti ve parlayan gölge yok (§8). Süs SVG'si bu aşamada yok (data-ornament-art="false"): çizgi, çerçeve ve kenar
   süsleri --inv-accent ile CSS'ten çizilir. v1 layouts.css v3'te yüklenmez; ortak temel body[data-engine="v3"] altında.
   Kırılımlar: 390 taban, 48rem (768), 64rem (1024 ve üstü; 1440 tasarımı). Taşma: isim boyu yerleşimin clamp()'ı ile
   isim kutusunun genişliğinin (cqi) küçüğü, tabanı --inv-size-name-min (32 px, T1/T4); kırma T3; kutular min-width: 0 (T5). */

/* ============ Ortak temel ============ */
body[data-engine="v3"] {
  --v3-measure: 40rem;
  --v3-name: var(--inv-size-name);
  --v3-name-cap: 11.5cqi;
  --v3-media-width: 14rem;
  background: var(--inv-bg);
  color: var(--inv-text);
  font-size: var(--inv-size-body);
}
body[data-engine="v3"] .inv-page { overflow-x: clip; }
body[data-engine="v3"] .inv-main { width: 100%; max-width: none; box-shadow: none; background: var(--inv-bg); overflow-x: clip; }
body[data-engine="v3"] :is(.inv-flank, .inv-cover__corner) { display: none; }
body[data-engine="v3"] .inv-cover { overflow-x: clip; gap: var(--space-6); padding-inline: var(--inv-gutter); }
body[data-engine="v3"] .inv-cover__content {
  container-type: inline-size;
  width: 100%; max-width: min(100%, var(--v3-measure)); min-width: 0;
}
body[data-engine="v3"] .inv-cover__names {
  font-family: var(--inv-font-script);
  font-size: max(var(--inv-size-name-min), min(var(--v3-name), var(--v3-name-cap)));
  line-height: 1.08;
  overflow-wrap: anywhere; word-break: normal; hyphens: manual; text-wrap: balance;
  min-width: 0; max-width: 100%;
}
/* Görev 1411: script/display fontun içerik kutusu satır yüksekliğini aşar; isim, "&" ve ikinci isim satırları arası boşlukla ayrılır. */
body[data-engine="v3"] .inv-cover__names { row-gap: .3em; }
body[data-engine="v3"] .inv-cover__amp { font-size: .6em; line-height: 1.3; color: var(--inv-accent); }
body[data-engine="v3"] .inv-cover__eyebrow { font-size: var(--inv-size-eyebrow); letter-spacing: var(--inv-tracking-eyebrow); }
body[data-engine="v3"] .inv-cover__media { width: min(100%, var(--v3-media-width)); min-width: 0; }
/* "Davetiyeyi oku" akışta durur: uzun isimde kapak uzar, bağlantı tarih/mekân satırının üstüne binmez. */
body[data-engine="v3"] .inv-cover__scroll { position: static; transform: none; justify-self: center; grid-column: 1 / -1; }
body[data-engine="v3"] .inv-section { max-width: var(--v3-measure); margin-inline: auto; padding-inline: var(--inv-gutter); }
body[data-engine="v3"] .inv-section__title { font-size: var(--inv-size-h2); }
body[data-engine="v3"] .inv-section__icon { display: none; }
body[data-engine="v3"] :is(.inv-card, .inv-section__body, .inv-schedule, .inv-venue__name, .inv-venue__address, .inv-calendar__summary) { overflow-wrap: break-word; min-width: 0; }
body[data-engine="v3"] .inv-gift__iban-value { font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
body[data-engine="v3"] :is(a, button, input, select, textarea, summary):focus-visible { outline: 3px solid var(--inv-focus); outline-offset: 3px; }

/* Mekân kartı (partials/venue) */
body[data-engine="v3"] .inv-venue__card { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-3); }
body[data-engine="v3"] .inv-venue__name { font-family: var(--inv-font-display); font-size: var(--inv-size-date); line-height: var(--leading-snug); }
body[data-engine="v3"] .inv-venue__address { color: var(--inv-text-muted); }

/* Görsel yuvası (components/design-image): oran kayıttan (inline aspect-ratio), yedek = paletten zemin + çerçeve + monogram. */
body[data-engine="v3"] .design-image { position: relative; display: block; width: 100%; overflow: hidden; background: var(--inv-backdrop); }
body[data-engine="v3"] .design-image__img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: var(--inv-cover-focus, 50% 50%); }
body[data-engine="v3"] .design-image--fallback { display: grid; place-items: center; background: var(--inv-surface); }
body[data-engine="v3"] .design-image__frame { position: absolute; inset: var(--space-3); border: 1px solid var(--inv-accent); pointer-events: none; }
body[data-engine="v3"] .design-image__monogram {
  font-family: var(--inv-font-display); font-size: clamp(1.75rem, 1.2rem + 3vw, 3.5rem);
  letter-spacing: .08em; color: var(--inv-accent); line-height: 1;
}
/* Arka plan rolü: kapak zemininde düşük opaklıkta doku; oran yerine kapağı kaplar. */
body[data-engine="v3"][data-image-role="background"] .inv-cover__media { position: absolute; inset: 0; z-index: -1; width: 100%; opacity: var(--inv-media-opacity, .22); }
body[data-engine="v3"][data-image-role="background"] .inv-cover__media .design-image { height: 100%; aspect-ratio: auto !important; }

/* ============ centered-classic — Klasik orta eksen ============ */
body[data-layout="centered-classic"] { --v3-measure: 40rem; --v3-media-width: 56%; }
/* v4 (#1401, sistem-v4 §2): metin %22-62 bandında (üst %22 ve alt bölge süs), yan boşluk ≥ 24 px, 1440'ta sütun ≤ 560. */
body[data-layout="centered-classic"] .inv-cover {
  align-content: center; padding-inline: max(var(--inv-gutter), var(--inv-safe-x, 24px));
  padding-top: 22svh; padding-bottom: 20svh;
}
body[data-layout="centered-classic"] .inv-section__body { font-size: var(--inv-text-body, var(--inv-size-body)); line-height: 1.6; }
body[data-layout="centered-classic"] .inv-cover__names::after {
  content: ""; display: block; width: var(--space-16); height: 1px; margin: var(--space-5) auto 0; background: var(--inv-accent);
}
body[data-layout="centered-classic"] .inv-section::before {
  content: ""; display: block; width: var(--space-10); height: 1px; margin: 0 auto var(--space-8); background: var(--inv-accent);
}
body[data-layout="centered-classic"] [data-section="photo-upload"] .inv-section__body { max-width: 28rem; margin-inline: auto; }
@media (min-width: 48rem) {
  body[data-layout="centered-classic"] { --v3-media-width: 40%; --v3-measure: 36rem; }
  body[data-layout="centered-classic"] .inv-section { padding-top: var(--space-24); }
}
@media (min-width: 64rem) {
  body[data-layout="centered-classic"] { --v3-media-width: 15rem; --v3-measure: 35rem; }
  body[data-layout="centered-classic"] .inv-cover__art::before,
  body[data-layout="centered-classic"] .inv-cover__art::after {
    content: ""; position: absolute; top: 50%; width: 12vw; height: 1px; background: var(--inv-accent);
  }
  body[data-layout="centered-classic"] .inv-cover__art::before { left: 8vw; }
  body[data-layout="centered-classic"] .inv-cover__art::after { right: 8vw; }
}

/* ============ framed-card — Paspartulu kart ============ */
body[data-layout="framed-card"] { --v3-name: clamp(2rem, 1.5rem + 2.8vw, 4rem); --v3-measure: 100%; --v3-media-width: 60%; }
body[data-layout="framed-card"] .inv-main {
  width: calc(100% - 24px); max-width: 44rem; margin: 12px auto;
  background: var(--inv-surface);
  border: 1px solid var(--inv-accent);
  /* #1739: single frame (the inset 8 px inner ring made a card inside a card); the soft shadow derives from the text color. */
  box-shadow: 0 2px 8px color-mix(in srgb, var(--inv-text) 14%, transparent);
}
body[data-layout="framed-card"] .inv-cover { min-height: 100svh; padding: var(--space-12) var(--space-6); align-content: center; }
body[data-layout="framed-card"] .inv-section { padding-inline: var(--space-6); }
body[data-layout="framed-card"] .inv-section__body { font-size: var(--inv-text-body, var(--inv-size-body)); line-height: 1.6; }
body[data-layout="framed-card"] [data-section="photo-upload"] { border-top: 1px solid var(--inv-accent); margin-top: var(--space-12); }
body[data-layout="framed-card"] .inv-footer { width: calc(100% - 24px); max-width: 44rem; margin-inline: auto; }
@media (min-width: 48rem) {
  body[data-layout="framed-card"] .inv-main { width: calc(100% - 96px); margin-block: 48px; }
  body[data-layout="framed-card"] :is(.inv-cover, .inv-section) { padding-inline: var(--space-12); }
}
@media (min-width: 64rem) {
  body[data-layout="framed-card"] { --v3-media-width: 50%; }
  body[data-layout="framed-card"] :is(.inv-cover, .inv-section) { padding-inline: var(--space-16); }
  body[data-layout="framed-card"] .inv-section > * { max-width: 35rem; margin-inline: auto; }
}

/* ============ arch-frame — Kemer çerçeve ============ */
/* v4 (görev 1400): kemer içeriğin kabıdır (görsel kemerde, metin altında); isim tabanı 36 px, 2 px çerçeve (390'da ince çizgi kaybolmasın). */
body[data-layout="arch-frame"] { --v3-name: var(--inv-size-name-script); --v3-media-width: 86%; }
body[data-layout="arch-frame"] .inv-cover__names { --inv-size-name-min: 2.25rem; text-wrap: balance; }
body[data-layout="arch-frame"] .inv-cover { align-content: center; padding-inline: max(var(--inv-gutter), 24px); }
body[data-layout="arch-frame"] .inv-cover__media { max-width: 22rem; }
body[data-layout="arch-frame"] .inv-cover__content { gap: var(--space-4); }
body[data-layout="arch-frame"] .inv-cover__media .design-image { border-radius: 999px 999px 0 0; border: 2px solid var(--inv-accent); }
body[data-layout="arch-frame"] .inv-cover__media .design-image__frame { border-radius: 999px 999px 0 0; }
body[data-layout="arch-frame"] .inv-section::before {
  content: ""; display: block; width: var(--space-10); height: var(--space-6); margin: 0 auto var(--space-5);
  border: 1px solid var(--inv-accent); border-bottom: 0; border-radius: 999px 999px 0 0;
}
body[data-layout="arch-frame"] [data-section="photo-upload"] .inv-section__body { border: 1px solid var(--inv-accent); border-radius: 999px 999px var(--radius-md) var(--radius-md); padding: var(--space-16) var(--space-5) var(--space-6); }
@media (min-width: 48rem) {
  body[data-layout="arch-frame"] { --v3-media-width: 22rem; }
}
@media (min-width: 64rem) {
  body[data-layout="arch-frame"] .inv-cover {
    grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); column-gap: var(--space-16);
    max-width: 76rem; margin-inline: auto; justify-items: stretch;
  }
  body[data-layout="arch-frame"] .inv-cover__media { width: 100%; max-width: 26rem; justify-self: end; }
  body[data-layout="arch-frame"] .inv-cover__content { align-items: flex-start; text-align: left; max-width: 560px; }
  body[data-layout="arch-frame"] .inv-cover__names { align-items: flex-start; }
}

/* ============ stacked-modern — Modern yığın ============ */
/* v4 (görev 1400): dikey yığın görsel → isim → tarih → yer; boşluk 8 px ızgarasında 16/24/32. */
body[data-layout="stacked-modern"] { --v3-name: clamp(2.5rem, 1.5rem + 4.2vw, 5.5rem); --v3-name-cap: 10.5cqi; --v3-media-width: 100%; --v3-measure: 56rem; counter-reset: v3-block; }
body[data-layout="stacked-modern"] .inv-cover { min-height: 88svh; padding-top: 12svh; justify-items: start; text-align: left; align-content: center; gap: var(--space-8); padding-inline: max(var(--inv-gutter), 24px); }
body[data-layout="stacked-modern"] .inv-cover__media { justify-self: stretch; }
body[data-layout="stacked-modern"] .inv-cover__media .design-image { height: 36svh; min-height: 12rem; aspect-ratio: auto !important; }
body[data-layout="stacked-modern"] .inv-cover__content { align-items: flex-start; max-width: 100%; gap: var(--space-4); }
body[data-layout="stacked-modern"] .inv-cover__names { align-items: flex-start; text-wrap: balance; }
body[data-layout="stacked-modern"] .inv-cover__names::after { content: ""; display: block; width: 100%; height: 2px; margin-top: var(--space-6); background: var(--inv-text); }
body[data-layout="stacked-modern"] :is(.inv-section__title, .inv-section__lead) { text-align: left; }
body[data-layout="stacked-modern"] .inv-section { text-align: left; }
body[data-layout="stacked-modern"] .inv-section__title::before {
  counter-increment: v3-block; content: counter(v3-block, decimal-leading-zero);
  display: block; font-size: var(--inv-size-eyebrow); letter-spacing: var(--inv-tracking-eyebrow); color: var(--inv-accent);
}
body[data-layout="stacked-modern"] [data-section="photo-upload"] { border-top: 2px solid var(--inv-text); margin-top: var(--space-12); }
@media (min-width: 48rem) {
  body[data-layout="stacked-modern"] .inv-cover__media { justify-self: end; width: 72%; }
  body[data-layout="stacked-modern"] .inv-section { display: grid; grid-template-columns: 8rem minmax(0, 1fr); column-gap: var(--space-6); }
  body[data-layout="stacked-modern"] .inv-section > * { grid-column: 2; }
  body[data-layout="stacked-modern"] .inv-section > .inv-section__title { grid-column: 1; grid-row: 1 / span 3; font-size: var(--text-lg); }
}
@media (min-width: 64rem) {
  body[data-layout="stacked-modern"] { --v3-media-width: 22rem; }
  body[data-layout="stacked-modern"] .inv-cover { grid-template-columns: minmax(0, 1fr) var(--v3-media-width); padding-inline: 12vw var(--inv-gutter); column-gap: var(--space-8); }
  body[data-layout="stacked-modern"] .inv-cover__content { grid-column: 1; grid-row: 1; max-width: 560px; }
  body[data-layout="stacked-modern"] .inv-cover__media { grid-column: 2; grid-row: 1; width: 100%; }
  body[data-layout="stacked-modern"] .inv-cover__media .design-image { height: auto; min-height: 0; aspect-ratio: 4 / 5 !important; }
  body[data-layout="stacked-modern"] .inv-section { grid-template-columns: 14rem minmax(0, 44rem); margin-inline: 12vw auto; max-width: none; }
}

/* ============ sticker-board — Çıkartma panosu ============ */
body[data-layout="sticker-board"] { --v3-name: clamp(2.25rem, 1.5rem + 3.4vw, 4.75rem); --v3-media-width: 9rem; --v3-measure: 100%; }
/* v4 (#1401): mosaic-grid emekli; tek tasarımı (blueprint-expo) sticker-board görünümünü alır. Bu satır sözlük testi için alias. */
body[data-layout="mosaic-grid"] { --v3-name: clamp(2.25rem, 1.5rem + 3.4vw, 4.75rem); --v3-media-width: 9rem; --v3-measure: 100%; }
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-main { padding-inline: 12px; overflow-x: clip; }
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-cover { align-content: center; position: relative; padding: 22svh var(--inv-safe-x, 24px) 22svh; }
/* Çıkartmalar süs bölgesinde (üst/alt bant), ≥ 64 px; metin kutusuyla kesişmez (kapak dolgusu onları içeriğin dışında tutar). */
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-cover::before,
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-cover::after { content: ""; position: absolute; z-index: 1; pointer-events: none; }
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-cover::before {
  /* Görev 1527: düz dolu daire yerine 12 uçlu çıkartma rozeti; sert duraklı halkalar (gradyan süsü değil): merkez noktası, açık halka, vurgu rengi. */
  top: var(--space-6); left: var(--inv-safe-x, 24px); width: 5.5rem; height: 5.5rem; transform: rotate(-12deg);
  background: radial-gradient(circle at 50% 50%, var(--inv-text) 0 8%, var(--inv-surface) 8% 24%, var(--inv-accent) 24% 30%, var(--inv-surface) 30% 36%, var(--inv-accent) 36% 100%);
  clip-path: polygon(50.0% 0.0%, 60.4% 11.4%, 75.0% 6.7%, 78.3% 21.7%, 93.3% 25.0%, 88.6% 39.6%, 100.0% 50.0%, 88.6% 60.4%, 93.3% 75.0%, 78.3% 78.3%, 75.0% 93.3%, 60.4% 88.6%, 50.0% 100.0%, 39.6% 88.6%, 25.0% 93.3%, 21.7% 78.3%, 6.7% 75.0%, 11.4% 60.4%, 0.0% 50.0%, 11.4% 39.6%, 6.7% 25.0%, 21.7% 21.7%, 25.0% 6.7%, 39.6% 11.4%);
}
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-cover::after {
  bottom: var(--space-6); right: var(--inv-safe-x, 24px); width: 4.5rem; height: 4.5rem; border-radius: var(--radius-md);
  background: var(--inv-surface); border: 3px dashed var(--inv-accent); transform: rotate(10deg);
}
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-section__body { font-size: var(--inv-text-body, var(--inv-size-body)); line-height: 1.6; }
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-cover__media { transform: rotate(-6deg); border: 3px solid var(--inv-text); border-radius: 50%; overflow: hidden; }
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-cover__content {
  background: var(--inv-surface); border: 3px solid var(--inv-text); border-radius: var(--radius-md);
  padding: var(--space-8) var(--space-5); max-width: 36rem;
}
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-section {
  background: var(--inv-surface); border: 3px solid var(--inv-text); border-radius: var(--radius-md);
  margin: var(--space-8) auto 0; padding: var(--space-8) var(--space-5); max-width: 36rem;
  transform: rotate(-1.5deg);
}
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) :is(.inv-group, .inv-main) > .inv-section:nth-child(even) { transform: rotate(1.5deg); }
body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) [data-section="photo-upload"] .inv-section__title::before {
  content: ""; display: inline-block; width: var(--space-4); height: var(--space-4); margin-inline-end: var(--space-2);
  border: 3px solid var(--inv-accent); border-radius: 50%; vertical-align: middle;
}
@media (min-width: 48rem) {
  body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-main { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--space-6); align-items: start; }
  body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-main > :is(.inv-cover, [data-section="rsvp"], [data-section="photo-upload"], .inv-message, .inv-share) { grid-column: 1 / -1; }
  body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-section { transform: rotate(-2deg); }
  body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) :is(.inv-group, .inv-main) > .inv-section:nth-child(even) { transform: rotate(2deg); }
}
@media (min-width: 64rem) {
  body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-main { grid-template-columns: repeat(3, minmax(0, 1fr)); max-width: 72rem; margin-inline: auto; }
  body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-main > :is([data-section="rsvp"], [data-section="date"]) { grid-column: span 2; }
  body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-section { transform: rotate(-2deg); }
  body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) :is(.inv-group, .inv-main) > .inv-section:nth-child(even) { transform: rotate(2deg); }
  body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-main > [data-section="rsvp"],
  body:is([data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-main > [data-section="photo-upload"] { transform: rotate(-1deg); }
}

/* ============ split-screen — Bölünmüş ekran ============ */
/* v4 (görev 1400): 390/768'de üst görsel %45, alt metin; 1440'ta sol %50 sahne, sağda metin sütunu ≤ 560 px dikey ortalı. */
body[data-layout="split-screen"] { --v3-name: clamp(2.25rem, 1.4rem + 3vw, 4.25rem); --v3-media-width: 100%; --v3-measure: 34rem; }
body[data-layout="split-screen"] .inv-cover { padding-top: 0; padding-inline: 0; align-content: start; min-height: auto; padding-bottom: var(--space-16); }
body[data-layout="split-screen"] .inv-cover__media .design-image { height: 45svh; min-height: 14rem; aspect-ratio: auto !important; }
body[data-layout="split-screen"] .inv-cover__content { padding-inline: max(var(--inv-gutter), 24px); }
@media (min-width: 64rem) {
  body[data-layout="split-screen"] :is(.inv-main, .inv-footer) { padding-left: 50%; }
  body[data-layout="split-screen"] .inv-cover__media { position: fixed; inset: 0 auto 0 0; width: 50%; z-index: 0; }
  body[data-layout="split-screen"] .inv-cover__media .design-image { height: 100svh; }
  body[data-layout="split-screen"] .inv-cover { min-height: 100svh; align-content: center; justify-items: start; text-align: left; padding: 80px; }
  body[data-layout="split-screen"] .inv-cover__content { max-width: 34rem; padding-inline: 0; align-items: flex-start; margin-block: auto; }
  body[data-layout="split-screen"] .inv-cover__names { align-items: flex-start; }
  body[data-layout="split-screen"] .inv-section { margin-inline: 80px auto; padding-inline: 0; max-width: 34rem; text-align: left; }
  body[data-layout="split-screen"] .inv-section__title { text-align: left; }
}

/* ============ full-bleed-cover — Tam ekran kapak ============ */
/* v4 (görev 1400): alt scrim zemin katmanında (görselin üstü, metnin altı), alttan ≥ %55 → %88 zemin rengi; eyebrow kalın ve ≥ 13 px. */
body[data-layout="full-bleed-cover"] { --v3-name: clamp(2.5rem, 1.6rem + 3.6vw, 5rem); --v3-measure: 44rem; }
body[data-layout="full-bleed-cover"] .inv-cover { height: 100svh; min-height: 32rem; align-content: end; padding-bottom: var(--space-24); padding-inline: max(var(--inv-gutter), 24px); }
body[data-layout="full-bleed-cover"] .inv-cover__media { position: absolute; inset: 0; z-index: -1; width: 100%; opacity: var(--inv-media-opacity, 1); }
body[data-layout="full-bleed-cover"] .inv-cover__media .design-image { height: 100%; aspect-ratio: auto !important; }
body[data-layout="full-bleed-cover"] .inv-cover__media::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(to top, color-mix(in srgb, var(--inv-bg) 88%, transparent) 0%, color-mix(in srgb, var(--inv-bg) 70%, transparent) 40%, color-mix(in srgb, var(--inv-bg) 55%, transparent) 62%, transparent 100%);
}
/* §6.4 perde: isim kutusunun tamamı bg renginde ≥ .72 düz katmanın üstünde. */
body[data-layout="full-bleed-cover"] .inv-cover__content {
  background: color-mix(in srgb, var(--inv-surface) 92%, transparent);
  padding: var(--space-6) var(--space-5); max-width: 32rem;
  border-top: 2px solid var(--inv-accent);
}
/* görev 678: kaydırma ipucu görselin üstünde AA altındaydı; içerik plakasıyla aynı zemin ve metin rengi (magazine-cover ile aynı çözüm).
   Vurgu renkli "&" ve soluk eyebrow plakada AA altında kalıyordu; metin rengine alındı. */
body[data-layout="full-bleed-cover"] .inv-cover__scroll {
  background: color-mix(in srgb, var(--inv-surface) 92%, transparent); color: var(--inv-text); padding: var(--space-2) var(--space-3);
}
body[data-layout="full-bleed-cover"] :is(.inv-cover__amp, .inv-cover__eyebrow) { color: var(--inv-text); }
body[data-layout="full-bleed-cover"] .inv-cover__eyebrow { font-weight: 700; font-size: max(.8125rem, var(--inv-text-eyebrow, .8125rem)); }
@media (min-width: 64rem) {
  body[data-layout="full-bleed-cover"] .inv-cover { justify-items: start; text-align: left; padding-inline: 6vw; }
  body[data-layout="full-bleed-cover"] .inv-cover__content { max-width: 40rem; align-items: flex-start; padding: var(--space-10); }
  body[data-layout="full-bleed-cover"] .inv-cover__names { align-items: flex-start; }
  body[data-layout="full-bleed-cover"] .inv-main > :not(.inv-cover) { background: var(--inv-surface); }
}

/* ============ postcard — Kartpostal ============ */
body[data-layout="postcard"] { --v3-name: clamp(2rem, 1.4rem + 2.4vw, 3.75rem); --v3-media-width: 100%; --v3-measure: 40rem; }
body[data-layout="postcard"] .inv-cover {
  min-height: auto; width: calc(100% - 24px); max-width: 60rem; margin: var(--space-12) auto var(--space-8);
  padding: var(--space-4); gap: var(--space-5);
  background: var(--inv-surface); border: 1px solid var(--inv-border); transform: rotate(-1deg);
}
body[data-layout="postcard"] .inv-cover { position: relative; padding-inline: var(--inv-safe-x, 24px); }
/* #1490: boş pul çerçevesi kaldırıldı (içi doldurulmayan süs ucuz görünüyordu). */
body[data-layout="postcard"] .inv-cover__content { position: relative; align-items: flex-start; text-align: left; padding: var(--space-4) 0 var(--space-6); font-size: var(--inv-text-body, var(--inv-size-body)); line-height: 1.6; }
body[data-layout="postcard"] .inv-cover__names { align-items: stretch; text-wrap: wrap; }
body[data-layout="postcard"] .inv-cover__name,
body[data-layout="postcard"] .inv-cover__amp { display: block; border-bottom: 1px solid var(--inv-border); padding-bottom: var(--space-1); }
body[data-layout="postcard"] .inv-cover__scroll { position: static; transform: none; justify-self: center; }
body[data-layout="postcard"] [data-section="photo-upload"] .inv-section__body { border: 2px dashed var(--inv-accent); padding: var(--space-5); }
@media (min-width: 48rem) {
  body[data-layout="postcard"] .inv-cover { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: center; }
  body[data-layout="postcard"] .inv-cover__content { border-left: 1px solid var(--inv-border); padding-inline: var(--space-6) var(--space-4); max-width: 35rem; }
  body[data-layout="postcard"] .inv-cover__scroll { grid-column: 1 / -1; }
}
@media (min-width: 64rem) {
  body[data-layout="postcard"] .inv-cover { transform: rotate(-1.5deg); padding: var(--space-6); }
}

/* ============ envelope-pocket — Zarf cebi ============ */
body[data-layout="envelope-pocket"] { --v3-name: clamp(2rem, 1.5rem + 2.6vw, 3.75rem); --v3-measure: 30rem; --envelope-h: clamp(11rem, 24svh, 16rem); --envelope-cta-zone: 4.5rem; }
/* #1490: zarf kapak yüksekliğine sığar (kırpılmaz); "Davetiyeyi oku" zarfın altındaki şeritte, zarf dışında. */
body[data-layout="envelope-pocket"] .inv-cover { position: relative; min-height: 100svh; align-content: end; padding-top: 24svh; padding-bottom: var(--envelope-cta-zone); }
body[data-layout="envelope-pocket"] .inv-cover__media { position: absolute; inset: 0; z-index: -2; width: 100%; opacity: var(--inv-media-opacity, .18); }
body[data-layout="envelope-pocket"] .inv-cover__media .design-image { height: 100%; aspect-ratio: auto !important; }
body[data-layout="envelope-pocket"] .inv-cover__content {
  position: relative; width: 86%; max-width: var(--v3-measure);
  background: var(--inv-surface); border: 1px solid var(--inv-border);
  padding: var(--space-10) var(--inv-safe-x, 24px) calc(var(--envelope-h) + var(--space-4));
}
/* Zarf gövdesi ve kapağı: kartın alt kısmını örter, isim bloğuyla kesişmez (kartın alt dolgusu zarf yüksekliği kadar). */
body[data-layout="envelope-pocket"] .inv-cover__art { z-index: 1; pointer-events: none; }
/* #1537: a 28 px uppercase day ("16 KASIM 2026 · PAZARTESİ") wrapped to 3 lines in the 250 px column; tighter tracking keeps it at 2 */
body[data-layout="envelope-pocket"] .inv-cover__date { letter-spacing: .02em; }
body[data-layout="envelope-pocket"] .inv-cover__art::before {
  content: ""; position: absolute; left: 4%; right: 4%; bottom: var(--envelope-cta-zone); height: var(--envelope-h);
  background: var(--inv-primary); border: 1px solid var(--inv-accent);
}
body[data-layout="envelope-pocket"] .inv-cover__art::after {
  content: ""; position: absolute; left: 4%; right: 4%; bottom: var(--envelope-cta-zone); height: var(--envelope-h);
  border-top: 1px solid var(--inv-accent);
  clip-path: polygon(0 0, 50% 55%, 100% 0, 100% 2px, 50% calc(55% + 2px), 0 2px);
  background: var(--inv-accent);
}
/* Bağlantı cebin (kardeş ::before) üstünde durur; kendi zemini de primary olsun ki kontrast cepten bağımsız ölçülsün (#521 denetimi). */
body[data-layout="envelope-pocket"] .inv-cover__scroll {
  position: absolute; inset-inline: 0; bottom: var(--space-2); width: fit-content; margin-inline: auto; min-height: 44px;
  z-index: 2; color: var(--inv-text); background: var(--inv-surface); border-radius: var(--inv-radius); padding-inline: var(--space-5); min-width: 10rem; /* #1604: soft surface plate keeps AA over the pocket art, no filled chip */
}
body[data-layout="envelope-pocket"] .inv-main > :not(.inv-cover) { background: var(--inv-surface); }
body[data-layout="envelope-pocket"] .inv-section { max-width: 38rem; }
@media (min-width: 48rem) {
  body[data-layout="envelope-pocket"] .inv-cover__art::before,
  body[data-layout="envelope-pocket"] .inv-cover__art::after { left: calc(50% - 17rem); right: calc(50% - 17rem); }
}
@media (min-width: 64rem) {
  body[data-layout="envelope-pocket"] { --v3-measure: 38rem; }
  body[data-layout="envelope-pocket"] .inv-cover__art::before,
  body[data-layout="envelope-pocket"] .inv-cover__art::after { left: calc(50% - 22rem); right: calc(50% - 22rem); }
}

/* ============ vertical-ribbon — Dikey şerit ============ */
body[data-layout="vertical-ribbon"] { --v3-name: clamp(2rem, 1.6rem + 1.8vw, 3.25rem); --v3-measure: 100%; }
/* v4: şerit kolonun kenarında 8 px'lik accent bant; metin bandın içinde, güvenli alanda (≥ 24 px) durur, bandın üstüne yazı çıkmaz. */
body[data-layout="vertical-ribbon"] :is(.inv-main, .inv-footer) {
  width: min(100%, 24rem); margin-inline: auto;
  background: var(--inv-surface);
  border-inline: 8px solid var(--inv-accent);
}
body[data-layout="vertical-ribbon"] .inv-cover { padding-inline: var(--inv-safe-x, 24px); align-content: center; }
body[data-layout="vertical-ribbon"] .inv-section { padding-inline: var(--inv-safe-x, 24px); }
body[data-layout="vertical-ribbon"] .inv-section__body { font-size: var(--inv-text-body, var(--inv-size-body)); line-height: 1.6; }
body[data-layout="vertical-ribbon"] .inv-section::before {
  content: ""; display: block; width: var(--space-3); height: var(--space-3); margin: 0 auto var(--space-5);
  border-radius: 50%; background: var(--inv-accent); box-shadow: 0 0 0 var(--space-1) var(--inv-surface), 0 0 0 calc(var(--space-1) + 1px) var(--inv-accent);
}
body[data-layout="vertical-ribbon"] .inv-cover__media { position: fixed; inset: 0; z-index: -1; width: 100%; opacity: var(--inv-media-opacity, .2); }
body[data-layout="vertical-ribbon"] .inv-cover__media .design-image { height: 100%; aspect-ratio: auto !important; }
@media (min-width: 48rem) {
  body[data-layout="vertical-ribbon"] :is(.inv-main, .inv-footer) { width: 28rem; margin-inline: auto; }
  /* Arka plan rolünde görsel şeridin iki yanını da doldurur: ilk ekranın yarısından fazlası boş kalmaz. */
  body[data-layout="vertical-ribbon"][data-image-role="background"] .inv-cover__media { position: fixed; inset: 0; }
}
@media (min-width: 64rem) {
  body[data-layout="vertical-ribbon"] :is(.inv-main, .inv-footer) { width: 31rem; }
  body[data-layout="vertical-ribbon"] .inv-cover__media {
    inset: 10svh 4vw 10svh auto; width: min(26vw, calc(80svh * 2 / 3)); opacity: 1; border: 1px solid var(--inv-accent);
  }
}

/* görev 679: şerit ve harita kapağında küçük metinler (eyebrow, saat, salon, ipucu) görsel/rota üstünde AA altındaydı;
   içerik plakası (magazine-cover ile aynı zemin) ve metin rengi --inv-text. */
body[data-layout="vertical-ribbon"] .inv-cover__content,
body[data-layout="map-focus"] .inv-cover__content {
  background: color-mix(in srgb, var(--inv-surface) 92%, transparent); padding: var(--space-4) var(--space-4);
}
/* map-focus kartı opak yüzey: içindeki her metin AA (harita kartın dışında). */
body[data-layout="map-focus"] .inv-cover__content { background: var(--inv-surface); border: 1px solid var(--inv-accent); padding: var(--space-6) var(--inv-safe-x, 24px); }
body[data-layout="map-focus"] .inv-cover__names { border: 0; padding: 0; }
body[data-layout="vertical-ribbon"] .inv-cover__content :is(.inv-cover__eyebrow, .inv-cover__date, .inv-cover__time, .inv-cover__venue),
body[data-layout="map-focus"] .inv-cover__content :is(.inv-cover__eyebrow, .inv-cover__date, .inv-cover__time, .inv-cover__venue),
body[data-layout="vertical-ribbon"] .inv-cover__scroll,
body[data-layout="map-focus"] .inv-cover__scroll { color: var(--inv-text); }
/* #1605: the cue floats over the cover picture on wide screens; a soft plate keeps the .72 text at AA. */
body[data-layout="vertical-ribbon"] .inv-cover__scroll { background: color-mix(in srgb, var(--inv-surface) 92%, transparent); border-radius: var(--radius-pill); padding-inline: var(--space-4); }

/* ============ magazine-cover — Dergi kapağı ============ */
/* v4 (görev 1400, sistem-v4 §2): görsel üst %38 (cover-focus tavanı; maket %45) tam genişlik, metin düz zeminde güvenli alanda (24 px), tarih tek satır;
   1440'ta iki sütun (görsel %50 / metin ≤ 560). Metin görselin üstüne binmez, plaka gerekmez (AA düz zeminde). */
body[data-layout="magazine-cover"] { --v3-name: clamp(2.5rem, .5rem + 10vw, 4.5rem); --v3-name-cap: 12cqi; --v3-measure: 44rem; }
body[data-engine="v3"][data-layout="magazine-cover"] .inv-cover {
  container-type: inline-size; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto auto auto;
  align-content: start; justify-items: stretch; text-align: left; gap: 0;
  height: auto; min-height: 100svh; padding: 0 0 var(--space-12); background: var(--inv-bg);
}
body[data-engine="v3"][data-layout="magazine-cover"] .inv-cover__media {
  position: relative; inset: auto; z-index: auto; width: 100%; max-width: none; opacity: 1;
  height: 38svh; min-height: 15rem; grid-row: 1;
}
body[data-engine="v3"][data-layout="magazine-cover"] .inv-cover__media .design-image { height: 100%; aspect-ratio: auto !important; }
body[data-layout="magazine-cover"] .inv-cover__content {
  display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-4); grid-row: 2;
  max-width: none; padding: var(--space-8) var(--space-6) 0;
}
body[data-layout="magazine-cover"] .inv-cover__eyebrow {
  color: var(--inv-text); font-family: var(--inv-font-body); font-weight: 700; text-transform: uppercase;
  font-size: var(--inv-text-eyebrow, .8125rem); border-bottom: 3px solid var(--inv-accent); padding-bottom: var(--space-2);
}
body[data-layout="magazine-cover"] .inv-cover__names { align-items: flex-start; text-wrap: balance; line-height: 1.05; width: 100%; }
body[data-layout="magazine-cover"] .inv-cover__date {
  font-family: var(--inv-font-body); font-weight: 700; line-height: 1.35;
  font-size: clamp(1.125rem, 5.4cqi, var(--inv-text-date, 1.75rem)); border-left: 3px solid var(--inv-accent); padding-left: var(--space-3);
}
body[data-layout="magazine-cover"] .inv-cover__venue {
  color: var(--inv-text); font-size: var(--inv-text-body, 1rem); line-height: 1.5; overflow-wrap: break-word; max-width: 100%;
}
body[data-layout="magazine-cover"] .inv-cover__scroll {
  grid-row: 3; background: none; border: 0; color: var(--inv-text); padding: var(--space-6) var(--space-6) 0 0;
  margin-inline-start: var(--space-6); /* görev 1527: kutu yan süs şeridinin (en çok ~ 20 px) dışında başlar */
  justify-self: start; min-height: 44px;
}
body[data-layout="magazine-cover"] .inv-section { columns: 1; text-align: left; }
body[data-layout="magazine-cover"] .inv-section__title { text-align: left; border-bottom: 3px solid var(--inv-text); padding-bottom: var(--space-2); }
body[data-layout="magazine-cover"] [data-section="photo-upload"] .inv-section__body { border: 1px solid var(--inv-text); padding: var(--space-5); }
@media (min-width: 64rem) {
  body[data-engine="v3"][data-layout="magazine-cover"] .inv-cover {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); grid-template-rows: 1fr auto; align-content: stretch; padding-bottom: 0;
  }
  body[data-engine="v3"][data-layout="magazine-cover"] .inv-cover__media { grid-column: 1; grid-row: 1 / span 2; height: auto; min-height: 100svh; }
  body[data-layout="magazine-cover"] .inv-cover__content {
    grid-column: 2; grid-row: 1; align-self: center; width: 100%; max-width: calc(560px + 2 * var(--space-16)); padding: var(--space-16);
  }
  body[data-layout="magazine-cover"] .inv-cover__date { font-size: var(--inv-text-date, 2rem); white-space: nowrap; }
  body[data-layout="magazine-cover"] .inv-cover__scroll { grid-column: 2; grid-row: 2; padding: 0 var(--space-16) var(--space-12); }
  body[data-layout="magazine-cover"] .inv-message .inv-section__body { columns: 2; column-gap: var(--space-8); }
}

/* ============ polaroid-collage — Polaroid kolaj ============ */
body[data-layout="polaroid-collage"] { --v3-name: clamp(2.25rem, 1.5rem + 3vw, 4.25rem); --v3-media-width: 64%; }
body[data-layout="polaroid-collage"] .inv-cover { align-content: center; overflow: clip; padding-top: var(--space-12); padding-inline: max(var(--inv-gutter), var(--inv-safe-x, 24px)); }
body[data-layout="polaroid-collage"] .inv-section__body { font-size: var(--inv-text-body, var(--inv-size-body)); line-height: 1.6; }
body[data-layout="polaroid-collage"] .inv-cover__media {
  position: relative; max-width: 20rem; background: var(--inv-surface);
  padding: 12px 12px 40px; border: 1px solid var(--inv-border); transform: rotate(-3deg); justify-self: start; margin-inline-start: 6%;
}
/* #1490: boş ikinci polaroid kaldırıldı; kolaj tek fotoğraflı kart. */
body[data-layout="polaroid-collage"] .inv-section__title {
  display: inline-block; background: var(--inv-surface); border: 1px solid var(--inv-border);
  padding: var(--space-2) var(--space-4) var(--space-4); transform: rotate(-1.5deg);
  font-size: var(--inv-text-title, var(--inv-size-h2)); line-height: 1.3;
}
body[data-layout="polaroid-collage"] [data-section="photo-upload"] .inv-section__body {
  background: var(--inv-surface); border: 1px solid var(--inv-border); padding: var(--space-5) var(--space-5) var(--space-12);
}
@media (min-width: 64rem) {
  body[data-layout="polaroid-collage"] .inv-cover { grid-template-columns: 55% minmax(0, 1fr); max-width: 80rem; margin-inline: auto; column-gap: var(--space-12); }
  body[data-layout="polaroid-collage"] .inv-cover__media { width: 22rem; max-width: 22rem; justify-self: center; }
  body[data-layout="polaroid-collage"] .inv-cover__content { align-items: flex-start; text-align: left; }
  body[data-layout="polaroid-collage"] .inv-cover__names { align-items: flex-start; }
  body[data-layout="polaroid-collage"] .inv-cover__eyebrow { margin-bottom: var(--space-3); }
}

/* ============ typographic-poster — Tipografik poster ============ */
/* Büyük harf ve kalın yüz: sınır 10cqi / 7.5cqi, 13 harfli sözcük ("KARAOSMANOĞLU", uzun fikstür) sözcük ortasından kırılmaz (#600).
   v4 (görev 1400): isim balance + min 36 px; satır yüksekliği 1 ve satır boşluğu 16 px (Range kutuları eyebrow/mekân ile kesişmesin). */
body[data-layout="typographic-poster"] { --v3-name: clamp(2.25rem, 1rem + 6vw, 7rem); --v3-name-cap: 10cqi; --v3-measure: 80rem; }
body[data-layout="typographic-poster"] .inv-cover__names { --inv-size-name-min: 2.25rem; }
body[data-layout="typographic-poster"] .inv-cover {
  --inv-text: var(--inv-on-primary); --inv-text-muted: var(--inv-on-primary);
  background: var(--inv-primary); color: var(--inv-on-primary); align-content: center; justify-items: stretch;
  padding-inline: max(var(--inv-gutter), 24px);
}
body[data-layout="typographic-poster"] .inv-cover__content {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-4) 8px; text-align: left; max-width: 80rem; margin-inline: auto;
}
body[data-layout="typographic-poster"] .inv-cover__content > * { grid-column: 1 / -1; min-width: 0; }
body[data-layout="typographic-poster"] .inv-cover__names { text-transform: uppercase; align-items: flex-start; line-height: 1; text-wrap: balance; }
body[data-layout="typographic-poster"] .inv-cover__amp { color: var(--inv-on-primary); }
body[data-layout="typographic-poster"] .inv-cover__date {
  font-size: var(--inv-size-date); border-top: 4px solid var(--inv-on-primary); padding-top: var(--space-3);
}
body[data-layout="typographic-poster"] .inv-cover__day { font-variant-numeric: tabular-nums; }
body[data-layout="typographic-poster"] .inv-main > :is(.inv-group, .inv-section):nth-child(odd of :not(.inv-cover)) { background: var(--inv-surface); }
body[data-layout="typographic-poster"] .inv-section { text-align: left; }
body[data-layout="typographic-poster"] .inv-section__title { text-align: left; text-transform: uppercase; font-size: var(--inv-size-name-wide); line-height: 1; text-wrap: balance; }
body[data-layout="typographic-poster"] [data-section="photo-upload"] { border-top: 8px solid var(--inv-primary); }
@media (min-width: 48rem) {
  body[data-layout="typographic-poster"] .inv-cover__content { grid-template-columns: repeat(6, minmax(0, 1fr)); }
}
@media (min-width: 64rem) {
  body[data-layout="typographic-poster"] .inv-cover__content { grid-template-columns: repeat(12, minmax(0, 1fr)); align-items: end; }
  body[data-layout="typographic-poster"] .inv-cover__names { grid-column: 1 / span 8; --v3-name-cap: 7.5cqi; }
  body[data-layout="typographic-poster"] .inv-cover__date { grid-column: 9 / span 4; }
  body[data-layout="typographic-poster"] .inv-section { max-width: 56rem; margin-inline: 8vw auto; }
}

/* ============ map-focus — Harita odaklı ============ */
body[data-layout="map-focus"] { --v3-name: clamp(2.25rem, 1.5rem + 3vw, 4.25rem); --v3-media-width: 100%; }
/* v4: harita zemin katmanı kapağın üst bandında; üstünde yazı yok. Bilgiler haritanın altındaki opak kartta (AA). */
body[data-layout="map-focus"] { --map-height: 38svh; }
body[data-layout="map-focus"] .inv-cover { align-content: start; padding-top: calc(var(--map-height) + var(--space-4)); padding-inline: max(var(--inv-gutter), var(--inv-safe-x, 24px)); position: relative; }
body[data-layout="map-focus"] .inv-cover__media { position: absolute; inset: 0; bottom: auto; height: var(--map-height); z-index: -2; opacity: var(--inv-media-opacity, .4); }
body[data-layout="map-focus"] .inv-cover__media .design-image { height: 100%; aspect-ratio: auto !important; }
/* Stilize rota: kesikli accent eğrisi, opaklık .35; metnin arkasından geçmez (isim surface plakasında). */
body[data-layout="map-focus"] .inv-cover__art { opacity: .35; inset: 0 0 auto 0; height: var(--map-height); }
body[data-layout="map-focus"] .inv-cover__art::before {
  content: ""; position: absolute; left: 8%; right: 22%; top: 36%; height: 40%;
  border: 3px dashed var(--inv-accent); border-color: var(--inv-accent) transparent transparent var(--inv-accent);
  border-radius: 60% 40% 0 0 / 80% 60% 0 0;
}
body[data-layout="map-focus"] .inv-cover__art::after {
  content: ""; position: absolute; right: 18%; top: 28%; width: var(--space-6); height: var(--space-6);
  border-radius: 50% 50% 50% 0; transform: rotate(-45deg); background: var(--inv-accent);
}
body[data-layout="map-focus"] .inv-cover__names { background: transparent; padding: 0; border: 0; }
body[data-layout="map-focus"] .inv-section__body { font-size: var(--inv-text-body, var(--inv-size-body)); line-height: 1.6; }
body[data-layout="map-focus"] .inv-cover__venue { font-weight: var(--weight-medium); color: var(--inv-text); overflow-wrap: break-word; }
body[data-layout="map-focus"] .inv-cover__venue::before {
  content: ""; display: inline-block; width: var(--space-3); height: var(--space-3); margin-inline-end: var(--space-2);
  border-radius: 50%; background: var(--inv-accent); vertical-align: middle;
}
body[data-layout="map-focus"] [data-section="venue"] .inv-venue__card { border: 2px solid var(--inv-accent); }
@media (min-width: 64rem) {
  body[data-layout="map-focus"] .inv-cover { padding-top: calc(var(--map-height) + var(--space-8)); padding-inline: 0; justify-items: center; }
  body[data-layout="map-focus"] .inv-cover__content { max-width: 35rem; align-items: flex-start; text-align: left; }
  body[data-layout="map-focus"] .inv-cover__art::before { left: 30%; right: 30%; }
}

/* ============ ticket-stub — Bilet ============ */
body[data-layout="ticket-stub"] { --v3-name: clamp(2rem, 1.4rem + 2.6vw, 3.75rem); --v3-media-width: 92%; --v3-measure: 60rem; }
body[data-layout="ticket-stub"] .inv-cover { align-content: center; padding-inline: max(var(--inv-gutter), var(--inv-safe-x, 24px)); }
body[data-layout="ticket-stub"] .inv-cover__media { max-width: 60rem; border: 2px solid var(--inv-text); border-bottom: 0; }
body[data-layout="ticket-stub"] .inv-cover__content {
  position: relative; width: 92%; max-width: 60rem;
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-3) var(--space-4);
  background: var(--inv-surface); border: 2px solid var(--inv-text); padding: var(--space-6) var(--space-5);
  text-align: left; margin-top: calc(var(--space-6) * -1);
}
body[data-layout="ticket-stub"] .inv-cover__content > * { grid-column: 1 / -1; min-width: 0; margin: 0; }
body[data-layout="ticket-stub"] .inv-cover__names { align-items: flex-start; text-wrap: wrap; }
/* Koçan: tarih ve mekân alanları, kesikli delik çizgisinin altında (390'da dikey bilet). */
body[data-layout="ticket-stub"] :is(.inv-cover__date, .inv-cover__venue) {
  grid-column: auto; border-top: 2px dashed var(--inv-text); padding-top: var(--space-3);
  font-size: var(--inv-text-body, var(--inv-size-body)); line-height: 1.5; overflow-wrap: anywhere;
}
/* #1490: tarih isimden küçük (isim ≥ 1,25 × tarih); gün ve saat ayrı satırlarda, kırılmadan tek satır. */
body[data-layout="ticket-stub"] .inv-cover__date { font-size: clamp(1rem, 4.6cqi, var(--inv-text-date, var(--inv-size-date))); letter-spacing: .02em; }
body[data-layout="ticket-stub"] .inv-cover__date :is(.inv-cover__day, .inv-cover__time) { display: block; white-space: normal; overflow-wrap: anywhere; } /* task 1527: a 28 px date wraps when the column is too narrow (side margin >= 24 px, no overlap with the venue box) */
body[data-layout="ticket-stub"] .inv-cover__content::before,
body[data-layout="ticket-stub"] .inv-cover__content::after {
  content: ""; position: absolute; top: 50%; width: var(--space-6); height: var(--space-6);
  border-radius: 50%; background: var(--inv-bg); border: 2px solid var(--inv-text);
}
body[data-layout="ticket-stub"] .inv-cover__content::before { left: calc(var(--space-3) * -1 - 2px); clip-path: inset(0 0 0 50%); }
body[data-layout="ticket-stub"] .inv-cover__content::after { right: calc(var(--space-3) * -1 - 2px); clip-path: inset(0 50% 0 0); }
body[data-layout="ticket-stub"] .inv-section > .inv-section__body { border: 2px solid var(--inv-text); border-top-style: dashed; padding: var(--space-5); background: var(--inv-surface); }
@media (max-width: 47.99rem) {
  body[data-layout="ticket-stub"] :is(.inv-cover__date, .inv-cover__venue) { grid-column: 1 / -1; }
  /* #1490: dar ekranda bilet kenara yaklaşır (uzun ad 3 satıra sığsın); görsel ve kâğıt aynı genişlikte. */
  body[data-layout="ticket-stub"] { --v3-media-width: 96%; }
  body[data-layout="ticket-stub"] .inv-cover__content { width: 96%; padding-inline: var(--space-4); }
}
/* v4: isim üstte, tarih/yer altta koçanda (iki sütun); delikler kenarda, kağıdın dışına taşar (süs bölgesi). */
@media (min-width: 48rem) {
  body[data-layout="ticket-stub"] .inv-cover__content { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); max-width: 44rem; align-items: start; }
  body[data-layout="ticket-stub"] .inv-cover__names { max-width: 35rem; }
  body[data-layout="ticket-stub"] .inv-cover__date { font-size: clamp(1rem, 3.2cqi, 1.5rem); }
}
@media (min-width: 64rem) {
  body[data-layout="ticket-stub"] .inv-cover { min-height: 100svh; }
  body[data-layout="ticket-stub"] .inv-cover__media { width: 44rem; }
  body[data-layout="ticket-stub"] .inv-cover__content { padding: var(--space-10); }
}

/* ============ timeline-scroll — Zaman çizelgesi ============ */
body[data-layout="timeline-scroll"] { --v3-name: clamp(2.25rem, 1.5rem + 2.8vw, 4rem); --v3-name-cap: 10.5cqi; --v3-media-width: 8rem; --v3-measure: 100%; }
body[data-layout="timeline-scroll"] .inv-cover { min-height: 64svh; align-content: center; }
body[data-layout="timeline-scroll"] .inv-cover__media .design-image { border-radius: 50%; border: 1px solid var(--inv-accent); }
body[data-layout="timeline-scroll"] .inv-main > :not(.inv-cover) {
  position: relative; margin-inline-start: 20px; padding-inline-start: 24px;
  border-inline-start: 2px solid var(--inv-accent); padding-bottom: var(--space-6);
}
body[data-layout="timeline-scroll"] .inv-main > :not(.inv-cover)::before {
  content: ""; position: absolute; top: var(--space-16); left: -7px; width: 12px; height: 12px;
  border-radius: 50%; background: var(--inv-accent);
}
body[data-layout="timeline-scroll"] .inv-section { text-align: left; padding-inline: 0 max(var(--inv-gutter), var(--inv-safe-x, 24px)); margin: 0; max-width: none; }
/* v4: satırlar gövde 16 px (meta 14 px'e inmez); çizgi kenar şeridinde (süs bölgesi) durur. */
body[data-layout="timeline-scroll"] :is(.inv-section__body, .inv-schedule, .inv-schedule__item) { font-size: var(--inv-text-body, var(--inv-size-body)); line-height: 1.6; }
body[data-layout="timeline-scroll"] .inv-schedule__time { font-size: var(--inv-text-body, var(--inv-size-body)); font-weight: var(--weight-medium); }
body[data-layout="timeline-scroll"] .inv-section__title,
body[data-layout="timeline-scroll"] .inv-section__lead { text-align: left; }
@media (min-width: 48rem) {
  body[data-layout="timeline-scroll"] .inv-main > :not(.inv-cover) { margin-inline-start: 64px; padding-inline-start: 40px; }
}
@media (min-width: 64rem) {
  body[data-layout="timeline-scroll"] .inv-main { max-width: 70rem; margin-inline: auto; }
  body[data-layout="timeline-scroll"] .inv-main > :not(.inv-cover) { width: 50%; margin-inline: 0; }
  body[data-layout="timeline-scroll"] .inv-main > :nth-child(odd of :not(.inv-cover)) { margin-inline-start: calc(50% - 1px); }
  body[data-layout="timeline-scroll"] .inv-main > :nth-child(even of :not(.inv-cover)) {
    border-inline-start: 0; border-inline-end: 2px solid var(--inv-accent); padding-inline: var(--inv-gutter) 40px; margin-inline-start: 1px;
  }
  body[data-layout="timeline-scroll"] .inv-main > :nth-child(even of :not(.inv-cover))::before { left: auto; right: -7px; }
  body[data-layout="timeline-scroll"] .inv-main > :nth-child(even of :not(.inv-cover)) :is(.inv-section__title, .inv-section__lead) { text-align: right; }
}

/* ============ storybook-page — Masal kitabı sayfası ============ */
body[data-layout="storybook-page"] { --v3-name: clamp(2.25rem, 1.5rem + 3vw, 4.25rem); --v3-media-width: 100%; --v3-measure: 36rem; counter-reset: v3-page; }
body[data-layout="storybook-page"] .inv-cover,
body[data-layout="storybook-page"] .inv-main > :not(.inv-cover) {
  counter-increment: v3-page;
  margin: 20px; background: var(--inv-surface); border: 1px solid var(--inv-accent);
}
/* v4: sayfa kâğıdı zemin (surface); metin ≥ 24 px güvenli alanda, sayfa numarası meta boyunda (14 px). */
body[data-layout="storybook-page"] .inv-cover { padding: var(--space-4) var(--inv-safe-x, 24px) var(--space-16); align-content: start; min-height: calc(100svh - 40px); }
body[data-layout="storybook-page"] .inv-main > :not(.inv-cover) { padding-inline: var(--inv-safe-x, 24px); }
body[data-layout="storybook-page"] .inv-section__body { font-size: var(--inv-text-body, var(--inv-size-body)); line-height: 1.6; }
body[data-layout="storybook-page"] .inv-cover::after,
body[data-layout="storybook-page"] .inv-main > :not(.inv-cover)::after {
  content: "— " counter(v3-page) " —"; display: block; text-align: center; padding-block: var(--space-4);
  font-size: var(--inv-text-meta, .875rem); color: var(--inv-text-muted);
}
body[data-layout="storybook-page"] .inv-cover::after { position: absolute; bottom: 0; left: 0; right: 0; }
body[data-layout="storybook-page"] .inv-cover__scroll { bottom: var(--space-10); }
body[data-layout="storybook-page"] .inv-message__text::first-letter {
  float: left; font-family: var(--inv-font-display); font-size: 3.2em; line-height: .85; padding: .05em .08em 0 0; color: var(--inv-accent);
}
body[data-layout="storybook-page"] .inv-message .inv-section__body { text-align: left; }
@media (min-width: 48rem) {
  body[data-layout="storybook-page"] .inv-cover,
  body[data-layout="storybook-page"] .inv-main > :not(.inv-cover) { max-width: 35rem; margin-inline: auto; }
  body[data-layout="storybook-page"] .inv-cover { margin-top: 20px; }
}
@media (min-width: 64rem) {
  body[data-layout="storybook-page"] .inv-cover {
    max-width: 72rem; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); column-gap: 0; align-content: center; padding: 0;
  }
  body[data-layout="storybook-page"] .inv-cover__media { width: 100%; height: 100%; border-right: 1px solid var(--inv-accent); }
  body[data-layout="storybook-page"] .inv-cover__media .design-image { height: 100%; }
  body[data-layout="storybook-page"] .inv-cover__content { padding: var(--space-16); }
}

/* ============ letterpress-letter — Antetli mektup ============ */
/* v4 (görev 1400, sistem-v4 §2): script gövde yok; isim dışındaki her metin serif 16 px+, isim ≥ 40 px (script burada yalnız isimde).
   Kâğıt zemini .inv-main'in düz yüzeyi; metin kâğıdın üstünde AA. Güvenli alan 24 px. */
body[data-layout="letterpress-letter"] { --v3-name: clamp(2.5rem, 1.6rem + 3vw, 3.5rem); --v3-name-cap: 14cqi; --v3-measure: 100%; --letter-serif: Georgia, "Times New Roman", serif; }
body[data-layout="letterpress-letter"] .inv-cover__names { --inv-size-name-min: 3.25rem; }
body[data-layout="letterpress-letter"] :is(.inv-main, .inv-footer) { max-width: 44rem; margin-inline: auto; background: var(--inv-surface); }
body[data-layout="letterpress-letter"] .inv-main { border: 1px solid var(--inv-border); }
body[data-layout="letterpress-letter"] :is(.inv-cover__eyebrow, .inv-cover__date, .inv-cover__venue, .inv-cover__badge, .inv-cover__scroll, .inv-section__body, .inv-section__lead, .inv-section__title, .inv-message__text, .inv-message__family, .inv-countdown__digit, .inv-countdown__label) {
  font-family: var(--letter-serif); font-style: normal;
}
body[data-layout="letterpress-letter"] :is(.inv-cover__venue, .inv-section__body, .inv-section__lead, .inv-cover__badge, .inv-message__text) { font-size: max(1rem, var(--inv-text-body, 1rem)); line-height: 1.6; }
body[data-layout="letterpress-letter"] .inv-cover__date { font-size: clamp(1.25rem, 1.1rem + .8vw, 1.5rem); line-height: 1.35; font-weight: 700; }
/* #1490: gün ve saat tek yazı ailesinde (tema gün/saat için ayrı aile verse de); isim ≥ 1,6 × tarih. */
body[data-layout="letterpress-letter"] .inv-cover__date :is(.inv-cover__day, .inv-cover__time) { font-family: inherit; }
body[data-layout="letterpress-letter"] .inv-cover {
  min-height: 100svh; align-content: start; padding: max(var(--space-10), 34%, 26svh) 0 var(--space-8); justify-items: start; text-align: left;
  border-bottom: 1px solid var(--inv-accent); margin-inline: 24px; padding-inline: 0;
}
/* #1490: mektup kâğıdında yan süsler yok (metin sütunu kâğıt genişliğinde; yan süs "Saat" satırına değiyordu); üst ve alt bant kalır. */
body[data-layout="letterpress-letter"] :is(.inv-cover__ornament--side-start, .inv-cover__ornament--side-end) { display: none; }
body[data-layout="letterpress-letter"] .inv-cover__content { align-items: flex-start; max-width: 100%; gap: var(--space-3); }
body[data-layout="letterpress-letter"] .inv-cover__names { align-items: flex-start; text-wrap: balance; letter-spacing: 0; line-height: 1.3; }
/* #817: ◇ sistem fontuna (Cambria Math) düşüyordu; süs CSS ile çizilir, fontta karşılığı aranmaz. */
body[data-layout="letterpress-letter"] .inv-cover__eyebrow { font-size: max(.875rem, var(--inv-text-meta, .875rem)); letter-spacing: .08em; }
body[data-layout="letterpress-letter"] .inv-cover__eyebrow::before { content: ""; display: inline-block; width: .5em; height: .5em; margin-inline-end: .7em; border: 1px solid var(--inv-accent); vertical-align: .08em; transform: rotate(45deg); }
body[data-layout="letterpress-letter"] .inv-cover__scroll { position: static; transform: none; font-size: max(.875rem, var(--inv-text-meta, .875rem)); }
body[data-layout="letterpress-letter"] .inv-section { text-align: left; padding-inline: 24px; line-height: 1.6; }
body[data-layout="letterpress-letter"] .inv-section > * { max-width: 34ch; }
body[data-layout="letterpress-letter"] .inv-section > .inv-section__body { max-width: 100%; }
body[data-layout="letterpress-letter"] .inv-section__title { text-align: left; font-size: var(--text-lg); letter-spacing: .04em; }
body[data-layout="letterpress-letter"] .inv-section__lead { text-align: left; }
body[data-layout="letterpress-letter"] .inv-message__family { text-align: right; font-style: italic; }
body[data-layout="letterpress-letter"] [data-section="photo-upload"] .inv-section__title::before { content: "Ek: "; color: var(--inv-accent); }
body[data-layout="letterpress-letter"] [data-section="photo-upload"] .inv-section__body { border: 1px solid var(--inv-border); padding: var(--space-5); }
@media (min-width: 48rem) {
  body[data-layout="letterpress-letter"] .inv-cover { margin-inline: 56px; }
  body[data-layout="letterpress-letter"] .inv-section { padding-inline: 56px; }
  body[data-layout="letterpress-letter"] .inv-main { margin-block: var(--space-12); }
}
@media (min-width: 64rem) {
  body[data-layout="letterpress-letter"] .inv-cover { grid-template-columns: minmax(0, 1fr) auto; column-gap: var(--space-8); }
  body[data-layout="letterpress-letter"] .inv-cover__content { grid-column: 1; grid-row: 1; }
  body[data-layout="letterpress-letter"] .inv-cover__date { grid-column: 2; grid-row: 1; align-self: end; text-align: right; }
}

/* ============ medallion — Madalyon ============ */
/* v4 (görev 1400): rozet (görsel) ≥ 120 px ve yuvarlak; metin madalyonun içinde, madalyon çerçevesi içerik kabıdır. */
body[data-layout="medallion"] { --v3-name: clamp(2.25rem, 1.4rem + 2vw, 3.25rem); --v3-media-width: max(9rem, 40%); }
body[data-layout="medallion"] .inv-cover { align-content: center; }
body[data-layout="medallion"] .inv-cover__media { max-width: 12rem; min-width: 9rem; }
body[data-layout="medallion"] .inv-cover__media .design-image { border-radius: 50%; border: 2px solid var(--inv-accent); aspect-ratio: 1 / 1 !important; }
body[data-layout="medallion"] .inv-cover__media { margin-bottom: calc(var(--space-8) * -1); z-index: 1; }
body[data-layout="medallion"] .inv-cover__content {
  --medallion-size: min(calc(100vw - 48px), 22rem);
  width: var(--medallion-size); max-width: none; min-height: var(--medallion-size); justify-content: center;
  padding: calc(var(--medallion-size) * .16) calc(var(--medallion-size) * .12); border-radius: 50%;
  background: var(--inv-surface); border: 2px solid var(--inv-accent);
  box-shadow: 0 0 0 6px var(--inv-surface), 0 0 0 7px var(--inv-accent);
}
body[data-layout="medallion"] .inv-cover__names { line-height: 1.05; }
body[data-layout="medallion"] .inv-section__title::before {
  content: ""; display: block; width: var(--space-6); height: var(--space-6); margin: 0 auto var(--space-3);
  border-radius: 50%; border: 2px solid var(--inv-accent); box-shadow: inset 0 0 0 4px var(--inv-bg), inset 0 0 0 6px var(--inv-accent);
}
@media (min-width: 48rem) {
  body[data-layout="medallion"] .inv-cover__content { --medallion-size: 26rem; }
}
@media (min-width: 64rem) {
  body[data-layout="medallion"] .inv-cover__content { --medallion-size: 32rem; }
  body[data-layout="medallion"] .inv-cover__art::before,
  body[data-layout="medallion"] .inv-cover__art::after {
    content: ""; position: absolute; top: 50%; width: calc(50% - 20rem); height: 7px;
    border-block: 1px solid var(--inv-accent);
  }
  body[data-layout="medallion"] .inv-cover__art::before { left: 2vw; }
  body[data-layout="medallion"] .inv-cover__art::after { right: 2vw; }
}

/* görev 679: şerit yerleşiminde program saati ve adresi soluk metin renginde AA altında kalıyordu (görsel/desen üstünde, sleepover-moon 4,3). */
body[data-layout="vertical-ribbon"] :is(.inv-schedule__time, .inv-schedule__address) { color: var(--inv-text); }

/* ===== Kapak odak kuralı (#794, docs/design/cover-focus.md): ilk ekranda davetiye metni, görsel ikinci planda ===== */
/* ---------- Ortak değişken (R2) ---------- */
/* Ceiling of the image on the first screen: 38svh (about 320 px at 390x844). Since #1708 the image is NOT cropped: it shrinks to the
   ceiling and keeps its ratio (the "Task 1708" block at the end of this file: contain + --image-ratio box). Source: next to layouts.css:35 (--v3-media-width). */
body[data-engine="v3"] { --v3-cover-media-max-block: 38svh; }

@media (max-width: 47.99rem) {
  /* R2 — ortak kural. Etkilenen: layouts.css:51 (.design-image, width:100% + inline aspect-ratio). Görsel yüksekliği tavanı aşarsa
     aspect-ratio'ya rağmen kısalır, içindeki img (height:100%) kırpar. Arka plan rolündeki düzenlerde height:100% zaten var,
     tavan uygulanmaz (aşağıdaki :not). */
  body[data-engine="v3"]:not([data-image-role="background"]) .inv-cover__media .design-image {
    max-height: var(--v3-cover-media-max-block);
  }

  /* ---------- Düzen başına istisnalar: yalnız ortak kural tutmuyorsa ---------- */

  /* R2 — split-screen: layouts.css:196 `height: min(62svh, 125vw)` + `aspect-ratio: auto !important` tavanı geçersiz kılıyordu
     (%58). Tavan değişkenine bağlanır; max-height değil doğrudan height, çünkü kural aynı özgüllükte ve !important'lı. */
  body[data-layout="split-screen"] .inv-cover__media .design-image {
    height: min(var(--v3-cover-media-max-block), 125vw);
  }

  /* R2 — arch-frame: layouts.css:109-111 (--v3-media-width 86%, .inv-cover__media max-width 22rem) 2:3 görseli 335×502 (%53) yapıyordu.
     Yalnız yükseklik kırpılırsa kemer basık kubbeye döner; genişlik 2:3 oranıyla tavandan türetilir (≈214×321), kemer biçimi kalır.
     Katalogda arch-frame'in 14 tasarımının tamamı 2:3 (designs.json imagery.aspectRatio). */
  body[data-layout="arch-frame"] { --v3-media-width: calc(var(--v3-cover-media-max-block) * 2 / 3); }

  /* R3 — full-bleed-cover: layouts.css:214 (align-content: end; padding-bottom: --space-24) içerik plakasını alta yaslıyordu;
     uzun eyebrow/mekân ile isimlerin üstü 437-501 px'e çıkıyordu (12/17 tasarımda > 464). Plaka 12svh (≈100 px) yukarı alınır;
     arka plan görseli zaten tam kapak, düzen kimliği (alta yaslı plaka) korunur. */
  body[data-layout="full-bleed-cover"] .inv-cover { padding-bottom: calc(var(--space-24) + 12svh); }

  /* R3 — framed-card: layouts.css:95 (align-content: center, padding --space-12 --space-6). Ortalanmış içerik 433-475 px'te
     başlıyordu (8/12 tasarımda > 464). Alt dolgu artırılarak ortalama ekseni yukarı kayar (≈ 42 px); görsel/kart oranı aynı. */
  body[data-layout="framed-card"] .inv-cover { padding-bottom: calc(var(--space-12) + 10svh); }

  /* R3 — centered-classic (layouts.css:65, align-content: center) ve polaroid-collage (layouts.css:372): kapak min-height 100svh, içerik
     ortalı; her birinde birkaç tasarım isimlerin üstünde 464 px'i 1-16 px aştı. Tabandaki 80 px alt dolgu (--space-20) 8svh artırılır,
     ortalanmış içerik ≈ 34 px yukarı çıkar. */
  body[data-layout="centered-classic"] .inv-cover,
  body[data-layout="polaroid-collage"] .inv-cover { padding-bottom: calc(var(--space-20) + 8svh); }

  /* R3 — arch-frame: görsel 38svh'ye inse de isimler 458-504 px'te (8/14 tasarımda > 464). Ortalama ekseni 12svh alt dolguyla ≈ 50 px
     yukarı alınır; içeriği uzun iki tasarımda (crib-mobile, balloon-dreams) kapak min-height'tan uzadığı için kayma işlemez, onlar için
     üst dolgu 64 → 48 px (--space-12). */
  body[data-layout="arch-frame"] .inv-cover { padding-top: var(--space-12); padding-bottom: calc(var(--space-20) + 12svh); }

  /* R2 — postcard (layouts.css:239-258): kart transform: rotate(-1deg) ile döner, medya kutusunun ölçülen sınırı ≈ 6 px büyür
     (320 → 327 px = %38,7); tavan bu düzende 35svh (≈ 295 px + dönüş payı ≈ %36). Pul (R6) ve dolgusu kalkınca isimlerin üstü
     612-637 → ≈ 440-460 px. */
  body[data-layout="postcard"] { --v3-cover-media-max-block: 35svh; }

  /* R4 — typographic-poster: layouts.css:412 `.inv-cover__date { font-size: var(--inv-size-date) }` 390'da isim (34,9 px) / tarih
     (20,7 px) = 1,68 idi. Tarih gövde metni boyuna iner (≥ 2 × oranı için ≤ 17,4 px gerekir). 1440'ta isim çok büyük, değişmez. */
  body[data-layout="typographic-poster"] .inv-cover__date { font-size: var(--inv-size-body); }
}

/* ===== Görev 1421: güvenli bant (kalite standardı §A.2) — isim grubu kapağın %62'sinde biter, tarih/yer ilk ekranda kalır ===== */
/* Kapak yüksekliği = bandın paydası: kapak içerikten kısaysa ya da görsel isimleri aşağı itiyorsa, alt dolgu/min-height ile alt bölge (süs) açılır. */
@media (max-width: 63.99rem) {
  /* split-screen ve postcard: üstte görsel, altta metin; kapak en az bir ekran olunca isimler bandın içinde kalır. */
  body[data-layout="split-screen"] .inv-cover { min-height: 100svh; }
  body[data-layout="centered-classic"] .inv-cover { padding-bottom: 26svh; }
}
@media (max-width: 47.99rem) {
  body[data-layout="postcard"] .inv-cover { min-height: 100svh; align-content: start; }
  body[data-layout="stacked-modern"] .inv-cover { padding-bottom: calc(var(--space-20) + 12svh); }
}
@media (min-width: 64rem) {
  body[data-layout="framed-card"] .inv-cover { padding-bottom: calc(var(--space-12) + 24svh); }
  body[data-layout="full-bleed-cover"] .inv-cover { padding-bottom: calc(var(--space-24) + 5svh); }
  /* centered-classic: görsel şerit olur (ilk ekranda tarih/yer de sığsın), isimler görselin hemen altında başlar. */
  body[data-layout="centered-classic"] .inv-cover { min-height: 100svh; padding-top: 6svh; padding-bottom: 6svh; align-content: start; }
  body[data-layout="centered-classic"] .inv-cover__media .design-image { max-height: 20svh; }
  body[data-layout="map-focus"] { --map-height: 28svh; }
  body[data-layout="map-focus"] .inv-cover { min-height: 100svh; }
  body[data-layout="letterpress-letter"] .inv-cover { min-height: 100svh; }
  body[data-layout="timeline-scroll"] .inv-cover { align-content: start; }
  body[data-layout="typographic-poster"] .inv-cover__names { --v3-name-cap: 6.5cqi; }
  body[data-layout="ticket-stub"] .inv-cover__media .design-image { max-height: 22svh; }
}
body[data-layout="timeline-scroll"] .inv-cover { min-height: 100svh; }

/* ===== Görev 1489: ortak kapak düzeltmeleri (denetim turu 1; sahibi Ada) =====
   Date, time and name sizes come from the shared tokens in every layout (invitation-page-tokens.css: 28 / 52 px at 390, 32 / 64 px at 1440).
   The name only shrinks when the longest word does not fit the box (floor 36 px); the word length comes from the page as --inv-name-word-chars.
   The [data-layout] selector outranks the layout blocks above. */
body[data-engine="v3"][data-layout] .inv-cover__names {
  font-size: min(var(--inv-text-name), max(var(--inv-text-name-floor), calc(100cqi / (var(--inv-name-word-chars, 8) * .46))));
}
body[data-engine="v3"][data-layout] .inv-cover__date { font-size: var(--inv-text-date); line-height: var(--inv-lh-date); }
body[data-engine="v3"][data-layout] .inv-cover__time { font-size: max(var(--inv-text-time-min), 1em); }
/* Ara bölüm ile kapak aynı isim ölçüsünde kalır (devir sırasında isim sıçramaz). */
body[data-engine="v3"][data-layout] .inv-intro__names {
  font-size: min(var(--inv-text-name), max(var(--inv-text-name-floor), calc((100vw - 2 * var(--inv-gutter)) / (var(--inv-name-word-chars, 8) * .46))));
}
/* "Davetiyeyi oku" alt süs bandının üstünde durur: band --orn-bottom-clear (svh) yüksekliğinde sabitlenir, ipucu o kadar yukarı alınır. */
body[data-engine="v3"] .inv-cover__ornament--bottom { height: var(--orn-bottom-clear, var(--orn-bottom-h, 14%)); }
body[data-engine="v3"] .inv-cover__scroll { margin-bottom: calc(var(--orn-bottom-clear, -8px) + 8px); }
@media (max-width: 63.99rem) { body[data-engine="v3"][data-layout="vertical-ribbon"] .inv-cover__scroll { margin-bottom: 0; } } /* task 1527: in the ribbon layout the cue stays above the bottom ornament, the cover does not grow */
@media (min-width: 64rem) {
  /* Kapak ipucu kadar uzar; metin bloğu %22 sınırının altında kalsın diye içerik, uzamanın üçte biri kadar aşağı iner. */
  body[data-engine="v3"] .inv-cover__content { padding-top: calc(var(--orn-bottom-clear, 0px) * .35); }
}
/* Daha büyük isim/tarih ölçüsü centered-classic'te tarihi ilk ekranın altına itmesin: mobilde kapak boşlukları daralır. */
@media (max-width: 63.99rem) {
  body[data-layout="centered-classic"] .inv-cover { gap: var(--space-2); }
}
@media (max-width: 47.99rem) {
  body[data-engine="v3"] .inv-cover { gap: var(--space-3); }
}
/* letterpress-letter: ölçü büyüyünce kapak içerikle uzar; metin bloğu %22 sınırının altında başlasın diye kapak bir ekran olur, üst dolgu en az %24 svh. */
@media (max-width: 63.99rem) {
  body[data-layout="letterpress-letter"] .inv-cover { min-height: 100svh; padding-top: max(var(--space-10), 34%, 24svh); }
}
/* Büyüyen isim/tarih (görev 1489) metin bloğunu %22-62 güvenli bandının dışına itti: etkilenen yerleşimlerde kapak uzar (125svh) ve metin bandın %23'ünde başlar. */
@media (max-width: 47.99rem) {
  body:is([data-layout="split-screen"], [data-layout="postcard"], [data-layout="map-focus"], [data-layout="magazine-cover"], [data-layout="stacked-modern"], [data-layout="full-bleed-cover"], [data-layout="typographic-poster"]) .inv-cover {
    min-height: 125svh; align-content: start;
  }
  body:is([data-layout="magazine-cover"], [data-layout="full-bleed-cover"], [data-layout="typographic-poster"], [data-layout="map-focus"]) .inv-cover { padding-top: 28svh; }
  /* Görsel üstte olduğu için metin görselin altında başlar: üst dolgu küçük, kapak 150svh. */
  body:is([data-layout="stacked-modern"], [data-layout="centered-classic"]) .inv-cover { min-height: 150svh; padding-top: var(--space-8); }
  body[data-layout="centered-classic"] .inv-cover { align-content: start; padding-bottom: var(--space-12); }
}
@media (min-width: 64rem) {
  body:is([data-layout="arch-frame"], [data-layout="full-bleed-cover"], [data-layout="polaroid-collage"], [data-layout="postcard"], [data-layout="split-screen"], [data-layout="stacked-modern"], [data-layout="vertical-ribbon"], [data-layout="magazine-cover"]) .inv-cover {
    min-height: 100svh; padding-top: max(var(--space-16), 24svh);
  }
}
/* Görev 1489: kalan yerleşim ayarları. */
body[data-engine="v3"][data-layout="magazine-cover"] .inv-cover { min-height: 125svh; }
@media (min-width: 64rem) {
  body[data-engine="v3"][data-layout="magazine-cover"] .inv-cover { min-height: 100svh; }
  body[data-engine="v3"][data-layout="magazine-cover"] .inv-cover__content { padding-top: 12svh; }
  body[data-engine="v3"][data-layout="full-bleed-cover"] .inv-cover__content { padding-top: 0; }
  body[data-engine="v3"][data-layout="full-bleed-cover"] .inv-cover { min-height: 120svh; padding-top: 26svh; align-content: start; }
  body[data-engine="v3"]:is([data-layout="medallion"], [data-layout="postcard"]) .inv-cover__eyebrow { margin-bottom: var(--space-4); }
  body[data-engine="v3"][data-layout="typographic-poster"] .inv-cover__names { max-width: 34rem; }
}
/* typographic-poster: büyük harfli isim daha geniştir; sözcük kutuya sığacak kadar küçülür. */
body[data-engine="v3"][data-layout="typographic-poster"] .inv-cover__names {
  font-size: min(var(--inv-text-name), max(var(--inv-text-name-floor), calc(100cqi / (var(--inv-name-word-chars, 8) * .78))));
}
/* launch-poster: "BULUŞMASI" büyük harfle 342 px kutuya 52 px'te sığsın diye harf aralığı daraltılır (görev 1527; boyut 52 px). */
@media (max-width: 47.99rem) {
  body[data-engine="v3"][data-layout][data-theme="launch-poster"] .inv-cover__names:not([data-name-long]) { font-size: 52px; letter-spacing: -.04em; }
}

/* ============ #1490 / task 1527: long names (390) ============
   The server writes data-name-long and --inv-name-chars (length of the longer name) on the h1 when a name has 22+ characters.
   Each name is sized to fit one line (box width / chars x ~.64 em, margin for wide display faces and framed boxes), floor 18 px,
   so "name / & / name" stays 3 lines. Short names are unaffected. Same specificity as [data-layout] and placed last: it beats layout and theme overrides. */
@media (max-width: 47.99rem) {
  body[data-engine="v3"][data-layout] .inv-cover__names[data-name-long] {
    font-size: min(var(--inv-text-name), max(26px, calc((100vw - 2 * var(--space-6)) / (var(--inv-name-chars, 22) * .5))));
    text-wrap: balance; letter-spacing: -.045em;
  }
  /* The name box opens to the full cover width (24 px side margins); the postcard is rotated, its box is not centred on the viewport, so it keeps its own width. */
  body[data-engine="v3"][data-layout]:not([data-layout="postcard"]) .inv-cover__names[data-name-long] {
    width: calc(100vw - 2 * var(--space-6)); max-width: none; margin-inline: calc(50% - 50vw + var(--space-6)); box-sizing: border-box; padding-inline: 0;
  }
  body[data-engine="v3"][data-layout="typographic-poster"] .inv-cover__names[data-name-long] {
    font-size: min(var(--inv-text-name), max(26px, calc((100vw - 2 * var(--space-6)) / (var(--inv-name-chars, 22) * .66))));
  }
  /* Medallion: the name box is narrower than the content (256 px). */
  body[data-engine="v3"][data-layout="medallion"] .inv-cover__names[data-name-long] {
    font-size: min(var(--inv-text-name), max(26px, calc((100vw - 2 * var(--space-6)) / (var(--inv-name-chars, 22) * .7))));
  }
  /* Wide faces (Cinzel, Lora, Inter, uppercase Playfair) cannot fit 26 characters on one 342 px line at the 26 px floor: only for long names these designs switch to the narrow Cormorant Garamond. */
  body[data-engine="v3"]:is([data-theme="monogram-estate"], [data-theme="monogram-promise"], [data-theme="seljuk-sky"], [data-theme="twilight-plum"], [data-theme="bosphorus-evening"], [data-theme="lavender-mist"], [data-theme="pomegranate-vow"], [data-theme="paper-heart"]) .inv-cover__names[data-name-long] {
    font-family: 'Cormorant Garamond', 'Cormorant Garamond Fallback', Georgia, serif; font-weight: 500; letter-spacing: 0; text-transform: none;
  }
}

/* ============ task 1536: date block <= 2 lines (390) ============
   "28 AĞUSTOS 2027 · CUMARTESİ" in tracked capitals at 28 px needs 3 lines in the 250-342 px content boxes.
   The day line keeps its 28 px token size; capitals and tracking give way (sentence case, .01em) so it breaks after the year at the latest.
   Applies to the envelope pocket (250 px box) and to covers with a long name (the long-text pass); other covers keep their capitals. */
@media (max-width: 47.99rem) {
  body[data-engine="v3"][data-layout="envelope-pocket"] .inv-cover__date .inv-cover__day,
  body[data-engine="v3"][data-layout] .inv-cover__content:has(.inv-cover__names[data-name-long]) .inv-cover__date .inv-cover__day { text-transform: none; letter-spacing: .01em; }
}

/* ============ #1629: pomegranate-vow cover payı ============
   The cover text block is centred, so the length of the sample date moves it: with a one-line day ("5 Mart 2027 · Cuma") the name group
   ended at 62.2% of the 390 cover (limit 62%, aim <= 60%); the longest day ("28 Ağustos 2027 · Cumartesi") ran 594 px wide at 1440 (column limit 560). */
@media (max-width: 47.99rem) {
  body[data-theme="pomegranate-vow"] .inv-cover { padding-bottom: 16svh; }
}
@media (min-width: 48rem) {
  body[data-theme="pomegranate-vow"] .inv-cover__day { max-inline-size: 34rem; margin-inline: auto; text-wrap: balance; }
}

/* ============ #1629: longest sample date (Cumartesi, Ağustos) in every v3 cover ============
   390: the day line has to break in two lines at most for any date (not only with a long name): sentence case and .01em tracking like the long-name covers above.
   1440: the day line stays inside the 560 px text column; the longest day wraps after the year instead of running 594 px wide. */
@media (max-width: 47.99rem) {
  body[data-engine="v3"][data-layout] .inv-cover__date .inv-cover__day { text-transform: none; letter-spacing: .01em; }
}
@media (min-width: 48rem) {
  body[data-engine="v3"][data-layout] .inv-cover__day { max-inline-size: 34rem; margin-inline: auto; text-wrap: balance; }
}

/* ============ #1641: longest sample date on the seven covers the #1629 blocks did not reach ============
   Only spacing/tracking/width of the day line: the font size token and every threshold stay as they are. */
@media (min-width: 48rem) {
  /* framed-card and magazine-cover: tracked capitals made the 572-593 px day line wrap to two lines and push the venue below the fold (blush-peony, rose-quartz, deco-emerald, paint-glow). */
  body[data-layout="framed-card"] .inv-cover__date .inv-cover__day,
  body[data-layout="magazine-cover"] .inv-cover__date .inv-cover__day { letter-spacing: .04em; }
  /* ticket-stub: the day sits in the 3fr column (362 px); capitals at 32 px needed three lines (go-kart, midnight-ticket). */
  body[data-layout="ticket-stub"] .inv-cover__date .inv-cover__day { text-transform: none; letter-spacing: .01em; }
}
/* storybook-page: the cover fills the first screen at every width. The 48rem+ rule (calc(100svh - 40px)) left it 40 px short at 1920x1080 (sea-voyage, dino-park, ocean-diver, safari-babies: 1040 < 1080). */
body[data-layout="storybook-page"] .inv-cover { min-height: 100svh; }

/* ===== Task 1708: generated images are never cropped (docs/design/cover-focus.md, "shrink, do not crop") =====
   Root cause: .design-image__img used cover, and the layout rules overrode the box height regardless of the aspect ratio
   (height:100%, 38svh, 20svh, aspect-ratio:auto !important), so the image was cut on the edges that did not fit; round and arch
   frames (border-radius + overflow:hidden) cut the corners as well. Shared rule: the img is always contain; in inline layouts the
   box keeps the image ratio (--image-ratio, design-image.blade.php), is at most --v3-image-cap tall and centered; in framed layouts
   the image sits inside the frame. In layouts that act as a backdrop the box fills the media area and the image stays whole inside. */
body[data-engine="v3"] { --v3-image-cap: var(--v3-cover-media-max-block); }
@media (min-width: 48rem) { body[data-engine="v3"] { --v3-image-cap: 50svh; } }
body[data-engine="v3"] .design-image__img { object-fit: contain; object-position: 50% 50%; box-sizing: border-box; }
body[data-engine="v3"] .design-image:not(.design-image--fallback) { background: transparent; }

body[data-engine="v3"]:not([data-image-role="background"]):not([data-layout="envelope-pocket"]):not([data-layout="map-focus"]):not([data-layout="magazine-cover"]):not([data-layout="storybook-page"]) .inv-cover__media .design-image {
  width: min(100%, calc(var(--v3-image-cap) * var(--image-ratio, .8)));
  height: auto !important; min-height: 0 !important; max-height: none !important;
  aspect-ratio: var(--image-ratio, .8) !important;
  margin-inline: auto;
}
/* Frames: the image never spills out of the frame or loses a corner; it sits inside (round: 1/sqrt2, arch: inside the arc). */
body:is([data-layout="medallion"], [data-layout="timeline-scroll"], [data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-cover__media .design-image { background: var(--inv-surface); }
body:is([data-layout="medallion"], [data-layout="timeline-scroll"], [data-layout="sticker-board"], [data-layout="mosaic-grid"]) .inv-cover__media .design-image__img { padding: 16%; }
body[data-layout="arch-frame"] .inv-cover__media .design-image { background: var(--inv-surface); }
body[data-layout="arch-frame"] .inv-cover__media .design-image__img { padding: 21% 11% 12%; }
@media (min-width: 64rem) {
  body[data-layout="split-screen"] { --v3-image-cap: 100svh; }
  body[data-layout="centered-classic"] { --v3-image-cap: 26svh; }
  body[data-layout="ticket-stub"] { --v3-image-cap: 22svh; }
}
@media (min-width: 48rem) and (max-width: 63.99rem) {
  body[data-layout="split-screen"] { --v3-image-cap: 45svh; }
}

/* ============ #1739 — oylama tur 2 yerleşim düzeltmeleri ============ */

/* framed-card: the picture starts below the top ornament band (band height comes from the ornament tokens, never hard-coded here). */
body[data-engine="v3"][data-layout="framed-card"] .inv-cover { padding-top: calc(var(--orn-bottom-clear, 0px) + var(--space-3)); }
/* the picture is a little smaller on wide screens so the date and venue still end inside the first screen after the clearance above */
@media (min-width: 64rem) { body[data-layout="framed-card"] { --v3-image-cap: min(30svh, calc(40svh - var(--orn-bottom-clear, 0px))); } } /* high-density bands (20svh) leave less room */
/* the band height follows the viewport like the bottom band does (layouts.css, --orn-bottom-clear), so the clearance above stays valid when the cover grows tall */
body[data-engine="v3"][data-layout="framed-card"] .inv-cover__ornament--top { height: var(--orn-bottom-clear, var(--orn-top-h, 14%)); }

/* lantern-glow: the intro ring used to stay on the cover at .15 opacity above the picture (z-index 40, overlapping it); it is a part of the intro, so it leaves with it. */
body[data-animation="lantern-glow"][data-intro-phase="done"] .v3-intro__mark { display: none; }

/* full-bleed-cover: the eyebrow no longer sticks to the top rule of the content plate. */
body[data-engine="v3"][data-layout="full-bleed-cover"] .inv-cover__content { padding-top: var(--space-6); }

/* arch-frame: the arch follows the picture ratio. No fill and no inner padding: the picture fills the arch width, the arch only rises
   above it by the dome height, so the whole picture is visible (contain, never cropped) and there is no frame inside a frame. */
body[data-engine="v3"][data-layout="arch-frame"]:not([data-image-role="background"]):not([data-layout="envelope-pocket"]):not([data-layout="map-focus"]):not([data-layout="magazine-cover"]):not([data-layout="storybook-page"]) .inv-cover__media .design-image:not(.design-image--fallback) {
  --arch-w: min(22rem, calc(100vw - 3rem), calc(var(--v3-image-cap) / (1 / var(--image-ratio, .6667) + .15)));
  --arch-rise: calc(var(--arch-w) * .18);
  --arch-edge: calc(var(--arch-w) * .02);
  width: var(--arch-w); height: auto !important; aspect-ratio: auto !important; box-sizing: border-box;
  padding: calc(var(--arch-rise) * .72) var(--arch-edge) var(--arch-edge);
  background: transparent; border: 2px solid var(--inv-accent);
  border-radius: 50% 50% 0 0 / var(--arch-rise) var(--arch-rise) 0 0;
}
body[data-layout="arch-frame"] .inv-cover__media .design-image:not(.design-image--fallback) .design-image__img { height: auto; aspect-ratio: var(--image-ratio, .6667); padding: 0; }

/* Background-role covers (full-bleed-cover, vertical-ribbon) on desktop: the 9:16 picture is shown whole at the right, between the
   ornament bands, over a blurred and dimmed twin of the same picture that fills the rest (a CSS background of the same file, fetched once). */
body[data-engine="v3"] .design-image.design-image--backdrop { display: none; }
@media (min-width: 64rem) {
  body[data-engine="v3"][data-image-role="background"]:is([data-layout="full-bleed-cover"], [data-layout="vertical-ribbon"]) .inv-cover__media {
    position: absolute; inset: 0; width: 100%; opacity: var(--inv-media-opacity, 1); border: 0; z-index: -1; overflow: hidden;
  }
  body[data-engine="v3"][data-image-role="background"][data-layout="vertical-ribbon"] .inv-cover__media { position: fixed; }
  body[data-engine="v3"][data-image-role="background"]:is([data-layout="full-bleed-cover"], [data-layout="vertical-ribbon"]) .inv-cover__media::after {
    content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 0;
    background: color-mix(in srgb, var(--inv-bg) 58%, transparent);
  }
  body[data-engine="v3"][data-image-role="background"] .inv-cover__media .design-image--backdrop {
    display: block; position: absolute; inset: 0; width: 100%; height: 100% !important; aspect-ratio: auto !important; z-index: 0;
    background-size: cover; background-position: center; filter: blur(32px) saturate(1.05); transform: scale(1.12);
  }
  body[data-engine="v3"][data-image-role="background"]:is([data-layout="full-bleed-cover"], [data-layout="vertical-ribbon"]) .inv-cover__media .design-image:not(.design-image--backdrop) {
    position: absolute; z-index: 1; left: auto; right: 5vw; width: auto; max-width: max(12rem, calc(45vw - 16.5rem));
    /* between the ornament bands (percent of the cover, like the bands themselves), and never taller than the first screen allows */
    top: calc(var(--orn-top-h, 14%) + var(--space-3)); bottom: auto;
    height: min(calc(100% - var(--orn-top-h, 14%) - var(--orn-bottom-h, 14%) - var(--space-6)), calc(100svh - var(--orn-top-h, 14%) - var(--orn-bottom-h, 14%) - var(--space-6))) !important;
    aspect-ratio: 9 / 16 !important; margin: 0; background: transparent;
  }
  body[data-engine="v3"][data-image-role="background"][data-layout="full-bleed-cover"] .inv-cover__media .design-image:not(.design-image--backdrop) { max-width: calc(89vw - 42rem); }
}
