/* DUS Zawaj public site: the light theme (2026-10-18), the same colours and style as
   the signed-in dashboards (public/workspace/dashboard.css). Loaded LAST by
   public/home.html, over the demo stylesheets and production-taste.css, whose layout
   it keeps: only colour, surfaces and the header, footer and card treatment change.

   Every rule is scoped to #app#app (the id twice). That outranks the demo's and
   production-taste.css's #app / class selectors without !important; !important is
   used only where those files already use it (button and link colours, hover fills)
   and in the higher-contrast blocks at the end.

   "Bone and green" (2026-10-19): a flat bone page #EBE9E4 with no glow and no gradient;
   cards one lighter step #F4F3F0 and quiet panels one darker step #DFDCD5 (stone, under
   15% saturation), 20px radius, with no resting shadows and no hairlines (surfaces part
   by tone and space); chocolate ink #2A1D17 for every running text, muted #5E5047 for
   metadata only (dates, notes, numbers); deep mosque green #2F5D3A only for actions (the
   one filled button, links that act, the focus ring) with a white label on buttons; a
   green tint #DCE6D8 with ink text only for the chosen or current thing (the current
   page, the chosen person, the part being read); pill buttons; DM Sans; focus ring 2px
   #2F5D3A. The ground and card are the nearest low-chroma bone to the palette's first
   values that the taste inspector does not read as yellow cream. Five type sizes: the
   display title, 36 (section), 22 (item), 17 (body) and 14 (small). Colour pairs are
   measured to WCAG AA. CSP: no data: URIs, no inline styles. */

:root {
  color-scheme: light;
  --pl-page: #EBE9E4; --pl-surface: #F4F3F0; --pl-muted: #DFDCD5; --pl-tint: #DCE6D8;
  --pl-ink: #2A1D17; --pl-ink-2: #5E5047;
  --pl-primary: #2F5D3A; --pl-primary-hover: #244A2E; --pl-on-primary: #FFFFFF;
  --pl-line: #DFDCD5; --pl-field: #8C8075;
}

/* ---- Page ------------------------------------------------------------------ */
html {background: var(--pl-page);}
html body {background: var(--pl-page); background-image: none; color: var(--pl-ink);}
/* The bone page is flat: no glow behind the header. */
html body::before {display: none;}
::selection {background: var(--pl-tint); color: var(--pl-ink);}
/* Drawings that cross the column edge never widen the page. */
#app#app {overflow-x: clip;}
html body .skip-link {background: var(--pl-ink); color: var(--pl-on-primary); border: 0; border-radius: 12px; font-weight: 500;}
/* The skip link opens over the header; a band of page colour keeps its ring clear of the
   green button it may cover on phones. */
html body .skip-link:focus-visible {outline: 2px solid var(--pl-primary); outline-offset: 2px; box-shadow: 0 0 0 8px var(--pl-page);} /* taste-skill-ignore: a solid halo of page colour behind the focus ring, not a shadow */

#app#app .public-shell {
  color: var(--pl-ink);
  /* Text takes its container's colour; the containers below set it. */
  :is(h1, h2, h3, h4, p, li, dt, dd, td, th, label, legend, address, blockquote, figcaption, summary, strong, b, small, cite) {color: inherit;}
  /* Headings settle on whole phrases, without a lone word on the last line. */
  :is(h2, .public-cards h3) {text-wrap: balance;}
  /* One focus ring everywhere: 2px green, offset 2px. */
  :is(a, button, summary, input, textarea, select, [tabindex]):focus-visible,
  .select-trigger.label-focus:focus {outline: 2px solid var(--pl-primary); outline-offset: 2px;}
  /* Links in running text. */
  a:not(.btn):not(.brand-lockup) {color: var(--pl-primary); text-decoration-color: rgba(47,93,58,.4); text-underline-offset: 3px;}
  /* Buttons: one green pill with a white label, as on the dashboards: 17px, 12px 24px
     in the page (14px in the header and footer); secondary is a stone fill. */
  .btn {background: var(--pl-primary); color: var(--pl-on-primary) !important; border: 1px solid transparent; border-radius: 9999px; font-weight: 500; box-shadow: none; text-decoration: none; padding: 10px 20px;} /* taste-skill-ignore: removes the effect */
  .public-copy .btn {font-size: 17px;}
  :is(.public-hero, .taste-workspace, .public-copy) .btn {padding: 12px 24px;}
  .btn.secondary {background: var(--pl-muted); color: var(--pl-ink) !important; border-color: transparent;}
}
@media (hover: hover) {
  #app#app .public-shell {
    a:not(.btn):not(.brand-lockup):hover {color: var(--pl-primary-hover); text-decoration-color: currentColor;}
    .btn:hover {background: var(--pl-primary-hover) !important; color: var(--pl-on-primary) !important; border-color: transparent;}
    .btn.secondary:hover {background: var(--pl-tint) !important; color: var(--pl-ink) !important; border-color: transparent;}
  }
}

