/* ace-housing-students */
.ace-life{max-width:1120px;margin:0 auto;padding:clamp(.8rem,1.6vw,1.35rem) 0 4rem;color:var(--ace-text,#f4efe7)}
.ace-life *{box-sizing:border-box}
.ace-life__hero{padding:0 0 2.25rem;border-bottom:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-life__kicker,.ace-life__eyebrow{margin:0 0 .55rem;color:var(--ace-orange-2,#ff9a45);font-size:.72rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase}
.ace-life h1{max-width:14ch;margin:0 0 .65rem;font-size:clamp(2rem,5vw,3.5rem);line-height:1.02;text-wrap:balance}
.ace-life__lede{max-width:65ch;margin:0 0 1.4rem;color:var(--ace-muted,#b9b0a0);font-size:clamp(1rem,1.8vw,1.2rem);line-height:1.55}
.ace-life__notice{max-width:78ch;margin:0 0 1.25rem;padding:.9rem 1rem;border:1px solid color-mix(in srgb,var(--ace-orange,#ff7a18) 42%,transparent);border-radius:.6rem;background:color-mix(in srgb,var(--ace-orange,#ff7a18) 8%,transparent);line-height:1.5}
.ace-life__actions{display:flex;flex-wrap:wrap;gap:.6rem}
.ace-life__button{display:inline-flex;align-items:center;min-height:2.55rem;padding:.55rem .95rem;border:1px solid var(--ace-line,rgba(255,255,255,.17));border-radius:999px;color:inherit;text-decoration:none;font-size:.88rem;font-weight:750}
.ace-life__button:hover,.ace-life__button:focus-visible{border-color:var(--ace-orange,#ff7a18);color:var(--ace-orange-2,#ff9a45)}
.ace-life__button.is-primary{border-color:var(--ace-orange,#ff7a18);background:var(--ace-orange,#ff7a18);color:#17130f}
.ace-life__button.is-primary:hover,.ace-life__button.is-primary:focus-visible{background:var(--ace-orange-2,#ff9a45);color:#17130f}
.ace-life__section{padding:clamp(2rem,5vw,3.5rem) 0;border-bottom:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-life__section:last-child{border-bottom:0}
.ace-life__section--compact{padding-bottom:1rem}
.ace-life__section-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(16rem,32rem);gap:1.5rem;align-items:end;margin-bottom:1.25rem}
.ace-life__section-head h2{margin:0;font-size:clamp(1.35rem,3vw,2rem);line-height:1.15;text-wrap:balance}
.ace-life__section-head>p{margin:0;color:var(--ace-muted,#b9b0a0);line-height:1.55}
.ace-life__steps{counter-reset:ace-life;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin:0;padding:0;list-style:none}
.ace-life__steps li{position:relative;min-height:10rem;padding:1rem 1rem 1rem 3.15rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:.7rem;background:var(--ace-surface-2,#1e2222)}
.ace-life__steps li::before{counter-increment:ace-life;content:counter(ace-life);position:absolute;top:1rem;left:1rem;display:grid;place-items:center;width:1.45rem;height:1.45rem;border-radius:50%;background:var(--ace-orange,#ff7a18);color:#17130f;font-size:.72rem;font-weight:900}
.ace-life__steps h3,.ace-life__cards h3,.ace-life__callout h3,.ace-life__official h3{margin:0 0 .45rem;font-size:1rem;line-height:1.3}
.ace-life__steps p,.ace-life__cards p,.ace-life__callout p{margin:0;color:var(--ace-muted,#b9b0a0);font-size:.9rem;line-height:1.5}
.ace-life__source-note{margin:1rem 0 0;color:var(--ace-muted,#b9b0a0);font-size:.82rem;line-height:1.5}
.ace-life a{color:inherit;text-underline-offset:.16em}
.ace-life__source-note a,.ace-life__more a,.ace-life__official a{color:var(--ace-orange-2,#ff9a45)}
.ace-life__area-grid,.ace-life__cards,.ace-life__pills{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin:0;padding:0;list-style:none}
.ace-life__area-grid a{display:flex;justify-content:space-between;gap:1rem;height:100%;padding:.9rem 1rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:.65rem;background:var(--ace-surface-2,#1e2222);text-decoration:none}
.ace-life__area-grid a:hover,.ace-life__area-grid a:focus-visible,.ace-life__cards a:hover,.ace-life__cards a:focus-visible{border-color:var(--ace-orange,#ff7a18);color:var(--ace-orange-2,#ff9a45)}
.ace-life__area-grid span{color:var(--ace-muted,#b9b0a0);font-size:.75rem;white-space:nowrap}
.ace-life__cards li{min-width:0}
.ace-life__cards article{height:100%;padding:1rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:.7rem;background:var(--ace-surface-2,#1e2222)}
.ace-life__cards h3 a{text-decoration:none}
.ace-life__meta{margin-bottom:.45rem!important;color:var(--ace-orange-2,#ff9a45)!important;font-size:.7rem!important;font-weight:800;letter-spacing:.055em;text-transform:uppercase}
.ace-life__more{margin:1rem 0 0}
.ace-life__empty{padding:1rem;border:1px dashed var(--ace-line,rgba(255,255,255,.18));border-radius:.65rem;color:var(--ace-muted,#b9b0a0)}
.ace-life__callout{margin-top:1.25rem;padding:1.2rem;border-left:3px solid var(--ace-orange,#ff7a18);background:var(--ace-surface-2,#1e2222)}
.ace-life__callout .ace-life__actions{margin-top:1rem}
.ace-life__official{margin-top:1.25rem;padding:1rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:.7rem}
.ace-life__official ul{display:flex;flex-wrap:wrap;gap:.5rem 1.2rem;margin:.7rem 0 0;padding-left:1.15rem}
.ace-life__pills{display:flex;flex-wrap:wrap}
.ace-life__pills a{display:inline-flex;gap:.5rem;align-items:center;padding:.55rem .75rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:999px;text-decoration:none}
.ace-life__pills span{display:inline-grid;place-items:center;min-width:1.5rem;height:1.5rem;padding:0 .35rem;border-radius:999px;background:rgba(255,255,255,.08);color:var(--ace-muted,#b9b0a0);font-size:.7rem}
@media(max-width:820px){.ace-life__section-head{grid-template-columns:1fr;gap:.6rem}.ace-life__steps,.ace-life__area-grid,.ace-life__cards{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:540px){.ace-life__steps,.ace-life__area-grid,.ace-life__cards{grid-template-columns:1fr}.ace-life__steps li{min-height:0}.ace-life__actions{display:grid;grid-template-columns:1fr}.ace-life__button{justify-content:center}.ace-life__area-grid a{align-items:center}}
@media(prefers-reduced-motion:reduce){.ace-life *{scroll-behavior:auto!important}}


/* ace-section-sources */
.ace-source-panel{margin:clamp(2rem,5vw,3.5rem) 0 0;padding:clamp(1rem,2.5vw,1.4rem);border:1px solid var(--ace-line,rgba(255,255,255,.13));border-radius:14px;background:var(--ace-surface,#1b211f);color:var(--ace-text,#f7f3ea)}
.ace-source-panel__head{display:flex;align-items:end;justify-content:space-between;gap:1rem;margin-bottom:1rem}
.ace-source-panel__head h2{margin:0;font-size:clamp(1.25rem,2.8vw,1.8rem)}
.ace-source-panel__head>p,.ace-source-panel__credit{color:var(--ace-muted,#b9b0a0);font-size:.8rem}
.ace-source-panel__eyebrow{margin:0 0 .35rem;color:var(--ace-orange-2,#efb665);font-size:.7rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}
.ace-source-panel__metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.65rem;margin:0}
.ace-source-panel__metrics div{padding:.8rem;border-radius:9px;background:var(--ace-surface-2,#222a27)}
.ace-source-panel__metrics dt{color:var(--ace-muted,#b9b0a0);font-size:.75rem}
.ace-source-panel__metrics dd{margin:.25rem 0 0;font-size:clamp(1.15rem,2.2vw,1.55rem);font-weight:800}
.ace-source-panel__dates,.ace-source-panel__alerts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.7rem;margin:0;padding:0;list-style:none}
.ace-source-panel__dates li{display:flex;align-items:center;gap:.8rem;padding:.75rem;border-radius:9px;background:var(--ace-surface-2,#222a27)}
.ace-source-panel__dates time{display:grid;min-width:3.5rem;text-align:center}.ace-source-panel__dates time strong{font-size:1.35rem}.ace-source-panel__dates time span,.ace-source-panel__dates small{display:block;color:var(--ace-muted,#b9b0a0);font-size:.72rem}
.ace-source-panel__dates--events a{color:inherit}.ace-source-panel__dates--events small+small{margin-top:.3rem}.ace-source-panel__dates--events small a{color:var(--ace-orange-2,#efb665)}
.ace-source-panel__intro{max-width:70ch;color:var(--ace-muted,#b9b0a0);line-height:1.55}.ace-source-panel>h3{margin:1.25rem 0 .65rem;font-size:1rem}.ace-source-panel--police a{color:inherit}.ace-source-panel__dates--police li{align-items:flex-start}.ace-source-panel__dates--police li>span>strong,.ace-source-panel__dates--police li>span>small{display:block}.ace-source-panel__dates--police li>span>small+small{margin-top:.3rem}
.ace-source-panel__alerts li{padding:.85rem;border-left:3px solid var(--ace-orange,#ff7a18);background:var(--ace-surface-2,#222a27)}
.ace-source-panel__alerts li>span{display:block;margin:.25rem 0}.ace-source-panel__alerts p{margin:.4rem 0 0;color:var(--ace-muted,#b9b0a0)}
.ace-source-panel__clear{padding:.9rem;border-radius:9px;background:color-mix(in srgb,#36b37e 12%,var(--ace-surface-2,#222a27));line-height:1.5}
.ace-source-panel__credit{margin:1rem 0 0;line-height:1.5}
@media(max-width:720px){.ace-source-panel__metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.ace-source-panel__dates,.ace-source-panel__alerts{grid-template-columns:1fr}.ace-source-panel__head{align-items:start;flex-direction:column}}
.ace-source-panel--prices .ace-source-panel__metrics dd small{display:block;font-size:.78rem;font-weight:400;color:var(--ace-muted,#b9b0a0)}
.ace-ppd__ranks{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:1rem;margin:1rem 0}
.ace-ppd__rank h3{margin:0 0 .5rem;font-size:1rem}
.ace-ppd__rank ol{margin:0;padding-left:1.2rem}
.ace-ppd__rank li{margin:0 0 .35rem;line-height:1.4}
.ace-ppd__rank li>span{font-weight:600;margin-left:.3rem}
.ace-ppd__rank li small{color:var(--ace-muted,#b9b0a0);margin-left:.3rem}
.ace-source-panel--prices h3{margin:1rem 0 .5rem;font-size:1rem}
.ace-ppd__recent{list-style:none;margin:0 0 1rem;padding:0;display:grid;gap:.4rem}
.ace-ppd__recent li{display:flex;flex-wrap:wrap;gap:.5rem;align-items:baseline;padding:.45rem .7rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:10px;background:var(--ace-surface,#1b211f)}
.ace-ppd__date{color:var(--ace-muted,#b9b0a0);min-width:5.5ch}
.ace-ppd__recent li>span:nth-of-type(2){color:var(--ace-muted,#b9b0a0);font-size:.9rem}
.ace-ppd__price{margin-left:auto;font-weight:600}
.ace-nbhd-prices{margin:0 0 1.5rem}
.ace-source-panel--census h3{margin:1rem 0 .4rem;font-size:1rem}
.ace-source-panel__metrics--shares{grid-template-columns:repeat(auto-fit,minmax(min(100%,150px),1fr))}
.ace-source-panel__metrics--shares dd small{display:block;font-size:.76rem;font-weight:400;color:var(--ace-muted,#b9b0a0)}
.ace-census__rank{margin:0 0 1rem;padding-left:1.2rem}
.ace-census__rank li{margin:0 0 .35rem;line-height:1.4}
.ace-census__rank li>span{font-weight:600;margin-left:.3rem}
.ace-census__rank li small{color:var(--ace-muted,#b9b0a0);margin-left:.3rem}
.ace-nbhd-census{margin:0 0 1.5rem}
.ace-food-alerts{list-style:none;margin:0 0 1rem;padding:0;display:grid;gap:.5rem}
.ace-food-alerts__item{padding:.55rem .8rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-left-width:4px;border-radius:10px;background:var(--ace-surface,#1b211f)}
.ace-food-alerts__item--aa{border-left-color:#f59e0b}.ace-food-alerts__item--prin{border-left-color:#ef4444}.ace-food-alerts__item--fafa{border-left-color:#3b82f6}
.ace-food-alerts__item a{color:inherit;font-weight:600;text-decoration:none}.ace-food-alerts__item a:hover{text-decoration:underline}
.ace-food-alerts__meta{display:block;margin-top:.2rem;font-size:.85rem;color:var(--ace-muted,#b9b0a0)}
.ace-source-panel--money h3{margin:1rem 0 .4rem;font-size:1rem}
.ace-money__list{list-style:none;margin:0 0 .8rem;padding:0;display:grid;gap:.45rem}
.ace-money__list li{padding:.5rem .75rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:10px;background:var(--ace-surface,#1b211f)}
.ace-money__list a{color:inherit;font-weight:600;text-decoration:none}.ace-money__list a:hover{text-decoration:underline}
.ace-money__amount{float:right;font-weight:600;margin-left:.6rem}
.ace-money__meta,.ace-money__desc{display:block;margin-top:.2rem;font-size:.85rem;color:var(--ace-muted,#b9b0a0)}


/* ace-data-blocks */
/* Open-data connector blocks: the styling every includes/features/class-ace-*.php block used to
   print inline in its own <style> tag, gathered here so it is fetched once and cached.
   Tokens come from the theme shell (--ace-* map to --shell-* in both themes) and every fallback
   is the dark palette, so a block still reads correctly outside the workspace shell. */

/* ---------------------------------------------------------------- status system

   Connectors mark a state with one of these classes rather than an inline colour, so both themes
   can be kept right in one place. Colour is never the only signal: every status carries a word or
   a glyph beside it. Ratios below are against the darkest and lightest ground a block sits on
   (dark #14191b to #232a2c, light #ecefe6 to #fafbf5).

   Use .ace-stat with one of:
     is-good     something is fine, open, better, within guideline   dark 8.4:1   light 5.6:1
     is-warn     watch this: elevated, recent, similar, moderate     dark 8.0:1   light 6.0:1
     is-alert    something is wrong now: discharging, worse, closed  dark 6.6:1   light 5.8:1
     is-info     neutral fact worth picking out                      dark 8.0:1   light 6.3:1
     is-muted    no verdict available, offline, unknown              dark 6.6:1   light 5.2:1
     is-neutral  plain ink, for a state that needs no colour         dark 12.7:1  light 12.2:1

   The --ace-stat-*-pill tones are solid backgrounds that always carry white text
   (5.0:1 to 7.6:1), so they are the same in both themes. */
:root{
  --ace-stat-good:#5ddc93;--ace-stat-warn:#f2b544;--ace-stat-alert:#ff8f84;
  --ace-stat-info:#7cc7ff;--ace-stat-muted:#a7b1ad;--ace-stat-neutral:var(--ace-ink,#f5f2ea);
  --ace-stat-good-pill:#15803d;--ace-stat-warn-pill:#8a5a06;--ace-stat-amber-pill:#b4460a;
  --ace-stat-alert-pill:#a81c1c;--ace-stat-info-pill:#1d4ed8;--ace-stat-muted-pill:#4b5563;
}
[data-ace-theme=light]{
  --ace-stat-good:#146c35;--ace-stat-warn:#7a5205;--ace-stat-alert:#b3201c;
  --ace-stat-info:#1b4fb8;--ace-stat-muted:#5b655f;--ace-stat-neutral:var(--ace-ink,#252d29);
}
.ace-stat.is-good{color:var(--ace-stat-good)}
.ace-stat.is-warn{color:var(--ace-stat-warn)}
.ace-stat.is-alert{color:var(--ace-stat-alert)}
.ace-stat.is-info{color:var(--ace-stat-info)}
.ace-stat.is-muted{color:var(--ace-stat-muted)}
.ace-stat.is-neutral{color:var(--ace-stat-neutral)}
/* Pill form: a solid badge with white text, identical in both themes. */
.ace-stat--pill{display:inline-block;padding:0 .4em;border-radius:3px;color:#fff;font-size:.8em;margin-right:.3em}
.ace-stat--pill.is-good{background:var(--ace-stat-good-pill);color:#fff}
.ace-stat--pill.is-warn{background:var(--ace-stat-warn-pill);color:#fff}
.ace-stat--pill.is-amber{background:var(--ace-stat-amber-pill);color:#fff}
.ace-stat--pill.is-alert{background:var(--ace-stat-alert-pill);color:#fff}
.ace-stat--pill.is-info{background:var(--ace-stat-info-pill);color:#fff}
.ace-stat--pill.is-muted{background:var(--ace-stat-muted-pill);color:#fff}
/* Dot form: a background swatch with no text of its own. */
.ace-stat--dot{display:inline-block;width:.7em;height:.7em;border-radius:50%;margin-right:.4em;background:var(--ace-stat-muted-pill);vertical-align:baseline}
.ace-stat--dot.is-good{background:var(--ace-stat-good-pill)}
.ace-stat--dot.is-warn{background:var(--ace-stat-warn-pill)}
.ace-stat--dot.is-alert{background:var(--ace-stat-alert-pill)}
.ace-stat--dot.is-info{background:var(--ace-stat-info-pill)}
.ace-stat--dot.is-muted{background:var(--ace-stat-muted-pill)}

/* Shared shorthands the blocks lean on. */
.ace-data-block,.ace-citizen-air,.ace-collections,.ace-energy,.ace-fuel,.ace-geek,.ace-land,.ace-listed,
.ace-roads,.ace-sky,.ace-skywatch,.ace-wiki{margin:1.5rem 0}

/* ------------------------------------------------------------- citizen air */
.ace-citizen-air ul{list-style:none;margin:0 0 .75rem;padding:0;display:flex;flex-wrap:wrap;gap:.4rem .9rem}
.ace-citizen-air li{margin:0}
.ace-citizen-air .ace-csection-card__meta{font-size:.85em;opacity:.8}

/* ------------------------------------------------------------- collections */
.ace-collections__cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:.8rem;list-style:none;padding:0;margin:.8rem 0}
.ace-collections__card{display:flex;flex-direction:column;gap:.25rem;font-size:.9em}
.ace-collections__card img{width:100%;height:160px;object-fit:cover;border-radius:4px;background:var(--ace-surface-2,#222a27)}
.ace-collections__title{font-weight:600}
.ace-collections__meta,.ace-collections__credit{color:var(--ace-muted,#b9b0a0);font-size:.85em}

/* ------------------------------------------------------------ council more */
.ace-council-more__grid{display:flex;flex-wrap:wrap;gap:.6rem 1.4rem;list-style:none;margin:0 0 .75rem;padding:0}
.ace-council-more__grid li{margin:0}
.ace-council-more__grid strong{display:block;font-size:1.4em}
.ace-council-more .ace-csection-card__meta{font-size:.85em;opacity:.8}

/* ------------------------------------------------------------- data alerts */
.ace-dalerts{margin:1.5rem 0;padding:1rem 1.2rem;border:1px solid var(--ace-line,rgba(255,255,255,.14));border-radius:14px;background:var(--ace-surface,#1c1813)}
.ace-dalerts h3{margin:0 0 .35rem;font-size:1.05rem}
.ace-dalerts p{margin:0 0 .75rem;color:var(--ace-muted,#b9b0a0);font-size:.92rem}
.ace-dalerts__row{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .9rem}
.ace-dalerts__credit{margin:.6rem 0 0;font-size:.78rem;color:var(--ace-muted,#b9b0a0)}

/* ---------------------------------------------------------------- data mill */
.ace-data-mill ul{list-style:none;margin:0 0 .75rem;padding:0}
.ace-data-mill li{margin:0 0 .6rem}
.ace-data-mill small{display:block;opacity:.8}
.ace-data-mill .ace-csection-card__meta{font-size:.85em;opacity:.8}

/* ---------------------------------------------------------------- democracy */
.ace-democracy__list{list-style:none;margin:0 0 1rem;padding:0}
.ace-democracy__list li{padding:.45rem 0;border-top:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-democracy__meta{display:block;font-size:.85em;opacity:.75}
.ace-democracy__num{font-variant-numeric:tabular-nums;font-weight:600;margin-right:.4em}
.ace-democracy__bar{display:block;height:4px;background:var(--ace-stat-info-pill);border-radius:2px;margin-top:.25rem;max-width:100%}
.ace-democracy__election{padding:.6rem .8rem;border-left:4px solid var(--ace-stat-info-pill);background:color-mix(in srgb,var(--ace-stat-info-pill) 8%,transparent);margin:0 0 .6rem}
.ace-democracy__candidates{margin:.3rem 0 0;padding-left:1.1rem;font-size:.9em}

/* -------------------------------------------------------------- deprivation */
.ace-imd__bars{display:grid;grid-template-columns:auto 1fr auto;gap:.2rem .6rem;align-items:center;margin:0 0 1rem;font-size:.9em}
.ace-imd__bar{height:12px;border-radius:2px;min-width:2px}
.ace-imd__facts{display:flex;flex-wrap:wrap;gap:1rem;margin:0 0 1rem}
.ace-imd__facts strong{display:block;font-size:1.4em}
.ace-imd__meta{display:block;font-size:.85em;opacity:.75}

/* ------------------------------------------------------------------- energy */
.ace-energy__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:1rem}
.ace-energy__card{border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:.5rem;padding:1rem}
.ace-energy__card h3{margin:0 0 .25rem;font-size:1.05rem}
.ace-energy__big{font-size:1.5rem;font-weight:600;margin:.25rem 0}
.ace-energy__bar{display:flex;height:.6rem;border-radius:.3rem;overflow:hidden;margin:.5rem 0}
.ace-energy__bar span{display:block;height:100%}
.ace-energy ol,.ace-energy ul{margin:.5rem 0 0;padding-left:1.2rem}
.ace-energy__meta{font-size:.85rem;opacity:.8;margin:.5rem 0 0}
.ace-energy--idx-very-low,.ace-energy--idx-low{color:var(--ace-stat-good)}
.ace-energy--idx-moderate{color:var(--ace-stat-warn)}
.ace-energy--idx-high,.ace-energy--idx-very-high{color:var(--ace-stat-alert)}
.ace-energy__neg{color:var(--ace-stat-good);font-weight:600}

/* --------------------------------------------------------------------- fuel */
.ace-fuel__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:1rem}
.ace-fuel__card{border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:.5rem;padding:1rem}
.ace-fuel__card h3{margin:0 0 .5rem;font-size:1.05rem}
.ace-fuel ol{margin:0;padding-left:1.2rem}
.ace-fuel li{margin:.2rem 0}
.ace-fuel__price{font-weight:600}
.ace-fuel__meta{font-size:.85rem;opacity:.8;margin:.5rem 0 0}

/* --------------------------------------------------------------------- geek */
.ace-geek__list{padding-left:1.2rem}
.ace-geek__inline{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:.4rem .9rem}
.ace-geek__meta,.ace-geek__credit{color:var(--ace-muted,#b9b0a0);font-size:.85em}
.ace-geek__state--open{color:var(--ace-stat-good)}
.ace-geek__state--closed{color:var(--ace-stat-alert)}
.ace-geek__state--unknown{color:var(--ace-stat-muted)}
.ace-geek__posts{list-style:none;padding:0;display:grid;gap:.8rem}
.ace-geek__post{border-left:3px solid var(--ace-line,rgba(255,255,255,.12));padding-left:.8rem}
.ace-geek__post p{margin:0 0 .2rem}
.ace-geek__post img{float:right;margin:0 0 .4rem .6rem;border-radius:4px;max-width:160px;height:auto}

/* ----------------------------------------------------------------- geograph */
.ace-geograph__gallery{list-style:none;margin:0 0 .75rem;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:.75rem}
.ace-geograph__gallery li{display:flex;flex-direction:column;gap:.2rem;font-size:.8rem}
.ace-geograph__gallery img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px;background:var(--ace-surface-2,#222a27)}
.ace-geograph__credit{opacity:.75}

/* ------------------------------------------------------------- health stats */
.ace-health__table{width:100%;border-collapse:collapse;margin:0 0 1rem;font-size:.95em}
.ace-health__table th,.ace-health__table td{text-align:left;padding:.4rem .5rem;border-top:1px solid var(--ace-line,rgba(255,255,255,.12));vertical-align:top}
.ace-health__table td.ace-health__n{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.ace-health__arrow{font-weight:700;margin-right:.25em}
.ace-health__meta{display:block;font-size:.85em;opacity:.75}
.ace-health__list{list-style:none;margin:0 0 1rem;padding:0}
.ace-health__list li{padding:.35rem 0;border-top:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-health__bar{display:block;height:4px;background:#0f766e;border-radius:2px;margin-top:.25rem}

/* -------------------------------------------------------- internet archive */
.ace-ia__decade{margin:.75rem 0 .25rem}
.ace-ia__cards{list-style:none;margin:0 0 1rem;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:.75rem}
.ace-ia__cards li{display:flex;flex-direction:column;gap:.25rem;font-size:.85rem}
.ace-ia__cards img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:6px;background:var(--ace-surface-2,#222a27)}
.ace-ia__meta,.ace-ia__credit{font-size:.78rem;opacity:.8}

/* ------------------------------------------------------------ land, listed, OSM amenities */
.ace-land ul,.ace-listed ul,.ace-osm-amenities ul{list-style:none;margin:0 0 .75rem;padding:0;display:flex;flex-wrap:wrap;gap:.4rem .9rem}
.ace-land li,.ace-listed li,.ace-osm-amenities li{margin:0}
.ace-land .ace-csection-card__meta,.ace-listed .ace-csection-card__meta,.ace-osm-amenities .ace-csection-card__meta{font-size:.85em;opacity:.8}

/* -------------------------------------------------------------------- noise */
.ace-noise table{border-collapse:collapse;margin:0 0 .75rem}
.ace-noise td,.ace-noise th{padding:.2rem .7rem .2rem 0;text-align:left}
.ace-noise .ace-noise__swatch{display:inline-block;width:.8em;height:.8em;border-radius:2px;margin-right:.35em;vertical-align:middle}
.ace-noise .ace-csection-card__meta{font-size:.85em;opacity:.8}

/* ----------------------------------------------------------------- planning */
.ace-planning__list{list-style:none;margin:0 0 1rem;padding:0}
.ace-planning__list li{padding:.45rem 0;border-top:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-planning__meta{display:block;font-size:.85em;opacity:.75}
.ace-planning__facts{display:flex;flex-wrap:wrap;gap:1rem;margin:0 0 1rem}
.ace-planning__facts strong{display:block;font-size:1.4em}

/* ------------------------------------------------------------------- pollen */
.ace-pollen__grid{display:flex;flex-wrap:wrap;gap:.6rem 1.2rem;list-style:none;margin:0 0 .75rem;padding:0}
.ace-pollen__grid li{margin:0}
.ace-pollen__grid strong{display:block}
.ace-pollen .ace-csection-card__meta{font-size:.85em;opacity:.8}

/* -------------------------------------------------------------- public jobs */
.ace-public-jobs h3{margin:1em 0 .3em}
.ace-public-jobs ul{list-style:none;margin:0;padding:0}
.ace-public-jobs li{padding:.35em 0;border-top:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-public-jobs small{display:block;opacity:.75}

/* ----------------------------------------------------------------- rainfall */
.ace-rainfall__rivers{list-style:none;margin:0 0 .75rem;padding:0}
.ace-rainfall__rivers li{margin:.25rem 0}
.ace-rainfall .ace-csection-card__meta{font-size:.85em;opacity:.8}

/* -------------------------------------------------------------------- roads */
.ace-roads ul{list-style:none;padding:0;margin:.5rem 0}
.ace-roads li{margin:.25rem 0}
.ace-roads__meta{font-size:.85em;opacity:.8}

/* --------------------------------------------------------------- scorecards */
.ace-scorecards{margin:2rem 0}
.ace-scorecards__finder{display:flex;flex-wrap:wrap;gap:.6rem 1.2rem;align-items:center;padding:.9rem 1rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:8px;margin:0 0 1rem}
.ace-scorecards__finder legend{font-weight:600;padding:0 .3rem}
.ace-scorecards__finder fieldset{border:0;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:.3rem .9rem}
.ace-scorecards__finder label{white-space:nowrap}
.ace-scorecards__finder select{max-width:16rem}
.ace-scorecards__count{font-size:.9em;opacity:.8;margin:0 0 .5rem}
.ace-scorecards table{width:100%;border-collapse:collapse;font-size:.92em}
.ace-scorecards th,.ace-scorecards td{padding:.35rem .5rem;text-align:left;border-bottom:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-scorecards td.is-num,.ace-scorecards td.ace-score{text-align:right;font-variant-numeric:tabular-nums}
.ace-score{border-radius:4px}
.ace-score--hi{background:rgba(34,197,94,.18)}
.ace-score--mid{background:rgba(234,179,8,.16)}
.ace-score--lo{background:rgba(239,68,68,.14)}
.ace-score--na{opacity:.5}
.ace-scorecards__match{font-weight:700}
.ace-scorecards__radar{max-width:320px;width:100%;height:auto;display:block;margin:0 auto 1rem}
.ace-scorecards__dims{display:grid;grid-template-columns:repeat(auto-fill,minmax(9rem,1fr));gap:.5rem;list-style:none;padding:0;margin:0 0 1rem}
.ace-scorecards__dims li{padding:.5rem .7rem;border-radius:6px;background:color-mix(in srgb,currentColor 6%,transparent)}
.ace-scorecards__dims strong{display:block;font-size:1.4em}
.ace-scorecards__dims small{opacity:.75}
.ace-scorecards details{margin:1rem 0}
.ace-scorecards details table{font-size:.85em}
.ace-scorecards__like{list-style:none;padding:0;margin:0 0 1rem;display:flex;flex-wrap:wrap;gap:.4rem .9rem}
.ace-scorecards__like span{opacity:.7;font-size:.9em}
.ace-scorecards__credit{font-size:.85em;opacity:.8}

/* ------------------------------------------------------------------- sewage */
.ace-sewage__list{list-style:none;margin:0 0 .75rem;padding:0}
.ace-sewage__list li{margin:.25rem 0}
.ace-sewage .ace-csection-card__meta{font-size:.85em;opacity:.8}

/* ---------------------------------------------------------------- sky watch */
.ace-skywatch ul{list-style:none;padding:0;margin:.5rem 0}
.ace-skywatch li{margin:.25rem 0}
.ace-skywatch__meta{font-size:.85em;opacity:.8}
.ace-skywatch--warnings{border-left:6px solid var(--ace-stat-warn-pill);padding:.5rem 1rem}
.ace-skywatch--amber{border-color:var(--ace-stat-amber-pill)}
.ace-skywatch--red{border-color:var(--ace-stat-alert-pill)}
/* The aurora level badge: a solid pill with white text, so one tone serves both themes. */
.ace-skywatch__level{display:inline-block;padding:.1em .6em;border-radius:1em;background:var(--ace-stat-good-pill);color:#fff}
.ace-skywatch--yellow .ace-skywatch__level{background:var(--ace-stat-warn-pill)}
.ace-skywatch--amber .ace-skywatch__level{background:var(--ace-stat-amber-pill)}
.ace-skywatch--red .ace-skywatch__level{background:var(--ace-stat-alert-pill)}

/* ---------------------------------------------------------------------- sky */
.ace-sky ul{list-style:none;padding:0;margin:.5rem 0}
.ace-sky li{margin:.25rem 0}
.ace-sky__meta{font-size:.85em;opacity:.8}

/* ------------------------------------------------------------ source health */
.ace-source-health__problems{list-style:none;margin:0 0 1rem;padding:0}
.ace-source-health__problems li{padding:.35rem 0;border-bottom:1px solid color-mix(in srgb,currentColor 15%,transparent)}
.ace-source-health__err{display:block;font-size:.85em;opacity:.75}
.ace-source-health__dot{display:inline-block;width:.7em;height:.7em;border-radius:50%;margin-right:.4em;background:var(--ace-stat-muted-pill);vertical-align:baseline}
.ace-source-health__dot.is-ok{background:var(--ace-stat-good-pill)}
.ace-source-health__dot.is-stale{background:var(--ace-stat-warn-pill)}
.ace-source-health__dot.is-failing{background:var(--ace-stat-alert-pill)}
.ace-source-health__dot.is-blocked{background:#7d4bd6}
.ace-source-health__dot.is-off{background:var(--ace-stat-muted-pill)}
.ace-source-health__scroll{overflow-x:auto}
.ace-source-health__table{width:100%;border-collapse:collapse;font-size:.92em}
.ace-source-health__table th,.ace-source-health__table td{text-align:left;padding:.4rem .5rem;vertical-align:top;border-bottom:1px solid color-mix(in srgb,currentColor 12%,transparent)}
.ace-source-health__table th.is-sortable{cursor:pointer;white-space:nowrap}
.ace-source-health__table th.is-sortable::after{content:" \2195";opacity:.5}
.ace-source-health__table th[aria-sort=ascending]::after{content:" \2191"}
.ace-source-health__table th[aria-sort=descending]::after{content:" \2193"}
.ace-source-health__error{max-width:22rem;word-break:break-word;font-size:.85em}
.ace-source-health__spark{color:currentColor;opacity:.8}
.ace-source-health__allgood{font-weight:600}

/* ----------------------------------------------------------------- vehicles */
.ace-vehicles__lines{list-style:none;margin:0 0 .75rem;padding:0;display:flex;flex-wrap:wrap;gap:.4rem}
.ace-vehicles__lines li{border:1px solid currentColor;border-radius:1rem;padding:.1rem .6rem;font-size:.9em}
.ace-vehicles .ace-csection-card__meta{font-size:.85em;opacity:.8}

/* -------------------------------------------------------------- video feeds */
.ace-vfeeds__cards{list-style:none;margin:0 0 1rem;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem}
.ace-vfeeds__cards li{display:flex;flex-direction:column;gap:.3rem;font-size:.9rem}
.ace-vfeeds__cards img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:6px;background:var(--ace-surface-2,#222a27)}
.ace-vfeeds__meta,.ace-vfeeds__credit{font-size:.8rem;opacity:.8}
.ace-vfeeds__pods{list-style:none;margin:0 0 1rem;padding:0}
.ace-vfeeds__pods li{display:grid;grid-template-columns:64px 1fr;gap:.75rem;align-items:start;padding:.6rem 0;border-top:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-vfeeds__pods img{width:64px;height:64px;border-radius:6px;object-fit:cover}
.ace-vfeeds__pods audio{width:100%;max-width:420px;margin-top:.3rem}

/* ------------------------------------------------------------- wiki nearby */
.ace-wiki__list,.ace-wiki__movers{padding-left:1.2rem}
.ace-wiki__list p{margin:.1rem 0 .5rem;font-size:.92em}
.ace-wiki__meta{color:var(--ace-muted,#b9b0a0);font-size:.85em}
.ace-wiki__credit{color:var(--ace-muted,#b9b0a0);font-size:.8em}
.ace-wiki__gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.6rem;list-style:none;padding:0;margin:.8rem 0}
.ace-wiki__gallery img{width:100%;height:110px;object-fit:cover;border-radius:4px}
.ace-wiki__gallery .ace-wiki__credit{display:block}

/* --------------------------------------------------------- wikidata people */
.ace-wdpeople__cards{list-style:none;margin:0 0 1rem;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.75rem}
.ace-wdpeople__cards li{display:flex;flex-direction:column;gap:.25rem;font-size:.9rem}
.ace-wdpeople__cards img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px;background:var(--ace-surface-2,#222a27)}
.ace-wdpeople__meta,.ace-wdpeople__credit{font-size:.8rem;opacity:.8}
.ace-wdpeople__occ{columns:2;column-gap:2rem;font-size:.9rem}
.ace-wdpeople__occ li{break-inside:avoid;margin-bottom:.5rem}
.ace-wdpeople__day li{margin-bottom:.35rem}

/* Cheapest petrol, small enough for a sidebar and legible at a glance: the price
   is the thing being answered, so it is the thing that is big. */
.ace-fuel__best{margin:.75rem 0 0;padding:0;list-style:none;display:grid;gap:.6rem}
.ace-fuel__bestitem{display:grid;grid-template-columns:auto 1fr;align-items:baseline;gap:.15rem .6rem;padding:.6rem .75rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:.5rem}
.ace-fuel__bestfuel{grid-column:1;font-size:.78rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;opacity:.8}
.ace-fuel__bestprice{grid-column:2;justify-self:start;font-size:1.5rem;font-weight:800;line-height:1.1;font-variant-numeric:tabular-nums}
.ace-fuel__bestwhere{grid-column:1/-1;font-size:.88rem;line-height:1.35}
.ace-fuel__bestsave{grid-column:1/-1;font-size:.78rem;line-height:1.3;opacity:.8}

/* ------------------------------------------------------------------ museums
   Sheffield museums and galleries. Colours come from the shared tokens so the
   block reads correctly in both themes; the light palette is set once at the
   top of this sheet under [data-ace-theme=light] and needs nothing extra here. */
.ace-museums__cards{list-style:none;margin:0 0 1rem;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}
.ace-museums__cards li{display:flex;flex-direction:column;gap:.25rem;font-size:.9rem}
.ace-museums__cards img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:6px;background:var(--ace-surface-2,#222a27)}
.ace-museums__name{font-weight:600;line-height:1.3}
.ace-museums__meta{font-size:.8rem;opacity:.85}
.ace-museums__hours{font-size:.8rem;font-variant-numeric:tabular-nums;color:var(--ace-muted,#b9b0a0)}
.ace-museums__more{margin:.25rem 0 .75rem}
.ace-museums__list li{margin-bottom:.35rem}

/* Compact follow control: the same .ace-follow button (same handler, same endpoint) shrunk to a
   chip for lists of areas. The label stays in the DOM, visually hidden, so the accessible name
   still names the area; aria-pressed carries the state, so it is not announced by colour alone. */
.ace-follow--mini{padding:.3rem .45rem;gap:0;line-height:1;border-radius:999px}
.ace-follow--mini .ace-follow__t{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
.ace-follow--mini .dashicons{font-size:1rem;width:1rem;height:1rem}
.ace-follow--mini:focus-visible{outline:2px solid var(--ace-orange-2,#ff9a45);outline-offset:2px}
/* What the bell does, said once above the list. Muted token so both themes stay legible. */
.ace-nbhd-follow-note{margin:0 0 .8rem;font-size:.9rem;color:var(--ace-muted,#b9b0a0)}
/* The chip and its bell are one item, so the space between an area and its own bell must read as
   smaller than the space between two areas. ul.* to win over the base rule whatever the load order. */
/* The bell belongs to the area beside it, so the pair reads as one pill rather
   than a button floating between two areas. The border and background move onto
   the list item, the link and the bell sit inside it, and a hairline divides them. */
ul.ace-nbhd-list{gap:.5rem .6rem}
ul.ace-nbhd-list li:has(.ace-follow--mini){display:inline-flex;align-items:stretch;gap:0;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:999px;background:var(--ace-surface,#1b211f);overflow:hidden}
ul.ace-nbhd-list li:has(.ace-follow--mini):hover{border-color:var(--ace-orange-2,#efb665)}
ul.ace-nbhd-list li:has(.ace-follow--mini)>a{border:0;border-radius:0;background:none;padding-right:.6rem}
ul.ace-nbhd-list li:has(.ace-follow--mini)>a:hover{border:0}
ul.ace-nbhd-list li>.ace-follow--mini{border:0;border-radius:0;border-left:1px solid var(--ace-line,rgba(255,255,255,.12));background:none;padding:.4rem .55rem}
ul.ace-nbhd-list li>.ace-follow--mini:hover{background:color-mix(in srgb,var(--ace-orange-2,#efb665) 14%,transparent)}
ul.ace-nbhd-list li>.ace-follow--mini.is-on{background:var(--ace-orange-2,#efb665)}
/* Older browsers without :has keep the plain row, which still works. */
.ace-nbhd-list li{display:inline-flex;align-items:center;gap:.15rem}
.ace-place__follow{display:inline-flex;align-items:center;gap:.5rem;margin:0 0 .9rem}

/* Active Places Power: sports facilities. Tokens only, so both themes follow the container. */
.ace-sportsfacilities__types{list-style:none;margin:0 0 1rem;padding:0;display:flex;flex-wrap:wrap;gap:.4rem .6rem;font-size:.85rem}
.ace-sportsfacilities__types li{border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:999px;padding:.2rem .6rem;background:var(--ace-surface,#1b211f)}
.ace-sportsfacilities__venues{list-style:none;margin:0 0 1rem;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.75rem}
.ace-sportsfacilities__venues li{display:flex;flex-direction:column;gap:.2rem;font-size:.9rem}
.ace-sportsfacilities__name{font-weight:600;line-height:1.3}
.ace-sportsfacilities__meta{font-size:.8rem;opacity:.85}
.ace-sportsfacilities__more{margin:.25rem 0 .75rem}
.ace-sportsfacilities__list li{margin-bottom:.35rem}
@media (max-width:700px){.ace-sportsfacilities__venues{grid-template-columns:1fr}}
/* One video's own page: click-to-play facade, its meta and the discussion below it. */
.ace-vfeeds__player{position:relative;max-width:640px;margin:0 0 .6rem;background:var(--ace-surface-2,#222a27);border-radius:8px;overflow:hidden}
.ace-vfeeds__player img,.ace-vfeeds__player iframe{display:block;width:100%;aspect-ratio:16/9;border:0;object-fit:cover}
.ace-vfeeds__play{display:block;width:100%;padding:0;border:0;background:none;cursor:pointer;position:relative}
.ace-vfeeds__play-icon{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:3rem;color:#fff;text-shadow:0 2px 12px rgba(0,0,0,.6)}
.ace-vfeeds__play:focus-visible{outline:2px solid currentColor;outline-offset:2px}
.ace-vfeeds__watch,.ace-vfeeds__desc{margin:0 0 .8rem}
.ace-vfeeds__ytcomments{list-style:none;margin:0 0 1rem;padding:0;display:grid;gap:.5rem;font-size:.9rem}
.ace-vfeeds__talk{margin:1.5rem 0;border-top:1px solid var(--ace-line,rgba(255,255,255,.12));padding-top:1rem}
.ace-vfeeds__thread{list-style:none;margin:0 0 1rem;padding:0;display:grid;gap:.75rem}
.ace-vfeeds__thread time{font-size:.8rem;opacity:.7;margin-left:.4rem}
.ace-vfeeds__thread p{margin:.2rem 0 0}
.ace-vfeeds__talkform{display:grid;gap:.5rem;max-width:640px}
.ace-vfeeds__talkform textarea{width:100%}
.ace-vfeeds__talkform button{justify-self:start}
/* Paid links. An aside, outside the article, tinted so it never reads as editorial. The
   disclosure is body size on purpose: it is not small print. */
.ace-commercial{margin:2rem 0 0;padding:1rem 1.1rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:10px;background:var(--ace-surface-2,#222a27)}
.ace-commercial__title{margin:0 0 .6rem;font-size:1.15rem}
.ace-commercial__disclosure p{margin:0 0 .7rem;font-size:1rem;line-height:1.5}
.ace-commercial__list{list-style:none;margin:.9rem 0 .9rem;padding:0;display:grid;gap:.6rem}
.ace-commercial__item{display:block}
.ace-commercial__badge{display:inline-block;min-width:1.4em;text-align:center;border-radius:4px;padding:0 .25em;background:var(--ace-surface,#1a211f);font-weight:700}
.ace-commercial__blurb{display:block;font-size:.9rem;opacity:.85;margin-top:.15rem}
.ace-commercial__unmarked{margin:0;font-size:.95rem}
.ace-commercial-register{margin:1.5rem 0}
.ace-commercial-register__table{width:100%;border-collapse:collapse}
.ace-commercial-register__table th,.ace-commercial-register__table td{text-align:left;padding:.35rem .5rem;border-bottom:1px solid var(--ace-line,rgba(255,255,255,.12))}

/* ------------------------------------------------ fuel, electricity and gas hubs
   Mobile first: one column, the tables scroll inside their own box rather than
   taking the page sideways, and nothing here carries a colour of its own. */
.ace-fuelhub,.ace-energyhub{box-sizing:border-box;width:min(100%,60rem);margin-inline:auto}
.ace-fuelhub section,.ace-energyhub section{margin:1.75rem 0}
.ace-fuelhub h2,.ace-energyhub h2{font-size:1.15rem;margin:0 0 .4rem}
.ace-fuelhub__provenance,.ace-fuelhub__note,.ace-fuelhub__what,.ace-energyhub__note,.ace-energyhub__capmeta{font-size:.85rem;opacity:.8}
.ace-fuelhub__nearform{display:grid;gap:.4rem;margin:.6rem 0}
.ace-fuelhub__nearform input{padding:.55rem .65rem;border:1px solid var(--ace-line,rgba(255,255,255,.18));border-radius:.5rem;background:transparent;color:inherit;font:inherit;width:100%}
.ace-fuelhub__nearform button{padding:.55rem .9rem;border-radius:.5rem;border:1px solid var(--ace-line,rgba(255,255,255,.18));background:var(--ace-surface-2,rgba(255,255,255,.06));color:inherit;font:inherit;cursor:pointer;justify-self:start}
.ace-fuelhub__nearlist{margin:.6rem 0 0;padding-left:1.3rem}
.ace-fuelhub__nearlist li{margin:.25rem 0}
.ace-fuelhub__dist{font-size:.85rem;opacity:.75}
.ace-fuelhub__scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.ace-fuelhub__table{border-collapse:collapse;width:100%;min-width:34rem;font-size:.9rem}
.ace-fuelhub__table th,.ace-fuelhub__table td{text-align:left;padding:.35rem .5rem;border-bottom:1px solid var(--ace-line,rgba(255,255,255,.12));white-space:nowrap}
.ace-fuelhub__table td{font-variant-numeric:tabular-nums}
.ace-fuelhub__traffic-list{list-style:none;margin:.6rem 0 0;padding:0}
.ace-fuelhub__traffic-list li{margin:0 0 .6rem}
.ace-fuelhub__what{display:block}
.ace-fuelhub__gaps li,.ace-energyhub__gaps li{margin:.35rem 0}
.ace-energyhub__figure{font-size:1.5rem;font-weight:700;margin:.25rem 0;font-variant-numeric:tabular-nums}
.ace-energyhub__emergency{border:1px solid var(--ace-line,rgba(255,255,255,.18));border-radius:.6rem;padding:.9rem 1rem}
.ace-energyhub__emergency h2{font-size:1.25rem}
.ace-energyhub__calculator{padding:clamp(1rem,3vw,1.6rem);border:1px solid color-mix(in srgb,var(--ace-stat-warn,#ffb74d) 42%,var(--ace-line,rgba(255,255,255,.15)));border-radius:1rem;background:linear-gradient(145deg,color-mix(in srgb,var(--ace-stat-warn,#ffb74d) 9%,var(--ace-surface-2,#222a27)),var(--ace-surface-2,#222a27) 65%);box-shadow:0 18px 50px rgba(0,0,0,.12)}
.ace-energyhub__sectionhead{max-width:46rem}
.ace-energyhub__eyebrow{margin:0 0 .25rem;text-transform:uppercase;letter-spacing:.09em;font-size:.72rem;font-weight:750;color:var(--ace-stat-warn,#ffb74d)}
.ace-energyhub__sectionhead>p:last-child{margin:.35rem 0 0;opacity:.86}
.ace-energyhub__usagecards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,14.5rem),1fr));gap:.75rem;margin:1.15rem 0}
.ace-energyhub__usagecard{appearance:none;text-align:left;color:inherit;font:inherit;padding:1rem;border:1px solid var(--ace-line,rgba(255,255,255,.16));border-radius:.75rem;background:color-mix(in srgb,var(--ace-surface,#171b1a) 82%,transparent);cursor:pointer;display:grid;gap:.12rem;min-width:0;transition:border-color .16s ease,transform .16s ease,background .16s ease}
.ace-energyhub__usagecard:hover{transform:translateY(-2px);border-color:color-mix(in srgb,var(--ace-stat-warn,#ffb74d) 58%,transparent)}
.ace-energyhub__usagecard:focus-visible{outline:3px solid var(--ace-stat-warn,#ffb74d);outline-offset:3px}
.ace-energyhub__usagecard.is-active{border-color:var(--ace-stat-warn,#ffb74d);background:color-mix(in srgb,var(--ace-stat-warn,#ffb74d) 11%,var(--ace-surface,#171b1a))}
.ace-energyhub__usage-title{font-weight:750}.ace-energyhub__usage-kwh{font-size:.82rem;opacity:.72}.ace-energyhub__usagecard strong{font-size:1.65rem;line-height:1.15;margin-top:.65rem;font-variant-numeric:tabular-nums}.ace-energyhub__usagecard strong+span{font-size:.82rem;opacity:.8}
.ace-energyhub__calcform{display:grid;gap:.75rem;align-items:end;margin-top:1.2rem}.ace-energyhub__calcform label>span:first-child{display:block;font-size:.85rem;font-weight:700;margin-bottom:.3rem}.ace-energyhub__input{display:flex;align-items:center;border:1px solid var(--ace-line,rgba(255,255,255,.22));border-radius:.6rem;background:var(--ace-surface,#171b1a);overflow:hidden}.ace-energyhub__input input{min-width:0;width:100%;padding:.72rem .8rem;border:0;background:transparent;color:inherit;font:inherit;font-variant-numeric:tabular-nums}.ace-energyhub__input input:focus{outline:none}.ace-energyhub__input:focus-within{outline:3px solid color-mix(in srgb,var(--ace-stat-warn,#ffb74d) 75%,transparent);outline-offset:2px}.ace-energyhub__input span{padding:0 .8rem;font-size:.85rem;opacity:.72}.ace-energyhub__calcform button{padding:.72rem 1rem;border:1px solid var(--ace-stat-warn,#ffb74d);border-radius:.6rem;background:var(--ace-stat-warn,#ffb74d);color:#19130b;font:inherit;font-weight:750;cursor:pointer;white-space:nowrap}.ace-energyhub__calcform button:focus-visible{outline:3px solid currentColor;outline-offset:3px}
.ace-energyhub__result{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem;margin-top:1rem}.ace-energyhub__result>div{padding:.85rem 1rem;border-radius:.7rem;background:color-mix(in srgb,var(--ace-surface,#171b1a) 88%,transparent)}.ace-energyhub__result span{display:block;font-size:.78rem;opacity:.75}.ace-energyhub__result strong{display:block;font-size:clamp(1.35rem,4vw,2rem);font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.ace-energyhub__breakdown{display:flex;flex-wrap:wrap;gap:.35rem 1.25rem;margin:.75rem 0 0;font-size:.88rem}.ace-energyhub__breakdown strong{font-variant-numeric:tabular-nums}.ace-energyhub__privacy{margin:.8rem 0 0;font-size:.78rem;opacity:.72;max-width:50rem}
.ace-energyhub__tariffgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,18rem),1fr));gap:.8rem;margin-top:.85rem}.ace-energyhub__tariffgrid article{padding:1rem;border:1px solid var(--ace-line,rgba(255,255,255,.14));border-radius:.75rem;background:color-mix(in srgb,var(--ace-surface-2,#222a27) 72%,transparent)}.ace-energyhub__tariffgrid h3{margin:0 0 .35rem;font-size:1rem}.ace-energyhub__tariffgrid p{margin:0;opacity:.86}
@media (min-width:48rem){
  .ace-fuelhub__nearform{grid-template-columns:1fr auto;align-items:end}
  .ace-fuelhub__nearform label{grid-column:1/-1}
  .ace-energyhub__calcform{grid-template-columns:minmax(15rem,1fr) auto}
}
@media (min-width:32rem) and (max-width:47.99rem){.ace-energyhub__usagecard:last-child:nth-child(odd){grid-column:1/-1}}
@media (max-width:32rem){.ace-energyhub__result{grid-template-columns:1fr}.ace-energyhub__calcform button{width:100%}}


/* ace-charts */
/* Inline SVG charts drawn by ACE_Charts, and the generic data-table enhancer (.ace-table).
   Colours come from the workspace tokens. Two chart palettes, one per theme, each checked for
   at least 3:1 (WCAG 1.4.11) against the panel, card and white surfaces of its theme; text uses
   the theme ink and muted tokens, which pass 4.5:1 in both themes. */
:root,.ace-workspace-page{--ace-chart-line:var(--shell-line,var(--ace-line,rgba(255,255,255,.13)));--ace-chart-on:#14191b;
  --ace-chart-1:var(--ace-orange-2,#efb665);--ace-chart-2:#30a2e8;--ace-chart-3:#47d181;--ace-chart-4:#e36398;--ace-chart-5:#9b81e9;--ace-chart-6:#e56c61;--ace-chart-7:#dddd3c;--ace-chart-8:#36d4e2;--ace-chart-9:#81d147;--ace-chart-10:#d37750}
.ace-workspace-page[data-ace-theme=light],[data-ace-theme=light]{--ace-chart-line:var(--shell-line,#d0d5cb);--ace-chart-on:#ffffff;
  --ace-chart-1:var(--ace-orange-2,#915424);--ace-chart-2:#1788cf;--ace-chart-3:#259353;--ace-chart-4:#dd3c7f;--ace-chart-5:#643cdd;--ace-chart-6:#df473a;--ace-chart-7:#868618;--ace-chart-8:#168d98;--ace-chart-9:#508f24;--ace-chart-10:#cc6133}
.ace-visually-hidden{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
.ace-chart{position:relative;margin:.75rem 0 1.25rem;padding:.9rem .9rem .6rem;border:1px solid var(--ace-chart-line);border-radius:12px;background:var(--ace-surface,#1b211f);color:var(--ace-ink,var(--ace-text,#f7f3ea))}
.ace-chart__caption{margin:0 0 .6rem;color:var(--ace-muted,#b9b0a0);font-size:.85rem;line-height:1.4}
.ace-chart__scroll{overflow-x:auto;overflow-y:hidden;max-width:100%;-webkit-overflow-scrolling:touch}
.ace-chart__svg{display:block;width:100%;min-width:480px;height:auto;max-width:100%;overflow:visible;font-family:inherit}
.ace-chart__svg text{fill:currentColor;font-size:12px}
.ace-chart__label{font-size:12px}
.ace-chart__label--link{fill:var(--ace-orange-2,#efb665);text-decoration:underline;text-underline-offset:2px}
.ace-chart__svg a:focus-visible .ace-chart__label--link{outline:2px solid var(--ace-orange-2,#efb665)}
.ace-chart__value{font-size:11px;font-weight:700}
.ace-chart__value--muted{fill:var(--ace-muted,#b9b0a0);font-weight:500}
.ace-chart__value--on{fill:var(--ace-chart-on);font-weight:700}
.ace-chart__legend,.ace-chart__axis{font-size:11px;fill:var(--ace-muted,#b9b0a0)}
.ace-chart__axis--muted{fill:var(--ace-muted,#b9b0a0);opacity:.8}
.ace-chart__grid{stroke:var(--ace-chart-line);stroke-width:1}
.ace-chart__fill-local{fill:var(--ace-chart-1)}
.ace-chart__fill-city{fill:var(--ace-muted,#b9b0a0);opacity:.75}
.ace-chart__c1{fill:var(--ace-chart-1)}.ace-chart__c2{fill:var(--ace-chart-2)}.ace-chart__c3{fill:var(--ace-chart-3)}.ace-chart__c4{fill:var(--ace-chart-4)}.ace-chart__c5{fill:var(--ace-chart-5)}
.ace-chart__c6{fill:var(--ace-chart-6)}.ace-chart__c7{fill:var(--ace-chart-7)}.ace-chart__c8{fill:var(--ace-chart-8)}.ace-chart__c9{fill:var(--ace-chart-9)}.ace-chart__c10{fill:var(--ace-chart-10)}
.ace-chart__s1{stroke:var(--ace-chart-1)}.ace-chart__s2{stroke:var(--ace-chart-2)}.ace-chart__s3{stroke:var(--ace-chart-3)}.ace-chart__s4{stroke:var(--ace-chart-4)}.ace-chart__s5{stroke:var(--ace-chart-5)}
.ace-chart__s6{stroke:var(--ace-chart-6)}.ace-chart__s7{stroke:var(--ace-chart-7)}.ace-chart__s8{stroke:var(--ace-chart-8)}.ace-chart__s9{stroke:var(--ace-chart-9)}.ace-chart__s10{stroke:var(--ace-chart-10)}
.ace-chart__seg--1{fill:var(--ace-chart-1)}
.ace-chart__seg--2{fill:var(--ace-chart-2)}
.ace-chart__seg--3{fill:var(--ace-chart-3)}
.ace-chart__seg--4{fill:var(--ace-chart-4)}
.ace-chart__seg{stroke:var(--ace-surface,#1b211f);stroke-width:1}
.ace-chart__col{fill:var(--ace-muted,#b9b0a0);opacity:.45}
.ace-chart__line{fill:none;stroke:var(--ace-chart-1);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.ace-chart__path{fill:none;stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.ace-chart__dot{fill:var(--ace-surface,#1b211f);stroke:var(--ace-chart-1);stroke-width:2.5}
.ace-chart__median{stroke:var(--ace-ink,var(--ace-text,#f7f3ea));stroke-width:3;stroke-linecap:round}
.ace-chart__pts circle{r:3.5px;fill:var(--ace-muted,#b9b0a0);opacity:.55}
.ace-chart__pt--hl{fill:var(--ace-chart-1);opacity:1;stroke:var(--ace-ink,var(--ace-text,#f7f3ea));stroke-width:2}
.ace-chart__ring{fill:none;stroke-width:30}
.ace-chart [data-tip]{cursor:default;outline:none}
.ace-chart [data-tip].is-active,.ace-chart [data-tip]:focus-visible{filter:brightness(1.25);stroke:var(--ace-ink,var(--ace-text,#f7f3ea));stroke-width:1.5}
.ace-chart [data-series].is-off{opacity:.12}
.ace-chart__legend-item{cursor:pointer;outline:none}
.ace-chart__legend-item:focus-visible rect{stroke:var(--ace-ink,var(--ace-text,#f7f3ea));stroke-width:2}
.ace-chart__legend-item.is-off{opacity:.45}
.ace-chart__legend-item.is-off text{text-decoration:line-through}
.ace-chart__cross{stroke:var(--ace-muted,#b9b0a0);stroke-width:1;stroke-dasharray:3 3;pointer-events:none}
.ace-chart__tools{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:.35rem 0 0}
.ace-chart__toggle,.ace-table__btn{padding:.3rem .7rem;border:1px solid var(--ace-chart-line);border-radius:999px;background:transparent;color:var(--ace-muted,#b9b0a0);font:inherit;font-size:.75rem;line-height:1.3;cursor:pointer}
.ace-chart__toggle:hover,.ace-chart__toggle:focus-visible,.ace-table__btn:hover,.ace-table__btn:focus-visible{border-color:var(--ace-orange-2,#efb665);color:var(--ace-ink,var(--ace-text,#f7f3ea))}
.ace-chart__toggle[aria-pressed="false"]{text-decoration:line-through;opacity:.7}
.ace-chart__menu,.ace-table__menu{position:relative;display:inline-block}
.ace-chart__menu>summary,.ace-table__menu>summary{list-style:none;display:inline-block;padding:.3rem .7rem;border:1px solid var(--ace-chart-line);border-radius:999px;color:var(--ace-muted,#b9b0a0);font-size:.75rem;line-height:1.3;cursor:pointer;user-select:none}
.ace-chart__menu>summary::-webkit-details-marker,.ace-table__menu>summary::-webkit-details-marker{display:none}
.ace-chart__menu>summary:hover,.ace-chart__menu>summary:focus-visible,.ace-chart__menu[open]>summary,.ace-table__menu>summary:hover,.ace-table__menu>summary:focus-visible,.ace-table__menu[open]>summary{border-color:var(--ace-orange-2,#efb665);color:var(--ace-ink,var(--ace-text,#f7f3ea))}
.ace-chart__menu-list,.ace-table__menu-list{position:absolute;left:0;top:calc(100% + 4px);z-index:40;min-width:13rem;margin:0;padding:.3rem;list-style:none;border:1px solid var(--ace-chart-line);border-radius:10px;background:var(--ace-surface-2,var(--ace-surface,#232a2c));box-shadow:0 8px 24px rgba(0,0,0,.3)}
.ace-chart__menu-list li,.ace-table__menu-list li{margin:0}
.ace-chart__menu-list button,.ace-chart__menu-list a,.ace-table__menu-list button,.ace-table__menu-list a{display:block;width:100%;box-sizing:border-box;padding:.4rem .6rem;border:0;border-radius:6px;background:transparent;color:var(--ace-ink,var(--ace-text,#f7f3ea));font:inherit;font-size:.8rem;text-align:left;text-decoration:none;cursor:pointer}
.ace-chart__menu-list button:hover,.ace-chart__menu-list a:hover,.ace-chart__menu-list button:focus-visible,.ace-chart__menu-list a:focus-visible,.ace-table__menu-list button:hover,.ace-table__menu-list a:hover,.ace-table__menu-list button:focus-visible,.ace-table__menu-list a:focus-visible{background:var(--ace-rail-hover,rgba(127,127,127,.15));outline:none}
.ace-chart__menu-list a.ace-chart__menu-api{border-top:1px solid var(--ace-chart-line);margin-top:.2rem;padding-top:.5rem;color:var(--ace-orange-2,#efb665)}
.ace-chart__data.is-open{margin-top:.6rem;overflow-x:auto}
.ace-chart__table{width:100%;border-collapse:collapse;font-size:.8rem}
.ace-chart__table caption{text-align:left;padding:.2rem 0;color:var(--ace-muted,#b9b0a0)}
.ace-chart__table th,.ace-chart__table td{padding:.3rem .5rem;border-bottom:1px solid var(--ace-chart-line);text-align:left}
.ace-chart__table th[scope="row"]{font-weight:600}
.ace-chart__table a{color:var(--ace-orange-2,#efb665)}
.ace-chart__tip{position:absolute;z-index:60;max-width:18rem;padding:.4rem .6rem;border:1px solid var(--ace-chart-line);border-radius:8px;background:var(--ace-surface-2,var(--ace-surface,#232a2c));color:var(--ace-ink,var(--ace-text,#f7f3ea));font-size:.8rem;line-height:1.35;box-shadow:0 6px 18px rgba(0,0,0,.35);pointer-events:none}
.ace-chart__skip,.ace-chart__note{margin:.25rem 0 1rem;color:var(--ace-muted,#b9b0a0);font-size:.85rem;line-height:1.45}
.ace-chart__strip{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.ace-chart__cell h4{margin:0 0 .35rem;font-size:1rem}
.ace-chart__reading{margin:0 0 .5rem;font-size:.85rem;line-height:1.5;color:var(--ace-muted,#b9b0a0)}
.ace-chart__reading strong{color:var(--ace-ink,var(--ace-text,#f7f3ea))}
.ace-chart__cell .ace-chart{margin-top:0}
.ace-source-panel--charts h3{margin:1.4rem 0 .4rem;font-size:1.05rem}
@media(max-width:820px){.ace-chart__strip{grid-template-columns:1fr}}
@media(prefers-reduced-motion:no-preference){.ace-chart [data-tip]{transition:filter .12s ease,opacity .2s ease}.ace-chart [data-series]{transition:opacity .2s ease}}

/* Generic data tables: any <table class="ace-table"> gets sorting, filtering, paging, sticky headers and exports. */
.ace-table-wrap{position:relative;max-width:100%;overflow:auto;border:1px solid var(--ace-chart-line);border-radius:10px;background:var(--ace-surface,#1b211f);color:var(--ace-ink,var(--ace-text,#f7f3ea))}
.ace-table-wrap--tall{max-height:32rem}
.ace-table-wrap .ace-table{width:100%;border-collapse:separate;border-spacing:0;font-size:.82rem;margin:0}
.ace-table-wrap .ace-table caption{caption-side:top;text-align:left;padding:.45rem .6rem .2rem;color:var(--ace-muted,#b9b0a0);font-size:.8rem}
.ace-table-wrap .ace-table th,.ace-table-wrap .ace-table td{padding:.38rem .6rem;border-bottom:1px solid var(--ace-chart-line);text-align:left;vertical-align:top}
.ace-table-wrap .ace-table thead th{position:sticky;top:0;z-index:2;background:var(--ace-surface-2,var(--ace-surface,#232a2c));color:var(--ace-ink,var(--ace-text,#f7f3ea));font-weight:600;white-space:nowrap}
.ace-table-wrap .ace-table tbody tr:nth-child(even) td,.ace-table-wrap .ace-table tbody tr:nth-child(even) th{background:var(--ace-rail-hover,rgba(127,127,127,.07))}
.ace-table-wrap .ace-table tbody tr:hover td,.ace-table-wrap .ace-table tbody tr:hover th{background:rgba(127,127,127,.14)}
.ace-table-wrap .ace-table td.is-num,.ace-table-wrap .ace-table th.is-num{text-align:right;font-variant-numeric:tabular-nums}
.ace-shell .ace-table-wrap .ace-table thead th .ace-table__sort,.ace-table__sort{display:inline-flex;box-shadow:none;border-radius:0;min-height:0;align-items:center;gap:.3rem;width:100%;padding:0;border:0;background:transparent;color:inherit;font:inherit;font-weight:inherit;text-align:inherit;cursor:pointer}
.ace-table__sort::after{content:"";display:inline-block;width:.5em;height:.5em;border:solid currentColor;border-width:0 1.5px 1.5px 0;opacity:.35;transform:translateY(-.15em) rotate(45deg)}
th[aria-sort="ascending"] .ace-table__sort::after{opacity:1;transform:translateY(.1em) rotate(-135deg)}
th[aria-sort="descending"] .ace-table__sort::after{opacity:1}
.ace-table__sort:focus-visible{outline:2px solid var(--ace-orange-2,#efb665);outline-offset:2px}
.ace-table__bar{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:.4rem 0}
.ace-table__search{flex:1 1 12rem;min-width:9rem;padding:.35rem .6rem;border:1px solid var(--ace-chart-line);border-radius:8px;background:var(--ace-surface-2,var(--ace-surface,#232a2c));color:var(--ace-ink,var(--ace-text,#f7f3ea));font:inherit;font-size:.8rem}
.ace-table__search:focus{outline:2px solid var(--ace-orange-2,#efb665);border-color:transparent}
.ace-table__count,.ace-table__pages{color:var(--ace-muted,#b9b0a0);font-size:.75rem}
.ace-table__pages{display:inline-flex;align-items:center;gap:.4rem;margin-left:auto}
.ace-table__pages button[disabled]{opacity:.4;cursor:default}
.ace-table tr.is-hidden{display:none}

/* ---------------------------------------------------------------- drawing in */

/* A chart draws itself as you arrive at it, one mark after another, in the order the
   chart is meant to be read. The marks are server-rendered SVG: nothing is redrawn,
   each is given its place in the queue and how it should arrive - a bar grows from
   its baseline, a point appears, a line draws itself from its start. The step
   shortens as the count grows, so four bars feel deliberate and two hundred cells
   do not take ten seconds. */
.ace-chart.is-drawing .ace-mark--growx{transform:scaleX(0);transform-box:fill-box;transform-origin:left center}
.ace-chart.is-drawing .ace-mark--growy{transform:scaleY(0);transform-box:fill-box;transform-origin:center bottom}
.ace-chart.is-drawing .ace-mark--pop{transform:scale(0);transform-box:fill-box;transform-origin:center}
.ace-chart.is-drawing .ace-mark--draw{stroke-dasharray:var(--ace-line-len,2000);stroke-dashoffset:var(--ace-line-len,2000)}
.ace-chart.is-drawing .ace-mark--fade{opacity:0}

.ace-chart.is-drawn .ace-mark--growx,
.ace-chart.is-drawn .ace-mark--growy,
.ace-chart.is-drawn .ace-mark--pop{transform:none}
.ace-chart.is-drawn .ace-mark--draw{stroke-dashoffset:0}
.ace-chart.is-drawn .ace-mark--fade{opacity:1}

@media (prefers-reduced-motion:no-preference){
	.ace-chart.is-drawing .ace-mark{
		transition:transform .52s cubic-bezier(.22,.7,.3,1),opacity .34s ease,stroke-dashoffset .9s cubic-bezier(.3,.7,.35,1);
		transition-delay:calc(var(--ace-mark-i,0) * var(--ace-mark-step,42ms));
	}
}
/* Asked for less motion: the finished chart, with nothing skipped. */
@media (prefers-reduced-motion:reduce){
	.ace-chart.is-drawing .ace-mark{transform:none!important;opacity:1!important;stroke-dashoffset:0!important}
}


/* ace-section-blocks */
/* Grouped open-data blocks on section and area pages. Tokens come from the theme shell
   (--ace-* map to --shell-* in both themes); the fallbacks are the dark palette. */
.ace-blocks{--ab-line:var(--ace-line,rgba(255,255,255,.12));--ab-surface:var(--ace-surface,#1b211f);--ab-surface-2:var(--ace-surface-2,#222a27);--ab-muted:var(--ace-muted,#b9b0a0);--ab-accent:var(--ace-orange-2,#efb665);--ab-gap:clamp(.9rem,1.8vw,1.25rem);color:var(--ace-ink,#f5f2ea);margin:clamp(2rem,4vw,3rem) 0 0;min-width:0;max-width:100%}
.ace-blocks *,.ace-blocks *::before,.ace-blocks *::after{box-sizing:border-box}

/* Contents: a compact chip bar at the top of the blocks on small screens (and for
   no-JavaScript readers); wide screens carry the same list in the left rail. */
@media(min-width:761px){.ace-blocks__contents--bar{display:none}}
.ace-blocks__contents{margin:0 0 var(--ab-gap);padding:.8rem 1rem;border:1px solid var(--ab-line);border-radius:12px;background:var(--ab-surface)}
.ace-blocks__contents-title{margin:0 0 .45rem;color:var(--ab-accent);font-size:.7rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase}
.ace-blocks__contents ol{display:flex;flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none}
.ace-blocks__contents a{display:inline-flex;align-items:center;gap:.4rem;padding:.35rem .7rem;border:1px solid var(--ab-line);border-radius:999px;background:var(--ab-surface-2);color:inherit;font-size:.86rem;line-height:1.2;text-decoration:none}
.ace-blocks__contents a:hover,.ace-blocks__contents a.is-current{border-color:var(--ab-accent)}
.ace-blocks__contents a.is-current{background:color-mix(in srgb,var(--ab-accent) 12%,var(--ab-surface-2))}
.ace-blocks__contents a:focus-visible,.ace-blocks__group summary:focus-visible,.ace-blocks a:focus-visible{outline:2px solid var(--ab-accent);outline-offset:2px}
.ace-blocks__count{display:inline-block;min-width:1.5em;padding:.05rem .45rem;border-radius:999px;background:var(--ab-accent);color:#1b1610;font-size:.72rem;font-weight:700;line-height:1.5;text-align:center;vertical-align:middle}
/* The same contents as the rail's nav part, beside the section's filters. */
.ace-blocks__nav .ace-blocks__navlist,.ace-chy__filters--list .ace-chy__shoplist{margin:0;padding:0;list-style:none;display:grid;gap:1px}
.ace-blocks__nav .ace-blocks__navlist li{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin:0;padding:0;border:0;background:none}
.ace-blocks__nav .ace-blocks__navlist a{flex:1;min-width:0;display:block;padding:.45rem .55rem;border-radius:7px;color:inherit;font-size:.86rem;line-height:1.3;text-decoration:none;overflow-wrap:anywhere}
.ace-blocks__nav .ace-blocks__navlist li.is-block a,#ace-shell-filter .ace-chy__shoplist li.is-block a{padding-left:.5rem;font-size:.82rem;color:var(--ace-muted,#b9b0a0)}
/* Depth in the rail: a hairline runs down the items inside a group and a short tick joins each
   one to it, so the nesting reads at a glance without indenting the labels off the edge. */
.ace-blocks__nav .ace-blocks__navlist li.is-block,#ace-shell-filter .ace-chy__shoplist li.is-block{position:relative;padding-left:.95rem}
.ace-blocks__nav .ace-blocks__navlist li.is-block::before,#ace-shell-filter .ace-chy__shoplist li.is-block::before{content:"";position:absolute;left:.42rem;top:0;bottom:0;width:1px;background:var(--ace-line,rgba(255,255,255,.14))}
.ace-blocks__nav .ace-blocks__navlist li.is-block::after,#ace-shell-filter .ace-chy__shoplist li.is-block::after{content:"";position:absolute;left:.42rem;top:50%;width:.32rem;height:1px;background:var(--ace-line,rgba(255,255,255,.14))}
/* Close the line off at the end of a run so it does not trail past the last item. */
.ace-blocks__nav .ace-blocks__navlist li.is-block:last-child::before,#ace-shell-filter .ace-chy__shoplist li.is-block:last-child::before{bottom:50%}
.ace-blocks__nav .ace-blocks__navlist li.is-block:not(:has(+ li.is-block))::before,#ace-shell-filter .ace-chy__shoplist li.is-block:not(:has(+ li.is-block))::before{bottom:50%}
.ace-blocks__nav .ace-blocks__navlist li.is-block.is-current::before,.ace-blocks__nav .ace-blocks__navlist li.is-block,#ace-shell-filter .ace-chy__shoplist li.is-block.is-current::after,#ace-shell-filter .ace-chy__shoplist li.is-block.is-current::before,.ace-blocks__nav .ace-blocks__navlist li.is-block,#ace-shell-filter .ace-chy__shoplist li.is-block.is-current::after{background:var(--ab-accent)}
.ace-blocks__nav .ace-blocks__navlist li.is-group a,.ace-blocks__nav .ace-blocks__navlist li.is-section a,.ace-blocks__nav .ace-blocks__navlist li.is-title a{font-weight:700}
.ace-blocks__nav .ace-blocks__navlist li.is-group{margin-top:.35rem}
.ace-blocks__nav .ace-blocks__navlist li.is-group:first-child{margin-top:0}
.ace-blocks__nav .ace-blocks__navlist li>span{flex:0 0 auto;min-width:1.5em;padding:.05rem .45rem;border:1px solid var(--ace-line,rgba(255,255,255,.14));border-radius:999px;color:var(--ace-ink,#b9b0a0);font-size:.72rem;line-height:1.5;text-align:center}
.ace-blocks__nav .ace-blocks__navlist a:hover,.ace-chy__filters--list .ace-chy__shoplist a[href^="#"]:hover{background:color-mix(in srgb,var(--ace-orange-2,#efb665) 10%,transparent)}
.ace-blocks__nav .ace-blocks__navlist a.is-current,.ace-chy__filters--list .ace-chy__shoplist a[href^="#"].is-current{color:var(--ace-orange-2,#efb665);background:color-mix(in srgb,var(--ace-orange-2,#efb665) 12%,transparent)}
.ace-blocks__nav .ace-blocks__navlist li.is-block a.is-current,#ace-shell-filter .ace-chy__shoplist li.is-block a.is-current{color:var(--ace-orange-2,#efb665)}
.ace-blocks__navfind{display:block;margin:0 0 .5rem}
.ace-blocks__navfind input{width:100%;min-width:0;padding:.5rem .6rem;border:1px solid var(--ace-line,rgba(255,255,255,.14));border-radius:8px;background:var(--ace-bg,transparent);color:inherit;font-size:.86rem}
.ace-blocks__navempty{margin:.4rem .55rem 0;color:var(--ace-muted,#b9b0a0);font-size:.82rem}
/* A section without filters: the rail is the contents list itself, searchable. */
.ace-chy__filters--list .ace-chy__shoplist li:has(>a[href^="#"]){display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin:0;padding:0;border:0;border-radius:0;background:none;box-shadow:none}
.ace-chy__filters--list .ace-chy__shoplist a[href^="#"]{flex:1;min-width:0;display:block;padding:.45rem .55rem;border-radius:7px;color:inherit;font-size:.86rem;line-height:1.3;text-decoration:none;overflow-wrap:anywhere}
.ace-chy__filters--list .ace-chy__shoplist a[href^="#"]{font-weight:400}
.ace-chy__filters--list .ace-chy__shoplist a[href^="#ace-group-"]{font-weight:700}
.ace-chy__filters--list .ace-chy__shoplist a[href^="#"]:hover{color:inherit}
.ace-chy__filters--list .ace-chy__shoplist li:has(>a[href^="#ace-group-"]){margin-top:.35rem}
.ace-chy__filters--list .ace-chy__shoplist li:has(>a[href^="#"])>span{flex:0 0 auto;padding:.05rem .45rem;border:1px solid var(--ace-line,rgba(255,255,255,.14));border-radius:999px;color:var(--ace-muted,#b9b0a0);font-size:.72rem;line-height:1.5}

/* Groups arrive closed; wide screens paint them open before the script runs. */
@media(min-width:761px){
  .ace-blocks:not(.is-js) .ace-blocks__group:not([open])::details-content{content-visibility:visible;display:block}
  .ace-blocks:not(.is-js) .ace-blocks__group:not([open]) summary::before{transform:translateY(-.11rem) rotate(45deg)}
}
.ace-blocks__group{margin:0 0 var(--ab-gap);border:0;border-top:1px solid var(--ab-line);padding:1.1rem 0 0;scroll-margin-top:calc(var(--ace-header-h,64px) + 1rem)}
.ace-blocks__group summary{list-style:none;cursor:pointer;display:flex;align-items:flex-start;gap:.55rem}
.ace-blocks__group summary::-webkit-details-marker{display:none}
.ace-blocks__group summary::before{content:"";flex:0 0 auto;width:.5rem;height:.5rem;margin:.55rem .2rem 0 0;border-right:2px solid var(--ab-accent);border-bottom:2px solid var(--ab-accent);transform:translateY(-.11rem) rotate(45deg);transform-origin:50% 50%;transition:transform .15s ease}
.ace-blocks__group:not([open]) summary::before{transform:translateX(-.11rem) rotate(-45deg)}
.ace-blocks__title{margin:0;font-size:clamp(1.05rem,1.8vw,1.25rem);font-weight:800;letter-spacing:.01em;display:flex;align-items:baseline;gap:.6rem;flex-wrap:wrap}
.ace-blocks__title .ace-blocks__count{background:transparent;border:1px solid var(--ab-line);color:var(--ace-ink,#f5f2ea);opacity:.82;font-weight:600;padding:.1rem .55rem}
.ace-blocks__body{display:grid;gap:var(--ab-gap);margin-top:var(--ab-gap)}

/* Every block becomes the same card, whatever its own inline styles say. */
.ace-blocks .ace-blocks__item{min-width:0;max-width:100%}
.ace-blocks .ace-blocks__item>section,.ace-blocks .ace-blocks__item>div:not(.ace-blocks__scroll)>section{margin:0;padding:clamp(1rem,2.2vw,1.35rem);border:1px solid var(--ab-line);border-radius:14px;background:var(--ab-surface);color:inherit}
/* Neighbourhood blocks are a heading div followed by siblings: card them together. */
.ace-blocks .ace-blocks__item>.ace-csection__heading:first-child{margin:0 0 .75rem;padding:0;border:0}
.ace-blocks .ace-blocks__item:not(:has(>section)){padding:clamp(1rem,2.2vw,1.35rem);border:1px solid var(--ab-line);border-radius:14px;background:var(--ab-surface)}
.ace-blocks .ace-blocks__item>section .ace-source-panel,.ace-blocks .ace-blocks__item>div>section .ace-source-panel{margin:0;padding:0;border:0;background:transparent}
.ace-blocks .ace-blocks__item>section.ace-source-panel,.ace-blocks .ace-blocks__item>div>section.ace-source-panel{margin:0;padding:clamp(1rem,2.2vw,1.35rem);border:1px solid var(--ab-line);border-radius:14px;background:var(--ab-surface);color:inherit}
/* Blocks inherit the page's ink in both themes; a few carry the dark palette inline. */
.ace-blocks .ace-blocks__item dd,.ace-blocks .ace-blocks__item strong,.ace-blocks .ace-blocks__item [class*="__value"],.ace-blocks .ace-blocks__item [class*="__num"],.ace-blocks .ace-blocks__item [class*="__big"]{color:inherit}
.ace-blocks .ace-blocks__item>style:first-child+section{margin:0}
.ace-blocks .ace-blocks__item>section>section{margin:0}
.ace-blocks .ace-blocks__item .ace-csection__heading{margin:0 0 .75rem;padding:0;border-top:0}
.ace-blocks .ace-blocks__item .ace-csection__heading h2,.ace-blocks .ace-blocks__item>section>h2,.ace-blocks .ace-blocks__item .ace-source-panel__head h2,.ace-blocks .ace-blocks__item h2{margin:0 0 .55rem;font-size:clamp(1.1rem,2vw,1.35rem);line-height:1.25;text-wrap:balance}
.ace-blocks .ace-blocks__item h3{margin:1rem 0 .4rem;font-size:1rem;line-height:1.3}
.ace-blocks .ace-blocks__item .ace-source-panel__head{margin-bottom:.75rem}
.ace-blocks .ace-blocks__item .ace-source-panel__eyebrow,.ace-blocks .ace-blocks__item .ace-life__eyebrow{margin:0 0 .3rem;color:var(--ab-accent);font-size:.68rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase}
.ace-blocks .ace-blocks__item p{margin:.35rem 0 0;line-height:1.55}
.ace-blocks .ace-blocks__item ul,.ace-blocks .ace-blocks__item ol{margin:.5rem 0 0}
.ace-blocks .ace-blocks__item img{max-width:100%;height:auto}
.ace-blocks .ace-blocks__item a{color:var(--ab-accent);text-underline-offset:.15em}
.ace-blocks .ace-blocks__item h2 a,.ace-blocks .ace-blocks__item h3 a{color:inherit;text-decoration:none}
.ace-blocks .ace-blocks__item h2 a:hover,.ace-blocks .ace-blocks__item h3 a:hover{text-decoration:underline}
@media(hover:none){}

/* One muted credit style for every source line. */
.ace-blocks .ace-blocks__item [class*="__credit"],.ace-blocks .ace-blocks__item .ace-source-panel__credit,.ace-blocks .ace-blocks__item>section>p.ace-csection-card__meta:last-child,.ace-blocks .ace-blocks__item>section>p[class*="__meta"]:last-child,.ace-blocks .ace-blocks__item>p.ace-csection-card__meta:last-child,.ace-blocks .ace-blocks__item>section>p:last-child:not([class]){margin-top:1rem;padding-top:.7rem;border-top:1px dashed var(--ab-line);color:var(--ab-muted);font-size:.8rem;line-height:1.5;opacity:1}
.ace-blocks .ace-blocks__item [class*="__credit"] a,.ace-blocks .ace-blocks__item .ace-source-panel__credit a,.ace-blocks .ace-blocks__item>section>p.ace-csection-card__meta:last-child a{color:inherit;text-decoration:underline}

/* Tables and charts fill their block; wide ones scroll inside it. */
.ace-blocks__scroll{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;margin:.6rem 0 0}
.ace-blocks .ace-blocks__item table{width:100%;min-width:0;border-collapse:collapse;font-size:.9rem}
.ace-blocks .ace-blocks__item th,.ace-blocks .ace-blocks__item td{padding:.45rem .6rem;border-bottom:1px solid var(--ab-line);text-align:left;vertical-align:top}
.ace-blocks .ace-blocks__item th{color:var(--ab-muted);font-size:.78rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase}
.ace-blocks .ace-blocks__item td[align=right],.ace-blocks .ace-blocks__item th[align=right]{text-align:right}
.ace-blocks__charts{display:grid;gap:var(--ab-gap);min-width:0}
.ace-blocks .ace-chart,.ace-blocks .ace-section-charts .ace-chart{max-width:100%;margin:0;padding:clamp(1rem,2.2vw,1.35rem);border:1px solid var(--ab-line);border-radius:14px;background:var(--ab-surface)}
.ace-blocks .ace-chart__scroll{max-width:100%;overflow-x:auto}
.ace-blocks .ace-chart__svg{display:block;width:100%;height:auto;max-width:100%}
.ace-blocks .ace-blocks__item .ace-chart{border:0;padding:0;background:transparent}
.ace-blocks pre,.ace-blocks code{max-width:100%;overflow-x:auto;overflow-wrap:anywhere}
.ace-blocks .ace-blocks__item [class*="__grid"],.ace-blocks .ace-blocks__item [class*="__cards"]{min-width:0}

/* Deferred charts and tables: a quiet placeholder that keeps its height. */
.ace-blocks__lazy{display:grid;place-items:center;min-height:9rem;padding:1.2rem;border:1px dashed var(--ab-line);border-radius:14px;color:var(--ab-muted);text-align:center;background:color-mix(in srgb,var(--ab-surface) 60%,transparent)}
.ace-blocks__lazy p{margin:0}
.ace-blocks__lazy a{color:var(--ab-accent)}
/* This is a control people click, so it takes readable ink rather than the muted
   token, which sits just under AA on the light ground. */
.ace-blocks.is-js .ace-blocks__lazy:not(.is-failed) a{color:var(--ace-ink,#f5f2ea);opacity:.92;text-decoration:none;pointer-events:auto}
.ace-blocks__lazy[aria-busy=true]{background-image:linear-gradient(90deg,transparent 0,color-mix(in srgb,var(--ab-accent) 12%,transparent) 50%,transparent 100%);background-size:200% 100%;animation:ace-blocks-shimmer 1.2s linear infinite}
.ace-blocks__lazy.is-failed a::after{content:" (try again)"}
@keyframes ace-blocks-shimmer{from{background-position:200% 0}to{background-position:-200% 0}}
@media(prefers-reduced-motion:reduce){.ace-blocks__lazy[aria-busy=true]{animation:none}}
.ace-blocks__more{margin:.8rem 0 0!important;padding-top:.6rem;border-top:1px solid var(--ab-line)}
.ace-blocks__more a{font-weight:700}
.ace-blocks__item.is-truncated>section{position:relative}

/* Small screens: groups fold to their summary, nothing may overflow sideways. */
@media(max-width:760px){
  .ace-blocks{--ab-gap:.85rem}
  .ace-blocks__group{padding-top:.85rem}
  .ace-blocks__group summary{padding:.2rem 0;min-height:44px}
  .ace-blocks .ace-blocks__item>section,.ace-blocks .ace-blocks__item:not(:has(>section)),.ace-blocks .ace-chart{padding:.9rem;border-radius:12px}
  .ace-blocks .ace-blocks__item [class*="__grid"],.ace-blocks .ace-blocks__item [class*="__occ"]{columns:1!important;grid-template-columns:1fr!important}
  .ace-blocks .ace-blocks__item [class*="__cards"]{grid-template-columns:repeat(auto-fill,minmax(120px,1fr))!important}
  .ace-blocks .ace-source-panel__metrics{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .ace-blocks .ace-blocks__item table{font-size:.84rem}
  .ace-blocks__contents{padding:.7rem .8rem}
  .ace-blocks__contents ol{flex-wrap:nowrap;overflow-x:auto;padding-bottom:.2rem;scrollbar-width:thin}
  .ace-blocks__contents a{white-space:nowrap}
}

/* The accent reads well on the dark ground but not on cream, so the light theme gets a deeper tone.
   Status colours are not handled here any more: connectors mark status with the shared .ace-stat
   classes in ace-data-blocks.css, which carry their own light palette. */
[data-ace-theme=light] .ace-blocks .ace-csection-card__kind:not(.ace-stat),[data-ace-theme=light] .ace-blocks .ace-blocks__contents-title{color:#6b3c19}

/* Landing on an anchor: a brief ring so the reader sees where they arrived, then it fades. */
.ace-blocks .is-anchor-flash{border-radius:12px;box-shadow:0 0 0 2px var(--ab-accent);transition:box-shadow .5s ease .9s}
@media (prefers-reduced-motion: reduce){.ace-blocks .is-anchor-flash{transition:none}}

/* The heading is the link. The copy control sits beside it and only shows on hover or focus,
   so a heading reads as a heading until the reader wants the link to it. */
.ace-blocks h2:has(.ace-blocks__anchor){display:flex;align-items:baseline;gap:.4rem}
.ace-blocks .ace-blocks__anchor{color:inherit;text-decoration:none}
.ace-blocks .ace-blocks__anchor:hover,.ace-blocks .ace-blocks__anchor:focus-visible{text-decoration:underline;text-underline-offset:.18em}
.ace-blocks .ace-blocks__copy{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:1.7rem;height:1.7rem;padding:0;border:0;border-radius:8px;background:none;color:var(--ab-muted);cursor:pointer;opacity:0;transform:translateY(1px)}
.ace-blocks h2:hover .ace-blocks__copy,.ace-blocks .ace-blocks__copy:focus-visible,.ace-blocks .ace-blocks__copy.is-done{opacity:1}
.ace-blocks .ace-blocks__copy:hover{color:var(--ab-accent);background:var(--ab-surface-2)}
.ace-blocks .ace-blocks__copy.is-done{color:var(--ab-accent)}
@media (prefers-reduced-motion: no-preference){.ace-blocks .ace-blocks__copy{transition:opacity .16s ease,color .16s ease,background .16s ease}}
@media (hover: none){.ace-blocks .ace-blocks__copy{opacity:.55}}

/* Folding the rail's contents group. The filter groups get this from the rail styles;
   the contents list is placed outside them, so it needs the same look here. Any group
   the component leaves without a button folds from its heading instead. */
#ace-shell-filter .ace-blocks__nav .alm__fold,#ace-shell-filter .alm__group>h3.is-foldhead{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;min-height:24px;margin:0 0 .55rem;padding:0;border:0;border-radius:6px;background:none;color:inherit;font:inherit;font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;text-align:left;cursor:pointer;transition:color .12s ease}
#ace-shell-filter .ace-blocks__nav .alm__fold:hover,#ace-shell-filter .alm__group>h3.is-foldhead:hover{color:var(--rail-accent,var(--ab-accent))}
#ace-shell-filter .alm__group.is-folded>.alm__fold,#ace-shell-filter .alm__group.is-folded>h3.is-foldhead,#ace-shell-filter .alm__group.is-folded>h3>.alm__fold{margin-bottom:0}
#ace-shell-filter .ace-blocks__nav .alm__fold::after,#ace-shell-filter .alm__group>h3.is-foldhead::after{content:"";flex:none;width:.42rem;height:.42rem;margin-right:.1rem;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .22s ease,opacity .12s linear;opacity:.7}
#ace-shell-filter .ace-blocks__nav .alm__fold:hover::after,#ace-shell-filter .alm__group>h3.is-foldhead:hover::after{opacity:1}
#ace-shell-filter .is-folded .alm__fold::after,#ace-shell-filter .alm__group.is-folded>h3.is-foldhead::after{transform:translateY(1px) rotate(-45deg)}
#ace-shell-filter .ace-blocks__nav h3{margin:0}
#ace-shell-filter .ace-blocks__nav .alm__foldwrap{display:grid;grid-template-rows:1fr;transition:grid-template-rows .24s ease}
#ace-shell-filter .ace-blocks__nav.is-folded .alm__foldwrap{grid-template-rows:0fr}
#ace-shell-filter .ace-blocks__nav .alm__body{min-height:0;overflow:hidden;opacity:1;transition:opacity .18s ease}
#ace-shell-filter .ace-blocks__nav.is-folded .alm__body{opacity:0;transition-duration:.12s}
/* A group folded from its heading has no animating wrapper, so its body simply goes. */
#ace-shell-filter .alm__group.is-folded>h3.is-foldhead~*{display:none}

/* A section's sub-routes sit above its search, because they change what the
   search is searching rather than narrowing what is already there. */
#ace-shell-filter .ace-chy__viewtabs--routes{margin:0 0 .75rem}

/* Find on this page. The match is marked where it sits, the one you are on is
   the loud one, and the rail lists them with enough sentence to choose by. */
/* The accent is a light orange in the dark theme and a dark brown in the light one,
   so the ink on top of it has to flip as well. A fixed dark ink read at 2.99:1 on
   the light theme, which is a highlight you cannot read. */
mark.ace-find{background:color-mix(in srgb,var(--ab-accent) 28%,transparent);color:inherit;border-radius:3px;padding:0 .08em;box-decoration-break:clone}
mark.ace-find.is-current{background:var(--ab-accent);color:var(--ab-accent-ink,#1b1610);box-shadow:0 0 0 2px color-mix(in srgb,var(--ab-accent) 45%,transparent)}
@media(prefers-reduced-motion:no-preference){mark.ace-find.is-current{transition:background .18s ease}}
#ace-shell-filter .ace-blocks__findnav{display:flex;align-items:center;justify-content:space-between;gap:.4rem;margin:0 0 .5rem}
#ace-shell-filter .ace-blocks__findat{font-size:.74rem;font-variant-numeric:tabular-nums;color:var(--ace-muted,#b9b0a0)}
#ace-shell-filter .ace-blocks__findlist{margin:0;padding:0;list-style:none;display:grid;gap:.2rem}
#ace-shell-filter .ace-blocks__findrow{display:block;width:100%;text-align:left;padding:.45rem .55rem;border:0;border-radius:7px;background:none;color:inherit;font:inherit;cursor:pointer}
#ace-shell-filter .ace-blocks__findrow:hover{background:color-mix(in srgb,var(--ab-accent) 10%,transparent)}
#ace-shell-filter .ace-blocks__findrow.is-current{background:color-mix(in srgb,var(--ab-accent) 18%,transparent)}
#ace-shell-filter .ace-blocks__findtext{display:block;font-size:.82rem;line-height:1.35;overflow-wrap:anywhere}
#ace-shell-filter .ace-blocks__findwhere{display:block;margin-top:.12rem;font-size:.7rem;letter-spacing:.03em;text-transform:uppercase;color:var(--ace-muted,#b9b0a0)}

/* Ink that sits on the accent. Dark by default, because the accent is light in the
   dark theme, and white where the accent itself is dark. */
.ace-blocks,#ace-shell-filter{--ab-accent-ink:#1b1610}
[data-ace-theme=light] .ace-blocks,[data-ace-theme=light] #ace-shell-filter,
body[data-ace-theme=light] .ace-blocks,body[data-ace-theme=light] #ace-shell-filter{--ab-accent-ink:#ffffff}

/* Anything that can be arrived at by anchor keeps clear of the sticky ticker.
   The offset is published by the script from the strip's real height, because the
   strip is not on every route and collapses to a sliver as you scroll; the fallback
   is its resting height plus the same padding. */
:where(.ace-shell__main) :is(h1,h2,h3,h4,[id]):target,
.ace-blocks__group,.ace-blocks__item,
.ace-chy__head,.ace-csection,
[data-ace-anchor]{
	scroll-margin-top:var(--ace-anchor-offset,70px);
}

/* The contents, for a rail that is shut.
   Forty pixels of width has no room for a heading, but it has room to say how many
   sections a page has, which one you are in, and roughly how far through you are.
   Drawn as an outline: a section is a notch with weight of its own, and everything
   under it hangs off its stem on an L. Where a heading opens with a year - which is
   what a timeline is made of - that year is shown, because four digits is the most
   useful thing that fits. It all sits under the search, where the contents sit when
   the rail is open. */
.ace-blocks__ticks{display:none}
.ace-shell[data-filter-closed="true"] #ace-shell-filter .ace-blocks__ticks{
	/* The rows take the whole width of the closed rail: half a column of marks reads
	   as something unfinished, and a wider row is a bigger thing to aim at. And the
	   list scrolls inside the rail, because a long page has more contents than a
	   column has height and the rest of them were simply unreachable. */
	display:flex;flex-direction:column;align-items:stretch;gap:7px;
	padding:16px 12px 14px 12px;
	flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
	scrollbar-width:thin;scrollbar-color:var(--ab-line,rgba(255,255,255,.22)) transparent;
}
.ace-shell[data-filter-closed="true"] #ace-shell-filter .ace-blocks__ticks::-webkit-scrollbar{width:6px}
.ace-shell[data-filter-closed="true"] #ace-shell-filter .ace-blocks__ticks::-webkit-scrollbar-thumb{
	background:var(--ab-line,rgba(255,255,255,.22));border-radius:3px;
}
/* The rail itself becomes the column the list scrolls inside. */
/* Only a rail with something in it. Every content route prints this aside empty
   and the theme hides it; forcing it to display on those routes put an empty
   column where the page should be and pushed the page itself into the account
   rail's column, for anyone who had ever collapsed the filter rail. */
.ace-shell[data-filter-closed="true"] #ace-shell-filter:not(:empty){
	/* Visible, not hidden: the closed rail's search row is wider than the rail on
	   purpose and leans out across the context strip, and hiding the overflow here
	   cut it off at the rail's own edge. The scrolling belongs to the list of marks,
	   which asks for it itself. */
	display:flex;flex-direction:column;min-height:0;overflow:visible;
}
.ace-blocks__tick{
	position:relative;display:flex;align-items:center;gap:5px;
	text-decoration:none;
	border-radius:2px;
	background:var(--ab-line,rgba(255,255,255,.24));
	transition:width .16s ease,height .16s ease,background .16s ease,opacity .16s ease,color .16s ease;
}
/* A plain mark still reads as a mark: the row is full width so it can be aimed at,
   and the bar inside it is drawn to the length that says what level this is. */
.ace-blocks__tick.is-section{min-height:8px;background:none}
.ace-blocks__tick.is-section::marker{content:none}
.ace-blocks__tick.is-section .ace-blocks__bar{flex:1 1 auto;width:auto;height:1px;border-radius:0}
/* A child sits in from the left on its bracket and stops short of the right, which
   is what says it is a child. It still runs most of the column: a twelve pixel dash
   in an eighty pixel rail reads as a rail half built rather than as a hierarchy. */
.ace-blocks__tick.is-block{min-height:6px;margin-left:8px;background:none;opacity:.8}
.ace-blocks__tick.is-block .ace-blocks__bar{flex:1 1 auto;width:auto;height:1px;border-radius:0}
/* The rule has to be seen to be doing the job of showing the width, so it is drawn
   from the ink colour rather than from the faintest line colour on the page. */
/* One weight of line for everything: the hierarchy is said by where a line starts
   and by the bracket it hangs off, not by how fat it is. */
.ace-blocks__bar{display:block;background:var(--ab-line,rgba(255,255,255,.22))}
.ace-blocks__tick.is-section .ace-blocks__bar{background:color-mix(in srgb,var(--ab-ink,#e8e4da) 30%,transparent)}
.ace-blocks__tick.is-current .ace-blocks__bar{background:var(--ab-accent,#f0b65e)}
.ace-blocks__tick.is-current .ace-blocks__bar{height:2px}

/* An icon stands in for anything that is not a date.
   The shell forces its own family onto every span inside it, which turns an icon
   into a blank box, so these have to ask for the icon font by name - exactly as the
   shell's own navigation icons already do. */
.ace-blocks__markicon.fa-solid,.ace-chy__viewicon.fa-solid{
	/* The shell ships its own subset of the icon font under its own name, and Font
	   Awesome's stylesheet is deferred on these pages, so asking for "Font Awesome 6
	   Free" gets a blank box. This is the family the shell's own navigation uses. */
	font-family:'Ace Workspace Icons','Font Awesome 6 Free'!important;
	font-weight:900!important;font-style:normal;
}

.ace-blocks__markicon{font-size:12px;line-height:1;color:var(--ab-muted,#9aa4a2)}
.ace-blocks__tick.is-section .ace-blocks__markicon{font-size:14px;color:var(--ab-ink,#e8e4da)}
.ace-blocks__tick.is-current .ace-blocks__markicon{color:var(--ab-accent,#f0b65e)}
.ace-blocks__tick.has-icon{background:none;height:auto;width:auto;min-height:12px}

/* A year rides beside its notch rather than inside it, so the notch keeps its shape
   and the digits stay legible at nine pixels. */
.ace-blocks__tick.has-stamp{background:none;height:auto;width:auto;min-height:12px}
.ace-blocks__tick.has-stamp::before,.ace-blocks__tick.has-stamp::after{opacity:.55}
/* The digits take the width they are given. A rail this narrow has room for four
   numerals at a readable size, and a year set at nine pixels in the corner of an
   eighty pixel column is a waste of the column. */
/* The year leads the row and the rule runs out behind it to the edge of the rail:
   with the rule first, the digits were pushed into the last thirty pixels of the
   column and the whole list read as a narrow strip of numbers. */
/* A dated row is the year, then its rule running out to the edge of the rail.
   The right of the column was empty while the years sat on their own in the left
   third, and an index reads far better as a set of lines of differing weight than
   as a list of numbers against a void. */
.ace-blocks__tick.has-stamp,.ace-blocks__tick.has-icon{align-items:center;gap:7px}
/* The rule is the left of the row and the year or the icon is the right of it, and
   what the rule is worth is its length: an era runs the width it is given, a single
   entry runs a shorter one, so the hierarchy can be read down the lines alone
   without reading a single digit. */
.ace-blocks__tick.has-stamp .ace-blocks__stamp,
.ace-blocks__tick.has-icon .ace-blocks__markicon{margin-left:auto;text-align:right}
/* Every date ends on the same edge, whatever level it is: a child indents on the
   left, where its bracket is, and never on the right. */
.ace-blocks__tick.is-block{margin-right:0}
/* The rule is written after the year in the markup, where a screen reader wants it;
   on screen it belongs first. */
.ace-blocks__bar{order:-1}
.ace-blocks__stamp{
	flex:0 0 auto;
	font:600 13px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;
	/* No trailing letter-space: it is added after the last numeral as well, and at two
	   different sizes that put the eras and their entries on two different right
	   edges. Tabular figures so the columns of digits line up as well. */
	letter-spacing:0;font-variant-numeric:tabular-nums;color:var(--ab-muted,#9aa4a2);
	white-space:nowrap;
}
.ace-blocks__tick.is-section.has-stamp .ace-blocks__stamp{
	font-size:15px;font-weight:700;color:var(--ab-ink,#e8e4da);
}
.ace-blocks__tick.has-stamp.is-current .ace-blocks__stamp{color:var(--ab-accent,#f0b65e)}

/* The bracket is drawn rather than typed, so it lines up whatever the row height
   works out to be, and the run carries down the left so consecutive children read as
   one group rather than a column of separate corners. */
.ace-blocks__tick.is-block::before{
	content:"";position:absolute;right:100%;top:-7px;bottom:0;width:7px;
	border-left:2px solid var(--ab-line,rgba(255,255,255,.18));
	border-bottom:2px solid var(--ab-line,rgba(255,255,255,.18));
	border-bottom-left-radius:4px;
}
.ace-blocks__tick.is-block:not(:last-child)::after{
	content:"";position:absolute;right:100%;top:0;height:calc(100% + 9px);width:2px;
	margin-right:5px;background:var(--ab-line,rgba(255,255,255,.18));
}
.ace-blocks__tick.is-block + .ace-blocks__tick.is-section{margin-top:12px}

.ace-blocks__tick{background:none}
.ace-blocks__tick:hover .ace-blocks__bar,.ace-blocks__tick:focus-visible .ace-blocks__bar{background:var(--ab-accent,#f0b65e)}
.ace-blocks__tick:hover .ace-blocks__markicon,.ace-blocks__tick:focus-visible .ace-blocks__markicon{color:var(--ab-accent,#f0b65e)}
.ace-blocks__tick:hover,.ace-blocks__tick:focus-visible{opacity:1}
.ace-blocks__tick.has-stamp:hover .ace-blocks__stamp,
.ace-blocks__tick.has-stamp:focus-visible .ace-blocks__stamp{color:var(--ab-accent,#f0b65e)}
/* Where you are, grown rather than merely coloured: it has to be findable at a
   glance from the other side of the screen. */
.ace-blocks__tick.is-current{opacity:1}
.ace-blocks__tick:focus-visible{outline:2px solid var(--ab-accent,#f0b65e);outline-offset:3px}
@media (prefers-reduced-motion:reduce){.ace-blocks__tick{transition:none}}

/* The section's own routes, stacked, when the rail is shut: the icon is all there is
   room for, and it is the only thing in there you can still navigate with. */
.ace-chy__viewicon{display:inline-block;margin-right:.4rem;opacity:.85}
.ace-shell[data-filter-closed="true"] #ace-shell-filter .ace-chy__viewtabs--routes{
	/* nowrap matters as much as the direction: the group wraps by default, and a
	   wrapping column turns into a second column the moment the height is constrained,
	   which is how the second route ended up beside the first rather than under it. */
	flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:6px;
	/* and let it grow to whatever the stack needs: the open state gives this a single
	   row's height, which the second route then painted straight over. */
	height:auto;min-height:0;max-height:none;
	padding:10px 8px 4px;border:0;background:none;
}
.ace-shell[data-filter-closed="true"] #ace-shell-filter .ace-chy__viewtabs--routes .ace-chy__viewtab{
	display:grid;place-items:center;width:100%;min-height:36px;padding:0;border-radius:10px;
}
.ace-shell[data-filter-closed="true"] #ace-shell-filter .ace-chy__viewtabs--routes .ace-chy__viewword{display:none}
.ace-shell[data-filter-closed="true"] #ace-shell-filter .ace-chy__viewicon{display:inline-block;font-size:15px}

/* Where you are: the line goes accent and ends in a dot, so the row reads as a
   position on a dial rather than merely as brighter text. */
.ace-blocks__tick.is-current .ace-blocks__stamp{color:var(--ab-accent,#f0b65e)}
.ace-blocks__tick.is-current .ace-blocks__bar{position:relative;overflow:visible}
.ace-blocks__tick.is-current .ace-blocks__bar::after{
	content:"";position:absolute;right:-1px;top:50%;
	width:5px;height:5px;margin-top:-2.5px;border-radius:50%;
	background:var(--ab-accent,#f0b65e);
}
/* An era is given air above it so the eye can find the groups without a heading. */
.ace-blocks__tick.is-section{margin-top:6px}
.ace-blocks__ticks>.ace-blocks__tick.is-section:first-child{margin-top:0}
/* Hover reads as the row coming forward, which is the same language as the wheel. */
.ace-blocks__tick:hover .ace-blocks__stamp,
.ace-blocks__tick:focus-visible .ace-blocks__stamp{color:var(--ab-ink,#e8e4da)}

/* The wheel. Rows away from where you are turn out of the light: a little smaller,
   a little softer, a little further back, so the rail reads as something coming
   round past the reader rather than as a flat list. The distance is published by
   the script as --away; nothing here needs to know how it was worked out. */
.ace-blocks__tick{
	transform-origin:center center;
	transform:scale(calc(1 - var(--away,0) * .022));
	filter:blur(calc(var(--away,0) * .22px));
	opacity:calc(1 - var(--away,0) * .075);
	transition:transform .28s ease,filter .28s ease,opacity .28s ease;
}
.ace-blocks__tick.is-current{transform:scale(1.1);filter:none;opacity:1}
.ace-blocks__tick:hover,.ace-blocks__tick:focus-visible{filter:none;opacity:1}
@media (prefers-reduced-motion:reduce){
	.ace-blocks__tick{transform:none;filter:none;opacity:1;transition:none}
	.ace-blocks__tick.is-current{transform:none}
}

/* The plain rail ("marks"), the default for any page that is not a timeline.
   A column of short, evenly spaced marks, the way an editor's minimap or a chat app's
   inline sidebar does it: a section mark is longer, a child mark shorter and set in,
   and the one you are at is the accent with a soft track behind it. The label is not
   drawn until you point at a mark, when it slides out beside it; nothing scales,
   blurs or turns. The dated "wheel" rail keeps all of that for timelines. */
/* Every mark fits without scrolling: the rows share the rail's height and shrink
   together on a long page, down to a floor you can still aim at. */
.ace-blocks__ticks.is-marks{gap:0;padding:14px 0 14px 0;align-items:stretch;justify-content:flex-start;overflow:visible}
.ace-blocks__ticks.is-marks .ace-blocks__tick{
	display:flex;align-items:center;justify-content:flex-start;
	flex:0 1 22px;min-height:9px;height:22px;margin:0;padding:0 0 0 22px;
	background:none;opacity:1;transform:none;filter:none;transition:none;border-radius:0;
}
.ace-blocks__ticks.is-marks .ace-blocks__tick::before,.ace-blocks__ticks.is-marks .ace-blocks__tick::after{content:none}
.ace-blocks__ticks.is-marks .ace-blocks__bar{
	flex:none;height:2px;border-radius:2px;
	width:18px;background:color-mix(in srgb,var(--ab-ink,#e8e4da) 34%,transparent);
	transition:width .16s ease,background .16s ease;
}
.ace-blocks__ticks.is-marks .ace-blocks__tick.is-block{margin-left:0;padding-left:30px}
.ace-blocks__ticks.is-marks .ace-blocks__tick.is-block .ace-blocks__bar{width:10px;background:color-mix(in srgb,var(--ab-ink,#e8e4da) 22%,transparent)}
.ace-blocks__ticks.is-marks .ace-blocks__tick.is-current .ace-blocks__bar,
.ace-blocks__ticks.is-marks .ace-blocks__tick:hover .ace-blocks__bar,
.ace-blocks__ticks.is-marks .ace-blocks__tick:focus-visible .ace-blocks__bar{background:var(--ab-accent,#f0b65e)}
.ace-blocks__ticks.is-marks .ace-blocks__tick.is-current .ace-blocks__bar{width:26px}
.ace-blocks__ticks.is-marks .ace-blocks__tick.is-block.is-current .ace-blocks__bar{width:16px}
/* A soft track marks the current row so it can be found from across the screen. */
.ace-blocks__ticks.is-marks .ace-blocks__tick.is-current{background:color-mix(in srgb,var(--ab-accent,#f0b65e) 10%,transparent)}
/* The label: hidden until pointed at, then slides out beside the mark over the page. */
.ace-blocks__ticks.is-marks .ace-blocks__label{
	position:absolute;left:calc(100% + 6px);top:50%;translate:-6px -50%;z-index:30;
	max-width:260px;padding:5px 9px;border:1px solid var(--shell-line,rgba(255,255,255,.14));border-radius:8px;
	background:var(--shell-panel,var(--ab-surface,#1b211f));color:var(--ab-ink,#e8e4da);
	font:600 12px/1.3 inherit;font-family:inherit;white-space:nowrap;
	opacity:0;pointer-events:none;transition:opacity .12s ease,translate .12s ease;
	box-shadow:0 8px 24px rgba(0,0,0,.28);
}
.ace-blocks__ticks.is-marks .ace-blocks__tick.is-block .ace-blocks__label{font-weight:500}
.ace-blocks__ticks.is-marks .ace-blocks__tick:hover .ace-blocks__label,
.ace-blocks__ticks.is-marks .ace-blocks__tick:focus-visible .ace-blocks__label{opacity:1;translate:0 -50%}
.ace-blocks__ticks.is-marks .ace-blocks__tick:focus-visible{outline:none}
.ace-blocks__ticks.is-marks .ace-blocks__tick:focus-visible .ace-blocks__bar{outline:2px solid var(--ab-accent,#f0b65e);outline-offset:3px}
/* A section starts a group: a touch of air above it, unless it is first. */
.ace-blocks__ticks.is-marks .ace-blocks__tick.is-section{margin-top:6px}
.ace-blocks__ticks.is-marks>.ace-blocks__tick.is-section:first-child{margin-top:0}
/* The rail itself must not clip the label. */
.ace-shell[data-filter-closed="true"] #ace-shell-filter .ace-blocks__ticks.is-marks{overflow:visible}
@media (prefers-reduced-motion:reduce){.ace-blocks__ticks.is-marks .ace-blocks__bar,.ace-blocks__ticks.is-marks .ace-blocks__label{transition:none}}


/* ace-charities */
/* Charities hub and profile. Server rendered, so it must look right before any JS. */
.ace-chy{max-width:1200px;margin:0 auto;padding:clamp(.8rem,1.6vw,1.35rem) 0 3rem}
.ace-chy__head h1{margin:0 0 .5rem;font-size:clamp(1.8rem,4vw,2.6rem);line-height:1.1;font-weight:800}
.ace-chy__lede{margin:0 0 1.6rem;max-width:62ch;line-height:1.55;color:var(--ace-muted,#b9b0a0)}








.ace-chy__count{margin:0 0 1rem;font-size:.9rem;color:var(--ace-muted,#b9b0a0)}
.ace-chy__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.9rem;margin:0;padding:0;list-style:none}
.ace-chy__card{display:flex}
.ace-chy__link{display:flex;flex-direction:column;gap:.45rem;width:100%;padding:1rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:14px;background:var(--ace-surface,#1c1813);color:inherit;text-decoration:none;transition:border-color .15s,transform .15s}
.ace-chy__link:hover{border-color:var(--ace-orange,#ff7a18);transform:translateY(-2px)}
.ace-chy__name{font-weight:700;line-height:1.25;text-wrap:balance}
.ace-chy__chips{display:flex;flex-wrap:wrap;gap:.3rem}
.ace-chy__chip{padding:.12rem .5rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:999px;font-size:.68rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ace-orange-2,#ff9a45)}
.ace-chy__blurb{font-size:.88rem;line-height:1.45;color:var(--ace-muted,#b9b0a0)}
.ace-chy__where{margin-top:auto;font-size:.8rem;color:var(--ace-muted,#b9b0a0);opacity:.85}
.ace-chy__empty{padding:2rem 0;color:var(--ace-muted,#b9b0a0)}
.ace-chy__pages ul{display:flex;flex-wrap:wrap;gap:.35rem;margin:1.6rem 0 0;padding:0;list-style:none}
.ace-chy__pages a,.ace-chy__pages span{display:inline-block;padding:.4rem .75rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:999px;text-decoration:none;font-size:.9rem}
.ace-chy__pages .current{background:var(--ace-orange,#ff7a18);color:#14120f;font-weight:700}
.ace-chy__credit{margin:2rem 0 0;font-size:.78rem;line-height:1.5;color:var(--ace-muted,#b9b0a0);opacity:.8}
.ace-chy-guide{margin:2rem 0 0;padding:clamp(1rem,2.5vw,1.35rem);border:1px solid color-mix(in srgb,var(--ace-orange-2,#ff9a45) 35%,transparent);border-radius:14px;background:color-mix(in srgb,var(--ace-orange-2,#ff9a45) 7%,var(--ace-surface,#1c1813))}
.ace-chy-guide h2{margin:0 0 .75rem;font-size:clamp(1.15rem,2.4vw,1.55rem)}
.ace-chy-guide ul{margin:.4rem 0 0;padding-left:1.2rem}.ace-chy-guide li+li{margin-top:.45rem}
.ace-chy-guide p,.ace-chy-guide li{line-height:1.5;color:var(--ace-muted,#b9b0a0)}
.ace-chy-guide a{color:var(--ace-orange-2,#ff9a45);text-underline-offset:.18em}
.ace-chy-guide__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:.75rem}
.ace-chy-guide__grid section{padding:.85rem;border-radius:10px;background:var(--ace-surface-2,#241f18)}
.ace-chy-guide__grid h3{margin:0 0 .4rem;font-size:.95rem}.ace-chy-guide__grid p{margin:0}
.ace-chy-guide__urgent{padding:.7rem .8rem;border-left:3px solid var(--ace-orange,#ff7a18);background:var(--ace-surface-2,#241f18)}
.ace-chy-guide__checked,.ace-help__source-date{font-size:.78rem;color:var(--ace-muted,#b9b0a0)}
.ace-help__source-date{margin:.25rem 0 .45rem;line-height:1.45}.ace-help__source-date a{color:var(--ace-orange-2,#ff9a45)}
@media(max-width:760px){.ace-chy-guide__grid{grid-template-columns:1fr}}
.ace-chy-profile{margin:2rem 0 0;padding:1.2rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:14px;background:var(--ace-surface,#1c1813)}
.ace-chy-profile h2{margin:0 0 .8rem;font-size:.78rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ace-muted,#b9b0a0)}
.ace-chy-profile dl{display:grid;gap:.6rem;margin:0}
.ace-chy-profile dl>div{display:grid;grid-template-columns:minmax(9rem,12rem) 1fr;gap:.6rem}
.ace-chy-profile dt{color:var(--ace-muted,#b9b0a0);font-size:.88rem}
.ace-chy-profile dd{margin:0;overflow-wrap:anywhere}
@media(max-width:620px){.ace-chy-profile dl>div{grid-template-columns:1fr}.ace-chy-profile dt{font-size:.78rem}}

/* The hub fills the column it is given; the shell already pads it. */
/* The block editor's constrained layout caps direct children of the post content at
   the theme's content width, which left the hub at 645px on a wide screen. The hub is
   an app view, not an article, so it takes the column it is given. */
body.ace-section-page .entry-content>.ace-chy,
body.ace-section-page .wp-block-post-content>.ace-chy{max-width:none!important;width:100%;margin-inline:0!important}
.ace-chy{max-width:none}

/* Filters as the shell's left filter rail. The column only appears once the rail
   has been moved into it, so every other content page is untouched. */
.ace-shell.has-chy-rail{grid-template-columns:var(--shell-left) var(--shell-filter) minmax(0,1fr) var(--shell-right)}
.ace-shell.has-chy-rail>.ace-shell__filter{display:block;padding:0;overflow-y:auto}
@media(min-width:1101px){
  .ace-shell.has-chy-rail>.ace-shell__left{grid-column:1}
  .ace-shell.has-chy-rail>.ace-shell__filter{grid-column:2;grid-row:1}
  .ace-shell.has-chy-rail>.ace-shell__main{grid-column:3;grid-row:1}
  .ace-shell.has-chy-rail>.ace-shell__right{grid-column:4;grid-row:1}
}
.ace-chy__rail-root{display:block}
.ace-chy__filters.is-busy{opacity:.6;pointer-events:none}
/* The no-JavaScript fallback only ever shows inside <noscript>. */
.ace-chy__plainfilters{margin:0 0 1.4rem;padding:1rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:14px}
.ace-chy__plainfilters select{margin-right:.4rem}
/* -------------------------------------------------------------------------
   The filter rail as one design system.

   Every control in the rail belongs to the same family: one radius scale, one
   control height, one focus ring, one accent. Before this the selects were
   10px, the buttons were pills, the view tabs were pills inside a pill and the
   A to Z was a loose scatter of round keys, so the rail read as four different
   widgets stacked up rather than one panel.

   Radii: 10px for anything you type in or choose from, 8px for a key in the
   A to Z pad, and the pill reserved for one thing only - an applied filter,
   which is the only element that is a token rather than a control.
   ------------------------------------------------------------------------- */
.ace-chy__filters{
	--rail-r:10px;            /* inputs, selects, buttons, tab track */
	--rail-r-key:8px;         /* a key in the A to Z pad */
	--rail-h:38px;            /* every control is the same height */
	--rail-gap:.5rem;
	--rail-accent:var(--shell-accent,var(--ace-orange,#ff7a18));
	/* The accent is a bright orange in the dark theme and a dark brown in the
	   light one, so the ink that sits on it has to flip too: near-black on the
	   bright fill, white on the brown one. Stating it here is what takes the
	   primary button from 3.1:1 to better than 6:1 in the light theme. */
	--rail-accent-ink:var(--ace-orange-ink,#1a1108);
	--rail-line:var(--shell-line,var(--ace-line,rgba(255,255,255,.12)));
	--rail-face:var(--ace-surface-2,#241f18);
	--rail-quick:.16s;
	--rail-ease:cubic-bezier(.2,.7,.35,1);
	margin:0 0 1.4rem;
}
.ace-chy__filters .alm__group{padding:12px 12px 14px}
.ace-chy__filters .alm__group h3{margin:0;font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase}

/* The group heading is its own collapse control, so it has to look like one:
   full width, a hit area that matches the row, and a chevron that turns. */
.ace-chy__filters .alm__fold{
	display:flex;align-items:center;justify-content:space-between;gap:.5rem;
	width:100%;min-height:24px;margin:0 0 .55rem;padding:0;
	border:0;border-radius:6px;background:none;color:inherit;
	font:inherit;letter-spacing:inherit;text-transform:inherit;cursor:pointer;
	transition:color var(--rail-quick) var(--rail-ease);
}
.ace-chy__filters .alm__fold:hover{color:var(--rail-accent)}
.ace-chy__filters .alm__group.is-folded .alm__fold{margin-bottom:0}
.ace-chy__filters .alm__fold::after{
	content:"";flex:none;width:.42rem;height:.42rem;margin-right:.1rem;
	border-right:2px solid currentColor;border-bottom:2px solid currentColor;
	transform:translateY(-2px) rotate(45deg);
	transition:transform .22s var(--rail-ease),opacity var(--rail-quick) linear;
	opacity:.7;
}
.ace-chy__filters .alm__fold:hover::after{opacity:1}
.ace-chy__filters .alm__group.is-folded .alm__fold::after{transform:translateY(1px) rotate(-45deg)}

/* The fold itself. The body stays in the tree so it can be animated; the row
   track is the one layout property that has to move, and everything inside it
   rides on transform and opacity. */
.ace-chy__filters .alm__foldwrap{
	display:grid;grid-template-rows:1fr;
	transition:grid-template-rows .24s var(--rail-ease);
}
.ace-chy__filters .alm__group.is-folded .alm__foldwrap{grid-template-rows:0fr}
.ace-chy__filters .alm__body{
	display:grid;gap:var(--rail-gap);min-height:0;overflow:hidden;
	transform:translateY(0);opacity:1;
	transition:opacity .18s var(--rail-ease),transform .24s var(--rail-ease);
}
.ace-chy__filters .alm__group.is-folded .alm__body{
	opacity:0;transform:translateY(-4px);
	transition-duration:.12s,.16s;
}

/* Inputs and selects. */
.ace-chy__filters .alm__sel{
	width:100%;height:var(--rail-h);box-sizing:border-box;
	padding:0 2rem 0 .7rem;
	border:1px solid var(--rail-line);border-radius:var(--rail-r);
	background:var(--rail-face);color:inherit;font:inherit;font-size:.85rem;
	-webkit-appearance:none;appearance:none;cursor:pointer;
	background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);
	background-position:calc(100% - 15px) 52%,calc(100% - 10px) 52%;
	background-size:5px 5px,5px 5px;background-repeat:no-repeat;
	transition:border-color var(--rail-quick) var(--rail-ease),background-color var(--rail-quick) var(--rail-ease);
}
.ace-chy__filters .alm__sel:hover{border-color:color-mix(in srgb,var(--rail-accent) 50%,var(--rail-line))}
.ace-chy__filters .ace-chy__field{display:block}

/* One focus ring for the whole rail. Two pixels of accent, two pixels of gap,
   and a one-pixel ring of the panel colour behind it so it reads on a light
   surface and a dark one alike. */
.ace-chy__filters :is(input,select,button,a):focus-visible,
.ace-chy__railtop .ace-chy__q:focus-visible,
.ace-railbar :is(input,button):focus-visible{
	outline:2px solid var(--rail-accent,var(--ace-orange,#ff7a18));
	outline-offset:2px;
	box-shadow:0 0 0 1px var(--shell-panel,var(--ace-bg,#14120f));
}

[data-ace-theme='light'] .ace-chy__filters,
[data-ace-theme='light'] .ace-chy__viewtabs{--rail-accent-ink:#fff}

/* Actions. Buttons join the family: same radius, same height, no stray pill. */
.ace-chy__filters .alm__actions{display:flex;flex-wrap:wrap;gap:var(--rail-gap)}
.ace-chy__filters .alm__btn{
	flex:1 1 auto;display:inline-flex;align-items:center;justify-content:center;
	height:var(--rail-h);padding:0 .9rem;
	border:1px solid var(--rail-line);border-radius:var(--rail-r);
	background:var(--rail-face);color:inherit;font:inherit;font-size:.85rem;font-weight:700;
	text-align:center;text-decoration:none;cursor:pointer;
	transition:border-color var(--rail-quick) var(--rail-ease),color var(--rail-quick) var(--rail-ease),background-color var(--rail-quick) var(--rail-ease),transform .1s var(--rail-ease);
}
.ace-chy__filters .alm__btn.is-primary{border-color:var(--rail-accent);background:var(--rail-accent);color:var(--rail-accent-ink)}
.ace-chy__filters .alm__btn:hover{border-color:var(--rail-accent);color:var(--rail-accent)}
.ace-chy__filters .alm__btn.is-primary:hover{background:color-mix(in srgb,var(--rail-accent) 86%,#fff);color:var(--rail-accent-ink)}
.ace-chy__filters .alm__btn:active{transform:translateY(1px)}
.ace-chy__filters .alm__group--do{border-bottom:0}

/* Applied filters, as removable tokens under the search band. The pill shape is
   theirs alone, so a token is never mistaken for a control. */
.ace-chy__applied{
	display:flex;flex-wrap:wrap;gap:.35rem;
	margin:0;padding:10px 12px;
	border-bottom:1px solid var(--rail-line);
	list-style:none;
}
.ace-chy__applied:empty{display:none;padding:0;border-bottom:0}
.ace-chy__applied li{display:flex;min-width:0;max-width:100%}
.ace-chy__pill{
	display:inline-flex;align-items:center;gap:.3rem;max-width:100%;
	height:26px;padding:0 .3rem 0 .6rem;
	border:1px solid color-mix(in srgb,var(--rail-accent) 40%,var(--rail-line));
	border-radius:999px;
	background:color-mix(in srgb,var(--rail-accent) 12%,transparent);
	color:inherit;font:inherit;font-size:.74rem;font-weight:700;line-height:1;cursor:pointer;
	animation:ace-pill-in .18s var(--rail-ease) both;
	transition:border-color var(--rail-quick) var(--rail-ease),background-color var(--rail-quick) var(--rail-ease);
}
.ace-chy__pill span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ace-chy__pill::after{
	content:"\00d7";flex:none;display:grid;place-items:center;
	width:16px;height:16px;border-radius:50%;
	font-size:.85rem;font-weight:400;line-height:1;opacity:.65;
	transition:opacity var(--rail-quick) linear,background-color var(--rail-quick) linear;
}
.ace-chy__pill:hover{border-color:var(--rail-accent);background:color-mix(in srgb,var(--rail-accent) 20%,transparent)}
.ace-chy__pill:hover::after{opacity:1;background:color-mix(in srgb,var(--rail-accent) 30%,transparent)}
.ace-chy__pill.is-leaving{animation:ace-pill-out .16s var(--rail-ease) both;pointer-events:none}
@keyframes ace-pill-in{from{opacity:0;transform:scale(.86)}to{opacity:1;transform:none}}
@keyframes ace-pill-out{from{opacity:1;transform:none}to{opacity:0;transform:scale(.86)}}

/* Working. The panel stays put and says so with one accent line rather than
   fading the whole rail out from under the pointer. */
.ace-chy__filters.is-busy{opacity:1}
.ace-chy__filters.is-busy .alm__group{opacity:.55;transition:opacity .18s linear}
.ace-chy__progress{
	position:relative;display:block;height:2px;overflow:hidden;
	background:color-mix(in srgb,var(--rail-accent) 18%,transparent);
}
.ace-chy__progress::before{
	content:"";position:absolute;inset:0;
	background:var(--rail-accent);
	transform:translateX(-100%);
	animation:ace-rail-progress 1.05s var(--rail-ease) infinite;
}
@keyframes ace-rail-progress{0%{transform:translateX(-100%)}60%{transform:translateX(35%)}100%{transform:translateX(100%)}}

/* In the rail the groups run edge to edge; inline (no JavaScript) they need a frame. */
.ace-chy:not(.is-railed) .ace-chy__filters{border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:14px;overflow:hidden}
@media(max-width:1100px){.ace-shell.has-chy-rail{grid-template-columns:var(--shell-left) minmax(0,1fr) var(--shell-right)}.ace-shell.has-chy-rail>.ace-shell__filter{display:none}}

/* Logo, or the charity's initial where there is no logo yet. */
.ace-chy__top{display:flex;gap:.6rem;align-items:flex-start}
.ace-chy__logo{flex:0 0 44px;width:44px;height:44px;border-radius:10px;object-fit:contain;background:#fff}
.ace-chy__logo--none{display:grid;place-items:center;background:var(--ace-surface-2,#241f18);border:1px solid var(--ace-line,rgba(255,255,255,.12));color:var(--ace-orange-2,#ff9a45);font-weight:800}

/* Tabs, shop map and related grid. */
.ace-chy__tabs ul{display:flex;gap:.4rem;margin:0 0 1.2rem;padding:0;list-style:none;border-bottom:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-chy__tabs a{display:inline-block;padding:.55rem .9rem;border-bottom:2px solid transparent;color:var(--ace-muted,#b9b0a0);text-decoration:none;font-weight:600}
.ace-chy__tabs a.is-on,.ace-chy__tabs a:hover{color:var(--ace-ink,#f5f2ea);border-bottom-color:var(--ace-orange,#ff7a18)}
/* The shops tab is a map interface: the map takes the column, the list is in the rail. */
.ace-chy__map{height:min(62vh,560px);margin:0 0 1.4rem;border-radius:14px;overflow:hidden}
.ace-chy__shoplist{display:grid;gap:.4rem;margin:0;padding:0;list-style:none;max-height:none}
.ace-chy__shoplist li{padding:.5rem .6rem;border:1px solid var(--shell-line,rgba(255,255,255,.12));border-radius:10px;background:var(--ace-surface-2,#241f18)}
.ace-chy__shoplist li[hidden]{display:none}
.ace-chy__shoplist a,.ace-chy__shoplist strong{display:block;line-height:1.3;font-weight:700;text-decoration:none;color:inherit}
.ace-chy__shoplist a:hover{color:var(--ace-orange-2,#ff9a45)}
.ace-chy__shoplist span{display:block;margin-top:.2rem;font-size:.76rem;line-height:1.35;color:var(--ace-muted,#b9b0a0)}

/* The rail's fixed header IS the search field: it fills the band edge to edge, square
   and flush, the way the feed filter search does on TalkFuse. 52px is the height of the
   brand block in the navigation rail, so the two rails line up. */
.ace-chy__railtop{display:flex;align-items:stretch;height:52px;padding:0;border-bottom:1px solid var(--shell-line,rgba(255,255,255,.12))}
.ace-shell.has-chy-rail .ace-chy__railtop{position:sticky;top:0;z-index:3;background:var(--shell-panel,#1c1813)}
.ace-chy__search{position:relative;display:flex;align-items:center;flex:1 1 auto;min-width:0}
.ace-chy__search svg{position:absolute;left:12px;pointer-events:none;opacity:.55}
.ace-chy__q{width:100%;height:100%;box-sizing:border-box;margin:0;padding:0 12px 0 32px;border:0;border-radius:0;background:transparent;color:var(--shell-ink,var(--ace-ink,#f5f2ea));font:inherit;font-size:.86rem;-webkit-appearance:none;appearance:none}
.ace-chy__q::-webkit-search-cancel-button{-webkit-appearance:none}
.ace-chy__q:focus{outline:none;background:var(--ace-surface-2,#241f18)}
.ace-chy__q:focus+*,.ace-chy__search:focus-within svg{opacity:.9}

/* Collapsed rail: the filter icon and nothing else, the way the nav rail collapses. */
.ace-shell.has-chy-rail>.ace-shell__edge--filter{display:block}
.ace-shell.has-chy-rail[data-filter-closed="true"]>.ace-shell__filter{padding:0;overflow:hidden}
.ace-shell.has-chy-rail[data-filter-closed="true"] .ace-chy__railtop{justify-content:center;padding:0}
.ace-shell.has-chy-rail[data-filter-closed="true"] .ace-chy__search,
.ace-shell.has-chy-rail[data-filter-closed="true"] .alm__group{display:none}
.ace-chy__compact{display:none}
.ace-shell.has-chy-rail[data-filter-closed="true"] .ace-chy__compact{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 8px}
.ace-chy__compact button{display:grid;place-items:center;width:44px;height:44px;min-height:44px;padding:0;border:1px solid var(--shell-line,rgba(255,255,255,.12));border-radius:12px;background:var(--ace-surface-2,#241f18);color:inherit;font:700 .82rem/1 'Space Grotesk',sans-serif;cursor:pointer}
.ace-chy__compact button:hover,.ace-chy__compact button:focus-visible,.ace-chy__compact button.is-on{border-color:var(--shell-accent,var(--ace-orange,#ff7a18));color:var(--shell-accent,var(--ace-orange-2,#ff9a45))}
.ace-chy__compact button.is-on{background:color-mix(in srgb,var(--shell-accent,var(--ace-orange,#ff7a18)) 14%,var(--ace-surface-2,#241f18))}
.ace-chy__compact svg{width:18px;height:18px}
.ace-chy-related{margin:2.5rem 0 0}
.ace-chy-related h2{margin:0 0 .9rem;font-size:.78rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ace-muted,#b9b0a0)}

/* Help near you. Text first, big targets, nothing that needs a fast phone. */
.ace-help__list{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:.9rem;margin:0;padding:0;list-style:none}
.ace-help__item{padding:1rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:14px;background:var(--ace-surface,#1c1813)}
.ace-help__kind{margin:0 0 .35rem;font-size:.7rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--ace-orange-2,#ff9a45)}
.ace-help__name{margin:0 0 .35rem;font-size:1.05rem;line-height:1.25}
.ace-help__name a{color:inherit;text-decoration:none}
.ace-help__name a:hover{color:var(--ace-orange-2,#ff9a45)}
.ace-help__where,.ace-help__hours,.ace-help__needs{margin:0 0 .35rem;font-size:.86rem;line-height:1.45;color:var(--ace-muted,#b9b0a0)}
.ace-help__needs{color:inherit}
.ace-help__acts{display:flex;flex-wrap:wrap;gap:.4rem;margin:.7rem 0 0}
.ace-help__act{display:inline-block;padding:.5rem .9rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:999px;font-size:.85rem;font-weight:700;text-decoration:none;color:inherit}
.ace-help__act:hover{border-color:var(--ace-orange,#ff7a18);color:var(--ace-orange-2,#ff9a45)}

/* View tabs in the rail: a segmented track, same height and radius family as
   the selects, with the accent sliding across rather than a pill inside a pill. */
.ace-chy__viewtabs{
	display:flex;gap:2px;height:var(--rail-h,38px);padding:3px;
	border:1px solid var(--rail-line,var(--ace-line,rgba(255,255,255,.12)));
	border-radius:var(--rail-r,10px);
	background:var(--rail-face,var(--ace-surface-2,#241f18));
}
.ace-chy__viewtab{
	flex:1 1 auto;min-width:0;padding:0 .55rem;
	border:0;border-radius:calc(var(--rail-r,10px) - 3px);
	background:transparent;color:inherit;font:inherit;font-size:.8rem;font-weight:700;
	line-height:1;cursor:pointer;
	transition:background-color var(--rail-quick,.16s) var(--rail-ease,ease),color var(--rail-quick,.16s) var(--rail-ease,ease);
}
.ace-chy__viewtab.is-on{background:var(--rail-accent,var(--ace-orange,#ff7a18));color:var(--rail-accent-ink,#14120f)}
.ace-chy__viewtab:not(.is-on):hover{background:color-mix(in srgb,var(--rail-accent,var(--ace-orange,#ff7a18)) 14%,transparent);color:var(--rail-accent,var(--ace-orange-2,#ff9a45))}
.ace-chy__viewtab:active{transform:translateY(1px)}

.ace-help__item{position:relative}
.ace-help__logo{position:absolute;top:1rem;right:1rem;width:40px;height:40px;border-radius:10px;object-fit:contain;background:#fff}
.ace-help__item:has(.ace-help__logo) .ace-help__name{padding-right:3rem}

/* Your council. */
.ace-cnc__ward{margin:0 0 1.8rem}
.ace-cnc__ward h2,.ace-cnc__month h2{margin:0 0 .7rem;font-size:.78rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ace-muted,#b9b0a0)}
/* A ward heading is its own anchor, with the way into that part of Sheffield on the
   right of it. The Areas link stays on show rather than waiting for hover, because it
   is somewhere people go and a touch screen has no hover. */
.ace-cnc__wardhead{display:flex;align-items:baseline;justify-content:space-between;gap:.6rem;flex-wrap:wrap}
.ace-cnc__wardname{color:inherit;text-decoration:none}
.ace-cnc__wardname:hover,.ace-cnc__wardname:focus-visible{color:var(--ace-orange-2,#ff9a45);text-decoration:underline;text-underline-offset:.18em}
.ace-cnc__area{display:inline-flex;align-items:center;gap:.3rem;flex:0 0 auto;padding:.1rem .45rem;border-radius:8px;color:var(--ace-muted,#b9b0a0);font-size:.72rem;letter-spacing:.04em;text-transform:none;text-decoration:none}
.ace-cnc__area:hover,.ace-cnc__area:focus-visible{color:var(--ace-orange-2,#ff9a45);background:var(--ace-surface-2,#241f18)}
.ace-cnc__area svg{flex:none}
.ace-cnc__map-directory h3.ace-cnc__wardhead{margin:0 0 .4rem}
.ace-cnc__people{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:.7rem;margin:0;padding:0;list-style:none}
.ace-cnc__person{display:flex;gap:.7rem;align-items:flex-start;padding:.8rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:14px;background:var(--ace-surface,#1c1813)}
.ace-cnc__photo{flex:0 0 48px;width:48px;height:48px;border-radius:50%;object-fit:cover;background:var(--ace-surface-2,#241f18)}
.ace-cnc__photo--none{display:grid;place-items:center;color:var(--ace-orange-2,#ff9a45);font-weight:800}
.ace-cnc__who{display:grid;gap:.15rem;min-width:0}
.ace-cnc__who a{font-weight:700;text-decoration:none;color:inherit}
.ace-cnc__who a:hover{color:var(--ace-orange-2,#ff9a45)}
.ace-cnc__party,.ace-cnc__posts{font-size:.8rem;color:var(--ace-muted,#b9b0a0)}
.ace-cnc__meetings{margin:0;padding:0;list-style:none}
.ace-cnc__month{margin:1.4rem 0 .2rem}
.ace-cnc__meeting{display:flex;gap:.9rem;align-items:baseline;padding:.7rem .2rem;border-bottom:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-cnc__when{flex:0 0 7.5rem;display:flex;gap:.5rem;align-items:baseline}
.ace-cnc__when span{font-size:.8rem;color:var(--ace-muted,#b9b0a0)}
.ace-cnc__what{display:grid;gap:.15rem;min-width:0}
.ace-cnc__what a{font-weight:600;text-decoration:none;color:inherit}
.ace-cnc__what a:hover{color:var(--ace-orange-2,#ff9a45)}
.ace-cnc__flags{font-size:.78rem;color:var(--ace-orange-2,#ff9a45)}
@media(max-width:600px){.ace-cnc__meeting{flex-direction:column;gap:.2rem}.ace-cnc__when{flex:none}}

/* A councillor in full. */
.ace-cnc__back{margin:0 0 1rem;font-size:.9rem}
.ace-cnc__back a{color:var(--ace-orange-2,#ff9a45)}
.ace-cnc__biohead{display:flex;flex-wrap:wrap;gap:1.2rem;align-items:flex-start;margin:0 0 1.6rem}
.ace-cnc__biophoto{flex:0 0 140px;width:140px;height:auto;border-radius:14px;object-fit:cover;background:var(--ace-surface-2,#241f18)}
.ace-cnc__biohead h2{margin:0 0 .3rem;font-size:clamp(1.4rem,3vw,2rem);line-height:1.15}
.ace-cnc__bio h3{margin:1.8rem 0 .7rem;font-size:.78rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ace-muted,#b9b0a0)}
.ace-cnc__acts{display:flex;flex-wrap:wrap;gap:.4rem;margin:.9rem 0 0}
.ace-cnc__map{height:min(50vh,420px);border-radius:14px;overflow:hidden}

/* A section map fills the panel it is in, with the filter rail still beside it and a
   key of its own. The main column stops scrolling so the map owns the space, the way
   the local map does. */
.ace-panelmap{position:relative;display:block;height:calc(100dvh - var(--wp-admin--admin-bar--height,0px) - 190px);min-height:420px;margin:0 0 1rem;border-radius:14px;overflow:hidden}
.ace-panelmap__map{width:100%;height:100%;margin:0;border-radius:14px}
.ace-mapkey{position:absolute;left:12px;bottom:12px;z-index:4;display:flex;flex-wrap:wrap;gap:.35rem;margin:0;padding:.45rem .55rem;list-style:none;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:10px;background:rgba(20,18,15,.86);backdrop-filter:blur(6px);font-size:.76rem}
.ace-mapkey li{display:inline-flex;align-items:center;gap:.35rem;padding:.1rem .3rem;color:var(--ace-ink,#f5f2ea)}
.ace-mapkey__pin{display:grid;place-items:center;width:18px;height:18px;border-radius:50%;border:1px solid rgba(0,0,0,.5);font-size:10px;line-height:1}
@media(max-width:900px){.ace-panelmap{height:60dvh}.ace-mapkey{left:8px;bottom:8px;font-size:.72rem}}

/* A map view is a panel, not a page: the column stops scrolling, the header keeps its
   place and the map takes whatever is left, with its key sitting on top of it. */
.ace-chy--mapview{display:flex;flex-direction:column;height:calc(100dvh - var(--wp-admin--admin-bar--height,0px) - 56px);padding-bottom:0}
.ace-chy--mapview .ace-chy__head{flex:none}
.ace-chy--mapview .ace-panelmap{flex:1 1 auto;height:auto;min-height:280px;margin-bottom:0}
.ace-chy--mapview .ace-panelmap__map,.ace-panelmap .ace-panelmap__map{height:100%!important;min-height:0}
.ace-chy--mapview .ace-chy__credit,.ace-chy--mapview .ace-chy__count{flex:none}
.ace-shell--content .ace-shell__main:has(.ace-chy--mapview){overflow:hidden}
/* The boosted strip and the footer belong under a list, not under a full-height map. */
.ace-chy--mapview~.ace-boosted,.ace-chy--mapview~.ace-explore,.ace-chy--mapview~.ace-explore-fold{display:none}
@media(max-width:900px){.ace-chy--mapview{height:auto}.ace-chy--mapview .ace-panelmap{height:60dvh}}
.ace-help__nhs{margin:0 0 1.25rem;padding:1rem 1.1rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:14px;background:var(--ace-surface,#1b211f)}
.ace-help__nhs h2{margin:0 0 .4rem;font-size:1.1rem}
.ace-help__nhs p{margin:0 0 .6rem;color:var(--ace-muted,#b9b0a0);line-height:1.5}
.ace-help__nhs-kinds{list-style:none;margin:0 0 .6rem;padding:0;display:flex;flex-wrap:wrap;gap:.5rem}
.ace-help__nhs-kinds li{padding:.35rem .7rem;border-radius:999px;border:1px solid var(--ace-line,rgba(255,255,255,.12))}
.ace-help__nhs-kinds a{color:inherit;text-decoration:none}.ace-help__nhs-kinds a:hover{text-decoration:underline}
.ace-parl__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:1rem;margin:1rem 0}
.ace-parl__card{padding:1rem;border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:14px;background:var(--ace-surface,#1b211f)}
.ace-parl__head{display:flex;gap:.8rem;align-items:flex-start}.ace-parl__head h3{margin:0 0 .25rem;font-size:1.05rem}
.ace-parl__photo{width:72px;height:72px;border-radius:50%;object-fit:cover;flex:none}
.ace-parl__mp{margin:0 0 .2rem}.ace-parl__mp a{font-weight:600;color:inherit;text-decoration:none}.ace-parl__mp a:hover{text-decoration:underline}
.ace-parl__party{display:inline-block;margin-left:.4rem;padding:.1rem .5rem;border-radius:999px;font-size:.78rem;background:var(--party,#888);color:#fff}
.ace-parl__since,.ace-parl__synopsis{margin:0 0 .5rem;color:var(--ace-muted,#b9b0a0);font-size:.9rem;line-height:1.45}
.ace-parl__activity{margin:.6rem 0 0}.ace-parl__activity summary{cursor:pointer;font-weight:600}.ace-parl__activity ul{margin:.5rem 0 0;padding-left:1.1rem}.ace-parl__activity li{margin:0 0 .35rem;line-height:1.4}.ace-parl__activity li span{display:block;font-size:.82rem;color:var(--ace-muted,#b9b0a0)}

/* =========================================================================
   Section covers - the introduction at the top of every section.

   A cover has one job: say what the section is, then get out of the way. The
   old sizes were tuned on a big monitor and read the viewport, but the column
   a cover actually lives in is the viewport minus the navigation rail minus
   the filter rail - about 860px on a 1400px laptop. A 5vw heading is 70px in
   a 500px column, which is how "Find your next favourite act" ended up one
   word per line and pushed every card below the fold.

   So the covers size themselves from their own column with container queries,
   with an upper bound that suits a wide monitor and a lower bound that stays
   readable on a phone. A height cap on a roomy screen is the backstop.
   ========================================================================= */
.ace-performers-index,
.ace-csection,
.ace-life,
.ace-sport {
	container-type: inline-size;
	container-name: acesec;
}

/* One scale, read by every cover below. cqi is 1% of the column, not the screen. */
.ace-performers-index,
.ace-csection,
.ace-life,
.ace-sport,
.ace-chy {
	--cover-title: clamp(1.55rem, 5cqi, 2.8rem);
	--cover-lede: clamp(.96rem, 1.7cqi, 1.12rem);
	--cover-kicker: clamp(.68rem, .95cqi, .76rem);
	--cover-gap: clamp(.55rem, 1.1cqi, .85rem);
	--cover-pad: clamp(1rem, 2.5cqi, 1.75rem);
}

.ace-performers-index .ace-performers-index__hero h1,
.ace-csection .ace-csection__hero h1,
.ace-life .ace-life__hero h1,
.ace-sport .ace-sport__hero h1 {
	margin: 0 0 var(--cover-gap);
	font-size: var(--cover-title);
	line-height: 1.06;
	letter-spacing: -.02em;
	text-wrap: balance;
}

.ace-performers-index .ace-performers-index__hero > div > p:last-child,
.ace-csection .ace-csection__hero > p:last-child,
.ace-life .ace-life__lede,
.ace-sport .ace-sport__hero > p:not(.ace-sport__kicker) {
	max-width: 62ch;
	margin: 0 0 var(--cover-gap);
	font-size: var(--cover-lede);
	line-height: 1.5;
}

.ace-performers-index .ace-performers-index__eyebrow,
.ace-csection .ace-csection__eyebrow,
.ace-life .ace-life__kicker,
.ace-sport .ace-sport__hero .ace-sport__kicker {
	margin: 0 0 .4rem;
	font-size: var(--cover-kicker);
}

/* The backstop. Only where there is room for a cover to misbehave: a phone is
   already one narrow column and clipping there would hide the lede. */
@media (min-width: 900px) and (min-height: 620px) {
	.ace-performers-index .ace-performers-index__hero,
	.ace-csection .ace-csection__hero,
	.ace-life .ace-life__hero,
	.ace-sport .ace-sport__hero {
		max-height: min(46dvh, 420px);
		overflow: clip;
	}
}

/* Performers: the stats sit beside the words where the column is wide enough,
   as a compact stack rather than three tall boxes that starve the heading. */
.ace-performers-index .ace-performers-index__hero {
	display: grid;
	grid-template-columns: minmax(0, 1fr);
	gap: var(--cover-pad);
	align-items: center;
	padding: var(--cover-pad);
	border-radius: 16px;
}
.ace-performers-index .ace-performers-index__stats {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: .4rem;
}
.ace-performers-index .ace-performers-index__stats div {
	display: flex;
	align-items: baseline;
	gap: .4rem;
	min-width: 0;
	padding: .5rem .65rem;
	border-radius: 10px;
}
.ace-performers-index .ace-performers-index__stats dt {
	font-size: clamp(1.05rem, 1.8cqi, 1.45rem);
	line-height: 1.1;
}
.ace-performers-index .ace-performers-index__stats dd {
	margin: 0;
	font-size: .68rem;
	line-height: 1.2;
}
/* On a phone the three figures share one narrow row, so the number sits above
   its label rather than beside it. */
@container acesec (max-width: 430px) {
	.ace-performers-index .ace-performers-index__stats div {
		flex-direction: column;
		align-items: flex-start;
		gap: .1rem;
		padding: .45rem .5rem;
	}
	.ace-performers-index .ace-performers-index__stats dd { font-size: .62rem }
}

/* The query reads the container's content box, not the viewport. Keep the
   words and stats stacked until both columns can remain comfortably wide. */
@container acesec (min-width: 720px) {
	.ace-performers-index .ace-performers-index__hero {
		grid-template-columns: minmax(0, 1fr) minmax(9rem, 13rem);
	}
	.ace-performers-index .ace-performers-index__stats {
		grid-template-columns: minmax(0, 1fr);
		gap: .35rem;
	}
}

/* The featured strip is the first real content on performers, so it starts
   close to the cover rather than a screen below it, and its heading stops
   fighting the note beside it for the same line. */
.ace-performers-index .ace-performers-index__featured {
	margin: clamp(1.1rem, 2.4cqi, 1.9rem) 0;
}
.ace-performers-index .ace-performers-index__featured > header {
	align-items: baseline;
	gap: 1.25rem;
	margin: 0 0 .8rem;
}
.ace-performers-index .ace-performers-index__featured > header > div {
	min-width: 0;
}
.ace-performers-index .ace-performers-index__featured > header > p {
	flex: 0 1 34ch;
	font-size: .88rem;
}
/* Once the heading stacks, a character-based flex basis becomes vertical space:
   34ch was turning one sentence into a 327px-tall empty column at half-window and
   phone widths. In the single-column composition the copy should size from its
   actual lines. */
@container acesec (max-width: 719px) {
	.ace-performers-index .ace-performers-index__featured > header {
		align-items: flex-start;
		gap: .5rem;
	}
	.ace-performers-index .ace-performers-index__featured > header > p {
		flex: 0 1 auto;
		width: 100%;
	}
}
.ace-performers-index .ace-performers-index__featured h2 {
	font-size: clamp(1.2rem, 2.4cqi, 1.7rem);
	text-wrap: balance;
}

/* Charities, help, civic, story and the rest share one head. Same reasoning:
   the column is not the screen, so the heading stops reading the screen. */
.ace-chy .ace-chy__head h1 {
	font-size: clamp(1.55rem, 3.1vw, 2.35rem);
	line-height: 1.08;
	letter-spacing: -.015em;
}
.ace-chy .ace-chy__lede {
	margin: 0 0 1.1rem;
	font-size: clamp(.94rem, 1.05vw, 1rem);
}

/* Housing and students carry a notice and a row of buttons under the lede, so
   the heading has to be smaller still or nothing below it is ever on screen. */
.ace-life .ace-life__hero {
	padding-bottom: clamp(1rem, 2.2cqi, 1.5rem);
}
.ace-life .ace-life h1,
.ace-life .ace-life__hero h1 {
	max-width: 22ch;
}
.ace-life .ace-life__notice {
	margin: 0 0 .9rem;
	padding: .7rem .85rem;
	font-size: .92rem;
	line-height: 1.45;
}

/* Sport's cover ends in its own jump nav, which is the fastest route into the
   page: it must be visible, so the words above it give way first. */
.ace-sport .ace-sport__hero {
	padding-bottom: clamp(1rem, 2.2cqi, 1.5rem);
}

/* Performers index: the same opening as every covered page (see class-ace-performers.php). */
.ace-page-covered .ace-performers-index__hero{display:contents}
.ace-page-covered .ace-performers-index__copy{position:relative;z-index:2;box-sizing:content-box;width:min(calc(100% - 2 * var(--wp--style--root--padding-left,1.25rem)),980px);margin-inline:auto;padding:clamp(6rem,15vh,10rem) 0 clamp(.75rem,2vh,1.5rem)}
.ace-page-covered .ace-performers-index__copy h1{margin:0;font-size:clamp(2.35rem,5vw,4.8rem);line-height:.98;letter-spacing:-.045em;text-wrap:balance;text-shadow:0 2px 24px rgba(0,0,0,.5)}
.ace-page-covered .ace-performers-index__copy>p:last-child{max-width:700px;margin:1.1rem 0 0;font-size:clamp(1rem,1.35vw,1.2rem);line-height:1.62;text-shadow:0 1px 12px rgba(0,0,0,.72)}
.ace-page-covered .ace-performers-index__stats{position:relative;z-index:2;width:min(calc(100% - 2 * var(--wp--style--root--padding-left,1.25rem)),980px);margin:1rem auto 0}
.ace-page-covered .ace-performers-index>*:not(.ace-performers-index__hero){position:relative;z-index:1}
.ace-page-covered .ace-performers-index .ace-cover__fade{background:linear-gradient(to bottom,color-mix(in srgb,var(--ace-bg,#121614) 4%,transparent) 0%,color-mix(in srgb,var(--ace-bg,#121614) 22%,transparent) 35%,color-mix(in srgb,var(--ace-bg,#121614) 70%,transparent) 68%,var(--ace-bg,#121614) 100%)}
@media(max-width:640px){.ace-page-covered .ace-performers-index__copy{padding-top:clamp(4.5rem,13vh,7rem)}.ace-page-covered .ace-performers-index__copy h1{font-size:clamp(2rem,10vw,3.2rem)}}


/* ace-rail-filters */
/* The narrow-screen twin of the section filter rail.
   The shell turns its columns into drawers at 900px, and the rail itself stops being
   laid out at 1100px (ace-charities.css), so 1100px is where the results actually
   lose their filters and where this has to appear. Above it the rail is on screen and
   this is hidden, so the two are never both there.
   Shape follows the TalkFuse feed toolbar: compact by default, and the toggle wears
   an accent-tinted border so it reads as the way in rather than another sort tab. */
.ace-railbar { display: none; }

/* The rail column is taken out of the layout below 1100px (ace-charities.css), which
   also took the shell's own drawer with it: the Filters button had nowhere to open on
   a phone. So the drawer is spelled out here for every width where the column is gone,
   not only for the band between the two breakpoints. */
@media (max-width: 1100px) {
	.ace-shell.has-chy-rail[data-drawer='filter'] > .ace-shell__filter {
		display: block;
		position: absolute;
		top: 0;
		bottom: 0;
		left: 0;
		width: min(84vw, 320px);
		z-index: 100;
	}
	.ace-shell.has-chy-rail[data-drawer='filter'] > .ace-shell__scrim:not([hidden]) {
		display: block;
		position: absolute;
		inset: 0;
		border: 0;
		border-radius: 0;
		background: #0009;
		z-index: 90;
	}
}

@media (max-width: 1100px) {
	.ace-railbar { display: block; margin: 0 0 14px; }
	.ace-railbar__row { display: flex; align-items: center; gap: 8px; }
	.ace-railbar__search {
		flex: 1;
		min-width: 0;
		display: flex;
		align-items: center;
		gap: 7px;
		padding: 7px 11px;
		border: 1px solid var(--ace-line, #d0d5cb);
		border-radius: 8px;
		background: var(--ace-surface, #fafbf5);
		color: var(--ace-muted, #68736c);
	}
	.ace-railbar__q {
		flex: 1;
		min-width: 0;
		border: 0;
		background: none;
		color: var(--ace-ink, #252d29);
		font: inherit;
		font-size: 13px;
		padding: 0;
	}
	.ace-railbar__q:focus { outline: none; }
	.ace-railbar__search:focus-within { border-color: var(--ace-orange, #915424); }
	.ace-railbar__toggle {
		flex: none;
		display: inline-flex;
		align-items: center;
		gap: 6px;
		padding: 8px 13px;
		font: inherit;
		font-size: 13px;
		font-weight: 600;
		cursor: pointer;
		border-radius: 8px;
		background: transparent;
		color: var(--ace-orange, #915424);
		border: 1px solid color-mix(in srgb, var(--ace-orange, #915424) 55%, var(--ace-line, #d0d5cb));
	}
	.ace-railbar__toggle:hover,
	.ace-railbar__toggle:focus-visible { border-color: var(--ace-orange, #915424); }
	.ace-railbar noscript { display: block; margin-top: 10px; }
}

/* A group rendered as tabs rather than a dropdown - "View as", and the A to Z,
   whose keys have to wrap into a block rather than run off the side of a 232px
   rail. The A to Z is a keypad, not a scatter: an even grid of equal keys on
   the same radius family as the controls above it, so the rail reads as one
   panel rather than a strip of loose buttons. */
.ace-chy__filters .ace-chy__viewtabs { display: flex; flex-wrap: wrap; }

.ace-chy__filters .alm__group[data-fold='letter'] .ace-chy__viewtabs {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(30px, 1fr));
	gap: 4px;
	height: auto;
	padding: 4px;
}
.ace-chy__filters .alm__group[data-fold='letter'] .ace-chy__viewtab {
	min-width: 0;
	height: 30px;
	padding: 0;
	border-radius: var(--rail-r-key, 8px);
	background: color-mix(in srgb, var(--rail-line, rgba(255, 255, 255, .12)) 55%, transparent);
	font-size: .78rem;
	font-variant-numeric: tabular-nums;
	transition:
		background-color var(--rail-quick, .16s) var(--rail-ease, ease),
		color var(--rail-quick, .16s) var(--rail-ease, ease),
		transform .12s var(--rail-ease, ease);
}
.ace-chy__filters .alm__group[data-fold='letter'] .ace-chy__viewtab:not(.is-on):hover {
	background: color-mix(in srgb, var(--rail-accent, #ff7a18) 22%, transparent);
	transform: translateY(-1px);
}
.ace-chy__filters .alm__group[data-fold='letter'] .ace-chy__viewtab.is-on {
	background: var(--rail-accent, #ff7a18);
	color: var(--rail-accent-ink, #14120f);
}

/* The drawer slides rather than appearing. Transform and opacity only, so the
   shell's grid is never relaid out mid-animation. */
@media (max-width: 1100px) {
	.ace-shell.has-chy-rail > .ace-shell__filter {
		transition: transform .22s cubic-bezier(.2, .7, .35, 1);
	}
	.ace-shell.has-chy-rail[data-drawer='filter'] > .ace-shell__filter {
		transform: translateX(0);
	}
	.ace-shell.has-chy-rail > .ace-shell__scrim:not([hidden]) {
		animation: ace-rail-scrim .22s ease both;
	}
	@keyframes ace-rail-scrim { from { opacity: 0 } to { opacity: 1 } }
}
@media (max-width: 1100px) {
	.ace-shell.has-chy-rail[data-drawer='filter'] > .ace-shell__filter {
		animation: ace-rail-drawer .22s cubic-bezier(.2, .7, .35, 1) both;
	}
	@keyframes ace-rail-drawer { from { transform: translateX(-100%) } to { transform: none } }
}

/* Restraint is the point, and someone who has asked for less movement gets none. */
@media (prefers-reduced-motion: reduce) {
	.ace-chy__filters *,
	.ace-chy__filters *::before,
	.ace-chy__filters *::after,
	.ace-railbar *,
	.ace-shell.has-chy-rail > .ace-shell__filter,
	.ace-shell.has-chy-rail > .ace-shell__scrim {
		animation-duration: .01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: .01ms !important;
	}
}

/* Multiple-choice groups, as pills.
   Options that are not mutually exclusive - class types, venues - read better as
   things you switch on than as a list you pick one of. */
.ace-chy__filters .ace-chy__pills { display: flex; flex-wrap: wrap; gap: .35rem; }
.ace-chy__filters .ace-chy__pillbtn {
	display: inline-flex; align-items: center; gap: .35rem;
	padding: .3rem .6rem; border-radius: 999px; cursor: pointer;
	font: inherit; font-size: .82rem; line-height: 1.3;
	color: var(--ab-ink, inherit);
	background: var(--ab-soft, rgba(127, 127, 127, .12));
	border: 1px solid var(--ab-line, rgba(127, 127, 127, .3));
	transition: background .18s ease, border-color .18s ease, color .18s ease;
}
.ace-chy__filters .ace-chy__pillbtn small { opacity: .6; font-size: .75em; }
.ace-chy__filters .ace-chy__pillbtn:hover { border-color: var(--ab-accent, currentColor); }
.ace-chy__filters .ace-chy__pillbtn.is-on {
	background: var(--ab-accent, #2f6f4f);
	border-color: var(--ab-accent, #2f6f4f);
	color: var(--ab-accent-ink, #fff);
}
.ace-chy__filters .ace-chy__pillbtn.is-on small { opacity: .8; }

/* A span of numbers, as two handles over one track. The inputs sit on top of each
   other so both handles share the same line; only the thumbs take pointer events,
   or the upper input would swallow every click meant for the lower one. */
.ace-chy__filters .ace-chy__range { position: relative; padding: .5rem .25rem 0; }
.ace-chy__filters .ace-chy__rangetrack {
	position: absolute; left: .25rem; right: .25rem; top: 1.05rem; height: 4px;
	border-radius: 999px; background: var(--ab-line, rgba(127, 127, 127, .35));
}
.ace-chy__filters .ace-chy__rangefill {
	position: absolute; top: 0; bottom: 0; left: var(--lo, 0%); right: calc(100% - var(--hi, 100%));
	border-radius: 999px; background: var(--ab-accent, #2f6f4f);
}
.ace-chy__filters .ace-chy__range input[type='range'] {
	-webkit-appearance: none; appearance: none;
	position: relative; display: block; width: 100%; height: 1.4rem; margin: 0;
	background: transparent; pointer-events: none;
}
.ace-chy__filters .ace-chy__range input[type='range'] + input[type='range'] { margin-top: -1.4rem; }
.ace-chy__filters .ace-chy__range input[type='range']::-webkit-slider-thumb {
	-webkit-appearance: none; appearance: none; pointer-events: auto; cursor: grab;
	width: 1rem; height: 1rem; border-radius: 50%;
	background: var(--ab-accent, #2f6f4f); border: 2px solid var(--ab-card, #fff);
	box-shadow: 0 1px 3px rgba(0, 0, 0, .35);
}
.ace-chy__filters .ace-chy__range input[type='range']::-moz-range-thumb {
	pointer-events: auto; cursor: grab;
	width: 1rem; height: 1rem; border-radius: 50%;
	background: var(--ab-accent, #2f6f4f); border: 2px solid var(--ab-card, #fff);
	box-shadow: 0 1px 3px rgba(0, 0, 0, .35);
}
.ace-chy__filters .ace-chy__range input[type='range']::-moz-range-track { background: transparent; }
.ace-chy__filters .ace-chy__rangeread { margin: .35rem 0 0; font-size: .8rem; opacity: .75; }

/* Venue names are not three words long, so where pills wrap by their own width the
   rail ends up a ragged puzzle. One venue per row reads as a list of places, which
   is what it is, and a long name truncates rather than pushing the rail wider. */
.ace-chy__filters .alm__group[data-fold='venue'] .ace-chy__pills { display: block; }
.ace-chy__filters .alm__group[data-fold='venue'] .ace-chy__pillbtn {
	display: flex; width: 100%; border-radius: .6rem;
	justify-content: space-between; text-align: left;
}
.ace-chy__filters .alm__group[data-fold='venue'] .ace-chy__pillbtn + .ace-chy__pillbtn { margin-top: .3rem; }
.ace-chy__filters .alm__group[data-fold='venue'] .ace-chy__pillbtn > span {
	overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0;
}
/* An open group must not clip what is inside it: a slider thumb and a focus ring
   both sit proud of their box, and the fold's own overflow was cutting them in
   half. A folded one still hides its body, or the collapse would leak. */
.ace-chy__filters .alm__group:not(.is-folded) .alm__body { overflow: visible; }
.ace-chy__filters .alm__group:not(.is-folded) .alm__foldwrap { overflow: visible; }
.ace-chy__filters .alm__group.is-folded .alm__body,
.ace-chy__filters .alm__group.is-folded .alm__foldwrap { overflow: hidden; }
.ace-chy__filters .ace-chy__range { padding-inline: .6rem; }

/* View tabs that wrap (Ghosts has five) were squeezed to one row's height by the rail's flex
   column, so the second and third rows spilled over the next heading. */
.ace-chy__viewtabs { flex: none; height: auto; }


/* ace-map-style */
.ace-site-map.leaflet-container{background:var(--ace-bg, #2c2c2e);color:var(--ace-ink, #f5f2ea);font:14px/1.4 "Space Grotesk",sans-serif;isolation:isolate}.ace-site-map.leaflet-container .leaflet-tile-pane{filter:brightness(0.78) contrast(1.28) saturate(0.7)}body[data-ace-theme=light] .ace-site-map.leaflet-container .leaflet-tile-pane{filter:none}.ace-site-map .ace-tiles--dark{filter:none}.ace-site-map .ace-map-labels{opacity:.75;pointer-events:none}.ace-site-map.leaflet-container .leaflet-bar{border:1px solid var(--ace-line, #48514e);box-shadow:0 4px 18px rgba(0,0,0,.2)}.ace-site-map.leaflet-container .leaflet-bar a{background:var(--ace-surface-2, #242b2a);color:var(--ace-ink, #f5f2ea);border-color:var(--ace-line, #48514e)}.ace-site-map.leaflet-container .leaflet-bar a:hover,.ace-site-map.leaflet-container .leaflet-bar a:focus{background:var(--ace-surface, #1d2323);color:var(--ace-orange-2, #efb665)}.ace-site-map.leaflet-container .leaflet-bar a.leaflet-disabled{color:var(--ace-muted, #abb5b1);opacity:.6}.ace-site-map.leaflet-container .leaflet-control a:focus-visible{outline:2px solid var(--ace-orange-2, #efb665);outline-offset:2px}.ace-site-map.leaflet-container .leaflet-control-attribution,.ace-site-map.leaflet-container .leaflet-control-layers{background:color-mix(in srgb, var(--ace-surface-2, #242b2a) 88%, transparent);color:var(--ace-muted, #abb5b1);font-family:inherit}.ace-site-map.leaflet-container .leaflet-control-attribution a{color:var(--ace-ink, #f5f2ea)}.ace-site-map.leaflet-container .leaflet-popup-content-wrapper,.ace-site-map.leaflet-container .leaflet-popup-tip,.ace-site-map.leaflet-container .leaflet-tooltip{background:var(--ace-surface-2, #242b2a);color:var(--ace-ink, #f5f2ea);border:1px solid var(--ace-line, #48514e);box-shadow:0 8px 30px rgba(0,0,0,.3333333333);font-family:inherit}.ace-site-map.leaflet-container .leaflet-popup-content a,.ace-site-map.leaflet-container .leaflet-popup-close-button{color:var(--ace-orange-2, #efb665)}.ace-site-map .marker-cluster{background:color-mix(in srgb, var(--ace-orange-2, #efb665) 30%, transparent)}.ace-site-map .marker-cluster div{background:var(--ace-surface-2, #242b2a);color:var(--ace-ink, #f5f2ea);border:1px solid var(--ace-orange-2, #efb665);font-family:inherit}.ace-site-map .ace-map-job-pin{display:grid;place-items:center;border:2px solid var(--ace-ink, #f5f2ea);border-radius:50%;background:var(--ace-orange-2, #efb665);color:var(--ace-bg, #14120f);box-shadow:0 2px 8px rgba(0,0,0,.4)}.ace-site-map:is(.is-satellite,.is-regular) .leaflet-tile-pane{filter:none}.ace-site-map .ace-map-job-pin svg{display:block;width:16px;height:16px;fill:currentColor}


/* ace-live-map */
﻿.alm{--alm-h: calc(100vh - var(--ace-header-h, 64px));--alm-bg: var(--ace-bg, #14120f);--alm-surface: rgba(28, 24, 19, 0.95);--alm-surface-2: rgba(36, 31, 24, 0.97);--alm-ink: var(--ace-ink, #f5f2ea);--alm-muted: var(--ace-muted, #b9b0a0);--alm-line: rgba(255, 255, 255, 0.12);--alm-orange: var(--ace-orange, #ff7a18);--alm-orange-2: var(--ace-orange-2, #ff9a45);--alm-teal: #12b3a6;--alm-blue: #4ea1ff;--alm-purple: #a06cff;--alm-red: #ff4d4f;--alm-amber: #ffb020;--alm-green: #3ecf8e;position:relative;width:100%;height:var(--alm-h);min-height:420px;background:var(--alm-bg);color:var(--alm-ink);overflow:hidden;font:14px/1.4 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;margin-top:0;margin-bottom:0;max-width:none}.alm *{box-sizing:border-box}.alm{isolation:isolate;z-index:0}.alm__map{position:absolute;inset:0;background:#2c2c2e;z-index:1}.alm{width:100vw;margin-left:calc(50% - 50vw) !important;margin-right:calc(50% - 50vw) !important}.alm__flags{position:absolute;inset:0;z-index:20;pointer-events:none;overflow:hidden}.alm__flags.is-moving{opacity:.35}.alm__flags .alm-card{position:absolute;left:0;top:0;pointer-events:auto;transform:scale(0.82);transform-origin:50% 50%;opacity:.8;will-change:transform;transition:opacity .2s,box-shadow .2s}.alm__flags .alm-card.is-near,.alm__flags .alm-card:hover{opacity:1;box-shadow:0 16px 40px rgba(0,0,0,.7);z-index:2}.alm__flags .alm-card::after{display:none}.alm__leaders{position:absolute;left:0;top:0;z-index:19;pointer-events:none}.alm__leaders line{stroke:rgba(255,154,69,.85);stroke-width:1.5}.alm__leaders circle{fill:#ff9a45}.alm .leaflet-marker-icon.alm-pinwrap,.alm .leaflet-marker-icon.alm-clusterwrap{opacity:.72;transition:opacity .15s}.alm .leaflet-marker-icon.alm-pinwrap:hover,.alm .leaflet-marker-icon.alm-clusterwrap:hover,.alm .leaflet-marker-icon.alm-pinwrap.is-hot,.alm .leaflet-marker-icon.is-lit{opacity:1}.alm-pin.is-hot .alm-pin__dot{background:#fff;box-shadow:0 0 0 3px rgba(255,122,24,.55),0 2px 6px rgba(0,0,0,.6)}.alm .leaflet-container{background:#2c2c2e;font:inherit}.alm .leaflet-tile-pane{filter:brightness(0.78) contrast(1.28) saturate(0.7)}.alm .ace-tiles--dark{filter:none}.alm .alm-labels{opacity:.75}.alm .leaflet-shadow-pane{z-index:430;pointer-events:none}.alm .leaflet-control-attribution{background:rgba(20,18,15,.75);color:var(--alm-muted);font-size:10px;max-width:min(92vw,720px)}.alm .leaflet-control-attribution a{color:var(--alm-ink)}.alm .leaflet-bar a{background:var(--alm-surface-2);color:var(--alm-ink);border-bottom-color:var(--alm-line)}.alm .leaflet-bar a:hover{background:#2f2921}.alm .leaflet-popup-content-wrapper,.alm .leaflet-popup-tip{background:var(--alm-surface-2);color:var(--alm-ink);box-shadow:0 8px 30px rgba(0,0,0,.5)}.alm .leaflet-popup-content{margin:10px 12px;font-size:13px;line-height:1.35}.alm .leaflet-popup-content a{color:var(--alm-orange-2)}.alm .leaflet-popup-close-button{color:var(--alm-muted)}.alm .alm-tile-wx{mix-blend-mode:screen}.alm .alm-tile-traffic{opacity:.85}.alm__nojs{padding:2rem;text-align:center}.alm__top{position:absolute;top:0;left:0;right:0;z-index:40;display:flex;align-items:center;gap:8px;padding:8px 10px;pointer-events:none}.alm__top>*{pointer-events:auto}.alm__brand{display:flex;align-items:center;gap:8px;background:var(--alm-surface);border:1px solid var(--alm-line);border-radius:999px;padding:6px 12px 6px 10px;font-weight:700;letter-spacing:.01em;white-space:nowrap}.alm__brand .alm__live{width:8px;height:8px;border-radius:50%;background:var(--alm-red)}@keyframes alm-pulse{0%{transform:scale(1);opacity:.8}70%{transform:scale(1.8);opacity:0}100%{transform:scale(1.8);opacity:0}}.alm__chips{display:flex;gap:6px;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;background:var(--alm-surface);border:1px solid var(--alm-line);border-radius:999px;padding:4px}.alm__chips::-webkit-scrollbar{display:none}.alm__chip{border:0;background:rgba(0,0,0,0);color:var(--alm-muted);border-radius:999px;padding:5px 11px;font:inherit;font-weight:600;cursor:pointer;white-space:nowrap}.alm__chip:hover{color:var(--alm-ink)}.alm__chip.is-on{background:var(--alm-orange);color:#1a1108}.alm__now{margin-left:auto;display:flex;gap:6px;align-items:center}.alm__pill{display:inline-flex;align-items:center;gap:6px;background:var(--alm-surface);border:1px solid var(--alm-line);border-radius:999px;padding:6px 11px;font-weight:600;white-space:nowrap;color:var(--alm-ink);text-decoration:none}.alm__pill small{color:var(--alm-muted);font-weight:500}.alm__pill.is-warn-yellow{border-color:var(--alm-amber);color:var(--alm-amber)}.alm__pill.is-warn-amber{background:rgba(255,176,32,.2);border-color:var(--alm-amber);color:var(--alm-amber)}.alm__pill.is-warn-red{background:rgba(255,77,79,.25);border-color:var(--alm-red);color:#fff}.alm__layersbtn{display:none}.alm__banner{position:absolute;top:56px;left:50%;transform:translateX(-50%);z-index:41;max-width:min(92vw,720px);background:rgba(255,176,32,.16);border:1px solid var(--alm-amber);color:var(--alm-ink);border-radius:12px;padding:8px 12px;font-size:13px}.alm__banner.is-red{background:rgba(255,77,79,.22);border-color:var(--alm-red)}.alm__banner a{color:var(--alm-ink);font-weight:700}.alm__rail{position:absolute;top:56px;right:10px;bottom:52px;z-index:39;width:272px;display:flex;flex-direction:column;gap:8px;overflow:auto;scrollbar-width:thin;padding-bottom:8px}.alm__group{background:var(--alm-surface);border:1px solid var(--alm-line);border-radius:14px;padding:8px 8px 6px}.alm__group h3{margin:0 4px 4px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--alm-muted);font-weight:700;display:flex;align-items:center;gap:6px;cursor:pointer;user-select:none;padding:2px 0}.alm__group h3::before{content:"▾";font-size:10px;transition:transform .15s;color:var(--alm-orange-2)}.alm__group.is-collapsed h3::before{transform:rotate(-90deg)}.alm__group.is-collapsed>*:not(h3){display:none !important}.alm__gcount{margin-left:auto;font-weight:600;color:var(--alm-muted);font-variant-numeric:tabular-nums;letter-spacing:0;text-transform:none}.alm__group.is-collapsed{padding-bottom:4px}.alm__layer{display:flex;align-items:center;gap:8px;width:100%;border:0;background:rgba(0,0,0,0);color:var(--alm-ink);padding:6px 6px;border-radius:9px;font:inherit;cursor:pointer;text-align:left}.alm__layer:hover{background:hsla(0,0%,100%,.06)}.alm__layer .alm__ico{width:22px;text-align:center;font-size:15px;flex:0 0 22px}.alm__layer .alm__lbl{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:.08rem;overflow:hidden;text-align:left}.alm__layer .alm__lbl{white-space:normal}.alm__note{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.72em;font-weight:400;line-height:1.25;letter-spacing:.01em;color:var(--alm-muted);opacity:.85}.alm__layer.is-on .alm__note{opacity:.9}.alm__layer[disabled] .alm__note,.alm__layer.is-locked .alm__note{opacity:.55}.alm__layer .alm__cnt{font-size:11px;color:var(--alm-muted);font-variant-numeric:tabular-nums}.alm__layer .alm__sw{width:30px;height:16px;border-radius:999px;background:hsla(0,0%,100%,.14);position:relative;flex:0 0 30px;transition:background .2s}.alm__layer .alm__sw::after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;transition:transform .2s}.alm__layer.is-on .alm__sw{background:var(--alm-orange)}.alm__layer.is-on .alm__sw::after{transform:translateX(14px)}.alm__layer.is-loading .alm__sw{background:var(--alm-orange-2);opacity:.6}.alm__layer.is-off .alm__lbl{color:var(--alm-muted)}.alm__layer.is-locked{opacity:.55}.alm__layer.is-locked .alm__cnt::before{content:"key "}.alm__legend{display:flex;flex-wrap:wrap;gap:4px 10px;padding:2px 6px 4px;font-size:11px;color:var(--alm-muted)}.alm__legend i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:4px;vertical-align:-1px}.alm__radar{display:none;align-items:center;gap:8px;padding:4px 6px 2px;font-size:12px;color:var(--alm-muted)}.alm__radar.is-on{display:flex}.alm__radar input[type=range]{flex:1;accent-color:var(--alm-orange)}.alm__radar button{border:0;background:hsla(0,0%,100%,.1);color:var(--alm-ink);border-radius:8px;width:26px;height:26px;cursor:pointer}.alm__radar .alm__rt{min-width:44px;text-align:right;font-variant-numeric:tabular-nums;color:var(--alm-ink)}.alm__nowcard{display:grid;grid-template-columns:1fr auto;gap:2px 8px;padding:4px 6px 6px;font-size:12px;color:var(--alm-muted)}.alm__nowcard b{color:var(--alm-ink);font-size:20px;line-height:1.1;font-weight:700}.alm__nowcard .alm__sym{font-size:26px;line-height:1;grid-row:span 2;align-self:center}.alm__hours{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;padding:4px 4px 2px}.alm__hours::-webkit-scrollbar{display:none}.alm__hour{flex:0 0 38px;text-align:center;font-size:10px;color:var(--alm-muted);line-height:1.2}.alm__hour b{display:block;color:var(--alm-ink);font-size:12px}.alm__hour span{display:block;font-size:15px;line-height:1.3}.alm__hour.is-wet{color:var(--alm-blue)}.alm__ticker{position:absolute;left:10px;right:10px;bottom:10px;z-index:39;display:flex;align-items:center;gap:10px;background:var(--alm-surface);border:1px solid var(--alm-line);border-radius:12px;padding:6px 10px;height:36px;overflow:hidden;font-size:13px}.alm__ticker.is-empty{display:none}.alm__ticker .alm__tk{font-weight:700;color:var(--alm-orange-2);flex:0 0 auto;font-size:11px;letter-spacing:.06em;text-transform:uppercase}.alm__ticker .alm__tkin{flex:1;min-width:0;overflow:hidden;white-space:nowrap;position:relative}.alm__ticker .alm__tkin::before,.alm__ticker .alm__tkin::after{content:"";position:absolute;top:0;bottom:0;width:22px;z-index:1;pointer-events:none}.alm__ticker .alm__tkin::before{left:0;background:linear-gradient(90deg, var(--alm-surface), transparent)}.alm__ticker .alm__tkin::after{right:0;background:linear-gradient(270deg, var(--alm-surface), transparent)}.alm__ticker.is-offscreen .alm__tktrack,.als__ticker.is-offscreen .als__tktrack{animation-play-state:paused}.alm__routes{display:inline-flex;gap:4px;margin-left:8px;vertical-align:middle}.alm__route{display:inline-block;min-width:22px;padding:1px 6px;border-radius:999px;font-size:11px;font-weight:800;line-height:16px;text-align:center;color:var(--ri, #fff);background:var(--rc, #666);text-shadow:0 1px 1px rgba(0,0,0,.35)}.alm__route.is-more{background:hsla(0,0%,100%,.18)}.alm__ticker .alm__tktrack{display:inline-block;padding-left:100%;animation:alm-tick var(--alm-tk, 60s) linear infinite;will-change:transform}.alm__ticker:hover .alm__tktrack{animation-play-state:paused}.alm__ticker a{color:var(--alm-ink);text-decoration:none;margin-right:34px}.alm__ticker a small{color:var(--alm-muted);margin-left:6px}.alm__ticker a.is-warn{color:var(--alm-amber)}.alm__ticker a.is-road{color:var(--alm-red)}@keyframes alm-tick{to{transform:translateX(-100%)}}@media(prefers-reduced-motion: reduce){.alm__ticker .alm__tktrack{animation:none;padding-left:0}.alm-ico.is-alert::after{animation:none}}.alm__panel{position:absolute;top:56px;left:10px;bottom:52px;z-index:42;width:min(420px,100vw - 20px);background:var(--alm-surface-2);border:1px solid var(--alm-line);border-radius:16px;box-shadow:0 20px 60px rgba(0,0,0,.5);display:none;flex-direction:column;overflow:hidden}.alm__panel.is-open{display:flex}.alm__panelhead{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--alm-line)}.alm__panelhead h2{margin:0;font-size:15px;line-height:1.25;flex:1;min-width:0}.alm__panelhead .alm__x{border:0;background:hsla(0,0%,100%,.08);color:var(--alm-ink);width:30px;height:30px;border-radius:50%;cursor:pointer;font-size:16px;flex:0 0 30px}.alm__panelbody{overflow:auto;padding:10px 12px 14px;scrollbar-width:thin}.alm__panelbody img{max-width:100%;height:auto;border-radius:10px}.alm__panelbody .ace-emodal__cover{margin:0 0 10px}.alm__panelbody .ace-emodal__coverimg{width:100%;border-radius:10px}.alm__meta{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 10px}.alm__meta span{background:hsla(0,0%,100%,.07);border-radius:999px;padding:3px 9px;font-size:12px}.alm__meta span.is-hot{background:var(--alm-orange);color:#1a1108;font-weight:700}.alm__actions{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}.alm__btn{display:inline-flex;align-items:center;gap:6px;background:var(--alm-orange);color:#1a1108;border-radius:999px;padding:7px 13px;font-weight:700;text-decoration:none;border:0;cursor:pointer;font:inherit}.alm__btn.is-ghost{background:hsla(0,0%,100%,.08);color:var(--alm-ink)}.alm__section{margin-top:12px;border-top:1px solid var(--alm-line);padding-top:8px}.alm__section h4{margin:0 0 6px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--alm-muted)}.alm__list{list-style:none;margin:0;padding:0;font-size:13px}.alm__list li{display:flex;justify-content:space-between;gap:8px;padding:4px 0;border-bottom:1px dashed hsla(0,0%,100%,.06)}.alm__list li span:last-child{color:var(--alm-muted);white-space:nowrap}.alm__list li b{font-weight:600}.alm__spark{width:100%;height:46px;display:block}.alm__gauge{display:flex;align-items:baseline;gap:8px}.alm__gauge b{font-size:26px}.alm__bar{height:8px;border-radius:4px;background:hsla(0,0%,100%,.1);position:relative;margin:6px 0 4px;overflow:hidden}.alm__bar i{position:absolute;left:0;top:0;bottom:0;border-radius:4px;background:var(--alm-blue)}.alm__bar.is-high i{background:var(--alm-amber)}.alm__bar.is-over i{background:var(--alm-red)}.alm__rating{display:inline-block;min-width:20px;text-align:center;border-radius:5px;background:var(--alm-green);color:#062;font-weight:800;font-size:11px;padding:1px 4px}.alm__rating.is-low{background:var(--alm-amber);color:#420}.alm-pin{position:relative}.alm-pin__dot{width:14px;height:14px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background:var(--alm-orange, #ff7a18);border:2px solid #1a1108;box-shadow:0 2px 6px rgba(0,0,0,.6)}.alm-pin.is-free .alm-pin__dot{background:var(--alm-teal, #12b3a6)}.alm-pin.is-cls .alm-pin__dot{background:#8f8a80}.alm-pin__wx{position:absolute;left:14px;top:-9px;background:rgba(20,18,15,.9);border:1px solid hsla(0,0%,100%,.14);border-radius:999px;padding:1px 6px 1px 4px;font-size:11px;white-space:nowrap;color:#f5f2ea;line-height:1.4;pointer-events:none}.alm-card{width:196px;height:150px;padding:0;text-align:left;text-decoration:none;font:inherit;color:inherit;background:rgba(28,24,19,.96);border:1px solid hsla(0,0%,100%,.16);border-radius:12px;overflow:hidden;box-shadow:0 12px 34px rgba(0,0,0,.55);transform:translate(-50%, -100%);position:relative;cursor:pointer;transition:transform .15s}.alm-card:hover{transform:translate(-50%, -100%) scale(1.03)}.alm-card:focus-visible{outline:3px solid var(--alm-orange-2);outline-offset:3px;opacity:1 !important}.alm-card::after{content:"";position:absolute;left:50%;bottom:-8px;width:14px;height:14px;background:inherit;border-right:1px solid hsla(0,0%,100%,.16);border-bottom:1px solid hsla(0,0%,100%,.16);transform:translateX(-50%) rotate(45deg)}.alm-card__img{height:96px;background:#241f18 center/cover no-repeat}.alm-card__body{padding:7px 9px 8px;font-size:12px;line-height:1.3;color:#f5f2ea}.alm-card__body b{font-size:13px;margin-bottom:2px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.alm-card__body small{color:#b9b0a0}.alm-card__tag{position:absolute;top:6px;left:6px;background:var(--alm-orange, #ff7a18);color:#1a1108;font-weight:800;font-size:10px;letter-spacing:.06em;text-transform:uppercase;border-radius:999px;padding:2px 7px}.alm-card.is-super .alm-card__tag{background:#fff}.alm-card__wx{position:absolute;top:6px;right:6px;background:rgba(20,18,15,.85);border-radius:999px;padding:2px 7px;font-size:11px;color:#f5f2ea}.alm-cluster{background:rgba(255,122,24,.9);color:#1a1108;border:2px solid #1a1108;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:12px;box-shadow:0 2px 8px rgba(0,0,0,.6)}.alm-bus{position:relative;width:40px;height:40px;display:flex;align-items:center;justify-content:center}.alm-bus__body{width:34px;height:18px;border-radius:5px 9px 9px 5px;background:var(--bus, #2e6bd6);border:2px solid #fff;box-shadow:0 2px 6px rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;position:relative}.alm-bus__body::after{content:"";position:absolute;right:-7px;top:50%;margin-top:-5px;border:5px solid rgba(0,0,0,0);border-left:6px solid #fff;border-right:0}.alm-bus__lbl{font-size:11px;font-weight:800;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.8);line-height:1;pointer-events:none}.alm-bus.is-stale{opacity:.45}.alm-ico{width:26px;height:26px;border-radius:50%;background:rgba(28,24,19,.95);border:2px solid var(--c, #fff);display:flex;align-items:center;justify-content:center;font-size:14px;box-shadow:0 2px 6px rgba(0,0,0,.6);color:#fff}.alm-ico.is-sm{width:20px;height:20px;font-size:11px}.alm-ico.is-alert{--c: var(--alm-red, #ff4d4f);position:relative}.alm-ico.is-alert::after{content:"";position:absolute;inset:-2px;border-radius:50%;border:2px solid rgba(255,77,79,.7);animation:alm-pulse 1.6s infinite;pointer-events:none}.alm-news{width:22px;height:22px;border-radius:6px;background:#f5f2ea;color:#1a1108;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:900;border:2px solid #1a1108;box-shadow:0 2px 6px rgba(0,0,0,.6)}.alm-news.is-hot{background:var(--alm-orange, #ff7a18)}.alm-station{background:rgba(20,18,15,.9);border:1px solid hsla(0,0%,100%,.2);border-radius:8px;padding:2px 6px;font-size:11px;font-weight:700;color:#fff;white-space:nowrap}.alm-tramstop{width:10px;height:10px;border-radius:50%;background:#fff;border:2px solid #9b4dff}@media(max-width: 820px){.alm{--alm-h: calc(100vh - var(--ace-header-h, 56px))}.alm__top{flex-wrap:wrap;padding:6px}.alm__now{margin-left:0;order:3;width:100%;overflow-x:auto;scrollbar-width:none}.alm__brand{padding:5px 10px 5px 8px;font-size:13px}.alm__layersbtn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--alm-line);background:var(--alm-surface);color:var(--alm-ink);border-radius:999px;padding:6px 11px;font:inherit;font-weight:700;cursor:pointer;margin-left:auto}.alm__rail{top:auto;left:0;right:0;bottom:0;width:auto;max-height:52vh;background:var(--alm-surface-2);border-radius:16px 16px 0 0;border-top:1px solid var(--alm-line);padding:8px;transform:translateY(105%);transition:transform .25s;z-index:45}.alm__rail.is-open{transform:none}.alm__group{background:rgba(0,0,0,0);border:0;padding:4px 0}.alm__ticker{bottom:8px;left:8px;right:8px}.alm__panel{top:auto;left:0;right:0;bottom:0;width:auto;max-height:70vh;border-radius:16px 16px 0 0}.alm__banner{top:96px}.alm-card{width:160px}.alm-card__img{height:78px}}.alm .leaflet-bottom.leaflet-left{margin-bottom:54px}.alm .leaflet-marker-icon.alm-buswrap{transition:transform .9s linear}.alm .leaflet-zoom-anim .leaflet-marker-icon{transition:none !important}.alm .leaflet-marker-pane{will-change:transform}.alm .leaflet-marker-icon.alm-cardwrap,.alm .leaflet-marker-icon.alm-stationwrap{overflow:visible}.alm .leaflet-marker-icon.alm-councillor-wrap{overflow:visible;background:none;border:0}.alm-councillor-flag{position:relative;width:38px;height:38px;display:flex;align-items:center;justify-content:center;border:3px solid var(--alm-ink);border-radius:50% 50% 50% 8px;transform:rotate(-45deg);overflow:hidden;background:var(--alm-orange);color:#1a1108;font-weight:800;box-shadow:0 4px 16px rgba(0,0,0,.55)}.alm-councillor-flag>*{transform:rotate(45deg)}.alm-councillor-flag img{width:48px;height:48px;object-fit:cover;transform:rotate(45deg) scale(1.18)}.alm-councillor-photo{display:block;width:96px !important;height:112px !important;object-fit:cover;margin:0 auto 10px;border:2px solid var(--alm-orange)}body.ace-map-page{overflow:hidden}body.ace-map-page .ace-boosted,body.ace-map-page .ace-explore,body.ace-map-page .ace-explore-fold,body.ace-map-page footer.wp-block-template-part{display:none !important}body.ace-map-page main.wp-block-group{margin:0 !important;padding:0 !important}.alm__radio{padding:4px 6px 6px;font-size:12px;color:var(--alm-muted)}.alm__sel{width:100%;background:hsla(0,0%,100%,.07);color:var(--alm-ink);border:1px solid var(--alm-line);border-radius:8px;padding:6px;font:inherit;margin-bottom:6px}.alm__radiobtns{display:flex;gap:6px;margin-bottom:6px}.alm__radiobtns .alm__btn{padding:5px 10px;font-size:12px}.alm__radioout{line-height:1.35}.alm__radioout b{color:var(--alm-ink)}.als{margin:14px auto 6px;max-width:1240px;padding:0 10px}.als.alignfull{max-width:none;width:100vw;margin-left:calc(50% - 50vw) !important;margin-right:calc(50% - 50vw) !important}.als--ticker,.als--both{margin:0 !important;padding:10px 32px 8px;position:relative;z-index:1;background:var(--ace-bg, #14120f);box-sizing:border-box}.als__inner{max-width:none;margin:0;display:flex;flex-direction:column;gap:8px}.als--ticker .als__ticker{border-radius:10px;background:rgba(28,24,19,.92)}.als--ticker .als__chips{margin:0;justify-content:center}.als__chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.als__chip{display:inline-flex;align-items:center;gap:6px;background:rgba(28,24,19,.86);border:1px solid hsla(0,0%,100%,.12);border-radius:999px;padding:6px 12px;font-weight:700;font-size:14px;color:var(--ace-ink, #f5f2ea);text-decoration:none}.als__chip small{color:var(--ace-muted, #b9b0a0);font-weight:500}.als__chip.is-warn{border-color:#ffb020;color:#ffb020}.als__ticker{display:flex;align-items:center;gap:10px;background:rgba(28,24,19,.86);border:1px solid hsla(0,0%,100%,.12);border-radius:12px;padding:6px 10px;height:36px;overflow:hidden;font-size:13px;color:var(--ace-ink, #f5f2ea)}.als__tk{font-weight:700;color:#ff9a45;font-size:11px;letter-spacing:.06em;text-transform:uppercase;flex:0 0 auto}.als__tkin{flex:1;min-width:0;overflow:hidden;white-space:nowrap;position:relative}.als__tkin::before,.als__tkin::after{content:"";position:absolute;top:0;bottom:0;width:22px;z-index:1;pointer-events:none}.als__tkin::before{left:0;background:linear-gradient(90deg, rgba(28, 24, 19, 0.92), transparent)}.als__tkin::after{right:0;background:linear-gradient(270deg, rgba(28, 24, 19, 0.92), transparent)}.als__tktrack{display:inline-block;padding-left:100%;animation:alm-tick var(--als-tk, 60s) linear infinite;will-change:transform}.als__ticker:hover .als__tktrack{animation-play-state:paused}.als__tktrack a{color:var(--ace-ink, #f5f2ea);text-decoration:none;margin-right:34px}.als__tktrack a small{color:var(--ace-muted, #b9b0a0);margin-left:6px}.als__tktrack a.is-warn{color:#ffb020}.aln{max-width:1240px;margin:24px auto;padding:0 10px}.aln.alignfull{max-width:none;width:100vw;margin:32px calc(50% - 50vw) 48px !important;padding:36px 32px 44px;box-sizing:border-box;background:hsla(0,0%,100%,.025)}.aln.alignfull{padding-left:0;padding-right:0}.aln.alignfull>*{max-width:min(1640px,96vw);margin-left:auto;margin-right:auto;padding-left:clamp(.8rem,3vw,1.8rem);padding-right:clamp(.8rem,3vw,1.8rem);box-sizing:border-box}@media(max-width: 820px){.aln.alignfull{padding:24px 0 32px}.als--ticker,.als--both{padding:8px 12px 6px}.als--ticker .als__chips{flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px}.als--ticker .als__chips::-webkit-scrollbar{display:none}.als--ticker .als__chip{flex:0 0 auto;white-space:nowrap}}.aln__grid{grid-template-columns:repeat(auto-fill, minmax(220px, 1fr))}.aln__list{columns:1}@media(min-width: 1100px){.aln__cols{grid-template-columns:5fr 3fr}}.aln__heading{font-size:1.6rem;margin:0 0 12px}.aln h3{font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ace-muted, #b9b0a0);margin:0 0 10px}.aln__cols{display:grid;grid-template-columns:3fr 2fr;gap:24px}.aln__grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(180px, 1fr));gap:12px}.aln__card{display:block;text-decoration:none;color:inherit;background:rgba(28,24,19,.86);border:1px solid hsla(0,0%,100%,.12);border-radius:12px;overflow:hidden}.aln__img{display:block;height:110px;background:#241f18 center/cover no-repeat}.aln__body{display:block;padding:8px 10px}.aln__body b{display:block;font-size:14px;line-height:1.3}.aln__body small{color:var(--ace-muted, #b9b0a0)}.aln__list{list-style:none;margin:0;padding:0}.aln__list li{padding:7px 0;border-bottom:1px dashed hsla(0,0%,100%,.1);line-height:1.35}.aln__list a{color:inherit;text-decoration:none;font-weight:600}.aln__list small{display:block;color:var(--ace-muted, #b9b0a0)}.aln__more a{color:#ff9a45;text-decoration:none;font-weight:700}@media(max-width: 820px){.aln__cols{grid-template-columns:1fr}}body.ace-map-page{overflow:auto}.alm__summary{max-width:900px;margin:18px auto 40px;padding:0 16px;color:var(--ace-muted, #b9b0a0);font-size:15px;line-height:1.55}.alm__summary h2{color:var(--ace-ink, #f5f2ea);font-size:1.3rem;margin:0 0 8px}.alm__summary a{color:#ff9a45}.alm__summary-stamp{font-size:12px;opacity:.7}.alm__radiostat{display:flex;gap:8px;align-items:baseline;margin:4px 0 6px}.alm__radiostat b{font-size:24px;color:var(--alm-ink)}.alm__radiolegend{display:flex;flex-wrap:wrap;gap:4px 10px;margin:4px 0 6px;font-size:11px}.alm__radiolegend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}.alm__stations{padding:6px}.alm__stations .alm__btn{width:100%;justify-content:center}.arp{max-width:520px;margin:20px auto;padding:0 12px;color:var(--ace-ink, #f5f2ea)}.arp.is-pop{margin:0;padding:12px;max-width:none}.arp__now{background:rgba(28,24,19,.95);border:1px solid hsla(0,0%,100%,.14);border-radius:14px;padding:12px 14px;margin-bottom:12px}.arp__title{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ace-muted, #b9b0a0)}.arp__station{font-size:18px;font-weight:700;margin:2px 0 8px}.arp__ctl{display:flex;align-items:center;gap:10px}.arp__play{width:44px;height:44px;border-radius:50%;border:0;background:#ff7a18;color:#1a1108;font-size:18px;cursor:pointer;flex:0 0 44px}.arp__vol{flex:1;accent-color:#ff7a18}.arp__pop{border:1px solid hsla(0,0%,100%,.16);background:rgba(0,0,0,0);color:inherit;border-radius:999px;padding:6px 10px;font:inherit;cursor:pointer}.arp__list{list-style:none;margin:0;padding:0;display:grid;gap:6px}.arp__st{display:block;width:100%;text-align:left;background:rgba(28,24,19,.86);border:1px solid hsla(0,0%,100%,.12);border-radius:10px;padding:9px 12px;color:inherit;font:inherit;font-weight:600;cursor:pointer;text-decoration:none}.arp__st small{display:block;font-weight:400;color:var(--ace-muted, #b9b0a0);font-size:12px}.arp__st.is-on{border-color:#ff7a18;background:rgba(255,122,24,.16)}.arp__st.is-ext::after{content:" ↗";color:var(--ace-muted, #b9b0a0)}.arp__note{font-size:12px;color:var(--ace-muted, #b9b0a0);margin-top:12px}.arp__note a{color:#ff9a45}.alm__bushead{display:flex;gap:12px;align-items:center;margin-bottom:6px}.alm-busmodel{width:120px;height:60px;flex:0 0 120px;filter:drop-shadow(0 6px 10px rgba(0, 0, 0, 0.5))}.alm__busline{display:inline-block;color:#fff;font-weight:800;border-radius:6px;padding:2px 8px;font-size:15px;text-shadow:0 1px 2px rgba(0,0,0,.6)}.alm__busdest{font-weight:600;margin:4px 0 2px}.alm__share{background:var(--alm-surface);border:1px solid var(--alm-line);color:var(--alm-ink)}.alm-tram .alm-bus__body{width:28px;height:28px;border-radius:50%}.alm-tram .alm-bus__body::after{display:none}.alm-tram .alm-bus__lbl{font-size:14px}.alm__skipbands{display:flex;flex-wrap:wrap;gap:4px;margin:6px 0}.alm__skipbands span{font-size:11px;border-radius:6px;padding:2px 6px;background:hsla(0,0%,100%,.08)}.alm__skipbands span b{font-weight:700;margin-right:3px}.alm__skipbands .is-good{background:rgba(62,207,142,.25)}.alm__skipbands .is-fair{background:rgba(255,176,32,.25)}.alm__skipbands .is-poor{background:rgba(255,77,79,.22)}.alm-plan{width:28px;height:28px;border-radius:50%;background:#ff9a45;color:#1a1108;font-weight:800;display:flex;align-items:center;justify-content:center;border:2px solid #1a1108;box-shadow:0 2px 8px rgba(0,0,0,.6)}body:has(#ace-live-map) .wp-block-template-part,body:has(#ace-live-map) header{backdrop-filter:none !important;-webkit-backdrop-filter:none !important}.alm__tktrack,.als__tktrack{will-change:transform}.alm__ticker,.alm__group,.alm__panel,.alm__chips{contain:paint}.alm.is-following .leaflet-marker-icon:not(.is-followed){opacity:.18 !important;filter:saturate(0.4)}.alm.is-following .leaflet-marker-icon.is-followed{opacity:1 !important;z-index:9000 !important;filter:drop-shadow(0 0 10px rgba(255, 255, 255, 0.9))}.alm.is-following .leaflet-marker-icon.is-followed .alm-bus__body{transform-origin:50% 50%;box-shadow:0 0 0 4px hsla(0,0%,100%,.55),0 2px 10px rgba(0,0,0,.7)}.alm.is-following .leaflet-almLines-pane path:not(.alm-focus-route),.alm.is-following .leaflet-almPoly-pane path,.alm.is-following .leaflet-overlay-pane path:not(.alm-focus-route){opacity:.15 !important}.alm.is-following .leaflet-almLines-pane path.alm-focus-route{opacity:1 !important}.alm.is-following .alm__flags,.alm.is-following .alm__leaders{opacity:.15}.alm.is-following .alm-tile-wx,.alm.is-following .alm-tile-traffic{opacity:.25 !important}.alm.is-following .leaflet-marker-icon{transition:opacity .35s}body.ace-locked .wp-block-post-content>*:has(.ace-app){display:block !important}body.ace-locked .wp-block-post-content>.als{display:none !important}.ace-suggest{box-sizing:border-box;max-width:min(1640px,96vw);padding:0 clamp(.8rem,3vw,1.8rem);margin:24px auto 32px}.ace-suggest-band{padding:0}body:has(.als--ticker) .ace-app{margin-top:0 !important;margin-block-start:0 !important;padding-top:0}body:has(.als--ticker) .ace-app__map{-webkit-mask-image:linear-gradient(to bottom, #000 0, #000 72%, transparent 100%);mask-image:linear-gradient(to bottom, #000 0, #000 72%, transparent 100%)}body:has(.als--ticker) .ace-events-browser{margin-top:-7.5rem !important;padding-top:1rem;background:linear-gradient(180deg, transparent, var(--ace-bg, #14120f) 5rem);isolation:isolate}body:has(.als--ticker) .ace-app{isolation:isolate;z-index:0}body:has(.als--ticker) .ace-browser__head{margin-bottom:.35rem}body:has(.als--ticker) .ace-grid-heading{color:var(--ace-ink, #f5f2ea)}@media(max-width: 820px){.ace-suggest,.ace-suggest-band{padding:0 16px}}.alm__jobs-controls{padding:10px 12px;min-width:0;max-width:100%;font-size:12px;line-height:1.5}.alm__jobs-controls label{display:grid;gap:6px;font-weight:600}.alm__jobs-controls input{width:100%;min-width:0;box-sizing:border-box;padding:10px;border:1px solid var(--shell-line, #44504e);border-radius:8px;background:var(--shell-card, #222b2a);color:var(--shell-ink, #f4f2e9);font:inherit}.alm__jobs-controls button{margin-top:8px;width:100%;white-space:normal}.alm__jobs-controls a{display:block;color:var(--shell-accent, #eeb659);overflow-wrap:anywhere}.alm__jobs-status,.alm__jobs-note{color:var(--shell-muted, #aeb8b5);font-size:12px;line-height:1.55}.alm__jobs-description{white-space:pre-wrap;overflow-wrap:anywhere;margin-block:16px;font-size:14px;line-height:1.65}.alm__food-controls{padding:10px 8px 6px;display:grid;gap:12px;min-width:0;max-width:100%;font-size:12px;line-height:1.45}.alm__food-controls fieldset{min-width:0;margin:0;padding:0;border:0}.alm__food-controls legend,.alm__food-controls label{display:grid;gap:6px;font-weight:700}.alm__food-controls .alm__sel{margin:0;min-width:0}.alm__food-status{margin:2px 0 0;color:var(--shell-muted, #aeb8b5);font-size:11px;line-height:1.45}.alm__filter-pills{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}.alm__filter-pills button{min-width:34px;padding:5px 9px;border:1px solid var(--alm-line);border-radius:999px;background:rgba(0,0,0,0);color:var(--alm-muted);font:inherit;font-weight:700;cursor:pointer;transition:background .18s,color .18s,border-color .18s,transform .18s}.alm__filter-pills button:hover{border-color:var(--alm-orange-2);color:var(--alm-ink);transform:translateY(-1px)}.alm__filter-pills button.is-on{border-color:var(--alm-orange);background:var(--alm-orange);color:#17130d}.alm-cluster.is-food{background:rgba(62,207,142,.92);color:#08251a}.alm-food-popup .alm__rating{margin:4px 0}.alm-food-popup a{display:inline-block;margin-top:5px;font-weight:700}.ace-map-results .alm__job-result{display:block;width:100%;text-align:left;white-space:normal}.alm__gall{display:grid;grid-template-columns:1fr 1fr;gap:2px;margin-left:auto;padding:2px;border:1px solid var(--alm-line);border-radius:999px;background:color-mix(in srgb, var(--alm-surface-2) 82%, transparent);font-size:8px;letter-spacing:.05em;text-transform:uppercase}.alm__gall button{min-width:34px;padding:4px 6px;border:0;border-radius:999px;background:rgba(0,0,0,0);color:var(--alm-muted);font:inherit;font-weight:800;text-transform:inherit;cursor:pointer;transition:background .2s cubic-bezier(0.2, 0.8, 0.2, 1),color .2s,transform .2s}.alm__gall button:hover{color:var(--alm-ink)}.alm__gall button[aria-pressed=true]{background:var(--alm-orange);color:#17130d;box-shadow:0 1px 5px rgba(0,0,0,.2)}.alm__gall button:active{transform:scale(0.94)}.alm__group h3{display:flex;align-items:center;gap:.4rem}.alm__llegend{padding:0 6px 6px 36px;gap:3px 9px}.alm__llegend span{white-space:nowrap}.alm__llegend em{font-style:normal;margin-right:3px}.alm__layer.is-sub{padding-left:26px;font-size:12.5px;color:var(--alm-muted)}.alm__layer.is-sub.is-on{color:var(--alm-ink)}.alm__layer.is-sub::before{content:"";width:8px;height:8px;margin-right:-4px;border-left:1px solid hsla(0,0%,100%,.22);border-bottom:1px solid hsla(0,0%,100%,.22);border-radius:0 0 0 4px;flex:0 0 8px;align-self:flex-start;margin-top:2px}.alm__src{color:var(--alm-muted);font-size:11px;margin:6px 0 0}.alm__meta span.is-src{background:hsla(0,0%,100%,.12)}.alm-cluster.is-layer{background:rgba(78,161,255,.9);color:#08192e}.alm-air-citizen{opacity:.85}.alm__busfleet{display:block;color:var(--alm-muted);margin:0 0 8px}.alm__week{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none;font-size:11px;font-variant-numeric:tabular-nums}.alm__week span{flex:1 1 0;min-width:34px;text-align:center;padding:4px 2px;border-radius:6px;background:hsla(0,0%,100%,.05);color:var(--alm-muted)}.alm__week span b{display:block;font-size:10px;color:var(--alm-ink)}.alm__week span.is-high{background:rgba(78,161,255,.22);color:var(--alm-ink)}.alm__modes{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 10px}.alm__modes .alm__btn{padding:5px 10px;font-size:12px}.alm__xtra{margin-top:10px}.alm__xtra small{display:block;margin-top:4px;color:var(--alm-muted);font-size:11px}.alm__xtra li.is-amber b{color:#ffb020}.alm__xtra li.is-red b{color:#ff4d4f}.alm__xtra li.is-online b{color:#3ecf8e}.alm__xtra li span:last-child{white-space:normal;text-align:right}.alm__layer[data-layer=mysheffield]{border-left:3px solid #ffd166}.alm__layer[data-layer=mysheffield].is-on{background:rgba(255,209,102,.12)}.alm__layer[data-layer=mysheffield] .alm__lbl::after{content:"only you";display:inline-block;margin-inline-start:.5em;padding:0 .4em;border-radius:6px;font-size:.7em;letter-spacing:.02em;text-transform:uppercase;background:rgba(255,209,102,.18);color:#ffd166;vertical-align:middle}.ace-minimap--plate{border-radius:var(--ace-radius, 12px);overflow:hidden}.ace-minimap__more{margin:.4rem 0 0;font-size:.82rem}.ace-minimap__more a{color:var(--ace-muted, #b9b0a0);text-decoration:underline}.ace-minimap__more a:hover,.ace-minimap__more a:focus{color:var(--ace-orange, #ff7a18)}.alm-key{display:flex;flex-direction:column;gap:2px;padding:0 0 18px;color:var(--shell-ink, var(--alm-ink))}.alm-key__head{display:flex;align-items:center;gap:8px;padding:14px 16px 10px;position:sticky;top:0;z-index:2;background:var(--shell-panel, var(--alm-surface))}.alm-key__head h2{flex:1;margin:0;font-size:15px;letter-spacing:.02em}.alm-key__x{border:0 !important;background:none !important;font-size:19px;line-height:1;padding:2px 6px !important;color:inherit}.alm-key__back{display:none;font-size:11px}.alm-key__status{margin:0;padding:0 16px 8px;font-size:11px;color:var(--shell-muted, var(--alm-muted))}.alm-key__layers{display:flex;flex-direction:column;gap:2px;padding:0 10px 6px}.alm-key__layer{display:flex;align-items:center;gap:9px;width:100%;text-align:left;padding:9px 8px !important;font-size:12px;border:0 !important;border-radius:8px !important;background:rgba(0,0,0,0) !important;color:inherit}.alm-key__layer:hover{background:color-mix(in srgb, var(--shell-accent, #ff7a18) 10%, transparent) !important}.alm-key__layer.is-focus{background:color-mix(in srgb, var(--shell-accent, #ff7a18) 16%, transparent) !important;box-shadow:inset 2px 0 0 var(--shell-accent, #ff7a18)}.alm-key__name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alm-key__dot{flex:none;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;font-size:11px;line-height:1;background:color-mix(in srgb, var(--c, #ff7a18) 30%, transparent);box-shadow:inset 0 0 0 1px var(--c, #ff7a18)}.alm-key__cnt{flex:none;font-variant-numeric:tabular-nums;font-size:12px;color:var(--shell-ink, var(--alm-ink))}.alm-key__cnt small{opacity:.6;font-size:10px}.alm-key__cnt.is-none,.alm-key__cnt.is-wait{color:var(--shell-muted, var(--alm-muted));font-size:10.5px;text-transform:uppercase;letter-spacing:.05em}.alm-key__legend{display:flex;flex-wrap:wrap;gap:4px 10px;padding:0 10px 8px 40px;font-size:10.5px;color:var(--shell-muted, var(--alm-muted))}.alm-key__legend i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-inline-end:4px;vertical-align:baseline}.alm-key__legend em{font-style:normal;margin-inline-end:4px}.alm-key__fhead{padding:12px 16px 4px;border-top:1px solid var(--shell-line, var(--alm-line))}.alm-key__fhead h3{margin:0;font-size:13px}.alm-key__sort{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:6px 16px}.alm-key__sort label{font-size:11px;color:var(--shell-muted, var(--alm-muted))}.alm-key__sort select{flex:1;min-width:120px;font-size:11px;padding:7px;border-radius:7px;border:1px solid var(--shell-line, var(--alm-line));background:var(--shell-bg, var(--alm-surface-2));color:inherit}.alm-key__dir{font-size:11px;padding:6px 9px !important}.alm-key__where{padding:0 16px 8px}.alm-key__me{font-size:10.5px;padding:5px 8px !important;color:var(--shell-muted, var(--alm-muted))}.alm-key__me[aria-pressed=true]{color:var(--shell-accent, var(--alm-orange));border-color:currentcolor !important}.alm-key__list{list-style:none;margin:0;padding:0 10px;display:flex;flex-direction:column;gap:2px}.alm-key__item{display:flex;align-items:flex-start;gap:9px;width:100%;text-align:left;padding:9px 8px !important;border:0 !important;border-radius:8px !important;background:rgba(0,0,0,0) !important;color:inherit;font-size:12px}.alm-key__item:hover{background:color-mix(in srgb, var(--shell-accent, #ff7a18) 12%, transparent) !important}.alm-key__itxt{flex:1;min-width:0}.alm-key__ttl{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alm-key__itxt small{display:block;font-size:10.5px;color:var(--shell-muted, var(--alm-muted));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.alm-key__val{flex:none;text-align:right;font-variant-numeric:tabular-nums;font-weight:600}.alm-key__val small{display:block;font-weight:400;font-size:10px;color:var(--shell-muted, var(--alm-muted))}.alm-key__empty,.alm-key__more{margin:0;padding:8px 16px;font-size:11px;color:var(--shell-muted, var(--alm-muted));list-style:none}.ace-shell__contextual:has(.alm__panel.is-open) .alm-key__status,.ace-shell__contextual:has(.alm__panel.is-open) .alm-key__layers,.ace-shell__contextual:has(.alm__panel.is-open) .alm-key__focus{display:none}.ace-shell__contextual:has(.alm__panel.is-open) .alm-key__head h2,.ace-shell__contextual:has(.alm__panel.is-open) .alm-key__x{display:none}.ace-shell__contextual:has(.alm__panel.is-open) .alm-key__back{display:block}.alm-key__btn{position:absolute;top:64px;right:12px;z-index:26;display:flex;align-items:center;gap:7px;padding:8px 12px;font-size:12px;border-radius:999px;border:1px solid var(--alm-line);background:var(--alm-surface);color:var(--alm-ink);box-shadow:0 8px 24px rgba(0,0,0,.35)}.alm-key__btncnt:not(:empty){padding:1px 7px;border-radius:999px;font-size:11px;font-variant-numeric:tabular-nums;background:var(--alm-orange);color:#1b1206}@media(max-width: 900px){.alm-key__btn{top:auto;bottom:18px;right:12px}}.ace-map-clear{display:flex;align-items:center;gap:.6rem;padding:.6rem .75rem 0}.ace-map-clear .alm-clear{flex:0 0 auto;padding:.4rem .8rem;border:1px solid var(--ace-line, rgba(255, 255, 255, 0.16));border-radius:999px;background:rgba(0,0,0,0);color:var(--ace-ink, #f5f2ea);font:inherit;font-size:.82rem;cursor:pointer}.ace-map-clear .alm-clear:hover{border-color:var(--ace-orange-2, #efb665);color:var(--ace-orange-2, #efb665)}.ace-map-clear .alm-clear__on{font-size:.78rem;color:var(--ace-muted, #b9b0a0)}.ace-map-scopes{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .9rem;padding:.1rem .75rem .5rem}.ace-map-scopes p{flex:0 0 100%;margin:0;font-size:.7rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--ace-muted, #b9b0a0)}.ace-map-scopes label{display:inline-flex;align-items:center;gap:.35rem;font-size:.84rem;cursor:pointer}@media(prefers-reduced-motion: no-preference){.ace-map-scopes{animation:alm-scopes .16s ease}@keyframes alm-scopes{from{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:none}}}.alm__route[style*="--ri:#15120d"]{text-shadow:none}.alm-key__list li.is-lead .alm-key__item{border-color:var(--ace-orange-2, #efb665);background:color-mix(in srgb, var(--ace-orange-2, #efb665) 10%, transparent)}.alm-key__lead{display:block;font-size:.66rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase;color:var(--ace-orange-2, #efb665)}.alm-key__fold{display:flex;align-items:center;gap:.45rem;width:100%;padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.alm-key__fold h3{margin:0}.alm-key__caret{flex:0 0 auto;width:0;height:0;border-left:5px solid currentcolor;border-top:4px solid rgba(0,0,0,0);border-bottom:4px solid rgba(0,0,0,0);opacity:.75;transform:rotate(90deg)}.alm-key__fold[aria-expanded=false] .alm-key__caret{transform:none}@media(prefers-reduced-motion: no-preference){.alm-key__caret{transition:transform .16s ease}}.alm__layer.is-locked,.alm__layer[disabled]{cursor:not-allowed;opacity:.48}.alm__layer.is-locked:hover,.alm__layer[disabled]:hover{background:none}.alm__layer.is-locked .alm__sw{opacity:.35}.alm-indoor{position:absolute;inset:0;z-index:45;display:grid;grid-template-rows:auto auto 1fr auto;background:var(--alm-bg, #171b1b);color:var(--alm-ink, #f5f2ea)}.alm-indoor header{display:flex;align-items:center;gap:1rem;padding:.65rem .9rem;border-bottom:1px solid var(--alm-line);background:var(--alm-surface, #1d2323)}.alm-indoor header div{display:grid}.alm-indoor header small{color:var(--alm-muted)}.alm-indoor button,.alm-indoor a{font:inherit}.alm-indoor__back,.alm-indoor__levels button{border:1px solid var(--alm-line);border-radius:999px;background:rgba(0,0,0,0);color:inherit;padding:.45rem .75rem;cursor:pointer}.alm-indoor__levels{display:flex;gap:.45rem;padding:.55rem .9rem;overflow-x:auto;background:var(--alm-surface-2, #242b2a)}.alm-indoor__levels button[aria-pressed=true]{background:var(--alm-orange, #ff7a18);border-color:var(--alm-orange, #ff7a18);color:#1a1108}.alm-indoor__canvas{min-height:0;background:#252b2a}.alm-indoor__facts{padding:.65rem .9rem;border-top:1px solid var(--alm-line);background:var(--alm-surface, #1d2323)}.alm-indoor__facts p{margin:.15rem 0}.alm-indoor__facts .alm-indoor__notice{margin-block:.35rem .55rem;padding:.55rem .65rem;border-left:3px solid var(--alm-orange-2, #efb665);background:color-mix(in srgb, var(--alm-orange-2, #efb665) 10%, transparent);color:var(--alm-muted, #b9b0a0);font-size:.82rem}.alm-indoor__facts a{color:var(--alm-orange-2, #efb665)}@media(min-width: 821px){body.single-post.ace-workspace-page .ace-shell--content .ace-hub-route .entry-content>.alm:is([data-map-profile=ghosts],[data-map-profile=halloween]){--ace-ghost-map-bleed: clamp(1.5rem, 6vw, 6rem);float:right;clear:right;left:auto !important;box-sizing:border-box;width:calc(50% + var(--ace-ghost-map-bleed)) !important;max-width:none !important;margin:1rem calc(-1*var(--ace-ghost-map-bleed)) 1.5rem clamp(1.25rem,3vw,2.25rem) !important;border:1px solid var(--alm-line, rgba(255, 255, 255, 0.12));border-radius:18px;overflow:hidden}}@media(max-width: 820px){body.single-post.ace-workspace-page .ace-shell--content .ace-hub-route .entry-content>.alm:is([data-map-profile=ghosts],[data-map-profile=halloween]){float:none;left:auto !important;width:100% !important;max-width:100% !important;margin:1.25rem 0 !important;border-radius:14px;overflow:hidden}}body.postid-29332.ace-workspace-page .ace-shell--content .ace-hub-route .entry-content>.alm[data-map-profile=halloween]{float:none;clear:both;left:auto !important;box-sizing:border-box;width:100% !important;max-width:none !important;margin:1.5rem 0 !important;border:1px solid var(--alm-line, rgba(255, 255, 255, 0.12));border-radius:18px;overflow:hidden}body.postid-29332 .alm[data-map-profile=halloween] .alm__brand{position:relative;z-index:48;max-width:min(58vw,720px);padding:.7rem 1rem;border-color:hsla(0,0%,100%,.28);background:rgba(15,17,17,.94);color:#fff;box-shadow:0 8px 30px rgba(0,0,0,.58);font-size:clamp(1rem,2vw,1.45rem);line-height:1.15;white-space:normal}@media(max-width: 820px){body.postid-29332 .alm[data-map-profile=halloween] .alm__brand{max-width:calc(100vw - 8rem);padding:.55rem .75rem;font-size:.95rem}}.als .als__ticker--cards{--alt-orange: #ff7a18;--alt-orange-hi: #ffb067;--alt-glow: rgba(255, 122, 24, 0.42);--alt-ink: var(--shell-ink, #f5f2ea);--alt-muted: var(--shell-muted, #b9b0a0);height:auto;gap:14px;padding:0 0 0 16px;border:1px solid hsla(0,0%,100%,.09);border-radius:14px;background:rgba(16,19,20,.8);box-shadow:0 10px 28px rgba(0,0,0,.32);font-size:13px;color:var(--alt-ink)}.als .als__ticker--cards[hidden]{display:none}.als .als__ticker--cards .als__tk{display:flex;align-items:center;gap:8px;font:700 11px/1.2 "Space Grotesk","DM Sans",system-ui,sans-serif;letter-spacing:.18em;text-transform:uppercase;white-space:nowrap;color:var(--alt-orange)}.als__ticker--cards .als__tk svg{flex:none;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}.als__ticker--cards .als__tkl b{font-weight:inherit}.als .als__ticker--cards .als__tkin{align-self:stretch;display:flex;align-items:center;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;contain:paint;-webkit-mask-image:linear-gradient(90deg, transparent, #000 36px, #000 calc(100% - 56px), transparent);mask-image:linear-gradient(90deg, transparent, #000 36px, #000 calc(100% - 56px), transparent)}.als__ticker--cards .als__tkin::-webkit-scrollbar{display:none}.als__ticker--cards .als__tkin::before,.als__ticker--cards .als__tkin::after{display:none}.als__ticker--cards.is-marquee .als__tkin{overflow:hidden}.als .als__ticker--cards .als__tktrack{display:flex;width:max-content;padding:8px 0 8px 18px;animation:none}.als .als__ticker--cards.is-marquee .als__tktrack{animation:als-marquee var(--als-dur, 90s) linear infinite;will-change:transform;backface-visibility:hidden}.als .als__ticker--cards:is(:hover,:focus-within) .als__tktrack,.als .als__ticker--cards.is-offscreen .als__tktrack{animation-play-state:paused}@keyframes als-marquee{from{transform:translate3d(0, 0, 0)}to{transform:translate3d(calc(-1 * var(--als-shift, 50%)), 0, 0)}}.als .als__ticker--cards .als__tktrack a.als-card{flex:none;display:flex;align-items:center;gap:12px;margin:0;padding:0 30px 0 0;color:inherit;text-decoration:none}.als-card:focus-visible{outline:2px solid var(--alt-orange);outline-offset:2px;border-radius:12px}.als-card__th{position:relative;flex:none;display:grid;place-items:center;width:50px;height:50px;overflow:hidden;border-radius:12px;background:linear-gradient(150deg, rgba(255, 160, 87, 0.55), rgba(242, 106, 12, 0.22));box-shadow:0 0 0 1.5px rgba(255,122,24,.6),0 0 12px var(--alt-glow);color:#1c1f20;text-align:center;line-height:1}.als-card__th img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.als-card__th b{display:block;font:800 19px/1 "Space Grotesk","DM Sans",sans-serif}.als-card__th small{display:block;margin-top:2px;font-size:9px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.als-card__th svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.als-card__tx{display:grid;gap:2px;min-width:0;max-width:260px;line-height:1.25}.als-card__tx>*{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.als-card__tx b{font-size:14px;font-weight:700;color:var(--alt-ink)}.als-card__tx span{font-size:12.5px;color:var(--alt-muted)}.als-card__tx em{font:500 11px/1.25 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-style:normal;letter-spacing:.02em;color:var(--alt-orange-hi)}.als-card:hover .als-card__tx b{color:var(--alt-orange-hi)}.als-card.is-warn .als-card__th{background:linear-gradient(150deg, rgba(255, 200, 70, 0.75), rgba(255, 140, 0, 0.3));box-shadow:0 0 0 1.5px rgba(255,176,32,.75),0 0 12px rgba(255,176,32,.4)}.als-card.is-warn .als-card__tx em{color:#ffb020}@media(max-width: 600px){.als .als__ticker--cards{gap:8px;padding:0 0 0 12px;border-radius:12px}.als .als__ticker--cards .als__tk{font-size:9px;letter-spacing:.16em;line-height:1.3}.als__ticker--cards .als__tk svg{display:none}.als__ticker--cards .als__tkl b{display:block}.als .als__ticker--cards .als__tktrack{padding:7px 0 7px 12px}.als .als__ticker--cards .als__tktrack a.als-card{gap:10px;padding-right:22px}.als-card__th{width:42px;height:42px;border-radius:10px}.als-card__th b{font-size:16px}.als-card__th svg{width:19px;height:19px}.als-card__tx{max-width:196px}.als-card__tx b{font-size:13px}.als-card__tx span{font-size:11.5px}.als-card__tx em{font-size:10px}}@media(prefers-reduced-motion: reduce){.als .als__ticker--cards .als__tktrack{animation:none !important}.als .als__ticker--cards .als__tkin{overflow-x:auto}.als__ticker--cards [data-clone]{display:none !important}}


/* ace-matchday */
/* Match day (issue #55): banner on single events, chip in the live strip, fixture list. */
.acemd{margin:0 0 22px;padding:14px 16px;background:var(--ace-surface,#1c1813);border:1px solid rgba(255,176,32,.45);border-left:4px solid #ffb020;border-radius:var(--ace-radius,12px);color:var(--ace-ink,#f5f2ea);box-shadow:0 10px 30px rgba(0,0,0,.25)}
.acemd__row{display:flex;align-items:flex-start;gap:12px}
.acemd__row+.acemd__row{margin-top:12px;padding-top:12px;border-top:1px dashed rgba(255,255,255,.1)}
.acemd__icon{flex:0 0 auto;font-size:1.5rem;line-height:1}
.acemd__body{flex:1 1 auto;min-width:0}
.acemd__title{display:block;font-size:1.05rem;color:#ffb020}
.acemd__fix{font-weight:600}
.acemd__fix small{color:var(--ace-muted,#b9b0a0);font-weight:500}
.acemd__note{margin:6px 0 0;color:var(--ace-muted,#b9b0a0);font-size:.88rem;line-height:1.45}
.acemd__map{flex:0 0 auto;align-self:center;background:var(--ace-orange,#ff7a18);color:var(--ace-orange-ink,#1a1108);border-radius:999px;padding:7px 13px;font-weight:700;font-size:.82rem;text-decoration:none;white-space:nowrap}
.acemd__map:hover{background:var(--ace-orange-2,#ff9a45);color:var(--ace-orange-ink,#1a1108)}
.acemd__credit,.acemdl__credit{margin:10px 0 0;font-size:.72rem;color:var(--ace-muted,#b9b0a0)}
.acemd__credit a,.acemdl__credit a{color:inherit}
.als__chip.acemd-chip{border-color:#ffb020;color:#ffb020}
.acemdl{margin:28px 0;padding:18px 20px 16px;background:var(--ace-surface,#1c1813);border:1px solid rgba(255,255,255,.12);border-radius:var(--ace-radius,12px);color:var(--ace-ink,#f5f2ea)}
.acemdl__heading{margin:0 0 12px;font-size:1.25rem;line-height:1.2}
.acemdl__list{list-style:none;margin:0;padding:0}
.acemdl__item{display:grid;grid-template-columns:auto 92px 1fr auto;align-items:center;gap:12px;padding:9px 0;border-bottom:1px dashed rgba(255,255,255,.08);font-size:.92rem}
.acemdl__item:last-child{border-bottom:0}
.acemdl__item.is-today{background:rgba(255,176,32,.08);margin:0 -10px;padding:9px 10px;border-radius:8px}
.acemdl__icon{font-size:1.3rem;line-height:1}
.acemdl__when b,.acemdl__what b{display:block}
.acemdl__when small,.acemdl__what small{display:block;color:var(--ace-muted,#b9b0a0);font-size:.8rem}
.acemdl__map{background:rgba(255,255,255,.08);color:var(--ace-ink,#f5f2ea);border-radius:999px;padding:5px 11px;font-weight:700;font-size:.78rem;text-decoration:none}
.acemdl__map:hover{background:var(--ace-orange,#ff7a18);color:var(--ace-orange-ink,#1a1108)}
.acemdl__empty{margin:0;color:var(--ace-muted,#b9b0a0)}
@media (max-width:520px){.acemdl__item{grid-template-columns:auto 1fr auto}.acemdl__when{display:none}.acemd__row{flex-wrap:wrap}.acemd__map{align-self:flex-start}}


/* ace-bus-disruptions */
/* Bus disruptions (issue #56): shortcode list, home-strip chip, map-ticker anchors. */
.acebd{margin:28px 0;padding:18px 20px 16px;background:var(--ace-surface,#1c1813);border:1px solid rgba(255,255,255,.12);border-left:4px solid #ffb020;border-radius:12px;color:var(--ace-ink,#f5f2ea)}
.acebd__heading{margin:0 0 12px;font-size:1.25rem;line-height:1.2}
.acebd__list{list-style:none;margin:0;padding:0}
.acebd__item{padding:10px 0;border-bottom:1px dashed rgba(255,255,255,.1)}
.acebd__item:last-child{border-bottom:0}
.acebd__sum{display:block;color:#ffb020}
.acebd__meta{display:block;margin-top:3px;font-size:.82rem;color:var(--ace-muted,#b9b0a0)}
.acebd__text{margin:6px 0 0;font-size:.92rem;line-height:1.45;color:var(--ace-ink,#f5f2ea)}
.acebd__empty{margin:0;color:var(--ace-muted,#b9b0a0)}
.acebd__credit{margin:12px 0 0;font-size:.72rem;color:var(--ace-muted,#b9b0a0)}
.acebd__credit a{color:inherit}
.als__chip.acebd-chip{border-color:#ffb020;color:#ffb020}
.alm__ticker a.acebd-tk{color:var(--alm-amber,#ffb020)}


/* ace-event-weather */
/* Weather at start time (issue #60): forecast chip on single events and map-list cards. */
.aceew{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:18px 0 22px;padding:12px 16px;background:var(--ace-surface,#1c1813);border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:var(--ace-radius,12px);color:var(--ace-ink,#f5f2ea);font-size:.92rem}
.aceew__chip{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;background:rgba(255,255,255,.08);border:1px solid var(--ace-line,rgba(255,255,255,.12));font-weight:700;white-space:nowrap;line-height:1.2}
.aceew__icon{font-size:1.05em;line-height:1}
.aceew__dry{color:var(--ace-muted,#b9b0a0);font-weight:600}
.aceew__attr{flex-basis:100%;font-size:.7rem;line-height:1.3;color:var(--ace-muted,#b9b0a0);opacity:.8}
/* Card chip appended by event-weather.js under the date line. */
.aceew-card{display:inline-flex;align-items:center;gap:4px;margin:2px 0 4px;padding:2px 8px;border-radius:999px;background:rgba(0,0,0,.35);backdrop-filter:blur(6px);border:1px solid rgba(255,255,255,.14);color:var(--ace-ink,#f5f2ea);font-size:.72rem;font-weight:700;line-height:1.3;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.aceew-card__icon{line-height:1}
@media (max-width:480px){.aceew{padding:10px 12px;font-size:.88rem}.aceew__chip{white-space:normal}}


/* ace-flood-power */
/* Flood watch and power-cut flags (issue #61). Prefix ace-fp. */
.ace-fp{margin:0 0 18px;display:grid;gap:10px}
.ace-fp__banner{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border-radius:14px;border:1px solid rgba(255,255,255,.12);background:var(--ace-surface,rgba(255,255,255,.06));color:var(--ace-ink,#f5f2ea);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:inset 0 0 0 1px rgba(255,255,255,.03)}
.ace-fp__banner--amber{border-color:rgba(255,170,40,.55);background:linear-gradient(90deg,rgba(255,170,40,.18),var(--ace-surface,rgba(255,255,255,.06)) 70%)}
.ace-fp__banner--red{border-color:rgba(255,80,70,.65);background:linear-gradient(90deg,rgba(255,80,70,.22),var(--ace-surface,rgba(255,255,255,.06)) 70%)}
.ace-fp__icon{flex:0 0 32px;width:32px;height:32px;border-radius:50%;display:grid;place-items:center;font-weight:800;font-size:16px;line-height:1;background:rgba(255,170,40,.9);color:#1a1409}
.ace-fp__banner--red .ace-fp__icon{background:rgba(255,80,70,.95);color:#fff}
.ace-fp__text{display:grid;gap:3px;min-width:0}
.ace-fp__title{font-size:1rem;font-weight:800;letter-spacing:.2px}
.ace-fp__detail{font-size:.85rem;color:var(--ace-ink,#f5f2ea);opacity:.9}
.ace-fp__msg{font-size:.85rem;color:var(--ace-muted,#b9b0a0)}
.ace-fp__attr{font-size:.72rem;color:var(--ace-muted,#b9b0a0)}
.ace-fp__attr a{color:var(--ace-orange,#ff7a18);text-decoration:none}
.ace-fp__attr a:hover{text-decoration:underline}
/* Card badges appended by flood-power.js */
.ace-fp__badges{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
.ace-fp__badge{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 9px;font-size:.72rem;font-weight:700;line-height:1.5;white-space:nowrap;border:1px solid rgba(255,170,40,.6);background:rgba(255,170,40,.18);color:#ffd28a}
.ace-fp__badge--red{border-color:rgba(255,80,70,.7);background:rgba(255,80,70,.22);color:#ffb4ae}
.ace-fp__badge--power{border-color:rgba(255,170,40,.6);background:rgba(255,170,40,.18);color:#ffd28a}
@media (max-width:600px){.ace-fp__banner{padding:10px 12px}.ace-fp__icon{flex-basis:26px;width:26px;height:26px;font-size:13px}}


/* ace-context-chips */
/* Context chips (issue #63): bank holidays, term dates, council meetings, elections. */
.acectx{margin:12px 0}
.acectx__chips{display:flex;flex-wrap:wrap;gap:8px}
.acectx__credit{margin:8px 0 0;font-size:.72rem;color:var(--ace-muted,#b9b0a0)}
.als__chip.acectx-chip,.alm__now .acectx-chip{display:inline-flex;align-items:center;gap:6px;background:rgba(28,24,19,.86);border:1px solid rgba(255,255,255,.12);border-radius:999px;padding:6px 12px;font-weight:700;font-size:14px;color:var(--ace-ink,#f5f2ea);text-decoration:none;white-space:nowrap}
.acectx-chip small{color:var(--ace-muted,#b9b0a0);font-weight:500}
.acectx-chip--bank-holiday{border-color:var(--ace-orange,#ff7a18)}
.acectx-chip--election{border-color:#7fb3ff}
.acectx-chip--council{border-color:rgba(255,255,255,.28)}
.acectx-chip--term{border-color:#9be07a}
.alm__now .acectx-chip{padding:4px 10px;font-size:12px}
.alm__now .acectx-chip small{display:none}


/* ace-discovery-preferences */
.ace-discovery-watch,.ace-discovery-manager{box-sizing:border-box;min-width:0;padding:1rem;border-block:1px solid var(--shell-line,#394240);font:inherit;color:inherit}.ace-discovery-watch form{display:grid;gap:.65rem;margin-block:1rem}.ace-discovery-watch input[type=text]{box-sizing:border-box;display:block;width:100%;min-width:0;padding:.7rem;border:1px solid var(--shell-line,#68716e);border-radius:6px;background:var(--shell-card,var(--ace-surface,#fff));color:inherit}.ace-discovery-watch button,.ace-discovery-manager button{font:inherit;color:inherit;white-space:normal;text-align:start;padding:.6rem .7rem;max-width:100%;cursor:pointer}.ace-discovery-watch>button{width:100%;border:1px solid var(--shell-line,#68716e);background:transparent}.ace-discovery-watch p,.ace-discovery-manager p{font-size:.875rem;line-height:1.5;margin:.6rem 0}.ace-discovery-toggle{display:flex!important;gap:.5rem;align-items:center;font-size:.875rem}.ace-discovery-toggle input{width:1.1rem!important;height:1.1rem;flex:none;accent-color:#efb65d}.ace-discovery-list{list-style:none;padding:0;margin:.8rem 0}.ace-discovery-saved{border-block-end:1px solid var(--shell-line,#68716e);padding:.9rem 0;overflow-wrap:anywhere}.ace-discovery-saved-title{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}.ace-discovery-saved-title>a{font-weight:650}.ace-discovery-saved-title>span{font-size:.75rem;opacity:.7}.ace-discovery-channels{display:flex;flex-wrap:wrap;gap:.6rem;margin:.6rem 0}.ace-discovery-remove{background:transparent;border:0;text-decoration:underline;font-size:.8rem!important;padding:.3rem 0!important}.ace-discovery-summary{opacity:.75}.ace-discovery-watch summary{cursor:pointer;padding-block:.7rem}.ace-discovery-watch a,.ace-discovery-manager a{color:inherit;text-decoration:underline}.ace-discovery-watch button:focus-visible,.ace-discovery-watch input:focus-visible,.ace-discovery-manager a:focus-visible{outline:2px solid #efb65d;outline-offset:3px}


/* ace-indoor-webgl */
.ace-indoor-3d__controls{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--shell-line, var(--ace-line, #35403f))}.ace-indoor-3d__status{margin:0;color:var(--shell-muted, var(--ace-muted, #a7b1ad));font-size:12px}.ace-indoor-3d__stage{position:relative;min-height:320px;background:var(--shell-bg, var(--ace-bg, #14191b));overflow:hidden}.ace-indoor-3d__stage canvas{display:block;width:100%;height:100%;min-height:320px;touch-action:none}.ace-indoor-3d__places{position:absolute;left:12px;bottom:12px;display:flex;flex-wrap:wrap;gap:6px;max-width:calc(100% - 24px);margin:0;padding:0;list-style:none}.ace-indoor-3d__places button{padding:6px 9px;font-size:11px;background:var(--shell-panel, var(--ace-surface, #1c2224))}.ace-indoor-3d__places button[aria-pressed=true]{border-color:var(--shell-accent, var(--ace-orange, #efb665));color:var(--shell-accent, var(--ace-orange, #efb665))}.ace-indoor-3d__fallback{padding:18px;color:var(--shell-muted, var(--ace-muted, #a7b1ad))}@media(prefers-reduced-motion: reduce){.ace-indoor-3d__stage *{scroll-behavior:auto !important;transition:none !important;animation:none !important}}


/* ace-covers */
/* A photograph behind the top of a section.
 *
 * Fixed, so the page slides over it rather than dragging it along. Clear at the top
 * and graded into the page's own background by the time the words begin, so no text
 * ever sits on a busy photograph. The blur rises as you scroll, set from the script,
 * so what is left below the fold is a hint of colour rather than a picture competing
 * with the reading.
 */
/* The cover belongs to the main panel, not to the window. It is sticky rather than
   fixed so it stays inside its own column: fixed was measured against the viewport
   and ran underneath the rails on both sides, which is somebody else's space. Being
   the first thing in the panel and pulled back out of the flow means everything after
   it scrolls over the top, which is the whole point of it. */
.ace-cover{
	position:sticky;top:0;
	/* Flush to the edges of the panel: a cover with a margin round it is a picture in a
	   box, not a cover. How much padding there is between here and the panel depends on
	   which wrappers a route happens to use, so the script measures it and writes it
	   here rather than this guessing. The negative bottom takes the cover out of the
	   flow, so the words that follow scroll over the top of it. */
	/* Sideways only. The gap above cannot be taken out here: a sticky box is held
	   inside its own containing block, so a negative top margin was given straight
	   back and the picture stayed below the band of empty panel. The picture itself
	   is positioned, so it can go up there instead. */
	/* WordPress's constrained-layout rule also targets direct children and otherwise
	   clamps this zero-height positioning layer back to the text measure. These three
	   values are the cover contract, so they deliberately win that generic rule. */
	margin:0 calc(-1 * var(--cover-bleed,0px))!important;
	width:calc(100% + var(--cover-bleed,0px) * 2)!important;
	max-width:none!important;
	/* No height of its own, and no negative margin to cancel one.
	   Pulling a full-height box back out of the flow with a negative bottom margin
	   worked in Chrome and quietly cost Firefox about seventeen hundred pixels of
	   scrollable height, so a page opened at an anchor could not be scrolled back up
	   to its own top. The picture inside is positioned instead, which takes no space
	   anywhere. */
	height:0;
	z-index:0;pointer-events:none;
	/* The clipping belongs to the picture, not to this. A box with no height that also
	   hides its overflow hides the picture inside it, which is exactly what happened
	   the moment the height came off. */
	overflow:visible;
	isolation:isolate;
	/* 0 at the top of the page, 1 once the cover has scrolled away. */
	--cover-scrolled:0;
}
/* WordPress's constrained-layout rule (margin-left/right:auto !important) has exactly the
   specificity of .ace-cover, so the stylesheet printed last won. A routed page printed
   this one last and got the bleed; a direct load printed WordPress's last, the auto
   left margin resolved to 0 and the extra width hung off the right. Doubling the class
   wins whatever the order. */
.ace-cover.ace-cover{
	margin-left:calc(-1 * var(--cover-bleed,0px))!important;
	margin-right:calc(-1 * var(--cover-bleed,0px))!important;
}
.ace-cover__shot{
	position:absolute;left:0;right:0;
	/* Up past whatever sits above the cover in the panel, and taller by the same
	   amount so the bottom of the picture lands where it always did. */
	/* The lift only applies while the cover is still the thing you are looking at.
	   Once it has settled the panel has scrolled the strip away anyway, and holding
	   the lift there simply pushed the picture off the top of its own column. */
	top:calc(-1 * var(--cover-lift,var(--cover-bleed-top,0px)));
	height:calc(min(78vh,760px) + var(--cover-bleed-top,0px));
	overflow:hidden;
}
/* The picture itself. It fades right out as you read on, revealing the blurred copy
   behind the whole shell, and takes a little blur and scale on the way so the change
   reads as depth rather than as an image being switched off. */
.ace-cover__img{
	display:block;width:100%;height:100%;object-fit:cover;object-position:center 38%;
	filter:blur(calc(var(--cover-settled) * 9px)) saturate(calc(1 + var(--cover-settled) * .35));
	transform:scale(calc(1 + var(--cover-settled) * .08));
	transform-origin:center 30%;
	/* Never all the way out: what is left is the hint of colour behind the reading. */
	opacity:calc(1 - var(--cover-settled) * .78);
	will-change:filter,transform,opacity;
}
/* The grade that carries the photograph into the page: nothing at the top, the page's
   own background by the bottom. Two stops rather than one, because a single linear
   fade reads as a grey wash over the middle of the picture. */
.ace-cover__fade{
	position:absolute;inset:0;
	background:linear-gradient(
		to bottom,
		color-mix(in srgb, var(--ace-bg,#121614) 14%, transparent) 0%,
		color-mix(in srgb, var(--ace-bg,#121614) 52%, transparent) 22%,
		color-mix(in srgb, var(--ace-bg,#121614) 88%, transparent) 40%,
		var(--ace-bg,#121614) 58%
	);
}
/* The credit rides in the top right of the picture, faded until you look at it: a
   photographer has to be named wherever their work is used, and a caption under a
   full-bleed cover is nowhere. It is the one part of a cover you can interact with,
   so it is the one part that takes pointer events. */
/* As the cover settles it takes a wash in the direction of the theme rather than
   simply going soft: dark pages darken it, light pages lighten it, so what is left
   under the words always reads as the page's own background with a memory of a
   photograph in it, rather than as a grey photograph. */
.ace-cover__wash{
	position:absolute;inset:0;pointer-events:none;
	background:var(--ace-bg,#121614);
	opacity:calc(var(--cover-settled,0) * .42);
}
[data-ace-theme=light] .ace-cover__wash{background:var(--ace-bg,#f6f4ef)}

.ace-cover__credit{
	/* 1rem in from the top-right corner of the main panel. The anchor this hangs from
	   starts below the headline runway, so it rides the same lift as the picture; once
	   the cover pins the lift is spent and it simply stays at the top. */
	/* --cover-strip is the sticky stats strip across the top of the panel, measured by the
	   script: the credit clears it rather than hiding underneath it. */
	position:absolute;top:calc(1rem + var(--cover-strip,3.25rem) - var(--cover-lift,var(--cover-bleed-top,0px)));right:1rem;z-index:2;
	margin:0;padding:.2rem .5rem;
	border-radius:999px;
	background:color-mix(in srgb, #000 42%, transparent);
	-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
	color:#fff;font-size:.68rem;letter-spacing:.03em;line-height:1.5;
	opacity:.4;pointer-events:auto;transition:opacity .2s ease;
}
.ace-cover__credit:hover,.ace-cover__credit:focus-within{opacity:.95}
.ace-cover__credit a{color:inherit;text-decoration:none;border-bottom:1px solid rgba(255,255,255,.45)}

/* A written article uses the same opening composition as the timeline: the cover is
   the first thing in the hero, the headline sits in its darkened lower half, and the
   article itself then becomes the solid reading surface. */
:is(.single-post,.ace-page-covered) .ace-article-hero{
	/* The hero draws no box. A sticky cover is held inside its containing block, and
	   when that was the hero it needed a tall minimum height as a runway, which left a
	   band of nothing between a short headline and the article. With no box here the
	   containing block is <main>, which is as tall as the page, so the photograph stays
	   still for as long as it is visible and the words can follow the headline directly. */
	display:contents;
}
:is(.single-post,.ace-page-covered) .ace-article-hero .ace-cover{
	/* Match the hero's known first-paint padding before the measuring script runs.
	   Without this seed the photograph briefly begins below the empty headline runway,
	   then jumps to the panel top when JavaScript supplies the same distance. */
	--cover-lift:0px;
}
:is(.single-post,.ace-page-covered) .ace-article-hero .ace-cover__shot{
	/* The shared section cover adds the pre-cover gap to its height. An article
	   already supplies that gap with its headline composition, so adding it again
	   produces a photograph taller than both the viewport and its containing hero. */
	height:min(78vh,760px);
}
:is(.single-post,.ace-page-covered) .ace-article-hero .ace-cover__img{
	/* A zoom around a point above centre reads as vertical movement even when the
	   sticky layer itself is perfectly still. Articles fade and soften in place. */
	transform:none;will-change:filter,opacity;
}
:is(.single-post,.ace-page-covered) .ace-article-hero>.wp-block-group{
	position:relative;z-index:2;box-sizing:content-box;
	width:min(calc(100% - 2 * var(--wp--style--root--padding-left,1.25rem)),760px);margin-inline:auto;
	/* The headline sits on the clear upper part of the picture; the article starts close beneath it. */
	padding:clamp(6rem,15vh,10rem) 0 clamp(.75rem,2vh,1.5rem)!important;
}
:is(.single-post,.ace-page-covered) .ace-article-hero .wp-block-post-title{
	font-size:clamp(2.35rem,5vw,4.8rem)!important;line-height:.98;
	letter-spacing:-.045em;text-wrap:balance;text-shadow:0 2px 24px rgba(0,0,0,.5);
}
:is(.single-post,.ace-page-covered) .wp-block-post-content{position:relative;z-index:1}
/* A page keeps its centred headline everywhere else; over a cover it sits left, like an article. */
.ace-page-covered .ace-article-hero .wp-block-post-title{text-align:left}

/* Inline article photographs borrow the timeline's rounded, deliberately cropped
   figure treatment and keep the photograph credit attached to its caption. */
.single-post .wp-block-post-content .ace-article-photo{
	box-sizing:border-box;width:min(100%,940px);max-width:940px;
	margin:clamp(2rem,6vw,4.5rem) auto;
}
.single-post .wp-block-post-content .ace-article-photo img{
	display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;
	border:1px solid var(--ace-line,rgba(255,255,255,.12));border-radius:14px;
	background:var(--ace-surface,#1b211f);
}
.single-post .wp-block-post-content .ace-article-photo figcaption{
	margin:.55rem .15rem 0;color:var(--ace-muted,#b9b0a0);font-size:.78rem;line-height:1.5;
}
@media(max-width:640px){
	:is(.single-post,.ace-page-covered) .ace-article-hero>.wp-block-group{padding-top:clamp(4.5rem,13vh,7rem)!important}
	:is(.single-post,.ace-page-covered) .ace-article-hero .wp-block-post-title{font-size:clamp(2rem,10vw,3.2rem)!important}
	.single-post .wp-block-post-content .ace-article-photo{margin-block:2rem}
}

/* An Unsplash photograph used inline keeps the same obligation, so it is credited as
   the source line under the picture, in the muted style the rest of the site uses for
   where something came from. */
.ace-credit{
	display:block;margin:.35rem 0 0;
	color:var(--ace-muted,#b9b0a0);font-size:.7rem;letter-spacing:.02em;
	opacity:.6;transition:opacity .18s ease;
}
.ace-credit:hover,.ace-credit:focus-within{opacity:1}
.ace-credit a{color:inherit}

/* Everything the section itself draws sits above the photograph and scrolls over it.
   The footer as well: it is a sibling of the section rather than part of it, and a
   static element paints before a positioned one, so the cover was drawn over the top
   of it and the footer appeared to vanish under the panel as it scrolled in. */
.ace-csection,.ace-chy,.ace-tl,.ace-community-hub__document{position:relative;z-index:1}
.ace-shell__main footer,.ace-shell__main .ace-footer,
.ace-shell__main .wp-block-template-part{position:relative;z-index:1}

/* There is no second copy of the photograph anywhere. The cover stays where it is and
   blurs into a wash of its own colour as you read past it, which is one painted layer
   inside one panel rather than a full-window backdrop the browser has to composite on
   every frame. */

/* A covered section needs its own top spacing, or the headline lands in the middle of
   the grade rather than on the clear part of the picture. */
[data-ace-covered]{padding-top:clamp(2rem,9vh,7rem)}

@media (prefers-reduced-motion:reduce){
	.ace-cover__img{transition:none;transform:none}
}
/* A photograph is decoration. If it cannot be loaded, nothing about the page changes. */
.ace-cover__img:not([src]){display:none}

/* A covered page starts further down: the photograph wants a clear run at the top
   before the words begin, or the headline lands in the middle of the grade rather
   than on the part of the picture worth looking at. */
[data-ace-covered]{padding-top:clamp(5rem,20vh,15rem)}
[data-ace-covered] .ace-cover{--cover-lift:clamp(5rem,20vh,15rem)}
@media (max-width:640px){[data-ace-covered]{padding-top:clamp(3.5rem,16vh,9rem)}[data-ace-covered] .ace-cover{--cover-lift:clamp(3.5rem,16vh,9rem)}}


@media (prefers-reduced-motion:reduce){
	.ace-cover__img{transition:none;transform:none}
}
/* A photograph is decoration. If it cannot be loaded, nothing about the page changes. */
.ace-cover__img:not([src]){display:none}

/* A listing with no picture: the shared cover layout, with the default header gradient. */
.ace-cover--plain .ace-cover__shot{background:radial-gradient(circle at 85% 0,rgba(255,122,24,.24),transparent 38%),linear-gradient(135deg,#15110d,#282019)}

/* Light mode on covered pages (6 Oct 2026). The hero colours were tuned for dark mode only:
   near-white intro text and pale kickers vanished on the light cover. In light mode the photo
   keeps its fade (only a light veil at the top, grading to the page), hero text is dark with a soft page-coloured glow so it never rests
   directly on a busy picture, and the photo credit gets a readable plate. */
[data-ace-theme=light] .ace-cover__fade{background:linear-gradient(to bottom,color-mix(in srgb,var(--ace-bg,#f6f4ef) 6%,transparent) 0%,color-mix(in srgb,var(--ace-bg,#f6f4ef) 22%,transparent) 38%,color-mix(in srgb,var(--ace-bg,#f6f4ef) 62%,transparent) 68%,var(--ace-bg,#f6f4ef) 100%)!important}
[data-ace-theme=light] .ace-content-hero h1,[data-ace-theme=light] .ace-interest-hero h1{color:#1d2420;text-shadow:0 1px 22px color-mix(in srgb,var(--ace-bg,#f6f4ef) 92%,transparent),0 0 3px color-mix(in srgb,var(--ace-bg,#f6f4ef) 70%,transparent)}
[data-ace-theme=light] .ace-content-hero p,[data-ace-theme=light] .ace-content-hero__copy>p{color:#2a312d;text-shadow:0 1px 14px color-mix(in srgb,var(--ace-bg,#f6f4ef) 95%,transparent),0 0 3px color-mix(in srgb,var(--ace-bg,#f6f4ef) 85%,transparent)}
[data-ace-theme=light] .ace-content-kicker,[data-ace-theme=light] .ace-interest-kicker{color:color-mix(in srgb,var(--panel-accent-2,#c96a1a) 45%,#1d1a16);text-shadow:0 0 10px color-mix(in srgb,var(--ace-bg,#f6f4ef) 90%,transparent)}
[data-ace-theme=light] .ace-content-kicker a{color:inherit}
[data-ace-theme=light] .ace-cover__credit{color:#2a312d;background:color-mix(in srgb,var(--ace-bg,#f6f4ef) 82%,transparent);border-radius:999px;padding:3px 10px}
[data-ace-theme=light] .ace-cover__credit a{color:#2a312d;text-decoration:underline}
[data-ace-theme=light] .ace-content-hero .ace-content-button:not(.ace-content-button--primary){background:color-mix(in srgb,var(--ace-bg,#f6f4ef) 80%,transparent);color:#2a312d;border-color:color-mix(in srgb,#2a312d 30%,transparent)}
/* A feathered light glow behind the headline block only: a dark or busy photograph still shows
   and fades around it, but the dark hero text always has a light ground. No box edge. */
[data-ace-theme=light] .ace-content-hero__copy{position:relative;isolation:isolate}
[data-ace-theme=light] .ace-content-hero__copy::before{content:"";position:absolute;inset:-48px -72px;z-index:-1;pointer-events:none;background:radial-gradient(ellipse 72% 68% at 38% 52%,color-mix(in srgb,var(--ace-bg,#f6f4ef) 80%,transparent) 0%,color-mix(in srgb,var(--ace-bg,#f6f4ef) 55%,transparent) 48%,transparent 78%)}
[data-ace-theme=light] .ace-content-kicker{color:color-mix(in srgb,var(--panel-accent-2,#c96a1a) 35%,#15120f)}


