/* ===========================================================================
   THE PAGES — הגלריה / חלל עבודה ואירוח / צור קשר

   ROUND 2, after Ilai: "make the pages more clean and simple. No scrolling in
   the PC experience, all in one page. On mobile almost no scrolling. Make the
   UI more simple. If you put a background image behind it, make sure it covers
   the whole screen."

   So each page is ONE SCREEN: the photograph fills the viewport behind
   everything, one even scrim sits over it, and a single centred column of type
   sits on that. No cards, no plates, no panels, no section bands. The only
   boxes left are the buttons, because a button has to look pressable.

   THE PAGE IS NOT PREVENTED FROM SCROLLING, IT IS SIZED NOT TO NEED TO. There
   is no `overflow: hidden` anywhere: type scales with whichever viewport
   dimension is tighter, so a short window shrinks the words instead of hiding
   them, and the one case that legitimately overflows — the 150% accessibility
   text step — scrolls, which is correct. Hiding content to keep a promise about
   scrolling is the blank-page law with extra steps.

   The chrome is still written TWICE, here and in index.html, so that the walk's
   opening bytes are not held up by a second request. Change a bar colour in one
   and it must change in the other.
   =========================================================================== */

:root{
  --ground:#141210;
  --ink:#f3ece3;
  --dim:rgba(243,236,227,.78);
  /* The one accent, the walk's own madder. It appears on the rule under the
     title and on the primary button. Nowhere else. */
  --accent:#ef9068;
  --accent-ink:#14100d;
  /* The only second hue on the site, and it earns its place: the date checker
     has to say free / partly / booked at a glance. Used for nothing else. */
  --ok:#5fc281;
  /* Taken. A third hue, and it earns its place the same way --ok does: a
     visitor reading a day needs "this is gone" to be unmistakable. */
  --busy:#e2564e;
  /* THE OPAQUE TWIN OF --glass OVER --ground (#312e2b, computed, not guessed).
     A <select> whose background is a translucent wash looks right while it is
     closed and becomes unreadable the moment it opens: Windows Chrome paints
     the option list on its own white backdrop, so a 13% white wash composites
     to near-white and bone text disappears into it. Ilai: "the hours are
     almost invisible when I'm scrolling". Anything whose native popup escapes
     the panel must be opaque. */
  --field:#312e2b;
  --bar:#ffffff;
  --bar-ink:#1d1d1f;

  /* THE FIT UNIT, and it is what makes one screen possible.
     min() of the two viewport dimensions: on a desktop the width governs and
     the type grows; on a SHORT window the height governs and everything shrinks
     together rather than running off the bottom; on a phone both are small and
     the clamp floors take over. One variable, and every size below is a
     multiple of it. */
  --fit:min(1vw, 1.85vh);

  /* EVERY GAP BELOW HAS A FLOOR, and it is not decoration. --fit is min(1vw,
     1.85vh), which on a 390px phone is 3.9px, so `calc(1.7 * var(--fit))`
     comes out at 6.6px there against 32px on a desktop. The rhythm did not
     shrink with the screen, it collapsed: Ilai reported the contact page as
     "all the text and the buttons a little bit too close to each other". Each
     margin is now max(a floor, the fit multiple), so a phone gets the floor and
     a desktop still gets the proportion. */

  --display:"Bellefair",Georgia,"Frank Ruhl Libre",serif;
  --sans:"Assistant",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Arial,sans-serif;
  --a11y-scale:1;

  /* ONE BUTTON, EVERYWHERE (2026-09-03). The same four tokens are declared in
     index.html and in store.css; these are three separate documents with three
     separate stylesheets, so the values are duplicated on purpose. Change one,
     change all three. The long note is in index.html's :root. */
  --btn-r:14px;
  --glass:rgba(243,236,227,.13);
  --glass-hi:rgba(243,236,227,.22);
  --glass-on:rgba(243,236,227,.30);
  --glass-edge:rgba(243,236,227,.42);
  --glass-edge-hi:rgba(243,236,227,.60);
  /* what a browser with no backdrop-filter gets instead of a see-through box */
  --glass-solid:rgba(243,236,227,.24);

  color-scheme:dark;
}
@media (max-width: 900px){
  :root{--bar:#000;--bar-ink:#ffffff}
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
html,body{min-height:100%}
body{
  margin:0;background:var(--ground);color:var(--ink);
  font-family:var(--sans);line-height:1.55;
  -webkit-font-smoothing:antialiased;
  /* dvh, not lvh: lvh is the height with the phone's URL bar COLLAPSED, and a
     page sized to it hangs below the fold exactly when nothing is meant to
     scroll. Same reason the walk uses it for its stage. */
  min-height:100vh;min-height:100dvh;
  display:flex;flex-direction:column;
}

.skip{position:absolute;inset-inline-start:-9999px;top:0;z-index:40;
  background:var(--accent);color:var(--accent-ink);padding:12px 18px;
  border-radius:0 0 6px 6px;font-weight:700;text-decoration:none}
.skip:focus{inset-inline-start:12px}
:focus-visible{outline:3px solid var(--accent);outline-offset:3px;border-radius:2px}

/* ---- the background: the whole screen, as asked ---- */
.bg{position:fixed;inset:0;z-index:0;overflow:hidden;background:#0d0b09}
.bg img{width:100%;height:100%;object-fit:cover;display:block}
/* The scrim. It NEVER REACHES ZERO, which is the whole trick: a gradient that
   fades out has an edge somewhere, and every edge on this site so far has been
   a bug. This one bottoms out at 8% and simply stays there past the ellipse, so
   there is nothing to see and nothing to clip.

   MEASURED, on the worst pixel under every line of all three pages. The first
   cut was a 96% x 86% ellipse holding .88 down to .52 at the corners: the text
   sat at 7.08:1 but it veiled 78% of the frame on average, which is not a
   background image, it is a dark rectangle with a photograph rumoured behind
   it. Pulling the ellipse in to 62% x 56% and letting it fall to .08 keeps the
   text at 6.36:1 and takes the average veil to 47%. The words are centred, so
   the corners can be nearly clear at no cost at all. */
.bg::after{content:"";position:absolute;inset:0;
  background:radial-gradient(ellipse 62% 56% at 50% 50%,
    rgba(20,16,13,.86) 0%,rgba(20,16,13,.80) 40%,
    rgba(20,16,13,.42) 70%,rgba(20,16,13,.08) 100%)}

/* ---- the bar ---- */
.pbar{position:relative;z-index:2;flex:0 0 auto;
  display:flex;align-items:center;height:48px;
  background:rgba(255,255,255,.74);color:var(--bar-ink);
  border-bottom:1px solid rgba(0,0,0,.08)}
@supports ((-webkit-backdrop-filter: blur(2px)) or (backdrop-filter: blur(2px))){
  .pbar{background:rgba(255,255,255,.52);
    -webkit-backdrop-filter:saturate(170%) blur(18px);
    backdrop-filter:saturate(170%) blur(18px)}
}
.pmenu{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;
  column-gap:26px;row-gap:3px;max-width:100%;padding:0 24px 0 84px;height:100%;margin:0 auto}
.pmenu a{color:var(--bar-ink);text-decoration:none;white-space:nowrap;
  font-size:calc(14px * var(--a11y-scale));font-weight:600;line-height:1.25;
  letter-spacing:.01em;opacity:.88;transition:opacity .15s ease;
  -webkit-tap-highlight-color:transparent}
.pmenu a:hover{opacity:1}
/* PHYSICAL left/right, and only for these two: the walk pins its mark right and
   its tools left in BOTH languages, and the two headers must look like one. */
.plogo{position:absolute;right:20px;top:50%;transform:translateY(-50%);
  display:block;line-height:0;text-decoration:none}
.plogo img{display:block;height:38px;width:auto}
.ptools{display:flex;align-items:center;gap:10px;direction:ltr;
  position:absolute;left:16px;top:50%;transform:translateY(-50%)}
/* THE BAR CHIPS KEEP THEIR OWN FILL and take only the new corner: a wash of
   BONE is right over a photograph and invisible on a near-white bar, so these
   stay a wash of the BAR's ink. No blur either — the bar behind them is already
   blurred on a desktop and fully opaque on a phone, so there is no backdrop
   left for a second one to soften. Same reasoning as index.html's .lang. */
.plang{appearance:none;-webkit-appearance:none;background:#f5f5f7;border:0;
  border-radius:var(--btn-r);color:var(--bar-ink);
  font:700 calc(13px * var(--a11y-scale))/1 var(--sans);
  letter-spacing:.04em;height:34px;min-width:52px;padding:0 12px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  -webkit-tap-highlight-color:transparent;transition:background .15s ease}
.plang:active{background:#e8e8ed}
.a11y-btn,.wa{appearance:none;-webkit-appearance:none;border:0;background:#f2f2f4;
  color:var(--bar-ink);width:44px;height:34px;border-radius:var(--btn-r);padding:0;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  -webkit-tap-highlight-color:transparent;transition:background .15s ease}
.a11y-btn:active,.wa:active{background:#e6e6ea}
/* WhatsApp. A FILLED mark next to two stroked ones, so it carries its own size
   to sit at the same optical weight. */
.wa{text-decoration:none}
.wa svg{width:20px;height:20px;fill:currentColor}
.a11y-btn svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}
.a11y-btn svg circle{fill:currentColor;stroke:none}

/* ---- the one screen of content ---- */
main{position:relative;z-index:1;flex:1 1 auto;min-height:0;
  display:flex;align-items:center;justify-content:center;
  padding:calc(2.4 * var(--fit)) clamp(20px, 5vw, 40px) calc(4.4 * var(--fit))}
.col{width:100%;max-width:min(70ch, 92vw);text-align:center;
  text-shadow:0 1px 3px rgba(20,16,13,.75)}

h1{margin:0;font-family:var(--display);font-weight:400;line-height:1.04;
  font-size:calc(clamp(30px, 3.3 * var(--fit), 58px) * var(--a11y-scale))}
/* the walk's signature rule, and the only ornament on the page */
h1::after{content:"";display:block;width:calc(9 * var(--fit));min-width:96px;
  height:1px;background:var(--accent);margin:max(14px, calc(1.5 * var(--fit))) auto 0}

.lede{margin:max(17px, calc(1.7 * var(--fit))) 0 0;color:var(--ink);
  font-size:calc(clamp(16px, 1.08 * var(--fit), 21px) * var(--a11y-scale));
  line-height:1.5}
.body{margin:max(14px, calc(1.3 * var(--fit))) 0 0;color:var(--dim);
  font-size:calc(clamp(14.5px, .92 * var(--fit), 18px) * var(--a11y-scale));
  line-height:1.6}

/* the six facts: two columns where there is room, one where there is not.
   No rules, no bullets, no boxes, just a madder tick and the words. */
.facts{list-style:none;margin:max(20px, calc(2 * var(--fit))) 0 0;padding:0;
  display:grid;gap:max(11px, calc(.9 * var(--fit))) calc(2.4 * var(--fit));
  grid-template-columns:1fr 1fr;text-align:start;
  font-size:calc(clamp(14px, .88 * var(--fit), 17px) * var(--a11y-scale));
  color:var(--dim);line-height:1.45}
.facts li{position:relative;padding-inline-start:calc(1.3 * var(--fit) + 10px)}
.facts li::before{content:"";position:absolute;inset-inline-start:0;top:.72em;
  width:calc(.9 * var(--fit) + 6px);height:1px;background:var(--accent)}

/* ---- contact ---- */
.lines{margin:max(20px, calc(1.7 * var(--fit))) 0 0;color:var(--dim);
  font-size:calc(clamp(15px, 1 * var(--fit), 19px) * var(--a11y-scale));
  line-height:1.9}
/* WHICH MAP APP OPENS. Waze is an app you have installed on the thing in your
   hand; on a desktop its deep link lands on a page asking you to get the app,
   and Google Maps is the other way round. Both links are in the markup and this
   picks one. Split on the pointer, not the width: it is a question about what
   the device can do, not about how much room it has, so an iPad gets Waze even
   though it takes the desktop layout everywhere else. Say the word if you would
   rather the iPad had Google Maps too.
   Each selector is DOUBLED on purpose. `.btn{display:inline-flex}` is a plain
   rule further down this file, and a media query adds no specificity, so at a
   single class the later `.btn` quietly won and BOTH buttons showed on BOTH
   devices. Doubling makes these (0,2,0) and takes the answer away from source
   order, which is the only version of this rule that survives the next edit. */
.on-touch.on-touch{display:none}
@media (pointer: coarse){
  .on-mouse.on-mouse{display:none}
  .on-touch.on-touch{display:inline}
  .btn.on-touch.on-touch{display:inline-flex}
}

/* the hours are information, not a link: no underline, and a shade back so the
   three things you can ACT on stay the brightest text in the block */
.lines .hours{color:rgba(243,236,227,.66);
  font-size:calc(clamp(14px, .92 * var(--fit), 17px) * var(--a11y-scale))}
.lines a{color:var(--ink);text-decoration:underline;
  text-decoration-color:var(--accent);text-decoration-thickness:1px;
  text-underline-offset:4px}
.lines a:hover{color:var(--accent)}

.actions{display:flex;flex-wrap:wrap;justify-content:center;
  gap:max(12px, calc(.8 * var(--fit) + 6px));margin:max(24px, calc(2.1 * var(--fit))) 0 0}
/* ---- THE BUTTON. There is only one. --------------------------------------

   THE HISTORY, because this rule has been rewritten four times and each round
   overturned the one before it:

     r1  a flat madder block. "I don't like this color, reshape it, make it
         look more professional."
     r2  four candidates shown on the real page; he picked a solid near-black
         block with an off-white label and one terracotta hairline.
     r3  that block went on EVERY button. "I like the transparent buttons that
         you used before, return them, and only where the buttons were orange
         replace them with the black with the orange outline." Two ranks: the
         wash for the second, the block for the first.
     r4  2026-09-03. "Change all the buttons on the website so they will look
         like the transparent button that we have already in some of the
         places, just make this button a little bit more rounded, and add a
         little blur to it so it won't be completely transparent."

   So the near-black block is gone from the whole site, .btn-main and .btn-alt
   are the same button, and the two class names survive only so the markup and
   the generator did not have to be rewritten to say it.

   THE BLUR IS THE POINT OF THE ROUND, not a finish on it. A 13% wash over a
   photograph is see-through, and a see-through button reads as an outline
   round nothing — which is the objection that produced the solid fill two
   rounds ago. Blurring the backdrop makes the same 13% read as frosted glass:
   still the picture, no longer a hole. Where the browser cannot do it the wash
   is raised to 24% instead, because a slightly heavy surface beats no surface.

   CONTRAST IS UNCHANGED FROM r3's SECOND RANK, which is why this is safe to
   apply to the primary: identical fill, identical hairline, and both were
   measured on these photographs. Bone on the wash over the page scrim is
   11.9:1 and the hairline carries WCAG 1.4.11's 3:1 for the boundary. */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;
  min-height:54px;padding:0 calc(1.7 * var(--fit) + 20px);border-radius:var(--btn-r);border:0;
  font:700 calc(clamp(15px, .88 * var(--fit), 17px) * var(--a11y-scale))/1 var(--sans);
  letter-spacing:.03em;
  text-decoration:none;cursor:pointer;text-shadow:none;
  background:var(--glass);color:var(--ink);
  box-shadow:inset 0 0 0 1px var(--glass-edge);
  -webkit-backdrop-filter:blur(12px) saturate(130%);
  backdrop-filter:blur(12px) saturate(130%);
  -webkit-tap-highlight-color:transparent;
  transition:background .18s ease,box-shadow .18s ease}
.btn:hover{background:var(--glass-hi);box-shadow:inset 0 0 0 1px var(--glass-edge-hi)}
.btn:active{background:var(--glass-on)}
.btn svg{width:19px;height:19px;flex:0 0 auto}
/* .btn-main and .btn-alt are the SAME button now. The rules are kept as empty
   aliases rather than deleted so that a page still carrying either class is
   not left unstyled, and so the generator's markup needed no edit. */
.btn-main,.btn-alt{background:var(--glass);color:var(--ink);
  box-shadow:inset 0 0 0 1px var(--glass-edge)}
.btn-main:hover,.btn-alt:hover{background:var(--glass-hi);
  box-shadow:inset 0 0 0 1px var(--glass-edge-hi)}
.btn-main:active,.btn-alt:active{background:var(--glass-on)}

/* the socials are marks, not labels: three circles, no words */
.social{display:flex;justify-content:center;gap:max(14px, calc(.7 * var(--fit) + 8px));
  margin:max(22px, calc(1.5 * var(--fit))) 0 0;padding:0;list-style:none}
.social a{display:flex;align-items:center;justify-content:center;
  width:48px;height:48px;border-radius:50%;color:var(--ink);
  background:var(--glass);box-shadow:inset 0 0 0 1px var(--glass-edge);
  -webkit-backdrop-filter:blur(12px) saturate(130%);
  backdrop-filter:blur(12px) saturate(130%);
  transition:background .18s ease}
.social a:hover{background:var(--glass-hi)}
.social svg{width:21px;height:21px;flex:0 0 auto}

/* One @supports for every glass surface on this page. A browser with no
   backdrop-filter gets a heavier wash instead of a transparent button. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){
  .btn,.btn-main,.btn-alt,.social a{background:var(--glass-solid)}
}

/* /space's line of event pages (2026-09-22, scripts/events.py): the same
   quiet line, a little closer to the button it follows */
.space-events{margin-top:max(16px, calc(1.4 * var(--fit)))}

/* the other sites: one quiet line, not three plates */
.sisters{display:flex;flex-wrap:wrap;justify-content:center;
  gap:max(9px, calc(.6 * var(--fit))) max(20px, calc(1.4 * var(--fit) + 10px));
  margin:max(24px, calc(2 * var(--fit))) 0 0;padding:0;list-style:none;
  font-size:calc(clamp(12.5px, .78 * var(--fit), 15px) * var(--a11y-scale));
  letter-spacing:.08em}
.sisters a{color:var(--dim);text-decoration:none;
  border-bottom:1px solid rgba(239,144,104,.5);padding-bottom:3px}
.sisters a:hover{color:var(--accent);border-bottom-color:var(--accent)}
/* Ilai 2026-09-19: "more bold and a little bit bigger" — 700 and ~2px up,
   full ink instead of --dim so the weight reads. */
.sisters{font-size:calc(clamp(15px, .95 * var(--fit), 18px) * var(--a11y-scale))}
.sisters a{font-weight:700;color:var(--ink)}
/* the rule under them: was 1px at 50% accent and "almost impossible to see
   on mobile" (Ilai 2026-09-19). 2px, full accent, a little more air. */
.sisters a{border-bottom:2px solid var(--accent);padding-bottom:4px}

/* THE DARK GLASS, on /gallery and /space only. Ilai 2026-09-19: the buttons
   there sit on the busiest photographs and the 13% bone wash was hard to
   read, "more dark background blur so it will be easier to see". Same shape,
   same hairline, same label; the fill goes dark and the blur goes up. Two
   classes, so it beats .btn-main/.btn-alt regardless of order. */
.actions-dark .btn{background:rgba(20,16,13,.52);
  -webkit-backdrop-filter:blur(18px) saturate(120%);
  backdrop-filter:blur(18px) saturate(120%)}
.actions-dark .btn:hover{background:rgba(20,16,13,.66);
  box-shadow:inset 0 0 0 1px var(--glass-edge-hi)}
.actions-dark .btn:active{background:rgba(20,16,13,.76)}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){
  .actions-dark .btn{background:rgba(20,16,13,.72)}
}

/* the 2+2 break in the /gallery row: nothing on a desktop (one row of four),
   a forced new line on a phone so «רוני בערוץ 13» sits beside «סיור VR». */
.row-break{display:none}

/* ---- the copyright, exactly where the walk keeps it ---- */
.copy{position:fixed;inset-inline-start:14px;bottom:12px;z-index:2;margin:0;
  font-size:calc(11px * var(--a11y-scale));line-height:1.4;
  color:rgba(243,236,227,.72);text-shadow:0 1px 2px rgba(20,16,13,.8);
  pointer-events:none}

/* The line carries Roni's other three sites (2026-09-22, the SEO pass): the
   same quiet type, links only by their names. The line itself stays
   click-through; only the names catch the pointer. */
.copy a{pointer-events:auto;color:inherit;text-decoration:none}
.copy a:hover,.copy a:focus-visible{text-decoration:underline;text-underline-offset:2px}


/* ---- WHICH TAB YOU ARE ON, on a pointer device ----
   The phone has shown this all along with a filled chip; the desktop bar had
   nothing, and Ilai could not tell which section he was in. Weight alone is too
   quiet at 14px, so the current item gets full ink, weight 800 and a rule under
   it.

   THE RULE IS #b3491d, NOT THE ACCENT. --accent is #ef9068, which is tuned for
   a dark photograph and measures 2.17:1 against this near-white bar: invisible
   exactly where it would be doing the work. The same colour family taken darker
   measures 4.95:1, clear of the 3:1 a graphic needs and of the 4.5:1 it would
   need if it were text. One accent, two values, one for each ground. */
@media (min-width: 901px){
  /* ONE ROW IN BOTH LANGUAGES. The English labels run about 9% wider than the
     Hebrew ones, and at 1920 that was the difference between fitting and not:
     the row needed 575px inside .col's 551, so Email dropped to a second line
     while Hebrew stayed on one. At 1440 it fit by 6px, which is not a fit.
     .col is capped at 70ch because that is a comfortable measure for READING,
     and a row of three buttons is not a paragraph. So the row steps out of the
     measure and centres itself on the page instead. 50% resolves against .col,
     which main centres, so the two sides stay symmetrical; 46vw caps it well
     inside the viewport at every width down to 901. */
  /* 1040, not 760, since /gallery carries FOUR buttons (the Channel 13 film
     and the VR tour, 2026-09-19): in a row at 1920 they measure 875px in
     Hebrew and 1001px in English, gaps included. The other pages' rows are centred, so the wider cage does not
     move them. */
  .actions{width:min(1040px, 92vw);
    margin-inline:calc(50% - min(520px, 46vw))}
  .pmenu a[aria-current]{position:relative;opacity:1;font-weight:800;
    color:var(--bar-ink)}
  .pmenu a[aria-current]::after{content:"";position:absolute;
    inset-inline:0;bottom:-8px;height:2px;border-radius:1px;background:#b3491d}
}
html[data-a11y-contrast][data-a11y-contrast] .pmenu a[aria-current]::after{background:#000}


/* ---- THE DATE CHECKER, «לבדוק תאריך» on /space ---------------------------
   A dialog over the page rather than a fourth page: the button finally does
   what it says, and the one-screen budget is untouched because a dialog is not
   the page.

   IT IS DARK, and that is the whole reason it does not need a token block of
   its own. The seven button tokens are already declared three times in this
   project (index.html, here, store.css) and the README's rule is "change one,
   change all three"; a white panel would have made it four. On --ground the
   panel inherits the values above unchanged and matches the photograph page it
   sits over.

   NO ANIMATION ANYWHERE IN HERE, deliberately. `html[data-a11y-motion] *`
   cancels animations, so anything whose visible state lives only in a keyframe
   is stranded invisible for exactly the visitors who need it most. This panel
   simply appears.

   The panel ground is opaque, so the glass tokens act as flat tints and no
   backdrop-filter is used on anything inside it -- which is also why this
   block needs no @supports partner. The one exception is .btn, which brings
   its own from the rule above and its own fallback with it. */
.dates-scrim{position:fixed;inset:0;z-index:20;background:rgba(0,0,0,.58)}
.dates-panel{position:fixed;z-index:21;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(94vw,560px);max-height:86vh;overflow:auto;
  background:var(--ground);color:var(--ink);
  border-radius:18px;padding:20px;
  box-shadow:0 24px 60px rgba(0,0,0,.6),inset 0 0 0 1px var(--glass-edge);
  font-family:var(--sans);font-size:calc(15px * var(--a11y-scale));
  direction:rtl;text-align:right;text-shadow:none;
  -webkit-overflow-scrolling:touch}
.dates-panel :focus-visible{outline:3px solid var(--accent);outline-offset:2px}

/* ---- the Channel 13 film on /gallery: the same shell, a wider frame ----
   TWO classes on purpose, so the phone block's `.dates-panel{width:...}` at the
   bottom of this file cannot narrow it back to the calendar's 560px. The width
   is the smaller of the screen and what a 16:9 frame can have while the
   heading and the note still fit in 90% of the height. */
.dates-panel.tv-panel{width:min(94vw,1040px,calc((90vh - 120px) * 16 / 9 + 40px));
  max-height:94vh;padding:16px 20px 18px}
.tv-film{display:block;width:100%;aspect-ratio:16/9;height:auto;
  border-radius:10px;background:#000}
.tv-note{margin:10px 0 0;color:var(--dim);font-size:.9em}

/* BACK at the start edge, CLOSE at the end edge, the title between them.
   These use the panel's own direction rather than being pinned physically
   (the month arrows are the opposite case, and the note there says why): a
   back affordance is directional, so in Hebrew it belongs on the right and
   points right, and in English on the left pointing left. The SVG is drawn
   pointing left and flipped under rtl.
   The back button REPLACED a small text link. Ilai: "too small and not
   visible enough for the users to understand ... make a big back button, only
   the sign". It is the same 44px target as the close. */
.dates-head{display:flex;align-items:center;gap:10px;margin:0 0 16px}
.dates-head h2{flex:1 1 auto;margin:0;font-family:var(--display);font-weight:400;
  font-size:1.5em;letter-spacing:.01em}
.dates-close,.dates-nav-back{appearance:none;-webkit-appearance:none;border:0;cursor:pointer;
  flex:0 0 auto;width:44px;height:44px;border-radius:var(--btn-r);
  display:flex;align-items:center;justify-content:center;
  background:var(--glass);color:var(--ink);box-shadow:inset 0 0 0 1px var(--glass-edge);
  transition:background .18s ease}
.dates-close:hover,.dates-nav-back:hover{background:var(--glass-hi)}
.dates-close svg,.dates-nav-back svg{width:16px;height:16px;fill:none;stroke:currentColor;
  stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.dates-nav-back svg{width:20px;height:20px}
.dates-panel[dir="rtl"] .dates-nav-back svg{transform:scaleX(-1)}

/* ---- the month ---- */
.dates-nav{display:flex;align-items:center;gap:8px;margin:0 0 12px;direction:ltr}
.dates-month{flex:1 1 auto;margin:0;text-align:center;direction:rtl;
  font-family:var(--sans);font-size:1.05em;font-weight:700}
.dates-panel[dir="ltr"] .dates-month{direction:ltr}
.dates-month:focus{outline:none}
/* BACK ON THE LEFT, FORWARD ON THE RIGHT, IN BOTH LANGUAGES -- the walk's own
   law, from its swipe handling: which sideways is forward comes from the
   ARROWS and their physical order, not from the direction of the text, so a
   month grid pages like a photo carousel.

   direction:ltr on the row is what enforces it. Left to itself the flex row
   inherited rtl and put «חודש קודם» on the RIGHT while its glyph still pointed
   left -- a left-pointing chevron on the right-hand side, which is the worst
   of both. The heading takes its direction back, because the month NAME is
   Hebrew and belongs in an rtl run. */
.dates-arrow{appearance:none;-webkit-appearance:none;border:0;cursor:pointer;
  flex:0 0 auto;width:44px;height:44px;border-radius:var(--btn-r);
  background:var(--glass);color:var(--ink);box-shadow:inset 0 0 0 1px var(--glass-edge);
  font:400 22px/1 var(--sans)}
.dates-arrow[disabled]{opacity:.32;cursor:default}

.dates-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.dates-wd{display:flex;align-items:center;justify-content:center;height:26px;
  font-size:.8em;font-weight:600;color:var(--dim)}
.dates-day{position:relative;appearance:none;-webkit-appearance:none;border:0;
  cursor:pointer;min-height:46px;border-radius:10px;
  display:flex;align-items:center;justify-content:center;
  background:var(--glass);color:var(--ink);
  box-shadow:inset 0 0 0 1px var(--glass-edge);
  font:600 calc(14px * var(--a11y-scale))/1 var(--sans)}
.dates-day.is-part{background:var(--glass-on)}
.dates-day.is-full{background:none;opacity:.6;cursor:default}
.dates-day.is-out{background:none;box-shadow:none;opacity:.22;cursor:default}
/* THE STATE IS NOT CARRIED BY COLOUR ALONE (IS 5568, WCAG 1.4.1), and this is
   why the three marks are three SHAPES and not three colours:

     free    a filled green disc
     part    a HALF-filled disc — literally half booked
     booked  a bar, plus the number struck through

   Ilai asked for the green dot on free days, which previously had no mark at
   all. That alone would have left free and partly-booked as two filled dots
   differing only in hue, which is the one thing 1.4.1 forbids — hence the
   half disc. Every cell's aria-label still says the state in words. */
.dates-day .dates-mark{position:absolute;left:50%;bottom:5px;
  transform:translateX(-50%)}
.dates-mark{display:block;width:8px;height:8px;border-radius:50%;
  background:var(--accent)}
.is-free .dates-mark{background:var(--ok)}
.is-part .dates-mark{background:linear-gradient(90deg,var(--accent) 0 50%,transparent 50%);
  box-shadow:inset 0 0 0 1px var(--accent)}
.is-full .dates-mark{width:17px;height:2px;border-radius:1px;background:var(--ink)}
.is-full .dates-num{text-decoration:line-through}
.dates-legend{display:flex;flex-wrap:wrap;gap:6px 18px;margin:14px 0 0;padding:0;
  list-style:none;font-size:.82em;color:var(--dim)}
.dates-legend li{display:flex;align-items:center;gap:7px}
.dates-legend .dates-mark{flex:0 0 auto}

/* ---- the chosen day ---- */
.dates-daytitle{margin:0 0 10px;font-family:var(--sans);
  font-size:1.05em;font-weight:700}
/* WHAT IS ALREADY TAKEN THAT DAY. This was one dim 13px sentence and Ilai
   said it was too small to register — "it should be a red logo on the hours
   ... make this text larger". So it is a row per booking now: a red dot, the
   hours at the panel's body size in bold tabular figures, and the event's own
   name beside them. It sits on a faint wash of the same red with a hairline,
   so the block reads as a warning strip rather than as a caption. */
.dates-taken{list-style:none;margin:0 0 16px;padding:0;display:grid;gap:8px}
.dates-taken li{display:flex;align-items:center;gap:10px;
  min-height:46px;padding:9px 13px;border-radius:var(--btn-r);
  background:rgba(226,86,78,.13);
  /* .46 measured 1.96:1 against the panel, under 1.4.11's 3:1 for a
     boundary; .75 is 3.32:1 and also makes the strip read as the warning
     it is. The dot carries the meaning on its own at 4.40:1, so this is
     belt and braces rather than the only cue. */
  box-shadow:inset 0 0 0 1px rgba(226,86,78,.75);
  font-size:calc(15.5px * var(--a11y-scale));line-height:1.35}
.dates-busydot{flex:0 0 auto;width:11px;height:11px;border-radius:50%;
  background:var(--busy)}
.dates-taken .dates-span{font-weight:700;letter-spacing:.02em}
.dates-busyname{color:var(--ink);opacity:.92}
/* A TIME RANGE IS LTR INSIDE AN RTL LINE. The dash between two numbers is a
   neutral character, so it takes the paragraph direction and "09:00-13:00"
   renders as "13:00-09:00". Same bug the contact page's opening hours solve
   with U+2066 isolates; here the element is ours, so it can be done in CSS. */
.dates-span{direction:ltr;unicode-bidi:isolate;font-variant-numeric:tabular-nums}

/* ---- the request ---- */
.dates-when{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.dates-field{display:block;margin:0 0 12px}
.dates-field > span{display:block;margin:0 0 6px;font-size:.86em;color:var(--dim)}
.dates-field input,.dates-field select,.dates-field textarea{
  width:100%;min-height:48px;padding:11px 13px;border:0;border-radius:var(--btn-r);
  background:var(--glass);color:var(--ink);
  box-shadow:inset 0 0 0 1px var(--glass-edge);
  font:inherit;font-size:calc(15px * var(--a11y-scale))}
/* The time pickers are the one control a visitor reads NUMBERS off, so they
   get an opaque ground that survives the native popup, a size up, weight, and
   tabular figures so the columns line up while scrolling the list. */
.dates-field select{background-color:var(--field);
  font-size:calc(16.5px * var(--a11y-scale));font-weight:700;
  font-variant-numeric:tabular-nums;letter-spacing:.02em}
.dates-field select option{background-color:var(--field);color:var(--ink);
  font-size:calc(16.5px * var(--a11y-scale));font-weight:700}
.dates-field textarea{min-height:78px;line-height:1.45;resize:vertical}
/* appearance:none costs the native arrow, so one is drawn back on. Without it
   a select on a dark ground is indistinguishable from a text field. */
.dates-field select{appearance:none;-webkit-appearance:none;padding-inline-end:34px;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5l5-5' fill='none' stroke='%23f3ece3' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-size:12px 8px;
  background-position:left 13px center}
.dates-panel[dir="ltr"] .dates-field select{background-position:right 13px center}
.dates-min{margin:2px 0 14px}
.dates-submit{width:100%;margin:4px 0 0}
.dates-note{margin:14px 0 0;font-size:.88em;line-height:1.5;color:var(--dim)}
.dates-privacy a{color:inherit;text-underline-offset:3px}
.dates-status:empty{display:none}
.dates-sent{margin:0 0 16px;font-size:1.02em;line-height:1.5;color:var(--ink)}
.dates-fallback{display:flex;flex-wrap:wrap;gap:10px;margin:16px 0 0}
/* Hidden from people but not from bots, which is why it is not display:none.
   It was `left:-9999px` for one round and that is a REAL BUG on a scrolling
   dialog: an absolutely positioned child 9999px to the side is scrollable
   overflow, and .dates-panel grew a horizontal scrollbar and 10544px of
   scrollWidth against a 545px client. The clip technique takes it out of view
   without taking it out of the scroll box -- measured back to 560/560. */
.dates-pot{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;
  overflow:hidden;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%)}

/* ------------------------------------------------------------ the phone ----
   LAST among the plain rules, on purpose: a media query adds no specificity, so
   anything below it wins. The walk's stylesheet carries the same warning. */
@media (max-width: 900px){
  .pbar{height:auto;flex-direction:column;padding:0 0 14px;
    padding-top:env(safe-area-inset-top);background:var(--bar);
    -webkit-backdrop-filter:none;backdrop-filter:none;border-bottom:0;
    box-shadow:0 1px 0 rgba(255,255,255,.18),0 7px 20px rgba(0,0,0,.5)}
  /* IDENTICAL TO THE WALK'S, and every number here is copied from it rather
     than chosen. It used to be tighter, on the reasoning that a page has no
     film to widen so the pixels belong to the words. That was wrong from the
     visitor's side: the menu is the one thing on screen in both places, and it
     changed height, chip size and type size as you moved between בית and
     הגלריה. Ilai asked for one bar, at the walk's size. Costs the pages 28px
     of content, which the short-screen block below gives back. */
  .ptoprow{display:flex;align-items:center;justify-content:space-between;
    direction:ltr;width:100%;padding:12px 16px 14px;gap:12px;order:-1}
  .ptools{position:static;transform:none}
  .plang{height:40px;min-width:58px;border-radius:var(--btn-r);background:rgba(255,255,255,.13)}
  .plang:active{background:rgba(255,255,255,.26)}
  .a11y-btn,.wa{height:40px;background:rgba(255,255,255,.13)}
  .a11y-btn:active,.wa:active{background:rgba(255,255,255,.26)}
  .plogo{position:static;transform:none;flex:0 1 auto;min-width:0}
  .plogo img{height:46px;max-width:100%;object-fit:contain;filter:invert(1)}
  .pmenu{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;
    width:100%;padding:0 16px;height:auto;align-content:center}
  .pmenu a{min-height:48px;display:flex;align-items:center;justify-content:center;
    text-align:center;padding:6px 8px;border-radius:var(--btn-r);
    background:rgba(255,255,255,.10);line-height:1.2;letter-spacing:0;opacity:1;
    white-space:normal;font-size:calc(14px * var(--a11y-scale));
    transition:background .15s ease}
  .pmenu a[aria-current]{background:rgba(255,255,255,.26);color:var(--bar-ink);
    font-weight:700;box-shadow:inset 0 0 0 1px rgba(255,255,255,.30)}
  .pmenu a:active{background:rgba(255,255,255,.22)}

  /* THE PHONE SCRIM IS A BAND, NOT A POOL, and that is not a style choice.
     On a phone the words run nearly the full width, so they sit outside the
     deep core of the desktop ellipse: measured there, the three pages came out
     at 1.85, 1.93 and 2.11 to 1. Unreadable, and it looked fine to the eye.

     Widening the ellipse fixes the contrast and dims 76-81% of the screen,
     which is the one thing Ilai asked not to happen. Matching the scrim to the
     SHAPE of the text instead — very wide, short, a dark band through the
     middle — gives 7.56:1 with 57% dimmed, so the top and the bottom of the
     photograph stay clear. */
  .bg::after{background:radial-gradient(ellipse 200% 40% at 50% 50%,
    rgba(20,16,13,.88) 0%,rgba(20,16,13,.86) 56%,
    rgba(20,16,13,.46) 86%,rgba(20,16,13,.04) 100%)}

  /* 26px of side margin, not 16. The column ran close to both edges, which is
     the other half of "too close to each other". */
  main{padding:22px 26px 34px}
  /* the three contact lines get more air between them too */
  .lines{line-height:2.05}
  /* one column: two 17px columns in 330px is four words a line */
  .facts{grid-template-columns:1fr;gap:12px}
  /* 8, not 12 — see the note on .actions .btn further down. */
  .actions{gap:8px}
  /* IN A ROW, NOT STACKED, and it is the difference between one screen and not.
     Two full-width buttons are 114px of a 503px content area on a 375x667
     phone, which is what pushed the gallery page 32px past the fold. Side by
     side they are 52. They still wrap on their own if a label is too long, and
     they are still 52px tall, well over the 44px touch minimum.

     ONE ROW IN BOTH LANGUAGES is what the trimmed padding, icon and icon gap
     are for. Here the cage is the screen itself, not .col's reading measure as
     it is on the desktop. The English labels run 71/46/39px against Hebrew's
     29/55/27, and those ~50px pushed Email onto a second line at 390 and below
     while Hebrew sat comfortably on one. The room had to come from somewhere,
     and it is deliberately NOT main's side padding, which Ilai asked to be more
     generous, not less; it comes out of the buttons.
     Measured after the trim, English clears the row by 43px at 390, 38 at 375,
     23 at 360x640 and 13 at 360x800 (the tightest, because a taller 360 screen
     misses the short-phone block below and keeps the wider side padding).
     flex-wrap stays ON underneath as the fallback: at 320, or at 150% text, the
     row breaks into two tidy lines rather than running off the screen. */
  .actions .btn{flex:0 1 auto;padding:0 9px;gap:6px}
  /* The break is a line of its own, so it would add a SECOND row gap. The
     row gap goes to 0 in a row that has one, and the break's own height IS
     the gap. (A browser without :has() just shows 8px more air.) */
  .row-break{display:block;flex-basis:100%;height:8px}
  .actions:has(.row-break){row-gap:0}
  .actions .btn svg{width:17px;height:17px}
  .copy{font-size:calc(10px * var(--a11y-scale));inset-inline-start:10px;bottom:8px}

  /* the date checker: more of the screen, and a tighter grid. At 320px the
     seven columns are the binding constraint, so the padding comes off the
     panel rather than off the cells. */
  .dates-panel{width:min(96vw,560px);max-height:88vh;padding:15px;border-radius:16px}
  .dates-grid{gap:3px}
  .dates-day{min-height:44px;border-radius:9px}
  .dates-head h2{font-size:1.35em}
}

/* ---- A SHORT PHONE, and only a short one ----
   The extra air Ilai asked for on the contact page is the right amount there
   and everywhere down to a 390x844 screen. On a 360x640 and a 375x667 it puts
   the two DENSER pages 29 to 65px past the fold, and one screen was the other
   thing he asked for. So the floors come back a little here, and only here.
   Contact keeps the full spacing at every size, because it is the page the note
   was about. Measured: 0px of overflow on all three pages at both sizes. */
@media (max-width: 900px) and (max-height: 700px){
  /* These numbers moved again when the menu bar was brought up to the walk's
     size: 28px more chrome is 28px the words do not get, and on a 360x640
     screen the two dense pages went 22 and 25px past the fold. Trimmed here
     rather than by shrinking the bar back, because one bar in both places is
     what was asked for and this block only fires below 700px of height. */
  main{padding:10px 20px 18px}
  /* the contact block gained two lines when the opening hours arrived, and on a
     360x640 screen that was 13px past the fold. Taken out of the leading rather
     than out of the hours, which are five words that have to stay five words. */
  .lines{line-height:1.78}
  h1{font-size:calc(clamp(25px, 3.3 * var(--fit), 58px) * var(--a11y-scale))}
  .lede{font-size:calc(clamp(14.5px, 1.08 * var(--fit), 21px) * var(--a11y-scale))}
  .body{font-size:calc(clamp(13.5px, .92 * var(--fit), 18px) * var(--a11y-scale))}
  h1::after{margin-top:9px}
  .lede{margin-top:10px}
  .body{margin-top:8px}
  .facts{margin-top:12px;gap:7px}
  .actions{margin-top:13px;gap:9px}
  .row-break{height:9px}
  .social{margin-top:13px}
  .sisters{margin-top:13px}
  /* no room for it here: those pages are reached from Google, from each
     other and from the footer of every event page instead */
  .space-events{display:none}
}

/* ---------------- accessibility ----------------
   The same contract as the walk and as bbalance: storage key "startup-a11y",
   the same six settings, the same data-a11y-* attributes on <html>. Required
   under Israeli standard IS 5568, so these rules outrank any paint job and the
   attribute is doubled wherever a tie with a base rule is possible.

   At the 125% and 150% text steps a page may become taller than the screen and
   scroll. That is the correct trade and not a bug: the promise about scrolling
   is a design goal, the text size is a legal requirement. */
html[data-a11y-font="1"]{--a11y-scale:1.125}
html[data-a11y-font="2"]{--a11y-scale:1.25}
html[data-a11y-font="3"]{--a11y-scale:1.5}

html[data-a11y-contrast][data-a11y-contrast]{
  --ground:#000;--ink:#fff;--dim:#fff;--accent:#fff;--accent-ink:#000;
  --bar:#fff;--bar-ink:#000}
html[data-a11y-contrast][data-a11y-contrast] .bg img{display:none}
html[data-a11y-contrast][data-a11y-contrast] .bg::after{background:#000}
html[data-a11y-contrast][data-a11y-contrast] .col{text-shadow:none}
html[data-a11y-contrast][data-a11y-contrast] .pbar{background:#fff;
  -webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:0 2px 0 #000}
html[data-a11y-contrast][data-a11y-contrast] .pmenu a,
html[data-a11y-contrast][data-a11y-contrast] .plang,
html[data-a11y-contrast][data-a11y-contrast] .wa,
html[data-a11y-contrast][data-a11y-contrast] .a11y-btn{
  background:#fff;color:#000;border:2px solid #000}
html[data-a11y-contrast][data-a11y-contrast] .pmenu a[aria-current]{
  background:#000;color:#fff;box-shadow:none}
html[data-a11y-contrast][data-a11y-contrast] .plogo img{filter:none}
/* ONE BUTTON, so one rule. box-shadow:none because the hairline is an inset
   shadow and this mode is solid ink on a solid ground; backdrop-filter:none
   because a frosted surface is exactly what high contrast exists to refuse.
   The pages' ground here is #000, so the button inverts to white on black. */
html[data-a11y-contrast][data-a11y-contrast] .btn,
html[data-a11y-contrast][data-a11y-contrast] .btn-main,
html[data-a11y-contrast][data-a11y-contrast] .btn-alt,
html[data-a11y-contrast][data-a11y-contrast] .social a{
  background:#000;color:#fff;box-shadow:none;border:2px solid #fff;
  -webkit-backdrop-filter:none;backdrop-filter:none}
html[data-a11y-contrast][data-a11y-contrast] .sisters a{border-bottom-color:#fff}
html[data-a11y-contrast][data-a11y-contrast] .copy{color:#fff;text-shadow:none}

/* The date checker under high contrast: solid ink on solid ground, every
   frosted tint replaced by a real border, and the opacity that dims a booked
   or out-of-range day taken back off -- dimming is a contrast reduction, which
   is the one thing this mode exists to refuse. The non-colour marks stay. */
html[data-a11y-contrast][data-a11y-contrast] .dates-scrim{background:rgba(0,0,0,.9)}
html[data-a11y-contrast][data-a11y-contrast] .dates-panel{
  background:#000;color:#fff;border:2px solid #fff;box-shadow:none}
html[data-a11y-contrast][data-a11y-contrast] .dates-close,
html[data-a11y-contrast][data-a11y-contrast] .dates-nav-back,
html[data-a11y-contrast][data-a11y-contrast] .dates-arrow,
html[data-a11y-contrast][data-a11y-contrast] .dates-day,
html[data-a11y-contrast][data-a11y-contrast] .dates-field input,
html[data-a11y-contrast][data-a11y-contrast] .dates-field select,
html[data-a11y-contrast][data-a11y-contrast] .dates-field textarea{
  background:#000;color:#fff;border:2px solid #fff;box-shadow:none}
html[data-a11y-contrast][data-a11y-contrast] .dates-day.is-part{background:#fff;color:#000}
/* In this mode there is no green and no madder — only ink and ground — so the
   three states lean entirely on the three shapes. */
html[data-a11y-contrast][data-a11y-contrast] .dates-day.is-part .dates-mark{
  background:linear-gradient(90deg,#000 0 50%,transparent 50%);box-shadow:inset 0 0 0 1px #000}
html[data-a11y-contrast][data-a11y-contrast] .dates-day.is-free .dates-mark{background:#fff}
html[data-a11y-contrast][data-a11y-contrast] .dates-day.is-full,
html[data-a11y-contrast][data-a11y-contrast] .dates-day.is-out{opacity:1}
html[data-a11y-contrast][data-a11y-contrast] .dates-day.is-out{border-style:dotted}
html[data-a11y-contrast][data-a11y-contrast] .dates-tag,
html[data-a11y-contrast][data-a11y-contrast] .dates-note,
html[data-a11y-contrast][data-a11y-contrast] .dates-back,
html[data-a11y-contrast][data-a11y-contrast] .dates-legend,
html[data-a11y-contrast][data-a11y-contrast] .dates-field > span{color:#fff}
html[data-a11y-contrast][data-a11y-contrast] .dates-field select{
  background-image:none;background-color:#000}
html[data-a11y-contrast][data-a11y-contrast] .dates-field select option{
  background-color:#000;color:#fff}
html[data-a11y-contrast][data-a11y-contrast] .dates-taken li{
  background:#000;color:#fff;box-shadow:none;border:2px solid #fff}
html[data-a11y-contrast][data-a11y-contrast] .dates-busydot{background:#fff}
html[data-a11y-contrast][data-a11y-contrast] .dates-busyname{color:#fff;opacity:1}

html[data-a11y-grayscale]{filter:grayscale(1)}

html[data-a11y-links] .col a,
html[data-a11y-links] .pmenu a{text-decoration:underline;
  text-decoration-thickness:2px;text-underline-offset:3px}
html[data-a11y-links] .pmenu a{outline:2px solid rgba(0,0,0,.35);outline-offset:1px}

html[data-a11y-readable] body,
html[data-a11y-readable] h1,
html[data-a11y-readable] .pmenu a,
html[data-a11y-readable] .a11y-panel,
html[data-a11y-readable] .dates-panel{
  font-family:Arial,Helvetica,sans-serif;letter-spacing:normal;font-weight:700}

html[data-a11y-motion] *,
html[data-a11y-motion] *::before,
html[data-a11y-motion] *::after{animation:none !important;transition:none !important}

/* ---- the settings panel, identical in markup and behaviour to the walk ---- */
.a11y-scrim{position:fixed;inset:0;z-index:20;background:rgba(0,0,0,.42)}
.a11y-panel{position:fixed;z-index:21;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(92vw,380px);max-height:86vh;overflow:auto;background:#fff;color:#1d1d1f;
  border-radius:18px;padding:18px;box-shadow:0 24px 60px rgba(0,0,0,.34);
  font-family:var(--sans);font-size:calc(15px * var(--a11y-scale));
  direction:rtl;text-align:right;text-shadow:none}
.a11y-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.a11y-head h2{margin:0;font-size:1.05em;font-weight:700;font-family:var(--sans)}
.a11y-close{appearance:none;border:0;background:#f2f2f4;border-radius:var(--btn-r);
  width:36px;height:36px;display:flex;align-items:center;justify-content:center;cursor:pointer}
.a11y-close svg{width:16px;height:16px;fill:none;stroke:#1d1d1f;stroke-width:1.9;stroke-linecap:round}
.a11y-row{margin-bottom:14px}
.a11y-row > span{display:block;font-weight:600;margin-bottom:8px;font-size:.92em}
.a11y-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.a11y-steps button,.a11y-toggles button{appearance:none;border:0;background:#f2f2f4;
  color:#1d1d1f;border-radius:var(--btn-r);min-height:44px;padding:0 10px;cursor:pointer;
  font:inherit;font-size:.86em;font-weight:600;-webkit-tap-highlight-color:transparent}
.a11y-steps button[aria-pressed="true"],
.a11y-toggles button[aria-pressed="true"]{background:#1d1d1f;color:#fff}
.a11y-toggles{display:grid;gap:8px;margin-bottom:14px}
.a11y-toggles button{text-align:right;padding:0 14px;font-size:.92em}
.a11y-reset{appearance:none;border:1px solid rgba(0,0,0,.18);background:#fff;color:#1d1d1f;
  border-radius:var(--btn-r);min-height:44px;width:100%;cursor:pointer;font:inherit;font-weight:600}
/* the statement the panel answers to (IS 5568): a plain link under Reset */
.a11y-stmt{display:block;margin-top:12px;text-align:center;color:#1d1d1f;font-weight:600;
  font-size:.92em;text-underline-offset:3px}
[hidden]{display:none !important}