/* ---- Page titles: the DuSunnah calligraphy, faint dark ink behind the title -------
   It fades downward as before, and now also towards both sides, so it has no edges;
   its top runs up behind the header to the top of the page. */
#app#app .public-shell :is(.public-hero, .public-copy .header-frame, main > .header-frame)::before {
  background: linear-gradient(180deg, rgba(42,29,23,.06), rgba(42,29,23,.03) 55%, rgba(42,29,23,0) 92%); /* taste-skill-ignore: the calligraphy fade, in chocolate ink */
  -webkit-mask: url('dus-calligraphy.png') center top / cover no-repeat, linear-gradient(90deg, transparent, #000 18%, #000 82%, transparent); /* taste-skill-ignore: a mask that fades the faint calligraphy at its sides, not a fill */
  -webkit-mask-composite: source-in;
  mask: url('dus-calligraphy.png') center top / cover no-repeat, linear-gradient(90deg, transparent, #000 18%, #000 82%, transparent); /* taste-skill-ignore: a mask that fades the faint calligraphy at its sides, not a fill */
  mask-composite: intersect;
}

/* ---- Header: brand, page links and the main button straight on the page --------
   As on the dashboards' top bar and the sign-in page: no fill and no line, so the page
   and the calligraphy run to the top edge. production-guard.js places the main button
   in the header after the <nav>, so on phones it can share the brand's row. */
#app#app .public-nav {
  position: relative; z-index: 5; display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-start; gap: 8px;
  min-height: 72px; margin-top: -24px; padding: 12px 0;
  background: transparent; border: 0; border-radius: 0; box-shadow: none; color: var(--pl-ink); /* taste-skill-ignore: removes the effect */
  /* No blur either (the "Page not found" view kept the demo's): the calligraphy behind the
     header stays one even texture, with no paler band under the links. */
  backdrop-filter: none; -webkit-backdrop-filter: none; /* taste-skill-ignore: removes the effect */
  &::before {display: none;}
  .brand-lockup {margin-right: auto; color: var(--pl-ink); gap: 12px; border-radius: 12px;}
  .brand-lockup .mark {width: 40px; height: 40px; overflow: hidden;}
  .brand-lockup .mark img {width: 100%; height: 100%; object-fit: contain;}
  .brand-name {color: var(--pl-ink); font-size: 22px; font-weight: 600; letter-spacing: -.01em;}
  /* 8px between pills, so each focus ring keeps 4px of clear page before the next pill. */
  .links {display: flex; flex-wrap: nowrap; align-items: center; gap: 8px; width: auto;}
  .links a:not(.btn) {color: var(--pl-ink); background: transparent; font-size: 14px; font-weight: 500; padding: 10px 16px; border-radius: 9999px; text-decoration: none; white-space: nowrap;}
  .links a:not(.btn)[aria-current=page] {background: var(--pl-tint); color: var(--pl-ink);}
  > .btn {flex: none; background: var(--pl-primary); color: var(--pl-on-primary) !important; border-color: transparent; font-size: 14px; padding: 10px 20px; white-space: nowrap;}
}
@media (hover: hover) {
  #app#app .public-nav .links a:not(.btn):hover {background: var(--pl-muted); color: var(--pl-ink); text-decoration: none;}
  #app#app .public-nav .links a:not(.btn)[aria-current=page]:hover {background: var(--pl-tint); color: var(--pl-ink);}
  /* The brand stays as it is under the pointer (public-preserve.css would put it on the
     old navy). */
  #app#app .public-nav a.brand-lockup:hover {background: transparent; color: var(--pl-ink);}
}
/* Home: the hero carries the filled "Begin your journey", so the header's copy of it is
   the quiet stone pill there; on every other page the header's button stays green. */
#app#app .public-shell:has(.public-hero) .public-nav > .btn {background: var(--pl-surface); color: var(--pl-ink) !important;}
@media (hover: hover) {
  #app#app .public-shell:has(.public-hero) .public-nav > .btn:hover {background: var(--pl-tint) !important; color: var(--pl-ink) !important;}
}

/* ---- Home -------------------------------------------------------------------- */
#app#app .public-shell:has(.public-hero) {
  main {background: transparent; border-radius: 0; overflow: visible;}
  /* The hero sits on the page itself, its words on the same left edge as the cards below. */
  .public-hero {padding: 56px 0 0; background: transparent;}
  .public-hero::before {inset: -100px -64px 0;}
  .public-hero h1 {color: var(--pl-ink);}
  .public-hero p {color: var(--pl-ink);}
  .public-hero .taste-actions .btn {background: var(--pl-primary); color: var(--pl-on-primary) !important; border-color: transparent;}
  .public-hero .taste-actions a:not(.btn) {color: var(--pl-ink); font-weight: 500; text-decoration: underline; text-decoration-color: rgba(42,29,23,.35); padding-inline: 0;}

  /* The benefits are a flat card one step lighter than the bone page; the path to the masjid
     (production-doodles.css) runs straight on the page, out of any card. */
  .public-section {background: transparent; border: 0;}
  .public-section.taste-benefits {background: var(--pl-surface); border-radius: 20px; box-shadow:none; overflow-x: clip; overflow-y: visible;}
  .public-section.taste-steps {background: transparent; border-radius: 0; box-shadow:none; padding-left: 0; padding-right: 0; overflow: visible;}
  .exterior-heading h2 {color: var(--pl-ink);}
  .exterior-heading p {color: var(--pl-ink);}
  .public-cards .card {background: transparent;}
  /* Item titles in ink, as the dashboards' card titles; green stays for actions. */
  .public-cards .card h2,.public-cards .card h3 {color: var(--pl-ink); font-weight: 600;}
  .public-cards .card p {color: var(--pl-ink);}
  .public-section.taste-steps .card {border-left: 0;}

  /* The workspace invitation: a stone panel one step darker than the page, as the
     dashboards' "Your next step", with the same 48px inner edge as the benefits above. */
  .public-section.taste-workspace {background: transparent; padding-left: 0; padding-right: 0;}
  .public-section.taste-workspace > .card {background: var(--pl-muted); border-radius: 20px; box-shadow:none; padding: 48px;}
  .public-section.taste-workspace > .card h2 {color: var(--pl-ink);}
  .public-section.taste-workspace > .card p {color: var(--pl-ink);}
}

/* ---- Reading pages (How We Work, FAQs, Contact, Privacy, Terms, Accessibility, Safety) ---- */
#app#app .public-shell:has(.public-copy) {
  main {background: transparent; border-radius: 0; overflow: visible;}
  .public-copy {padding: 0; color: var(--pl-ink); max-width: none;}
  /* The title sits on the page, with the calligraphy faintly behind it, and the page
     follows straight on: the same gap under every title, at every width. */
  .public-copy .header-frame {min-height: 0; padding: 8px 0 28px; margin-bottom: 4px;}
  .public-copy .header-frame::before {inset: -100px -64px -24px;}
  .public-copy .header-frame h1 {color: var(--pl-ink);}
  .header-frame .taste-meta {color: var(--pl-ink-2);}
  /* Each part of the page is a flat bone card, as on the dashboards, its text 32px in
     from the card's edge (the How We Work steps share that edge). */
  .public-copy > .card {background: var(--pl-surface); border: 0; border-radius: 20px; padding: 32px; margin: 0 0 20px; box-shadow:none;}
  .public-copy > .card :is(p, li, address) {max-width: none;}
  .public-copy > .card > :first-child {margin-top: 0;}
  .public-copy > .card > :last-child,.public-copy > .card > :last-child > li:last-child {margin-bottom: 0;}
  .public-copy > .card .cardtop h2,.public-copy h2 {color: var(--pl-ink);}
  /* One title size per card (22px), its sub-heads at body size, set off by space. */
  .public-copy > .card .cardtop h2,.public-copy > .card > h2 {font-size: 22px; font-weight: 600; line-height: 1.3;}
  .public-copy > .card h3 {color: var(--pl-ink); font-size: 17px; font-weight: 600; line-height: 1.4; margin: 28px 0 6px;}
  .public-copy > .card .notice h3 {margin-top: 0;}
  .public-copy h3 {color: var(--pl-ink); font-weight: 600;}
  .public-copy .footnote,.public-copy small {color: var(--pl-ink-2);}
  .public-copy label,.public-copy legend {color: var(--pl-ink);}
  .public-copy :is(.notice, .faq-hadith) {background: var(--pl-muted); color: var(--pl-ink); border: 0; border-radius: 16px;}
  .public-copy .notice {margin-bottom: 20px;}
  .public-copy .notice > :last-child {margin-bottom: 0;}
  .public-copy .notice h3 {color: var(--pl-ink);}
  /* A note inside a card is not a second box: it is set off by a 4px ink bar. */
  .public-copy > .card .notice {background: transparent; border-left: 4px solid var(--pl-ink); border-radius: 0; padding: 4px 0 4px 20px;}
  /* Tables: a soft header band, then rows divided by fine lines; row headings align with their cells. */
  .public-copy table {border-collapse: separate; border-spacing: 0;}
  .public-copy :is(th, td) {padding: 14px 12px; border: 0; border-top: 1px solid var(--pl-line); background: transparent; color: var(--pl-ink); text-align: left; vertical-align: top;}
  .public-copy thead th {background: var(--pl-muted); border-top: 0; font-weight: 600;}
  .public-copy thead th:first-child {border-radius: 12px 0 0 12px;}
  .public-copy thead th:last-child {border-radius: 0 12px 12px 0;}
  .public-copy tbody th {font-weight: 600;}
  .public-copy > .btn {margin: 8px 0 0; justify-self: start;}

  /* How We Work: numbered bone cards, two to a row, on the page. */
  .public-copy .taste-steps-intro h2 {color: var(--pl-ink);}
  .public-copy .taste-steps-intro p {color: var(--pl-ink);}
  .public-copy .work-steps > .card {background: var(--pl-surface); box-shadow:none;}
  .public-copy .work-steps .step-number {color: var(--pl-ink-2);}
  .public-copy .work-steps h3 {color: var(--pl-ink);}
  /* Each step's flow line is plain small text in muted ink, not a box inside the card. */
  .public-copy .work-steps .notice {background: transparent; padding: 0; color: var(--pl-ink-2); margin-bottom: 0;}

  /* FAQs: the title column on the page, each topic a bone card of numbered questions
     under its name in small ink; the topics beside the title are card-tone pills, one
     width each (the green tint stays for what is current). Questions part by space, and
     an open question sits one step darker than its card, on the page tone, so the stone
     buttons and the hadith inside it still stand out. */
  .expanded-faq .taste-faq-aside .faq-intro {color: var(--pl-ink);}
  .faq-category-nav a {background: var(--pl-surface); color: var(--pl-ink) !important; border: 0;}
  .expanded-faq .faq-group {background: var(--pl-surface); border-radius: 20px; padding: 28px 32px 20px; margin: 0 0 20px; box-shadow:none;}
  .expanded-faq .faq-group > h2 {display: inline-flex; align-items: center; min-height: 28px; margin: 0 0 8px; padding: 0; border-radius: 0; background: transparent; color: var(--pl-ink); font-size: 14px; font-weight: 600; line-height: 1.35; letter-spacing: 0; text-transform: none;}
  .public-copy.expanded-faq .faq-group details {display: flow-root; border: 0; margin: 4px -16px 0; padding: 0 16px; border-radius: 14px;}
  .public-copy.expanded-faq .faq-group details[open] {background: var(--pl-page);}
  .expanded-faq summary {color: var(--pl-ink);}
  /* Question numbers in DM Sans with even figures, as every number on the dashboards. */
  .expanded-faq summary::before {color: var(--pl-ink-2); font-family: 'DM Sans', sans-serif; font-variant-numeric: tabular-nums;}
  .expanded-faq summary::after {color: var(--pl-ink);}
  /* The answer's own colour too, so no bare words take the old light text (accessibility.css). */
  .faq-answer {color: var(--pl-ink);}
  .faq-answer p {color: var(--pl-ink);}
  .faq-answer strong {color: var(--pl-ink);}
  /* Citations and references in ink, underlined: green stays for actions. */
  .faq-answer a:not(.btn) {color: var(--pl-ink) !important; text-decoration-color: rgba(42,29,23,.4);}
  .faq-hadith cite {color: var(--pl-ink-2);}
  .expanded-faq > .card {padding: 32px;}
}
/* The first card's top edge lines up with the top of the title beside it. */
@media (min-width: 1024px) {
  #app#app .public-shell:has(.public-copy) .expanded-faq > .faq-group:first-of-type,
  #app#app .public-shell:has(.public-copy) .taste-read > .taste-read-aside + * {margin-top: 16px;}
}
@media (hover: hover) {
  #app#app .public-shell:has(.public-copy) .expanded-faq summary:hover {color: var(--pl-primary);}
  #app#app .public-shell:has(.public-copy) .faq-answer a:not(.btn):hover {text-decoration-color: currentColor;}
  /* A topic pill takes the stone step under the pointer, as the header's links. */
  #app#app .public-shell:has(.public-copy) .faq-category-nav a:hover {background: var(--pl-muted); color: var(--pl-ink) !important; text-decoration: none;}
}

/* ---- "Who speaks to whom?" (How We Work) ----------------------------------------
   The seated figures from the home page, one button under each person. The chosen
   person's button turns green-tint, a green-tint rug lies under them in the drawing,
   and the panel below says what reaches them. production-guard.js builds it. */
#app#app .public-shell .taste-speaks {margin: 20px 0 0;}
#app#app .public-shell .taste-speaks-figure {position: relative; margin: 0; padding: 0; border: 0; background: none;}
#app#app .public-shell .taste-speaks-figure img {position: relative; z-index: 1; display: block; width: 100%; height: auto; cursor: pointer;}
#app#app .public-shell .taste-speaks-figure::before {
  content: ''; position: absolute; z-index: 0; left: 15.5%; bottom: 17%; width: 30%; height: 18%;
  border-radius: 50%; background: var(--pl-tint); transform: translateX(-50%);
}
#app#app .public-shell .taste-speaks[data-chosen=administrator] .taste-speaks-figure::before {left: 46.5%;}
#app#app .public-shell .taste-speaks[data-chosen=spouse] .taste-speaks-figure::before {left: 81%; width: 37%;}
/* Each button is centred under its person: the columns follow the drawing (31 / 31 / 38%).
   The drawing's sheet is empty below the cushions, so the buttons move up into it. */
#app#app .public-shell .taste-speaks-tabs {display: grid; grid-template-columns: 31fr 31fr 38fr; gap: 8px; margin: -6% 0 0; position: relative; z-index: 2;}
#app#app .public-shell .taste-speaks-tabs [role=tab] {
  justify-self: center; display: inline-flex; flex-direction: column; align-items: center; justify-content: center; gap: 0;
  min-height: 48px; padding: 8px 18px; border: 0; border-radius: 16px; background: var(--pl-muted); color: var(--pl-ink);
  font: 500 17px/1.3 'DM Sans', sans-serif; text-align: center; cursor: pointer;
}
#app#app .public-shell .taste-speaks-tabs [role=tab] small {font-size: 14px; font-weight: 400; line-height: 1.35; color: var(--pl-ink-2);}
#app#app .public-shell .taste-speaks-tabs [role=tab][aria-selected=true] {background: var(--pl-tint); font-weight: 600;}
#app#app .public-shell .taste-speaks-tabs [role=tab][aria-selected=true] small {color: var(--pl-ink);}
#app#app .public-shell .taste-speaks-tabs [role=tab]:focus-visible {outline: 2px solid var(--pl-primary); outline-offset: 2px;}
#app#app .public-shell .taste-speaks-panel {margin: 16px 0 0; padding: 24px; border-radius: 16px; background: var(--pl-muted); color: var(--pl-ink);}
#app#app .public-shell .taste-speaks-panel:focus-visible {outline: 2px solid var(--pl-primary); outline-offset: 2px;}
#app#app .public-shell .public-copy > .card .taste-speaks-panel h3 {margin: 0 0 8px; font-size: 17px; font-weight: 600;}
#app#app .public-shell .taste-speaks-panel ul {margin: 0; padding-left: 20px;}
#app#app .public-shell .taste-speaks-panel li {margin: 4px 0;}
#app#app .public-shell .taste-speaks-panel .taste-speaks-never {margin: 12px 0 0;}
#app#app .public-shell .taste-speaks-card > h2 + p {margin-top: 8px;}
/* Under the pointer a button takes half the chosen tint (#DEE1D6, halfway from the stone
   #DFDCD5 to the green tint), so it never looks chosen. */
@media (hover: hover) {
  #app#app .public-shell .taste-speaks-tabs [role=tab]:not([aria-selected=true]):hover {background: #DEE1D6;}
}
@media (prefers-reduced-motion: no-preference) {
  #app#app .public-shell .taste-speaks-figure::before {transition: left .3s cubic-bezier(.2,.7,.2,1), width .3s cubic-bezier(.2,.7,.2,1);}
  #app#app .public-shell .taste-speaks-tabs [role=tab] {transition: background-color .15s ease;}
}
/* Phones: the three buttons stack, each a full-width row, the note beside the name. */
@media (max-width: 559px) {
  #app#app .public-shell .taste-speaks-tabs {grid-template-columns: minmax(0, 1fr); gap: 4px; margin-top: -4%;}
  #app#app .public-shell .taste-speaks-tabs [role=tab] {justify-self: stretch; flex-direction: row; flex-wrap: wrap; justify-content: flex-start; gap: 0 8px; padding: 10px 16px; text-align: left;}
  #app#app .public-shell .taste-speaks-panel {padding: 20px 16px;}
}

/* ---- Reading pages: "On this page" and the Contact page's address ---------------- */
#app#app .public-shell .taste-toc {margin: 24px 0 0;}
#app#app .public-shell .taste-toc summary {display: inline-flex; align-items: center; gap: 8px; min-height: 44px; list-style: none; font-size: 14px; font-weight: 600; color: var(--pl-ink); cursor: pointer;}
#app#app .public-shell .taste-toc summary::-webkit-details-marker {display: none;}
#app#app .public-shell .taste-toc summary::after {content: '+'; font-size: 17px; font-weight: 400; line-height: 1;}
#app#app .public-shell .taste-toc[open] summary::after {content: '−';}
#app#app .public-shell .taste-toc ul {list-style: none; margin: 0; padding: 0; display: grid; gap: 0;}
#app#app .public-shell .taste-toc li {margin: 0; max-width: none;}
#app#app .public-shell .taste-toc li > a:not(.btn) {display: inline-block; margin: 0 0 0 -12px; padding: 6px 12px; border-radius: 9999px; font-size: 14px; line-height: 1.45; color: var(--pl-ink); text-decoration: none;}
@media (hover: hover) {
  #app#app .public-shell .taste-toc li > a:not(.btn):hover {background: var(--pl-muted); color: var(--pl-ink); text-decoration: none;}
}
/* The part being read, marked as the header marks the current page. */
#app#app .public-shell .taste-toc li > a[aria-current]:not(.btn) {background: var(--pl-tint); color: var(--pl-ink);}
#app#app .public-shell .public-copy > :is(section.card, .taste-steps-intro)[id^=page-section-] {scroll-margin-top: 24px;}

#app#app .public-shell .taste-visit {color: var(--pl-ink);}
#app#app .public-shell .taste-visit h2 {margin: 0 0 8px; font-size: 22px; font-weight: 600; line-height: 1.3; color: var(--pl-ink);}
#app#app .public-shell .taste-visit address {margin: 0 0 8px; font-style: normal; font-size: 17px; line-height: 1.6; color: var(--pl-ink);}
#app#app .public-shell .taste-visit-links {list-style: none; margin: 0; padding: 0;}
#app#app .public-shell .taste-visit-links li {margin: 0;}
#app#app .public-shell .taste-visit-links a {display: inline-flex; align-items: center; min-height: 44px; font-size: 17px;}

/* ---- Page not found: the same frame, title on the page, as the reading pages ---------- */
#app#app .public-shell:not(:has(.public-hero)):not(:has(.public-copy)) {
  max-width: 1328px; padding: 24px 32px 48px;
  main {background: transparent; border-radius: 0;}
  main > .header-frame {position: relative; overflow: visible; background: transparent; border: 0; border-radius: 0; box-shadow: none; padding: 56px 0 28px; margin: 0 0 8px;} /* taste-skill-ignore: removes the effect */
  main > .header-frame::before {inset: -100px -64px -24px; opacity: 1; animation: none; transform: none; z-index: -1;}
  main > .header-frame h1 {color: var(--pl-ink); font-size: clamp(30px, 4.6vw, 66px); line-height: 1.05; letter-spacing: -.04em;}
}
@media (max-width: 767px) {
  #app#app .public-shell:not(:has(.public-hero)):not(:has(.public-copy)) {padding: 16px 16px 32px;}
}
/* The calligraphy behind a page title always starts above the top of the page, so it never
   shows a top edge: "Page not found" sits 112px down, and on tablets and phones a title
   sits up to 182px down (the two-row header, or a drawing beside the title taller than it). */
#app#app .public-shell:not(:has(.public-hero)):not(:has(.public-copy)) main > .header-frame::before {top: -128px;}
@media (max-width: 1023px) {
  #app#app .public-shell:has(.public-copy) .public-copy .header-frame::before,
  #app#app .public-shell:not(:has(.public-hero)):not(:has(.public-copy)) main > .header-frame::before {top: -200px;}
}

/* ---- Forms (Contact) --------------------------------------------------------- */
#app#app .public-shell {
  :is(input, textarea, select),.select-trigger {background: var(--pl-surface); color: var(--pl-ink); border: 1px solid var(--pl-field); border-radius: 12px;}
  :is(input, textarea)::placeholder {color: var(--pl-ink-2);}
  :is(input, textarea, select):focus,.select-trigger[aria-expanded=true] {background: var(--pl-surface); color: var(--pl-ink); border-color: var(--pl-primary);}
  textarea {min-height: 140px;}
  .select-trigger svg {color: var(--pl-ink-2);}
  .select-menu {background: var(--pl-surface); border: 1px solid var(--pl-line); border-radius: 16px; box-shadow: 0 12px 32px -12px rgba(42,29,23,.18);} /* taste-skill-ignore: an open menu floats over the page */
  .select-option {background: var(--pl-surface); color: var(--pl-ink); border-radius: 10px;}
  .select-option:hover,.select-option.highlighted,.select-option:focus {background: var(--pl-muted); color: var(--pl-ink); border-color: transparent;}
  .select-option[aria-selected=true] {color: var(--pl-primary);}
  /* The send button fits its label, as the dashboards' buttons (full width on phones). */
  #public-contact [type=submit] {width: auto; justify-self: start;}
}

/* ---- Footer: light and quiet, on the page ---------------------------------- */
#app#app .public-footer {
  /* overflow: visible, so focus rings on the outermost links are drawn whole. */
  background: transparent; border: 0; border-radius: 0; box-shadow: none; padding: 40px 0 8px; margin-top: 56px; color: var(--pl-ink-2); overflow: visible; /* taste-skill-ignore: removes the effect */
  &::before {display: none;}
  :is(.footer-address, .footer-social-block, .footer-contact-block, .compact-footer-notices) {border-top: 0;}
  .footer-logo {width: 40px; height: 40px;}
  .footer-logo-line strong {color: var(--pl-ink); font-weight: 600;}
  h3 {color: var(--pl-ink); font-weight: 600;}
  /* The page links run as one quiet row, as in the dashboards' footer. Each link has 4px
     of padding on both sides (a 44px target even for "Terms"), so the words are evenly
     spaced; the row's negative margin keeps the first word on the column edge. */
  .footer-link-grid {display: flex; flex-wrap: wrap; gap: 0 16px; margin-inline: -4px;}
  .footer-link-grid a {min-width: 0; padding-inline: 4px; justify-content: center;}
  p,address,.compact-footer-notices p,.taste-credits {color: var(--pl-ink-2);}
  .footer-address h3 {color: var(--pl-ink);}
  /* Footer links in ink, underlined: green is kept for the page's own actions. */
  a:not(.btn):not(.brand-lockup) {color: var(--pl-ink); text-decoration: underline; text-decoration-color: rgba(42,29,23,.3); text-underline-offset: 4px;}
  .social-icons {gap: 8px;}
  .social-icons a:not(.btn) {background: var(--pl-muted); color: var(--pl-ink); border: 0; text-decoration: none;}
  /* "Contact admin" is the same pill as everywhere else, as wide as its label. */
  .footer-contact-buttons {display: flex; flex-wrap: wrap; gap: 12px;}
  .footer-contact-buttons .btn {display: inline-flex; width: auto; min-height: 44px; padding: 10px 20px; font-size: 14px; background: var(--pl-muted); color: var(--pl-ink) !important; border: 0;}
}
/* The Contact page carries the masjid's address, directions and email itself; the footer
   does not offer them a second time there. */
#app#app[data-route=contact] .public-footer :is(.footer-contact-buttons, .footer-address, .footer-contact-block) {display: none;}
/* Reading pages: the footer's second column starts on the content column's edge (1fr / 1.5fr). */
@media (min-width: 1024px) {
  #app#app .public-shell:has(.public-copy) .public-footer.balanced-footer {grid-template-columns: minmax(0, 1fr) minmax(0, 1.5fr); column-gap: clamp(40px, 5vw, 80px);}
}
@media (hover: hover) {
  #app#app .public-footer a:not(.btn):not(.brand-lockup):hover {color: var(--pl-ink); text-decoration-color: currentColor;}
  #app#app .public-footer .social-icons a:hover {background: var(--pl-tint) !important; color: var(--pl-ink) !important;}
  #app#app .public-footer .footer-contact-buttons .btn:hover {background: var(--pl-tint) !important; color: var(--pl-ink) !important;}
}

/* ---- Toast and dialog ------------------------------------------------------- */
html body #toast {background: var(--pl-ink); color: var(--pl-on-primary); border: 0;}
html body dialog {background: var(--pl-surface); color: var(--pl-ink); border: 0;}

/* ---- Phones ------------------------------------------------------------------ */
/* The header takes two rows: the brand with the main button, then the page links as one
   row of text pills. Where the two do not fit beside each other (larger text, extra
   letter spacing), the button wraps onto a row of its own instead of overflowing. */
@media (max-width: 767px) {
  #app#app .public-nav {margin-top: -16px; padding: 12px 0; row-gap: 8px;}
  #app#app .public-nav > .btn {order: 1; padding: 10px 16px;}
  #app#app .public-nav .links {order: 2; flex: 1 1 100%; display: flex; flex-wrap: wrap; justify-content: flex-start; gap: 4px 8px; margin: 0;}
  #app#app .public-nav .links a:not(.btn) {padding: 10px 12px; min-height: 44px; font-size: 14px;}
  /* The two-row header puts the titles 144px down: the calligraphy still starts above the
     top of the page, so it has no top edge. */
  #app#app .public-shell :is(.public-hero, .public-copy .header-frame, main > .header-frame)::before {top: -160px;}
  #app#app .public-shell:has(.public-hero) {
    .public-hero {padding: 32px 0 0;}
    /* Each sentence of the headline (about 11em) still keeps to one line, now across the
       full column: the hero no longer has side padding of its own. */
    .public-hero h1 {font-size: min(44px, calc((100vw - 40px) / 11.2));}
    .public-section.taste-workspace > .card {padding: 24px;}
  }
  #app#app .public-shell:has(.public-copy) {
    .public-copy > .card {padding: 24px 20px; margin-bottom: 16px;}
    .public-copy .header-frame {padding: 4px 0 20px;}
    .expanded-faq .faq-group {padding: 20px 20px 12px; margin-bottom: 16px;}
    .public-copy.expanded-faq .faq-group details {margin-inline: -12px; padding-inline: 12px;}
    .expanded-faq > .card {padding: 24px 20px;}
  }
  #app#app .public-footer {padding: 32px 0 8px; margin-top: 40px;}
}
@media (max-width: 480px) {
  #app#app .public-nav > .btn {font-size: 14px;}
  #app#app .public-shell #public-contact [type=submit] {width: 100%; justify-self: stretch;}
  #app#app .public-shell:has(.public-copy) .public-copy :is(th, td) {padding: 12px 8px;}
  #app#app .public-shell:has(.public-copy) .public-copy tbody th {font-weight: 500;}
}
/* Narrow phones: a slightly smaller brand, so the brand and "Begin your journey" still
   share the first row at 320px; six 44px social icons fit on one row. */
@media (max-width: 379px) {
  #app#app .public-nav .brand-lockup {gap: 10px;}
  #app#app .public-nav .brand-lockup .mark {width: 36px; height: 36px;}
  #app#app .public-nav .brand-name {font-size: 17px;}
  #app#app .public-nav > .btn {padding: 10px 12px;}
  #app#app .public-footer .social-icons {gap: 4px;}
  #app#app .public-footer .social-icons a {width: 44px; min-width: 44px; height: 44px; min-height: 44px;}
}
/* At 320px the policy tables keep whole words: a little more room inside the card. */
@media (max-width: 359px) {
  #app#app .public-shell:has(.public-copy) .public-copy > .card {padding: 24px 16px;}
}

/* ---- Higher contrast ------------------------------------------------------------ */
/* Asked for more contrast: no glows, every text in full ink, and surfaces and dividers
   drawn with a firm edge. !important because the colours above are set at many depths. */
@media (prefers-contrast: more) {
  html body::before {display: none;}
  #app#app .public-shell :is(p, li, small, address, cite, .footnote, .taste-meta, .faq-intro, .step-number, .public-nav .links a:not(.btn)) {color: var(--pl-ink) !important;}
  #app#app .public-shell .expanded-faq summary::before {color: var(--pl-ink) !important;}
  #app#app .public-shell :is(.public-section.taste-benefits, .taste-workspace > .card, .public-copy > .card, .work-steps > .card, .faq-group, .public-copy.expanded-faq .faq-group details[open]) {border: 1px solid var(--pl-field) !important;} /* taste-skill-ignore: a firm edge only when more contrast is asked for */
  #app#app .public-shell :is(.taste-speaks-tabs [role=tab], .faq-category-nav a, .taste-toc summary) {border: 1px solid var(--pl-field) !important;} /* taste-skill-ignore: a firm edge only when more contrast is asked for */
  #app#app .public-shell .taste-speaks-tabs [aria-selected=true] {border: 2px solid var(--pl-ink) !important;}
  #app#app .public-shell:has(.public-hero) .public-nav > .btn {border: 1px solid var(--pl-field) !important;} /* taste-skill-ignore: a firm edge only when more contrast is asked for */
}
/* Forced colours repaint every surface: cards keep an outline, and words stay above the
   drawings' light grounds (production-doodles.css). */
@media (forced-colors: active) {
  html body::before {display: none;}
  #app#app .public-shell :is(.public-section.taste-benefits, .taste-workspace > .card, .public-copy > .card, .work-steps > .card, .faq-group, .public-copy.expanded-faq .faq-group details[open]) {border: 1px solid CanvasText !important;} /* taste-skill-ignore: forced colours drop fills, so surfaces keep an outline */
  #app#app .public-shell :is(.taste-speaks-tabs [role=tab], .faq-category-nav a) {border: 1px solid ButtonText !important;} /* taste-skill-ignore: forced colours drop fills, so buttons keep an outline */
  #app#app .public-shell .taste-speaks-tabs [aria-selected=true] {border: 3px solid Highlight !important;}
  #app#app .public-shell :is(.public-hero h1, .public-hero p, .public-hero .taste-actions, .taste-benefits > .exterior-heading, .taste-benefits > .public-cards, .taste-steps > .exterior-heading, .taste-steps > .public-cards) {position: relative; z-index: 3;}
  #app#app .public-nav > .btn {color: ButtonText !important; background: ButtonFace; border-color: ButtonText;}
}
