/* Width is set by the container, never by the element inside it. Client's
   rule, 11. 9. 2026: if .wrap already limits the line, a second cap on the
   paragraph is one more place to change and one more thing to disagree with
   itself. Sections that want a narrower measure use .wrap--text. */
/* SBT Portal — components.
 *
 * Reproduces the client-approved vzorec C composition. The markup contract
 * lives in sbt-portal-strani/includes/lib.php; if you rename a class here,
 * rename it there too.
 *
 * Nothing hard-codes a colour — tokens.css is the only source. Where the
 * sample used a literal hex it was measured first: all passed except
 * #8b9793 for photo captions on white (3.02), which uses --muted instead.
 */

/* ---------------------------------------------------------------- header */
.site-head{background:var(--band-deep);color:var(--band-ink);box-shadow:0 1px 0 var(--band-edge);position:sticky;top:0;z-index:50}
.topbar{border-bottom:1px solid rgb(var(--band-veil) / .15);font-size:var(--step--1)}
.topbar-in{display:flex;gap:var(--s-2) var(--s-5);justify-content:flex-end;align-items:center;
  padding-block:var(--s-2);flex-wrap:wrap}
.topbar a,.topbar>span,.topbar-item{color:var(--band-ink);text-decoration:none;
  display:inline-flex;align-items:center;gap:7px;min-height:28px;padding:1px 4px}
.topbar .sbt-icon{width:15px;height:15px;opacity:.75;flex:none}
.topbar a:hover{text-decoration:underline}
@media (max-width:640px){.topbar .topbar-mail{display:none}}
.num{font-variant-numeric:tabular-nums}

/* ------------------------------------------------- a unit's telephone lines
 *
 * A unit is rarely one number. The Ginekološko porodni oddelek has three —
 * porodnišnica, ginekologija, samoplačniške storitve — and the Urgentni
 * center has one for illness and one for injury. Until 19 September 2026 the
 * portal printed whichever the database returned first, which on the maternity
 * page was the self-pay desk.
 *
 * So the label is not decoration here: it is the difference between the
 * delivery room and the cashier, and a reader must meet it BEFORE the digits
 * rather than look back up afterwards. It sits on its own line above its
 * number and stays at --step--1, never smaller.
 *
 * Used inside a <dd> on unit pages and inside a table cell on /kontakti/, so
 * it sets no width and no alignment of its own. Still no tel: — 112 is the
 * only call link on this portal. */
.tel-lines{list-style:none;margin:0;padding:0;display:grid;gap:var(--s-3)}
.tel-lines>li{margin:0}
.tel-lines .tel-what{display:block;font-size:var(--step--1);line-height:1.3;
  color:var(--muted)}
.tel-lines .num{font-weight:600}

/* Emergency reachable at every width — vzorec C has nothing in the chrome,
   which on a hospital site is a regression. See docs/OPEN-QUESTIONS.md #2.

   The colour is NOT inherited from .topbar a, and that is the whole point of
   writing it here. This pill is a FILL standing on the band, so what belongs
   on it is the token that names what is printed on that fill; what .topbar a
   carries is --band-ink. Those two are the same white on every dark-band
   palette and opposites on a light one, where inheritance put dark type on
   the pill at 3.26:1.

   19. 9. 2026 - THE PILL NO LONGER WEARS THE PALETTE'S ACCENT.

   It used to be `background:var(--coral)`. Under `jezero`, which the client
   activated on 19. 9. 2026, that token holds GREEN - and green on this portal
   is what the state chip beside every clinic's opening hours means by
   *odprto*. The route to emergency care was therefore painted in the one
   colour that says "everything is fine". Measured on the live page, it was
   also 1.53:1 against the band behind it, so it had no shape either: 1.4.11
   asks 3.0.

   --danger is its own token for the same reason --band-ink-accent is: the
   emergency route does not follow a colour scheme. It is WARM on every
   palette, light on a dark band and dark on a light one, and
   tools/kontrast.php measures it against the band and against its own type.
   Under `jezero` it now measures 4.85 against the band and 6.72 for the type
   on it.

   Found by tools/kontrast-zivi.mjs — axe-core over the rendered page under the
   Nebo palette — and not by the pair table, which had the pair right all along
   (on-brand on accent, and it names this very selector) while the CSS handed it
   the wrong token. That is the second defect that tool has caught which a list
   written by reading the CSS could not, and it is the argument for keeping
   both.

   The selector is .topbar .topbar-urgent and not .topbar-urgent, which is the
   second half of the same defect: .topbar a is (0,1,1) and beats a bare class,
   so the first fix set the right token on a rule that lost the cascade and axe
   reported the identical 3.26:1 a second time. Measured again, not assumed.

   1. 10. 2026: the same red as the 112 tile (--sos) with white type, at the
   hospital's request, and deliberately WITHOUT the white ring the 112 tile
   wears. Against a dark band the red measures only 1.24-1.26, so the pill's
   outline does not reach 3:1 — but 1.4.11 asks a boundary only of what is
   needed to identify a control, and this link is identified by its words,
   white on the red at 6.04. The pairs are in kontrast-lib.php, and the
   unmeasured outline is in its list of things not checked on purpose. */
.topbar .topbar-urgent{background:var(--sos);color:var(--sos-ink);border-radius:999px;padding:2px var(--s-3) !important;
  font-weight:700}
.topbar .topbar-urgent:hover{background:var(--sos-hover);color:var(--sos-ink);text-decoration:none !important}

.head-row{display:flex;align-items:center;gap:var(--s-5);padding-block:var(--s-4);flex-wrap:wrap}
.brand{display:inline-flex;align-items:center;min-height:44px}
.brand img{height:42px;width:auto;filter:var(--logo-filter)}

/* ------------------------------------------------------------ navigation
   MUST work with JavaScript disabled. The old theme hid .mega with
   display:none and revealed it only through a JS class, leaving a phone with
   JS off no navigation at all. :hover and :focus-within carry it. */
.main-nav{margin-left:auto;display:flex;align-items:center;gap:var(--s-1);flex-wrap:wrap}
.main-nav>a,.nav-branch>a{color:var(--band-ink);text-decoration:none;padding:var(--s-3);
  border-radius:8px;font-weight:600;display:inline-flex;align-items:center;min-height:44px}
.main-nav>a:hover,.nav-branch>a:hover{background:rgb(var(--band-veil) / .12)}
.main-nav [aria-current="page"]{box-shadow:inset 0 -3px 0 var(--nav-current)}
/* YOU ARE HERE, one level up: /novice/ marks Obveščanje. The branch link is
   not the page the reader is on, so it must not claim aria-current — it gets
   the same bar through a class instead. Same token, same meaning, no lie. */
.nav-branch.is-here>a{box-shadow:inset 0 -3px 0 var(--nav-current)}
/* Containing block for the mobile overlay nav below. */
.head-row{position:relative}

.nav-branch{position:relative;display:flex;align-items:center}

/* The disclosure control. One job: open and close the panel. It is a sibling
   of the branch link rather than the link itself, because a link that is also
   a toggle cannot honestly be either — see the note in header.php.

   --band-ink-soft measures 8.03 on --band-deep, well past the 3:1 that 1.4.11
   asks of the caret, which is the only thing making this a control: it carries
   no fill and no visible label. 32x44 clears 2.5.8. */
.nav-toggle{background:none;border:0;padding:0 var(--s-2);min-width:32px;min-height:44px;
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;
  color:var(--band-ink-soft);border-radius:8px}
.nav-toggle:hover{color:var(--band-ink);background:rgb(var(--band-veil) / .12)}
.nav-chev{width:8px;height:8px;border-right:2px solid;border-bottom:2px solid;
  transform:translateY(-2px) rotate(45deg);transition:transform .18s}
.nav-toggle[aria-expanded="true"] .nav-chev{transform:translateY(2px) rotate(-135deg)}

.mega{position:absolute;left:0;top:100%;min-width:16rem;background:var(--card);color:var(--ink);
  border-radius:var(--r);box-shadow:0 18px 40px rgb(var(--shade-rgb) / .22);padding:var(--s-3);
  opacity:0;visibility:hidden;transition:opacity .12s}
/* WITHOUT JavaScript these two rules are the whole mechanism, exactly as
   before: hover opens the panel, and :focus-within opens it for the keyboard.
   WITH JavaScript the panel's state is the `hidden` attribute instead — which
   site.css already enforces with display:none !important — and the rule below
   keeps a panel the script has opened visible. The two cannot fight: a hidden
   element has no opacity to argue about. */
.nav-branch:hover>.mega,.nav-branch:focus-within>.mega{opacity:1;visibility:visible}
.js .nav-branch>.mega:not([hidden]){opacity:1;visibility:visible}
.mega ul{list-style:none;margin:0;padding:0}
.mega a{display:flex;align-items:center;min-height:44px;padding:var(--s-3);border-radius:8px;
  color:var(--ink);text-decoration:none}
.mega a:hover{background:var(--tint)}
.mega a[aria-current="page"]{background:var(--tint2);font-weight:700}

/* THE FOCUS RING INSIDE THE PANEL HAS TO BE THE PANEL'S RING, NOT THE BAND'S.
   assets/site.css gives .site-head :focus-visible a WHITE outline, because the
   masthead is a dark band. The panel that drops out of it is a white card, so
   a keyboard landing on "Novice" got a white ring on white — a focus indicator
   that is only there in the computed styles. Nothing automated catches that:
   axe does not measure focus contrast and tools/a11y-keyboard.mjs asks whether
   an outline EXISTS. It was found by opening the menu with the keyboard and
   looking at it.

   Only above the mobile breakpoint: below it the panel sits on the band and
   the band's white ring is the correct one. The box-shadow is restated because
   the aria-current rule above sets an inset shadow of its own and would
   otherwise swallow the ring's halo on the current item — which is exactly the
   item the keyboard lands on first. */
/* Prenatrpan meni med 1024 in 1149 px — 22. 9. 2026.
 *
 * Vsebnik glave je omejen na --wrap. Ko je »Za napotne zdravnike« odšel pod
 * »O bolnišnico«, se meni od 1150 px navzgor ne prelamlja več (glava 201 -> 133 px),
 * pod tem pa še vedno: pri 1100 px potrebuje 1074 px od 1060 razpoložljivih,
 * pri 1024 px 1068 od 984. Manjka torej od 14 do 85 px.
 *
 * Med 921 in 1023 px stiskanje ni zadostovalo — tam meni prevzame gumb; prag
 * je bil zato prestavljen z 920 na 1023 px. Od 1024 navzgor je meni v eni
 * vrstici in glava visoka 129-133 px namesto 201.
 *
 * Meni se v tem pasu stisne in ne skrije pod gumb. Prag za gumb je 1023 px:
 * na prenosniku je vidnih pet vej boljših od skritih — to je bolnišnica in
 * obiskovalec pogosto ne ve, katero besedo naj išče. Stisne se samo
 * VODORAVNI odmik; višina postavke in tarča ostaneta (min-height 44 px na
 * gumbu, vrstična višina na povezavi), zato ostane izpolnjeno tudi
 * WCAG 2.5.8. */
@media (min-width:1024px) and (max-width:1149px){
  .main-nav>a,.nav-branch>a{padding-inline:calc(var(--s-3) - 5px)}
  .nav-toggle{min-width:24px;padding-inline:2px}
  .main-nav{gap:0}
}

@media (min-width:1024px){
  .site-head .mega a:focus-visible{outline:2px solid var(--teal);outline-offset:2px;
    box-shadow:0 0 0 4px var(--card)}
  .site-head .mega a[aria-current="page"]:focus-visible{
    box-shadow:0 0 0 4px var(--card),inset 0 -3px 0 var(--teal)}
}

/* The booking CTA, and the ring that gives it a shape.

   White text on it measures 4.90 under `jezero` and passes 1.4.3. The BUTTON
   measured 1.53 against the band and failed 1.4.11, which asks 3.0 for the
   visual boundary of a control - so the most important control on a hospital
   site was readable and invisible at the same time. Measured on the live page
   on 19. 9. 2026, not reasoned about.

   The ring rather than a lighter accent, because there is no lighter accent to
   have: white type on the fill caps its luminance and 3:1 against the band
   floors it, and the two do not overlap on any of the four dark-band palettes.
   `box-shadow: inset` rather than `border`, because a border would move the
   text 2px and the client asked that nothing but colour change. */
.nav-cta{background:var(--accent);color:var(--on-brand) !important;font-weight:700;
  padding:var(--s-3) var(--s-5) !important;border-radius:999px;
  box-shadow:inset 0 0 0 2px var(--control-edge)}
.nav-cta:hover{background:var(--accent-hover)}

/* The phone menu button. Its border is the ONLY thing that makes it a button
   — there is no fill and no label, only a glyph — and at .35 of the veil it
   measured 2.09-2.30 against the band. Found at 400px by the browser check in
   tools/kontrast-zivi.mjs, which is the only width it is visible at. */
.burger{display:none;background:none;border:1px solid rgb(var(--band-veil) / .65);color:var(--band-ink);
  border-radius:10px;min-width:44px;min-height:44px;align-items:center;justify-content:center}
.burger .ico-close,.burger[aria-expanded="true"] .ico-open{display:none}
.burger[aria-expanded="true"] .ico-close{display:block}

@media (max-width:1023px){
  .burger{display:inline-flex}
  /* Overlay, as in the sample: the open menu covers the page instead of
     pushing the hero down, so opening it does not move what is underneath.
     .site-head is already position:sticky, which is a containing block.

     flex-wrap MUST be nowrap here. .main-nav wraps by design on the desktop
     bar, and a column flex container with a capped height (.is-open caps it at
     70vh) wraps into extra COLUMNS — which is exactly what happened: three
     256px columns marching off the right edge of a 390px phone. */
  .main-nav{position:absolute;top:100%;left:0;right:0;margin:0;
    background:var(--band-deep);flex-direction:column;flex-wrap:nowrap;
    align-items:stretch;gap:2px;padding:8px 16px 18px}
  /* Stacked, so the branch link and its toggle share a row and the panel drops
     to a full-width line underneath. */
  .nav-branch{flex-wrap:wrap;justify-content:space-between}
  .nav-branch>a{flex:1 1 auto}
  .nav-toggle{min-width:44px}
  .mega{position:static;opacity:1;visibility:visible;box-shadow:none;background:transparent;
    color:inherit;padding-left:var(--s-5);min-width:0;flex:0 0 100%}
  .mega a{color:var(--band-ink)}
  .mega a[aria-current="page"]{background:rgb(var(--band-veil) / .16)}
  .mega a:hover{background:rgb(var(--band-veil) / .12)}
  .nav-cta{margin-top:var(--s-3);justify-content:center}

  /* The nav was stacked but never hidden, so all five branches and every
     submenu rendered expanded: the header measured 1157px tall on a 390px
     screen against the sample's 157, pushing every bit of content off screen.
     
     It is hidden only under `.js`. Without JavaScript the burger cannot
     toggle anything, so the nav stays visible — long, but present. Hiding it
     unconditionally would leave a phone with JS off no navigation at all,
     which is the exact defect we removed from the old theme. */
  .js .main-nav{display:none}
  .js .main-nav.is-open{display:flex}
  .js .main-nav.is-open{max-height:min(70vh,32rem);overflow-y:auto;
    padding-bottom:var(--s-4)}
}

/* ------------------------------------------------------------------ hero */
/* Interior pages are NOT dark in vzorec C. All three sample sub-pages
   (narocanje, cakalne-dobe, dostopne-storitve) open with a light .page-head on
   paper: small muted breadcrumb, teal-deep h1, muted lede. Only the homepage
   carries the photographic band. Painting every page with the dark band was
   the single largest departure from the approved design.

   Scoped with :not(.hero) rather than by source order, so the homepage cannot
   be reached by these rules whatever order the file ends up in. */
.page-hero:not(.hero){padding-block:48px 8px}
.page-hero:not(.hero) h1{font-size:clamp(30px,4.6vw,44px);color:var(--teal-deep);margin:10px 0 12px}
.page-hero:not(.hero) .hero-lede{font-size:18.5px;color:var(--muted);opacity:1}
.page-hero:not(.hero) .hero-kicker{color:var(--teal);margin:0}
.page-hero:not(.hero) .breadcrumbs{font-size:14.5px;color:var(--muted)}
.page-hero:not(.hero) .breadcrumbs a{color:var(--teal);text-decoration:none}
.page-hero:not(.hero) .breadcrumbs a:hover{text-decoration:underline}
/* The homepage keeps white type over the photograph. */
.hero h1,.hero .hero-lede{color:var(--on-brand)}

/* Homepage hero: photograph behind text.
 *
 * CONTRAST IS LOAD-BEARING. The scrim is what makes white text legible over
 * the photographs, and since 1. 10. 2026 it is two layers:
 *
 *   a light wash over the whole hero (.37 → .50 → .70), so the building shows —
 *   the hospital found the old even .72-.88 too dark;
 *   a shade behind the headline only (.82 at its core), so the text keeps its
 *   contrast where the wash alone would not.
 *
 * Measured per pixel, not assumed: tools/hero-kontrast.mjs photographs the
 * three slides without the scrim at 1440 and 390, composites this scrim over
 * every pixel behind every line of text, and reports the 0.5th percentile.
 * Under jezero: kicker 4.67, h1 5.62, lede 5.70 (need 4.5 / 3.0 / 4.5). The
 * old even scrim measured 3.27 / 3.93 / 3.88 the same way — the second slide
 * (b3_urgent) is near white behind the text, and the old note's "5.74 against
 * a white area" was true only of the darker base scrim.
 * Re-run the tool after changing either layer or any slide. */
/* No min-height: in the approved sample the hero's height is set entirely by
   its content, and its content includes the four task cards (.hero contains
   .qa-grid there). That is why the sample is 639px tall at 1440 and 1477 at
   390 — on a phone the cards stack into one column and the photograph grows
   with them. A fixed min-height reproduced the desktop number and missed the
   mobile one by 900px, because it was guessing at a height the content owns.
   Padding is the sample's own 60/44. */
.hero{position:relative;overflow:hidden;isolation:isolate;
  padding-block:3.75rem 2.75rem}
.hero>.wrap{position:relative;z-index:2}
.hero-bg{position:absolute;inset:0;z-index:0;background:var(--band-deep)}
.slide{position:absolute;inset:0;background-size:cover;background-position:center;
  filter:blur(3px) saturate(1.06) brightness(1.6);transform:scale(1.06);opacity:0;
  animation:heroSlides 27s infinite;will-change:opacity}
/* WebP with a JPEG fallback. The url() declaration comes first so a browser
   that does not understand image-set() simply keeps it; one that does takes
   the second declaration and picks the WebP.

   Only the FIRST slide loads with the page. Slides two and three do not appear
   until 9 and 18 seconds in, and the browser was fetching all three during the
   initial render — 243 KB of images for a hero nobody had looked at yet. They
   are attached once .hero-bg gets .ready, which site.js sets on window load.
   With JavaScript off the hero is a single still image, which is exactly what
   prefers-reduced-motion already gets. */
.slide:nth-child(1){animation-delay:0s;opacity:1;
  background-image:url(img/b1_front.jpg);
  background-image:image-set(url(img/b1_front.webp) type("image/webp"),
                             url(img/b1_front.jpg)  type("image/jpeg"))}
.slide:nth-child(2){animation-delay:9s}
.slide:nth-child(3){animation-delay:18s}
.hero-bg.ready .slide:nth-child(2){
  background-image:url(img/b3_urgent.jpg);
  background-image:image-set(url(img/b3_urgent.webp) type("image/webp"),
                             url(img/b3_urgent.jpg)  type("image/jpeg"))}
.hero-bg.ready .slide:nth-child(3){
  background-image:url(img/b2_historic.jpg);
  background-image:image-set(url(img/b2_historic.webp) type("image/webp"),
                             url(img/b2_historic.jpg)  type("image/jpeg"))}
.hero-scrim{position:absolute;inset:0;z-index:1;
  background:
    radial-gradient(ellipse 55% 45% at 40% 20%,rgb(var(--scrim-a) / .82) 0%,rgb(var(--scrim-a) / .80) 55%,rgb(var(--scrim-a) / 0) 100%),
    linear-gradient(180deg,rgb(var(--scrim-a) / .37),rgb(var(--scrim-b) / .50) 45%,rgb(var(--scrim-a) / .70))}
/* On a phone the text spans the width, so the shade is a band over the top. */
@media (max-width:760px){
  .hero-scrim{background:
    linear-gradient(180deg,rgb(var(--scrim-a) / .82) 0%,rgb(var(--scrim-a) / .80) 22%,rgb(var(--scrim-a) / 0) 30%),
    linear-gradient(180deg,rgb(var(--scrim-a) / .37),rgb(var(--scrim-b) / .50) 45%,rgb(var(--scrim-a) / .70))}
}

/* Narrow viewports take the 900px copy of the backdrop. The slide is blurred
   by 3px and scaled 1.06, so detail below about six device pixels is destroyed
   before it is ever seen — a 1800px source on a 390px phone was 132 KB spent
   on pixels the blur removes. 46 KB instead. */
@media (max-width:760px){
  .slide:nth-child(1){
    background-image:url(img/b1_front-900.jpg);
    background-image:image-set(url(img/b1_front-900.webp) type("image/webp"),
                               url(img/b1_front-900.jpg)  type("image/jpeg"))}
  .hero-bg.ready .slide:nth-child(2){
    background-image:url(img/b3_urgent-900.jpg);
    background-image:image-set(url(img/b3_urgent-900.webp) type("image/webp"),
                               url(img/b3_urgent-900.jpg)  type("image/jpeg"))}
  .hero-bg.ready .slide:nth-child(3){
    background-image:url(img/b2_historic-900.jpg);
    background-image:image-set(url(img/b2_historic-900.webp) type("image/webp"),
                               url(img/b2_historic-900.jpg)  type("image/jpeg"))}
}

@keyframes heroSlides{0%{opacity:0}3%{opacity:1}30%{opacity:1}36%{opacity:0}100%{opacity:0}}

/* A blurred image cross-fading behind text is what reduced-motion is for. */
@media (prefers-reduced-motion:reduce){
  .slide{animation:none}
  .slide:nth-child(1){opacity:1}
  .slide:nth-child(2),.slide:nth-child(3){opacity:0}
}

.hero-search{margin-top:var(--s-6);display:flex;gap:var(--s-3);flex-wrap:wrap}
/* The placeholder repeats the label; showing both printed it as loose text. */
.hero-search label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.hero-search input[type="search"]{flex:1 1 18rem;min-height:54px}
/* --teal-deep IS --scrim-a on three of the six palettes, so over a dark part
   of the hero photograph this button was a rectangle of exactly the colour
   behind it: 1.26-1.86 measured against the scrim at its lightest. The same
   ring as the booking CTA, for the same criterion. */
.hero-search button{display:inline-flex;align-items:center;gap:var(--s-2);min-height:54px;
  padding-inline:var(--s-5);border:0;border-radius:var(--r);background:var(--teal-deep);
  color:var(--on-brand);font:inherit;font-weight:700;cursor:pointer;
  box-shadow:inset 0 0 0 2px var(--control-edge)}
.hero-search button:hover{background:var(--teal)}
/* Since the lighter scrim (1. 10. 2026) these two stand on light photograph as
   well as dark: the white ring was 2.75 / 2.23 against the brightest of it.
   A dark ring outside the white one keeps an edge on both — dark against light,
   white against dark. tools/hero-kontrast.mjs measures it. */
.hero-search button,.hero .qa-primary{
  box-shadow:inset 0 0 0 2px var(--control-edge),0 0 0 2px var(--ink)}

.hero-kicker{text-transform:uppercase;letter-spacing:.14em;font-size:15px;
  font-weight:700;color:var(--tint);margin:0}
/* The sample's own metrics. The fluid steps are right for body copy but drift
   above the comp in the hero, where every value is deliberate. */
.hero h1{font-size:clamp(34px,5.4vw,52px);margin:10px 0 12px}
.hero-lede{font-size:19px;line-height:1.6;margin:0}
.breadcrumbs ol{list-style:none;display:flex;flex-wrap:wrap;gap:var(--s-2);margin:0 0 var(--s-4);
  padding:0;font-size:var(--step--1)}
.breadcrumbs li+li::before{content:"\203A";margin-right:var(--s-2);opacity:.6}
.breadcrumbs a{color:var(--on-brand)}

/* The cards sit inside the hero, on the photograph — they no longer overlap
   its lower edge from outside, so there is no negative margin to pull. */
.qa-lift{position:relative;z-index:3;padding:1.875rem 0 .5rem}

/* The sample's callout under a page head. Metrics are its own. */
.notice-box{display:flex;gap:var(--s-3);align-items:flex-start;margin-top:var(--s-5);
  background:var(--tint);border:1px solid var(--tint2);border-radius:var(--r);padding:16px 20px}
.notice-box p{margin:0}
.notice-box .sbt-icon{width:20px;height:20px;flex:none;color:var(--teal);margin-top:.2em}
/* A notice box written INTO page content (a block group from the old portal:
   paragraphs, a list, a closing line) is not the portal's icon-and-sentence
   row. As a flex row it laid its paragraphs side by side and pushed the page
   sideways (Anesteziološka ambulanta, 29. 9. 2026). */
.wp-block-group.notice-box{display:block}
.wp-block-group.notice-box > * + *{margin-top:var(--s-2)}
/* Promoted from migrated content: the old site set these paragraphs in red to
   mean "urgent". The colour is stripped with every other inline style; the
   meaning survives as a component. Amber rather than red — red on a hospital
   page is the emergency route, and a mask notice is not that. */
.notice-warn{background:var(--warn-bg);border-color:var(--warn-line)}
/* Disclosure promoted from the old theme's collapse widget. */
/* Plain list of links with a value beside each, used where a table would be
   three columns of which two are empty. */
/* While a live region is fetching. Deliberately faint and slow to appear:
   the swap is usually done in under 200ms and a flashing table is worse than
   a still one. */
[data-sbt-live].is-loading [data-sbt-live-region]{opacity:.55;transition:opacity .12s .15s}
[data-sbt-live-region]{transition:opacity .12s}
@media (prefers-reduced-motion:reduce){
  [data-sbt-live].is-loading [data-sbt-live-region],
  [data-sbt-live-region]{transition:none}
}

/* ------------------------------------------------- pointer target size
 *
 * WCAG 2.2 AA, 2.5.8: a pointer target is at least 24x24 CSS px, unless it is
 * inline within a block of text. Measured before this rule: 192 sitemap links,
 * every breadcrumb link and several standalone calls to action were 17-23px
 * tall — they are lists of navigation targets, not prose, so the inline
 * exception does not cover them.
 *
 * inline-flex rather than padding so the box grows around the text without
 * shifting the baseline of the line it sits on. */
.map-list a,
.breadcrumbs a,
.fast-cta a,
.fast-src a,
.filters-clear,
.plain-list a,
.pager a,
.site-foot a,
.side-navigation a,
.kv dd > a:only-child,
:is(h1,h2,h3,h4,h5,h6) > a:only-child,
/* A link that is the entire content of a block is a standalone target however
   it got there — including inside migrated Bootstrap markup we did not write.
   The inline-in-prose exception does not apply when there is no prose. */
:is(p,div,li,dd,details,td,th) > a:only-child{min-height:24px;display:inline-flex;align-items:center}
/* Links inside migrated content sit in markup we did not write — Bootstrap
   card bodies, disclosure panels — where they are neither a lone child nor
   inline in prose, and they measure 19-21px. Vertical padding is the right
   tool for an inline element: it grows the hit area without moving the line
   box, so the text does not shift. */
.dept-list a,
.disclosure a{padding-block:3px}

/* ------------------------------------------------------------- news list */
/* The page this replaces ran every headline and date together into one
   paragraph. Each item is its own block with the date above the headline,
   because a date read after a headline is noise and read before it is context. */
.news-list{list-style:none;margin:var(--s-5) 0 0;padding:0;display:grid;gap:var(--s-4)}
.news-item{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:var(--s-5)}
.news-item .news-date{margin:0 0 var(--s-2);font-size:14.5px;color:var(--muted);
  text-transform:uppercase;letter-spacing:.05em;font-weight:700}
.news-item .news-title{margin:0;font-size:var(--step-1);text-wrap:pretty}
.news-item .news-title a{color:var(--teal-deep);text-decoration:none}
.news-item .news-title a:hover{text-decoration:underline}
.news-item p{margin:var(--s-2) 0 0;color:var(--muted)}
/* An obvestilo is an operational change, and --notice is the token that says
   so. It wore --accent until 19. 9. 2026: the colour that means "act on this"
   was being used to say what a card IS, and under `jezero` the accent is green
   — so a notice that a clinic is SHUT was drawn in the colour that clinic's
   own page uses for "odprto". See tokens.css, WHAT A COLOUR MEANS. */
.news-item.is-notice{border-left:4px solid var(--notice)}
.news-item.is-notice .news-date{color:var(--notice-ink)}
/* Visually hidden, but read: the pager's numbers mean nothing spoken alone. */
.lbl-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}

/* A plain inventory of role names — many items, no action on each, so a
   multi-column list rather than a card per row. */
.role-list{list-style:none;margin:var(--s-4) 0 0;padding:0;
  columns:2;column-gap:var(--s-6)}
.role-list li{break-inside:avoid;padding:var(--s-2) 0;border-bottom:1px solid var(--line);
  font-size:15.5px}
@media (max-width:760px){.role-list{columns:1}}

.plain-list{list-style:none;margin:var(--s-4) 0 0;padding:0;display:grid;gap:var(--s-3);
  grid-template-columns:repeat(auto-fit,minmax(min(19rem, 100%), 1fr))}
.plain-list li{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:var(--s-4) var(--s-5)}
.muted{color:var(--muted)}

.disclosure{border:1px solid var(--line);border-radius:var(--r);background:var(--card);
  padding:var(--s-4) var(--s-5);margin-block:var(--s-5)}
.disclosure>summary{cursor:pointer;font-family:var(--font-display);font-weight:700;
  font-size:var(--step-1);color:var(--teal-deep);list-style:none;
  display:flex;align-items:center;gap:var(--s-3);min-height:44px}
.disclosure>summary::-webkit-details-marker{display:none}
.disclosure>summary::before{content:"";width:.55em;height:.55em;flex:none;
  border-right:2px solid currentColor;border-bottom:2px solid currentColor;
  transform:rotate(45deg);transition:transform .15s}
.disclosure[open]>summary::before{transform:rotate(-135deg)}
@media (prefers-reduced-motion:reduce){.disclosure>summary::before{transition:none}}
.notice-warn>p:first-child{margin-top:0}
.notice-warn>*:last-child{margin-bottom:0}

/* Migrated body copy. Headings promoted from <p><strong>LABEL:</strong> land
   here, as do the paragraphs that used to be centred or justified by hand.
   No max-width: the card is already the measure, and a second cap inside it
   just stops the text short of its own container. */
.dept-list :is(h3,h4)+p{margin-top:var(--s-2)}

/* -------------------------------------------------------------- sections */
.band{padding-block:var(--s-7)}
.band-lede{color:var(--muted);margin-top:calc(var(--s-4) * -1)}

/* ----------------------------------------------------------------- cards */
/* Explicit column counts rather than auto-fit: auto-fit reflows at whatever
   width 15rem happens to fall at, which put three cards on one row and one
   orphan on the next at tablet widths. The sample breaks 4 -> 2 -> 1. */
.qa-grid{list-style:none;margin:0;padding:0;display:grid;gap:var(--s-4);
  grid-template-columns:repeat(4,1fr)}
@media (max-width:920px){.qa-grid{grid-template-columns:1fr 1fr}}
@media (max-width:560px){.qa-grid{grid-template-columns:1fr}}
.qa-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:22px 20px 18px;position:relative;display:flex;flex-direction:column;gap:10px}
.qa-card .qa-title{margin:0;font-size:21px;color:var(--teal-deep);text-wrap:pretty}
.qa-card a{color:var(--teal);text-decoration:none}
/* One link per card, stretched — wrapping the whole block in an anchor makes
   screen-reader link text unusable. */
.qa-card a::after{content:"";position:absolute;inset:0}
.qa-card:hover{border-color:var(--line-strong)}
/* Selector weight matters here: `.band p{color:var(--muted)}` further down ties
   with a bare `.qa-card p` and wins on order, which put muted grey on the accent
   card — about 2:1 — on every interior page. It never showed on the homepage,
   where the cards sit in the hero rather than inside a band. */
.qa-grid .qa-card p{margin:0;color:var(--muted);font-size:15.5px;line-height:1.45}
.qa-ico{display:inline-flex;width:52px;height:52px;align-items:center;justify-content:center;
  border-radius:14px;background:var(--tint);color:var(--teal)}
/* The foreground belongs on the card, not only on each child. Without it the
   card inherited --ink on the accent (3.4:1) and every legible line worked only
   because something overrode it individually — so the next element added to
   this card would have been unreadable. The approved sample sets it here too. */
/* The same 1.4.11 defect as .nav-cta, in the place it is worst: this card
   stands on the hero PHOTOGRAPH, and against the scrim over a white area of
   that photograph the accent measures 1.11-1.44 on every palette the theme
   ships - including the two whose accent clears 3:1 against the band. The
   border was the accent on the accent, which is a border drawn in the colour
   of the thing it bounds. It is --control-edge now, with a 2px inset ring
   behind it so the shape survives at a glance. */
.qa-primary{background:var(--accent);border-color:var(--control-edge);color:var(--on-brand);
  box-shadow:inset 0 0 0 2px var(--control-edge)}
.qa-card.qa-primary .qa-title a,.qa-grid .qa-card.qa-primary p{color:var(--on-brand)}
.qa-primary .qa-ico{background:rgb(255 255 255 / .2);color:var(--on-brand)}
/* The arrow is appended in PHP (outside the translated string, inside the
   aria-hidden span). Adding one here too produced "Naročite se → →". */
/* Metrics are the sample's. The COLOUR is not: the sample uses --teal-bright
   (#1a8091), which is 4.3:1 on white — and 15.5px bold is not large text, so
   4.5:1 applies and the comp fails it. --teal is the same hue at 7:1.
   See docs/DESIGN-CONTRACT.md. */
.qa-go{color:var(--teal);font-weight:700;font-size:15.5px;margin-top:auto;
  padding-top:8px;display:inline-flex;align-items:center;gap:7px}
.qa-go .sbt-icon{width:1.1em;height:1.1em;transition:transform .18s}
.qa-card:hover .qa-go .sbt-icon{transform:translateX(4px)}
@media (prefers-reduced-motion:reduce){.qa-go .sbt-icon{transition:none}}
.qa-primary .qa-go{color:var(--on-brand)}
.qa-meta{font-size:var(--step--1);color:var(--muted)}
/* Full white, no opacity. White on this accent is 4.86:1; at opacity .9 it
   composites to 4.26 and fails AA — the same way the footer's pending links
   did. Opacity is how a contrast value that was checked stops being true. */
.qa-primary .qa-meta{color:var(--on-brand)}

/* ------------------------------------------------------- tables to cards
   ONE markup shape: a real table with <th>, scope and <caption> above 48rem,
   a stack of labelled cards below. The client's own written requirement. */
.table-wrap{overflow-x:auto}
/* The sample frames every table in a white rounded card and shows no caption.
   The caption is kept in the markup and hidden visually rather than dropped:
   it is the only thing that tells a screen-reader user what the table is
   before they enter it (WCAG 1.3.1), and the sample simply has no equivalent. */
.tbl-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  overflow:hidden}
.data-table{width:100%;border-collapse:collapse;background:var(--card)}
.data-table caption{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.data-table th,.data-table td{padding:14px 16px;text-align:left;font-size:15.5px;
  border-bottom:1px solid var(--line);vertical-align:top}
.data-table thead th{background:var(--tint);font-size:13.5px;text-transform:uppercase;
  letter-spacing:.06em;color:var(--teal-deep);font-weight:700}
.data-table tbody th{font-weight:700}
.data-table tbody tr:last-child :is(th,td){border-bottom:0}
.data-table tbody tr:hover{background:var(--row-hover)}

@media (max-width:48rem){
  .data-table,.data-table tbody,.data-table tr,.data-table th,.data-table td{display:block}
  .data-table thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
    /* Each row becomes its own card, so the outer frame has to step aside. */
  .tbl-card{background:none;border:0;border-radius:0;overflow:visible}
  .data-table tbody tr:hover{background:var(--card)}
  .data-table tr{border:1px solid var(--line);border-radius:var(--r);margin-bottom:var(--s-4);
    padding:var(--s-3);background:var(--card)}
  /* Label ABOVE the value, not beside it.
     A two-column grid on the cell made every child of that cell its own grid
     item, so a cell holding more than one thing broke apart: the unit's parent
     name and the telephone after a <br> each started a new row in the LABEL
     column, unlabelled and misaligned. Stacking is also what the approved
     sample does on a phone. */
  .data-table th,.data-table td{border:0;padding:var(--s-3) 0;display:block}
  .data-table th[data-label]::before,.data-table td[data-label]::before{
    content:attr(data-label);display:block;margin-bottom:2px;
    font-size:var(--step--1);color:var(--muted);font-weight:700;
    text-transform:uppercase;letter-spacing:.04em}
  .data-table tr :is(th,td)+:is(th,td){border-top:1px dashed var(--line)}
}

/* --------------------------------------------------- emergency strip
   Compact and dark, NOT a full accent band. An earlier version of this was a
   tall accent block that shouted far louder than the approved design and
   pushed everything below it off the first screen. */
.urgent{background:var(--band-deep);color:var(--band-ink);box-shadow:0 1px 0 var(--band-edge),0 -1px 0 var(--band-edge)}
.urgent-in{display:flex;align-items:center;gap:var(--s-5);padding-block:var(--s-5);flex-wrap:wrap}
.urgent-ico{width:54px;height:54px;border-radius:50%;background:rgb(var(--band-veil) / .14);
  display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.urgent-txt{flex:1 1 320px}
.urgent-txt :is(h2,h3){font-size:var(--step-1);margin:0 0 var(--s-1);color:var(--band-ink)}
.urgent-txt p{color:var(--band-ink-soft);margin:0}
.urgent-txt a{color:var(--band-ink);text-decoration:underline;text-underline-offset:3px}
.urgent-nums{display:flex;gap:var(--s-3);flex-wrap:wrap;margin:0}
/* The border was .22 of the veil, which composites to 1.55-1.88 against the
   band - the box around the 112 link had no boundary a reader could see.

   .65, not .55. The first attempt used .55 and reached 3.46 against the band,
   which looked finished; the browser check then reported 2.70, because a
   boundary is adjacent to TWO colours and the box has a veil of its own at
   .10 inside it. .65 clears 3.0 on both sides on all six palettes (3.26 at
   the tightest). Both pairs are in the table. */
.urgent-num{display:flex;flex-direction:column;gap:2px;background:rgb(var(--band-veil) / .10);
  border:1px solid rgb(var(--band-veil) / .65);border-radius:12px;padding:var(--s-3) var(--s-4);
  margin:0;text-decoration:none;color:var(--band-ink);min-width:9rem}
.urgent-num:hover{background:rgb(var(--band-veil) / .18)}
.urgent-num .num,.urgent-num b{font-family:var(--font-display);font-size:var(--step-2);
  font-weight:800;line-height:1.1}
.urgent-num span{font-size:var(--step--1);color:var(--band-ink-soft)}
/* 112 is the only tel: link on the portal, and since 1. 10. 2026 the only box
   on the strip — beside an identical box for the switchboard, with only a
   pale number between them, it read as one of two equal choices. The hospital
   asked for it red with white type and for the switchboard to move away from
   it; the switchboard is a line of text now (.urgent-centrala).
   --sos is fixed on every palette (tokens.css). No red stands off a dark band
   at 3:1, so the tile wears the booking CTA's 2px --control-edge ring for
   1.4.11; the red only has to carry white type (6.04, hover 8.03). */
.urgent-num.is-112{background:var(--sos);border-color:var(--control-edge);color:var(--sos-ink);
  box-shadow:inset 0 0 0 1px var(--control-edge)}
.urgent-num.is-112:hover{background:var(--sos-hover)}
.urgent-num.is-112 .num,.urgent-num.is-112 b,.urgent-num.is-112 span{color:var(--sos-ink)}
.urgent-txt p+p.urgent-centrala{margin-top:var(--s-2)}

/* ------------------------------------------------------- editorial band */
.band-grid{display:grid;grid-template-columns:1.15fr 1fr;gap:var(--s-7);align-items:center}
.band-photo{border-radius:18px;overflow:hidden;border:1px solid var(--line);
  background:var(--card);margin:0}
.band-photo img{width:100%;height:100%;object-fit:cover;aspect-ratio:16/10;display:block}
.band-photo figcaption{font-size:var(--step--1);color:var(--muted);
  padding:var(--s-3) var(--s-4);background:var(--card)}
.band :is(h2,h3){color:var(--teal-deep)}
.band p{color:var(--muted)}
.trust-chips{display:flex;gap:var(--s-3);flex-wrap:wrap;margin-top:var(--s-4);
  padding:0;list-style:none}

/* --------------------------------------------------- highlighted services */
/* Tinted on the homepage, where vzorec C alternates bands to separate six
   sections. Its interior pages do not alternate at all — cakalne-dobe,
   narocanje and dostopne-storitve are flat paper from head to footer, and the
   white table card is what does the separating. */
.fast{background:var(--tint)}
body:not(.home) .fast{background:none}
.fast :is(h2,h3){color:var(--teal-deep)}
.fast-lede{color:var(--muted);margin-top:var(--s-3)}
.fast-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-4);
  margin-top:var(--s-6);list-style:none;padding:0}
.fast-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:var(--s-5)}
.fast-card :is(h3,h4),.fast-name{font-size:var(--step-1);color:var(--teal-deep);
  margin:0 0 var(--s-3)}
.fast-name a{color:inherit;text-decoration:none}
.fast-name a:hover{text-decoration:underline}
/* The figures read as ONE sentence: "13 dni · slovensko povprečje 320 dni".
   display:contents lets the <dt>/<dd> pairs flow as direct flex children, so
   the visually-hidden label collapses and the rest sits on one baseline.
   Our own number is the headline; the national average must NOT compete with
   it — an earlier rule made both step-3 because `.fast-nums .num` (0,2,0)
   outranked `.fast-slo` (0,1,0). */
.fast-nums{display:flex;align-items:baseline;gap:var(--s-2) var(--s-3);flex-wrap:wrap;margin:0}
.fast-stat{display:contents}
.fast-nums dd{margin:0}
.fast-sbt{font-family:var(--font-display);font-size:var(--step-3);font-weight:800;
  color:var(--teal);line-height:1.1}
.fast-nums dt.lbl{display:inline;font-size:var(--step--1);color:var(--muted);
  text-transform:none;letter-spacing:0;font-weight:400}
.fast-nums .fast-slo{font-family:var(--font-body);font-size:var(--step-0);
  font-weight:600;color:var(--muted)}
/* Provenance sits once at the foot of a section, never under each number. */
.fast-src,.fast-note{font-size:var(--step--1);color:var(--muted);margin-top:var(--s-2)}
.fast-cta{margin-top:var(--s-6)}
.lbl{display:block;font-size:var(--step--1);color:var(--muted);text-transform:uppercase;
  letter-spacing:.06em}

/* ------------------------------------------------- departments & clinics */
.depts :is(h2,h3){color:var(--teal-deep)}
.depts-lede{color:var(--muted);margin-top:var(--s-3)}
.dept-feature{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s-4);
  margin-top:var(--s-6);list-style:none;padding:0}
.dept-card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  overflow:hidden;display:flex;flex-direction:column}
.dept-card img{width:100%;aspect-ratio:16/10;object-fit:cover;display:block}
.dept-card-body{padding:var(--s-4) var(--s-5) var(--s-5)}
.dept-card :is(h3,h4){font-size:var(--step-1);color:var(--teal-deep);margin:0 0 var(--s-2)}
/* The heading is a link here (the sample's is inert). It must not inherit
   the browser's blue underline. */
.dept-card :is(h3,h4) a{color:inherit;text-decoration:none}
.dept-card :is(h3,h4) a:hover{color:var(--teal);text-decoration:underline;text-underline-offset:3px}
.dept-card p{font-size:var(--step-0);color:var(--muted);line-height:1.5;margin:0}
/* The sample used #8b9793 here — 3.02 on white, fails. --muted is 5.59. */
.dept-card .photonote,.photonote{font-size:var(--step--1);color:var(--muted);
  margin-top:var(--s-3)}
.dept-list{margin-top:var(--s-6);background:var(--card);border:1px solid var(--line);
  border-radius:var(--r);padding:var(--s-6)}
.dept-list :is(h3,h4){font-size:var(--step-0);color:var(--teal-deep);margin:0 0 var(--s-4)}
.dept-cols{columns:3;column-gap:34px;list-style:none;margin:0;padding:0}
.dept-cols li{break-inside:avoid;padding:7px 0;border-bottom:1px solid var(--line);
  display:flex;gap:9px;align-items:baseline}
.dept-cols li::before{content:"";width:7px;height:7px;border-radius:50%;
  background:var(--teal-bright);flex:0 0 auto;position:relative;top:-1px}
.dept-cols a{color:var(--ink);text-decoration:none}
.dept-cols a:hover{color:var(--teal);text-decoration:underline}
.amb-row>*{min-width:0}
.amb-row{margin-top:var(--s-5);display:flex;gap:var(--s-3);flex-wrap:wrap;align-items:center;
  list-style:none;padding:0}
.amb-row .lbl{display:inline;font-size:var(--step--1);font-weight:700;color:var(--muted);
  text-transform:none;letter-spacing:0}

/* --------------------------------------------------------------- heritage */
/* The history band closed the page in exactly the footer's colour, with no
   padding of its own — so the photograph touched the section above it and the
   band and the footer read as one undivided slab of teal. It now sits a shade
   lighter than the footer (--teal against --teal-deep), which separates the two
   without a rule drawn across dark on dark, and it has room to breathe. */
/* --band-ink-muted was measured against --teal-deep, where it reaches 5.81.
   This band is the lighter --teal, where the same value is 4.18 — below AA — on
   the photo caption and the quotation attribution. A token is only accessible
   against the surface it was checked on, so the band uses --band-ink-lift.

   It used to be a hex written inline on this rule. That hid a second cost: the
   accessibility panel's contrast mode redefines --band-ink-muted at the root,
   and a value written on .herit outranks it, so the reader who asked for MORE
   contrast got none in this band. Naming it makes that visible and fixable in
   one line. That line was written on 19. 9. 2026: dostopnost.css now lifts
   --band-ink-lift with the rest, so the reader who asks for more contrast gets
   it in this band too (5.12 → 6.88 on the base palette, 4.71 → 5.96 under
   `jezero`). It was deferred until then because the palette mechanism had to
   ship as a provable no-op — a reason that expired the day it shipped, and the
   note is kept so the next deferral is read with that in mind. 5.12 cleared AA
   either way; "clears AA" was never the point. See CHANGELOG.md. */
.herit{background:var(--band);color:var(--band-ink);padding-block:var(--s-8);
  --band-ink-muted:var(--band-ink-lift)}
.herit + .site-foot{box-shadow:inset 0 1px 0 rgb(var(--band-veil) / .10)}
.herit-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:var(--s-7);align-items:center}
.herit-photo{border-radius:18px;overflow:hidden;margin:0}
.herit-photo img{width:100%;object-fit:cover;aspect-ratio:4/3;display:block}
.herit-photo figcaption{font-size:var(--step--1);color:var(--band-ink-muted);padding-top:var(--s-3)}
.herit-kicker{font-size:var(--step--1);font-weight:700;letter-spacing:.1em;
  text-transform:uppercase;color:var(--band-ink-muted);margin:0}
.herit :is(h2,h3){margin:var(--s-3) 0 var(--s-4);color:var(--band-ink)}
.herit p{color:var(--band-ink-soft);margin-bottom:var(--s-3)}
.herit blockquote{margin:var(--s-5) 0 0;position:relative;padding-left:34px;
  font-family:var(--font-display);font-size:var(--step-1);line-height:1.45;color:var(--band-ink)}
.herit blockquote::before{content:"\201E";position:absolute;left:0;top:-6px;font-size:44px;
  color:var(--band-ink-muted);font-family:var(--font-display)}
.herit blockquote footer{font-family:var(--font-body);font-size:var(--step--1);
  color:var(--band-ink-muted);margin-top:var(--s-2)}

/* ---------------------------------------------------------------- buttons */
.btn{display:inline-flex;align-items:center;gap:var(--s-2);min-height:44px;
  padding:var(--s-3) var(--s-5);border-radius:999px;border:1px solid var(--line-strong);
  background:var(--card);color:var(--teal);font-weight:700;text-decoration:none;cursor:pointer}
.btn:hover{background:var(--tint)}
/* .btn-coral was an alias of this rule while sbt-portal-strani still printed
   class="btn btn-coral" in two templates and two tools in tools/ probed that
   selector by name. All four were migrated on 19. 9. 2026 and the alias came
   out the same day: a second name for one thing is how the colour layer got
   into trouble in the first place. */
.btn-accent{background:var(--accent);border-color:var(--accent);color:var(--on-brand)}
.btn-accent:hover{background:var(--accent-hover)}
.chip{display:inline-flex;align-items:center;gap:var(--s-2);padding:9px 16px;
  border-radius:999px;background:var(--tint);color:var(--teal-deep);
  font-size:var(--step--1);font-weight:600;text-decoration:none}
a.chip:hover{background:var(--tint2)}
.chip svg{color:var(--teal)}
.sbt-icon{width:1.25em;height:1.25em;flex:none;fill:none;stroke:currentColor;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round}

/* ------------------------------------------------------- filter controls */
/* vzorec C's .ctrl: label above the field, 50px fields, 12px radius. Before
   this the form emitted bare divs and rendered as the browser's raw defaults
   — label jammed against the input, a grey system button. */
.filters{display:flex;flex-wrap:wrap;gap:var(--s-4);align-items:flex-end;margin-bottom:var(--s-4)}
.ctrl{display:flex;flex-direction:column;gap:6px}
.ctrl label{font-size:14px;font-weight:700;color:var(--muted)}
/* --line-strong, NOT --line. tokens.css says in as many words that
   --line-strong is MANDATORY on input, select, textarea and secondary buttons,
   because --line is 1.25-1.30 against the surfaces it sits on and 1.4.11 asks
   3.0 for the boundary of a control that has no other visible one. This rule,
   .btn-quiet and .pager were still on --line, and the pair table could not see
   it: it measured --line-strong, which passes, against a surface nothing was
   painting with it. Found on /cakalne-dobe/ in a browser on 19. 9. 2026. */
.ctrl :is(input,select){min-height:50px;border:1.5px solid var(--line-strong);border-radius:12px;
  background:var(--card);padding:0 14px;font:inherit;color:var(--ink)}
.ctrl :is(input,select):focus-visible{outline-offset:0;border-color:var(--teal)}
.ctrl-search{flex:1 1 260px}
.ctrl-search input{width:100%}
/* A <select> sizes to its longest option. "Vsi oddelki" is short in the sample;
   ours lists real department names and pushed the control 23px past the
   viewport on a 390px phone, which scrolled the whole page sideways.
   min-width:0 lets the flex item shrink below that intrinsic width. */
.ctrl{min-width:0;max-width:100%}
.ctrl :is(input,select){max-width:100%}
.ctrl-pick select{min-width:210px}
@media (max-width:640px){
  .filters{flex-direction:column;align-items:stretch}
  .ctrl :is(input,select),.ctrl .btn{width:100%}
  .ctrl-pick select{min-width:0}
}
.btn{display:inline-flex;align-items:center;gap:9px;min-height:50px;padding:12px 24px;
  border-radius:12px;text-decoration:none;font:inherit;font-weight:700;font-size:16.5px;
  border:0;cursor:pointer}
.btn-accent{background:var(--accent);color:var(--on-brand)}
.btn-accent:hover{background:var(--accent-hover);color:var(--on-brand)}
.btn-quiet{background:var(--card);border:1.5px solid var(--line-strong);color:var(--teal-deep)}
.btn-quiet:hover{border-color:var(--teal);color:var(--teal)}
.filters-clear{font-size:14.5px}
.result-status{font-size:14.5px;color:var(--muted);margin:0 0 12px}

/* ------------------------------------------------------------- pagination */
/* DESIGN-CONTRACT §5 defined no pagination component because the sample paginates
   nothing — it ships 17 static rows. Ours has 152 services and must. These are
   the sample's own button metrics at a smaller size, so it reads as the same kit. */
.pager ol{list-style:none;display:flex;flex-wrap:wrap;gap:var(--s-2);margin:var(--s-5) 0 0;padding:0}
.pager a,.pager span{display:inline-flex;align-items:center;justify-content:center;
  min-width:44px;min-height:44px;padding:0 var(--s-3);border-radius:10px;
  border:1.5px solid var(--line-strong);background:var(--card);text-decoration:none;font-weight:700}
.pager a:hover{border-color:var(--teal);color:var(--teal)}
.pager [aria-current="page"],.pager [aria-current="page"]:hover{background:var(--teal);border-color:var(--teal);color:var(--on-brand)}
/* :hover too — the current page is a link, and `.pager a:hover` (0,2,1) set
   teal text on this teal fill: invisible (tools/hover-kontrast.mjs, 5. 10.). */

/* ------------------------------------------------------------ search form */
.searchform{display:flex;gap:var(--s-3);flex-wrap:wrap}
.searchform label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.searchform input[type="search"]{flex:1 1 16rem}
.searchform button{display:inline-flex;align-items:center;gap:var(--s-2);min-height:44px;
  padding-inline:var(--s-5);border:0;border-radius:var(--r);background:var(--teal);
  color:var(--on-brand);font:inherit;font-weight:700;cursor:pointer}
.searchform button:hover{background:var(--teal-deep)}

/* --------------------------------------------------- status region (4.1.3) */
.result-status{font-size:var(--step--1);color:var(--muted)}

/* ----------------------------------------------------------------- footer */
.site-foot{background:var(--band-deep);color:var(--band-ink);margin-top:0;padding:0}
.foot-grid{display:grid;grid-template-columns:1.35fr 1fr 1fr;gap:var(--s-6);
  padding-block:var(--s-8) var(--s-6)}
.foot-brand img{height:38px;width:auto;filter:var(--logo-filter)}
.foot-brand p{margin-top:var(--s-4);font-size:var(--step-0);color:var(--band-ink-soft)}
.site-foot h2{font-family:var(--font-body);font-size:var(--step--1);letter-spacing:.09em;
  text-transform:uppercase;color:var(--band-ink-muted);margin-bottom:var(--s-4)}
.site-foot address{font-style:normal;line-height:1.9;color:var(--band-ink-soft)}
.site-foot ul{list-style:none;margin:var(--s-3) 0 0;padding:0}
.site-foot li{margin-bottom:9px}
.site-foot a{color:var(--band-ink);text-decoration:none;padding:2px 0;
  display:inline-flex;gap:var(--s-2);align-items:baseline;min-height:28px}
.site-foot a:hover{text-decoration:underline}
.foot-trust{display:flex;gap:var(--s-3);flex-wrap:wrap;margin-top:var(--s-4)}
.foot-chip{border:1px solid rgb(var(--band-veil) / .28);border-radius:999px;
  padding:6px 14px;font-size:var(--step--1);color:var(--band-ink)}
.foot-bottom{border-top:1px solid rgb(var(--band-veil) / .14);color:var(--band-ink-muted);
  font-size:var(--step--1)}
.foot-bottom .wrap{display:flex;gap:var(--s-2) var(--s-6);flex-wrap:wrap;
  justify-content:space-between;padding-block:var(--s-5)}
.foot-bottom p{margin:0}
/* NOT opacity. --band-ink-muted is a verified 5.81:1 on the footer, and
   opacity:.6 silently dropped it to 3.09 — axe flagged these three spans on
   all 40 audited page views. A pending item is already distinguishable from
   its neighbours by not being a link; it does not also need to be faint.
   Italic carries the "not yet" without touching contrast. */
.foot-legal .pending{font-style:italic}

/* ---------------------------------------------------------------- site map */
.map-list{list-style:none;margin:0;padding:0;columns:2;column-gap:var(--s-6)}
.map-list li{break-inside:avoid;padding:var(--s-1) 0}
.map-list a{color:var(--teal)}
.map-d1{padding-left:var(--s-4)}
.map-d2{padding-left:var(--s-6)}
.map-d3{padding-left:var(--s-7)}

/* ------------------------------------------------------------- utilities */
.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);
  white-space:nowrap}
.flow>*+*{margin-top:var(--s-4)}
.flow-links{list-style:none;margin:0;padding:0;display:flex;gap:var(--s-4);flex-wrap:wrap}
/* The 404 and the empty search state both use this: six routes, each a real
   target rather than a line of link text. Cards would overpromise — these are
   signposts, not content. */
/* A heading that follows a list needs air, or it reads as part of it. */
:is(.news-list,.flow-links,.role-list,.plain-list)+:is(h2,h3){margin-top:var(--s-7)}

.flow-links{list-style:none;margin:var(--s-4) 0 0;padding:0;display:grid;gap:var(--s-3);
  grid-template-columns:repeat(auto-fit,minmax(min(15rem, 100%), 1fr))}
.flow-links li{margin:0}
.flow-links a{color:var(--teal-deep);font-weight:700;text-decoration:none;
  display:flex;align-items:center;gap:var(--s-3);min-height:52px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:var(--s-3) var(--s-4)}
.flow-links a:hover{border-color:var(--teal);color:var(--teal)}
.flow-links .sbt-icon{width:22px;height:22px;flex:none;color:var(--teal)}
.empty{color:var(--muted);font-style:italic}

/* ------------------------------------------------------------ responsive */
@media (max-width:62rem){
  .band-grid,.herit-grid{grid-template-columns:1fr;gap:var(--s-6)}
  .fast-grid,.dept-feature{grid-template-columns:1fr}
  .dept-cols{columns:2}
  .foot-grid{grid-template-columns:1fr;gap:var(--s-6)}
}
@media (max-width:48rem){
  .dept-cols,.map-list{columns:1}
}

/* ==========================================================================
   Stran ambulante / oddelka — odgovori najprej

   The complaint was that a clinic page is monotone and that the thing a
   patient needs is at the bottom. Nothing here is a new visual language: the
   colours, type and spacing are the same tokens the rest of the portal uses.
   What these classes add is rhythm and order.
   ========================================================================== */

/* A narrower container for prose. The measure belongs to the container, not to
   the paragraph — so a section that wants a short line asks for it here, once,
   instead of every element inside it carrying its own cap. */
.wrap--text{max-width:74ch}

/* --- the four answers ----------------------------------------------------
   Lifted over the hero seam so it reads as part of the title rather than as
   the first of nine equal sections. */
.answers{margin-top:calc(var(--s-6) * -1);margin-bottom:var(--s-6);position:relative;z-index:2}
.answers-now{display:flex;justify-content:flex-end;margin:0 0 var(--s-3)}
/* auto-fit, not repeat(4): a clinic with no published waiting time has three
   facts, and a fixed four-column grid left a grey rectangle where the fourth
   would have been — the layout announcing a gap in the data. */
.answers-list{list-style:none;margin:0;padding:0;display:grid;gap:1px;
  background:var(--line);border:1px solid var(--line);border-radius:var(--r);
  overflow:hidden;grid-template-columns:repeat(auto-fit,minmax(min(15rem,100%),1fr))}
.answers-list > li{background:var(--card);padding:var(--s-4) var(--s-5)}
.answer-k{display:flex;align-items:center;gap:var(--s-2);font-size:var(--step--1);
  color:var(--muted);margin-bottom:var(--s-1)}
.answer-k .sbt-icon{width:18px;height:18px;flex:none}
.answer-v{font-family:var(--font-display);font-size:var(--step-1);line-height:1.25;display:block}
.answer-v small{display:block;font-family:var(--font-body);font-size:var(--step--1);
  font-weight:400;color:var(--muted);margin-top:2px}

/* Open or shut is the one fact that changes by the hour, so it is the one
   allowed its own colour — and the word says it too, never colour alone. */
.state{display:inline-flex;align-items:center;gap:var(--s-2);font-size:var(--step--1);
  padding:var(--s-2) var(--s-4);border-radius:999px;border:1px solid;background:var(--card)}
.state .sbt-icon{width:18px;height:18px;flex:none}
.state--shut{background:var(--warn-bg);border-color:var(--warn-line);color:var(--warn-ink)}
.state--open{background:var(--okay-bg);border-color:var(--okay-line);color:var(--okay-ink)}

/* --- contents, and the column that carries them --------------------------
   Nine sections with no index is a scroll — and 25 of 64 departments carry
   sub-units that today are listed only at the very bottom of the page, behind
   everything else.

   ONE component, two shapes. Wide: a column that stays beside the content
   while it scrolls, answering "where am I" and "what else sits under this
   unit" at the same time. Narrow: the horizontal strip this used to be, with
   the sub-units and the back link out of the way — a phone has no room for
   navigation the reader did not ask for, and both are still in the page.

   Under three real sections the renderer emits none of this and the page is a
   single column exactly as before. Nothing here is a new colour or a new
   space: every value is a token this portal already uses. */
.unitcols-in{display:grid;grid-template-columns:262px minmax(0,1fr);
  gap:var(--s-7);align-items:start}

/* Below the site header, not under it. --head-h is measured by site.js, because
   the --header-h token says 78px and the header measures 129 — the token
   predates the topbar being inside it. The fallback keeps the old behaviour if
   the script never runs. */
.unitnav{position:sticky;top:calc(var(--head-h, var(--header-h)) + var(--s-4));
  align-self:start;
  /* 32px is the section's own padding-top; the 8px is the half-leading of the
     h2 beside it, so the first item lines up with the first heading by its cap
     rather than by its box. */
  padding-block:calc(var(--s-6) + var(--s-2)) var(--s-6);
  /* The column can be taller than what is left of a 768px screen once the
     header has taken 197px of it, so it scrolls rather than being cut off. */
  max-height:calc(100vh - var(--head-h, var(--header-h)) - var(--s-6));
  overflow-y:auto;scrollbar-width:thin;
  scrollbar-color:var(--line-strong) transparent;
  /* a scroll box clips both axes, and the focus ring is 2px wide at 2px offset,
     so it reaches 4px out: give it the room back without moving the column */
  padding-inline:4px;margin-inline:-4px}

.unitnav-t{font-family:var(--font-body);font-size:var(--step--1);font-weight:600;
  letter-spacing:.06em;color:var(--muted);margin:0 0 var(--s-3)}

.unitnav-list{list-style:none;margin:0 0 var(--s-6);padding:0}
.unitnav-list li+li{margin-top:2px}
/* `.unitnav` is repeated deliberately. The generic rule at the top of this file
   — `:is(p,div,li,dd,details,td,th) > a:only-child{display:inline-flex}` —
   carries the same specificity as `.unitnav-list a` and was winning: measured
   on the live page, "O oddelku" was a 96px stub in a 262px column, so the width
   of the current-section pill and its rail was decided by the length of the
   label. The approved sample draws full-width pills. */
.unitnav .unitnav-list a{display:block;min-height:24px;padding:var(--s-2) var(--s-3);
  border-radius:10px;border-left:3px solid transparent;
  text-decoration:none;color:var(--ink);font-size:var(--step--1)}
.unitnav .unitnav-list a:hover{background:var(--card);color:var(--teal-deep)}
/* The section being read. Never colour alone — the weight and the rule say it
   too — and site.js moves it as the reader scrolls, so a column that is on
   screen the whole time is never pointing at the wrong place. */
.unitnav .unitnav-list a[aria-current]{background:var(--tint);
  border-left-color:var(--teal);color:var(--teal-deep);font-weight:600}

.unitnav-sub{margin-bottom:var(--s-5)}
/* These leave the page, the contents above them do not. Underlined rather than
   merely teal: "Enote oddelka" is the label of the group here AND the label of
   a contents entry 147px above it, and telling the two apart by colour alone is
   the thing this stylesheet forbids everywhere else. */
.unitnav .unitnav-sub a{color:var(--teal);text-decoration:underline;
  text-decoration-thickness:1px;text-underline-offset:3px}
.unitnav .unitnav-sub a:hover{text-decoration-thickness:2px;color:var(--teal-deep)}
.unitnav-back{margin:0;font-size:var(--step--1)}
.unitnav-back a{display:inline-flex;align-items:center;gap:var(--s-2);
  min-height:32px;color:var(--teal);text-decoration:none}
.unitnav-back a:hover{text-decoration:underline;text-underline-offset:3px}
/* The sprite has one arrow. Turned, rather than a twenty-second glyph added to
   it for the sake of pointing the other way. */
.unitnav-back .sbt-icon{width:16px;height:16px;flex:none;transform:rotate(180deg)}

/* The content column keeps a measure of its own: `.band > .wrap` centres and
   caps at 1140px, which inside a column already 790px wide only adds padding
   that nothing needs. */
.unitcols-body > .band > .wrap{max-width:none;padding-inline:0}
/* 48px above and below each section was the rhythm of a full-width page. In a
   column that rhythm reads as a gap, so the hairline carries it instead. */
.unitcols-body > .band{padding-block:var(--s-6);
  scroll-margin-top:calc(var(--head-h, var(--header-h)) + var(--s-4))}
.unitcols-body > .band + .band{border-top:1px solid var(--line)}

/* Furniture that was laid out for a 1100px page, now inside a 790px (and, at
   1024, a 674px) column. Measured there, not guessed: `.qa-grid` is a fixed
   four-track grid, so the three booking cards on a clinic page came out 157px
   wide at 1024 and the word "eNaročanje" broke across two lines inside its own
   heading. Auto-fit asks for a width instead of a count, so the same cards
   answer the column they are actually in.

   Only above the fold-down point: below it the column is gone, the content is
   full width again, and the page's own breakpoints already handle it. */
@media (min-width:921px){
  .unitcols-body .qa-grid,
  .unitcols-body .dept-feature{
    grid-template-columns:repeat(auto-fit,minmax(min(15rem,100%),1fr))}
  /* Two columns of 387px rather than three of 250: clinic names here run to
     "Gastroenterološka funkcionalna diagnostika". */
  .unitcols-body .dept-cols{columns:2}
}
/* The route and the floor diagram side by side need about 700px between them.
   The page collapses them at 920px, which was right when they had the full
   width; in the column that width is reached at about 1040px. */
@media (max-width:1040px){
  .unitcols-body .where{grid-template-columns:minmax(0,1fr)}
  /* Stacked, the diagram would stretch to the full column — a 674px-wide
     section through a building, which is not more informative, only bigger.
     Held at the width it has beside the route at 1440. */
  .unitcols-body .floors{max-width:360px}
}

/* --- wayfinding ---------------------------------------------------------- */
.where{display:grid;grid-template-columns:1.05fr .95fr;gap:var(--s-6);align-items:start}
.route{list-style:none;counter-reset:step;margin:0;padding:0}
.route li{counter-increment:step;position:relative;padding-left:52px;
  margin-bottom:var(--s-4);min-height:36px}
.route li::before{content:counter(step);position:absolute;left:0;top:-2px;
  width:36px;height:36px;border-radius:50%;background:var(--teal);color:var(--on-brand);
  font-family:var(--font-display);font-size:1.05rem;display:grid;place-items:center}
/* The rule between the markers makes three facts read as one route. */
.route li:not(:last-child)::after{content:"";position:absolute;left:17px;top:38px;
  bottom:-18px;width:2px;background:var(--line-strong);opacity:.45}
.route b{font-family:var(--font-display);font-weight:600}
.route small{display:block;color:var(--muted);font-size:var(--step--1)}

.floors{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:var(--s-4);margin:0}
.floors svg{width:100%;height:auto;display:block}
.floors figcaption{font-size:var(--step--1);color:var(--muted);margin-top:var(--s-3)}

/* The floor diagram that sbt_strani_floor_plan() prints, on 105 unit pages.
 *
 * Its fills live here rather than in the PHP that emits the SVG, because an
 * SVG presentation attribute cannot read a custom property — fill="var(--teal)"
 * does nothing at all — and the seven hard-coded hexes in that function were
 * the only colours on the portal a palette switch could not have reached. They
 * were also the only ones the accessibility panel's contrast mode could not
 * reach, which that function's own comment claimed it did.
 *
 * Every value below is the token that matches the colour the diagram already
 * had, so the drawing is unchanged on the base palette and follows every other
 * palette by construction rather than by anyone remembering to update it. */
.floors .fp-lvl{fill:var(--card);stroke:var(--line)}
.floors .fp-lvl.is-ground{fill:var(--tint)}
.floors .fp-lvl.is-here{fill:var(--band);stroke:var(--band-deep)}
.floors .fp-name{fill:var(--muted)}
.floors .fp-name.is-ground{fill:var(--ink)}
.floors .fp-name.is-here{fill:var(--band-ink)}
.floors .fp-sub{fill:var(--band-ink-soft)}
.floors .fp-note{fill:var(--muted)}
.floors .fp-pin{fill:var(--accent)}
.floors .fp-pin-n{fill:var(--on-brand)}

/* --- waiting times as tiles ---------------------------------------------
   Three numbers and the unit said once. Repeated three times the eye reads
   the word instead of the number. Coral stays reserved for emergency. */
.waits{display:flex;flex-wrap:wrap;gap:var(--s-5);list-style:none;margin:var(--s-5) 0 0;padding:0}
.wait{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--teal);
  border-radius:var(--r);padding:var(--s-4) var(--s-5);min-width:150px}
.wait .n{font-family:var(--font-display);font-size:var(--step-3);line-height:1;
  font-variant-numeric:tabular-nums;display:block}
.wait .k{font-size:var(--step--1);color:var(--muted);display:block;margin-top:var(--s-1)}

/* --- what to bring ------------------------------------------------------- */
.bring{list-style:none;padding:0;margin:var(--s-4) 0 0;display:grid;gap:var(--s-2)}
.bring li{display:flex;gap:var(--s-3);align-items:flex-start;background:var(--card);
  border:1px solid var(--line);border-radius:10px;padding:var(--s-3) var(--s-4)}
.bring .sbt-icon{width:20px;height:20px;flex:none;color:var(--teal);margin-top:2px}

/* --- people -------------------------------------------------------------- */
.staff{list-style:none;padding:0;margin:var(--s-4) 0 0;display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-2) var(--s-5)}
.staff li{padding:var(--s-2) 0;border-bottom:1px solid var(--line)}
.staff b{font-weight:600;display:block}
.staff small{color:var(--muted)}

@media (max-width:920px){
  /* The column folds back into the strip it used to be. 920 rather than the
     sample's 900: it is the breakpoint the rest of this page already turns on,
     and a second one twenty pixels away would only be a second thing to keep
     in step. */
  .unitcols-in{display:block}
  .unitnav{position:sticky;top:var(--head-h, 0px);z-index:3;
    padding:0;margin-inline:-20px;background:var(--paper);
    border-block:1px solid var(--line);max-height:none;overflow:visible}
  .unitnav-t{position:absolute;width:1px;height:1px;overflow:hidden;
    clip-path:inset(50%);white-space:nowrap}
  .unitnav-list{display:flex;gap:var(--s-1);margin:0;padding-inline:20px;
    overflow-x:auto;scrollbar-width:thin}
  .unitnav-list li+li{margin-top:0}
  .unitnav-list a{white-space:nowrap;border-left:0;border-radius:0;
    border-bottom:3px solid transparent;padding:var(--s-3) var(--s-4);
    color:var(--muted)}
  .unitnav .unitnav-list a:hover{background:none;border-bottom-color:var(--line-strong)}
  .unitnav .unitnav-list a[aria-current]{background:none;border-left:0;
    border-bottom-color:var(--teal);color:var(--teal-deep)}
  /* Measured at 390px: 854px of tabs in a 390px strip, so 54% of the contents
     is off the right-hand edge, cut mid-word with nothing to say so. A fade is
     the cue; it does not take the clicks. */
  .unitnav::after{content:"";position:absolute;right:0;top:1px;bottom:1px;
    width:var(--s-6);pointer-events:none;
    background:linear-gradient(to left,var(--paper),transparent)}
  /* Sub-units and the way back are for a reader who is browsing. On a phone
     the reader is reading, and both are still in the page below. */
  .unitnav-t--sub,.unitnav-sub,.unitnav-back{display:none}
  /* Header plus the strip, or the anchor lands underneath both. */
  .unitcols-body > .band{scroll-margin-top:calc(var(--head-h, var(--header-h)) + var(--s-8))}

  .answers{margin-top:var(--s-5)}
  .answers-list{grid-template-columns:repeat(auto-fit,minmax(min(13rem,100%),1fr))}
  .where{grid-template-columns:1fr}
  .staff{grid-template-columns:1fr}
}
@media (max-width:560px){
  .answers-list{grid-template-columns:1fr}
}

/* Aktualno — the "what changed" band, directly under the emergency strip.
   One item at reading size, the rest as a dated list. Every value is an
   existing token: this is the page's own language, used in a new order. */
.aktu{padding-block:var(--s-7)}
.aktu-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--s-2) var(--s-4);
  margin-bottom:var(--s-5)}
.aktu-head h2{margin:0}
.aktu-head p{margin:0;color:var(--muted)}

.aktu-grid{display:grid;gap:var(--s-5);grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);
  align-items:start}
@media (max-width:820px){.aktu-grid{grid-template-columns:1fr}}

.aktu-lead{background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:var(--s-5)}
/* A notice is an operational change; a news item is not. One border, not a
   second colour scheme — and --notice rather than --accent since 19. 9. 2026,
   because the border says what this card IS and --accent says where to act. */
.aktu-lead.is-notice{border-left:4px solid var(--notice)}
.aktu-lead h3{margin:var(--s-2) 0 var(--s-3);font-size:var(--step-2);line-height:1.25}
.aktu-lead h3 a{color:inherit;text-decoration:none}
.aktu-lead h3 a:hover{text-decoration:underline;text-underline-offset:3px}
.aktu-lede{margin:0;color:var(--muted)}
.aktu-more{margin:var(--s-4) 0 0}

.aktu-kind{display:flex;align-items:baseline;gap:var(--s-3);margin:0;
  font-size:var(--step--1);letter-spacing:.02em;color:var(--muted)}
.aktu-when{color:var(--muted)}

.aktu-list{margin:0;padding:0;list-style:none;border-top:1px solid var(--line)}
.aktu-list li{display:grid;grid-template-columns:auto 1fr auto;gap:var(--s-2) var(--s-3);
  align-items:baseline;padding-block:var(--s-4);border-bottom:1px solid var(--line)}
.aktu-list .aktu-kind{display:inline;font-size:var(--step--1);color:var(--muted)}
.aktu-list .aktu-kind.is-notice{color:var(--notice-ink)}
.aktu-list a{text-decoration:none;color:inherit}
.aktu-list a:hover{text-decoration:underline;text-underline-offset:3px}
.aktu-list time{color:var(--muted);font-size:var(--step--1);white-space:nowrap}
@media (max-width:560px){
  .aktu-list li{grid-template-columns:1fr auto}
  .aktu-list .aktu-kind{grid-column:1 / -1}
}

.aktu-all{margin:var(--s-5) 0 0}

/* =========================================================================
 * PAS »ODDELKI IN AMBULANTE« — SEZNAM ENOT IN TLORIS, EDEN OB DRUGEM
 * 22. 9. 2026
 *
 * Postavitev je postavitev iz map/sample/v3/index.html: seznam
 * minmax(300px,360px), tloris 1fr, 22 px med njima, pod 980 px zloženo in
 * tloris PRVI (v3 .map-card{order:-1}).
 *
 * ENAKA VIŠINA — PRAVILO, IN ZAKAJ TO IN NE DRUGO
 * Naročnik: »levo in desno naj bosta enako visoka.« Možnosti so bile tri:
 * poravnati na višjega, omejiti oba, ali pustiti, da rasteta skupaj.
 *
 *   Omejiti oba na 600 px ne gre in se ne sme. Tloris nariše risbo (400 px,
 *   njegova lastna mera) in POD NJO pot od vhoda po korakih; pri vseh 65
 *   enotah izmerjeno potrebuje od 651 px (pri 840 px širine okvirja) do
 *   937 px (pri 290 px). 600 px zanj ni dosegljivih drugače kakor z rezanjem
 *   korakov — korak, ki ga v bolnišnici ni videti, pa je natanko tisto,
 *   česar si ne smemo privoščiti.
 *
 *   Poravnati na višjega pomeni isto kakor spodnje, le brez zgornje meje.
 *
 * Zato RASTETA SKUPAJ, višino pa določi tloris: oba stolpca sta ena vrstica
 * mreže (align-items:stretch), višina vrstice je tisto, kar tloris potrebuje
 * pri trenutni širini okvirja, seznam se raztegne nanjo in se drsa sam v
 * sebi. Seznam v to višino ne sili: .zv-list ima flex-basis 0, zato v naravno
 * višino stolpca prispeva samo svoj min-height.
 *
 * Posledica, ki je prijetna in ni bila načrtovana: dokler enota ni izbrana,
 * tloris korakov nima in potrebuje 448 px, cel pas pa okoli 600 px — natanko
 * tam, kjer je naročnik prosil, naj bo.
 *
 * Pod 980 px sta stolpca eden pod drugim in enaka višina nima pomena; tam
 * velja meja --zv-max za seznam, tloris pa ostane cel.
 *
 * Tu ni nobene šestnajstiške vrednosti — niti ene.
 * ========================================================================= */

.depts{--zv-max:600px}
.depts .zv-split{display:grid;grid-template-columns:minmax(300px,360px) 1fr;
  gap:22px;align-items:stretch;margin-top:var(--s-5)}

/* ------------------------------------------------- levi stolpec: seznam - */
.zv-cat{min-width:0;display:flex;flex-direction:column;gap:var(--s-3);
  background:var(--card);border:1px solid var(--line);border-radius:var(--r);
  padding:18px}
.zv-cat .zv-cat-h{margin:0;font-size:var(--step-0)}
.zv-hint{margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2);
  color:var(--muted);font-size:var(--step--1);line-height:1.35}

/* ISKALNO POLJE. Filtrira seznam sproti; šumniki pri iskanju ne odločajo.
   Polje je `zv-only-js` — brez skripta ga ni, ker brez njega ne bi delalo. */
.zv-find{display:flex;flex-direction:column;gap:var(--s-2)}
.zv-q{appearance:none;width:100%;min-height:2.75rem;padding:var(--s-2) var(--s-3);
  border:1.5px solid var(--line-strong);border-radius:var(--s-2);
  background:var(--card);color:var(--ink);font:inherit;font-size:var(--step-0)}
.zv-q::placeholder{color:var(--muted)}
.zv-q:focus-visible{outline:3px solid var(--teal);outline-offset:1px}
.zv-count{margin:0;color:var(--muted);font-size:var(--step--1)}
.zv-count:empty{display:none}

/* Seznam se drsa sam zase in stran pod njim miruje. Ob robovih sta senci, ki
   se pokažeta natanko takrat, kadar je za robom še kaj: risani sta z "local"
   ozadjem, ki se z vsebino premika, in s "scroll" ozadjem, ki miruje. Brez
   skripta in brez ene same nove barve. */
.zv-list{flex:1 1 0;min-height:9rem;overflow:auto;margin:0 -6px;padding:0 6px;
  scrollbar-width:thin;overscroll-behavior:contain;
  background:
    linear-gradient(var(--card) 40%, transparent) top/100% 20px no-repeat local,
    linear-gradient(transparent, var(--card) 60%) bottom/100% 20px no-repeat local,
    radial-gradient(farthest-side at 50% 0, var(--line-strong), transparent) top/100% 7px no-repeat scroll,
    radial-gradient(farthest-side at 50% 100%, var(--line-strong), transparent) bottom/100% 7px no-repeat scroll}
.zv-more{margin:0;font-size:var(--step--1)}

/* En stolpec, vrstica teče kot besedilo: pika ob robu, naziv, in gumb takoj
   za njim — v isti vrstici, kadar je zanj prostor, in v naslednji, kadar ga
   ni. Fotografskih kartic v 360 px stolpcu ni: ena bi odrinila ves seznam. */
.zv-list .dept-cols{columns:1}
/* Descendant and not child: podenote so v ugnezdenem <ul> in ju pravilo za
   .dept-cols li sicer doseže tudi tam — vrstica podenote je dobila piko od
   .dept-cols li::before IN piko od .zv-row-in::before, torej dve. */
.zv-list .dept-cols .zv-row{break-inside:avoid;display:block;padding:0;border:0}
/* `display:block` zgoraj je močnejši od privzetega `[hidden]{display:none}`,
   zato bi filter vrstice skril samo na videz — ostale bi na zaslonu. Iskanje,
   ki skritih vrstic ne skrije, je iskanje, ki ne dela. */
.zv-list .dept-cols .zv-row[hidden]{display:none}
.zv-list .dept-cols .zv-row::before{content:none}
 /* NE PRELAMLJAJ VRSTICE. Ročaj predala (»Enot: 4«) se je pri daljših
    imenih prelomil v svojo vrstico in tam stal sam, videti kakor da pripada
    naslednji enoti — natanko ta prelom je pri pilulah »na tlorisu« pripeljal
    do napačnih vrat. Zdaj ime teče v več vrstic, ročaj pa ostane ob njem.
    Brez skripta ročaja ni, je pa v vrstici povezava na stran enote, in tam
    prelom nikomur ne škodi, zato je dovoljen. */
.zv-row-in{display:flex;flex-wrap:nowrap;gap:var(--s-2);align-items:center;
  min-height:44px;padding:7px 0 7px 15px;position:relative;
  border-bottom:1px solid var(--line)}
html:not(.js) .zv-row-in{flex-wrap:wrap}
.zv-grp,.zv-page{margin-left:auto}
.zv-row-in::before{content:"";position:absolute;left:0;top:1.15em;
  width:7px;height:7px;border-radius:50%;background:var(--teal-bright)}
.zv-row-in>a:first-child{flex:1 1 auto;min-width:0;color:var(--ink);text-decoration:none}
.zv-row-in>a:first-child:hover{color:var(--teal);text-decoration:underline}
.zv-kids{list-style:none;margin:0 0 0 var(--s-3);padding:0 0 0 var(--s-3);
  border-left:2px solid var(--line)}
.zv-kids[hidden]{display:none}
.zv-kids .zv-row-in{font-size:var(--step--1);color:var(--muted)}

/* IME ENOTE JE EDINO DEJANJE V VRSTICI in pelje na tloris. Pilule »na
   tlorisu« ob njem ni več: bila je drugi gumb v isti vrstici, pri pilulah
   ambulant pa se je prelomila v svojo vrstico in pristala pod imenom DRUGE
   ambulante. Povezava in ne gumb — brez skripta odpre objavljeni tloris na
   tej enoti, kar je cel odgovor na vprašanje, ki ga postavlja. */
.zv-go,.zv-plain{flex:1 1 auto;min-width:0;color:var(--ink);text-decoration:none}
.zv-go:hover,.zv-plain:hover{color:var(--teal);text-decoration:underline}
.zv-go[aria-current="true"]{color:var(--teal-deep);font-weight:700}
/* Izbrana vrstica je označena po vsej širini in ne samo na besedi: v seznamu
   šestdesetih imen se podčrtana beseda izgubi. */
.zv-row-in:has(>.zv-go[aria-current="true"]){background:var(--tint);
  box-shadow:-15px 0 0 var(--tint),6px 0 0 var(--tint)}
.zv-row-in:has(>.zv-go[aria-current="true"])::before{background:var(--teal-deep)}

/* Stran enote v vrstici — samo brez skripta (glej .zv-no-js spodaj). S
   skriptom jo ponudi plošča ob risbi, ko je enota izbrana. */
.zv-page{flex:0 0 auto;color:var(--muted);font-size:var(--step--1);
  text-decoration:underline;white-space:nowrap}
.zv-page:hover{color:var(--teal)}

/* Predal oddelka. Gumba ni v HTML — postavi ga skript, zato brez JavaScripta
   ostane seznam odprt in nobena enota ni za gumbom, ki ga ni. */
.zv-grp{appearance:none;display:inline-flex;align-items:center;gap:6px;
  padding:2px var(--s-2);min-height:1.75rem;border:1px solid var(--line-strong);
  border-radius:999px;background:var(--paper);color:var(--muted);
  font:inherit;font-size:var(--step--1);font-weight:700;cursor:pointer;
  white-space:nowrap}
.zv-grp:hover{background:var(--tint)}
.zv-grp:focus-visible{outline:3px solid var(--teal);outline-offset:2px}
.zv-grp-n{letter-spacing:0}
.zv-chev{width:.5em;height:.5em;border-right:2px solid var(--teal);
  border-bottom:2px solid var(--teal);transform:rotate(45deg);
  transition:transform .15s}
.zv-grp[aria-expanded="true"] .zv-chev{transform:rotate(-135deg)}
.zv-all{appearance:none;margin-left:auto;padding:2px var(--s-2);min-height:1.75rem;
  border:1.5px solid var(--line-strong);border-radius:999px;background:var(--card);
  color:var(--teal);font:inherit;font-size:var(--step--1);font-weight:700;
  cursor:pointer;white-space:nowrap}
.zv-all:hover{background:var(--tint)}
.zv-all:focus-visible{outline:3px solid var(--teal);outline-offset:2px}


/* ------------------------------------------------ desni stolpec: tloris - */
.zv-place{display:flex;flex-direction:column;min-width:0;overflow:hidden;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r)}
.zv-place-head{padding:var(--s-4);border-bottom:1px solid var(--line);
  background:var(--tint)}
.zv-place .zv-place-h{margin:0;font-size:var(--step-1)}
.zv-place .zv-place-h:focus-visible{outline:3px solid var(--teal);outline-offset:3px}
.zv-rest{margin:var(--s-2) 0 0;color:var(--muted);font-size:var(--step--1)}
/* Območje role="status" mora biti v drevesu dostopnosti OD NALAGANJA STRANI,
   sicer bralnik zaslona prve objave ne prebere: display:none ob prvi izbiri
   pomeni novo območje in ne spremembe obstoječega. Zato prazno ne izgine,
   ampak samo izgubi svoj odmik — visoko je 0 px in ne vzame ničesar. */
.zv-say:empty{margin:0}
.zv-say{margin:var(--s-3) 0 0}
.zv-say .zv-title{margin:0 0 var(--s-1);font-family:var(--font-display);
  font-weight:700;font-size:var(--step-1);color:var(--teal-deep);line-height:1.2}
.zv-say .zv-where{margin:0;color:var(--ink);font-size:var(--step-0)}
/* Dejanje, ki se ponudi šele ob izbiri: odprite stran te enote. Par --teal /
   --on-brand je isti, ki ga je doslej nosila izbrana pilula »na tlorisu«, in
   je v vsaki paleti izmerjen (gates 10). */
.zv-open-wrap{margin:var(--s-3) 0 0}
.zv-open-page{display:inline-block;min-height:2.75rem;padding:var(--s-2) var(--s-4);
  border:1.5px solid var(--teal);border-radius:999px;background:var(--teal);
  color:var(--on-brand);font-weight:700;text-decoration:none}
.zv-open-page:hover{background:var(--teal-deep);border-color:var(--teal-deep);
  color:var(--on-brand);text-decoration:underline}
/* The text colour is restated on :hover, and must be on every filled link:
   site.css has a:hover{color:var(--teal-deep)}, which at (0,1,1) outranks a
   one-class rule, and painted this button's text the colour of its own hover
   background — invisible (5. 10. 2026; tools/hover-kontrast.mjs). */
.zv-open-page:focus-visible{outline:3px solid var(--teal);outline-offset:2px}
.zv-open-page span{margin-left:.2em}
/* Ta poved ni stanje (--okay/--warn), ni sprememba (--notice), ni dejanje
   (--accent) in ni nujna pomoč (--danger); zato nima barvne družine in se
   nariše v lastnem glasu portala. Glasna je poved, ne barva. */
.zv-say .zv-flag{margin:var(--s-3) 0 0;padding:var(--s-2) var(--s-3);
  background:var(--card);border-left:4px solid var(--line-strong);
  border-radius:0 var(--s-2) var(--s-2) 0;color:var(--ink);
  font-size:var(--step--1);line-height:1.45}

/* VIŠINA OKVIRJA. Poizvedbe so po VSEBNIKU in ne po oknu: koliko vrstic vzame
   najdaljša pot, je odvisno od širine okvirja, ne od širine zaslona — pri
   1000 px je okvir ožji kakor pri 980 px, ker se tam postavitev razdeli v dva
   stolpca. Mere so izmerjene pri vseh 65 enotah tlorisa; za vsako širino je
   vzeta NAJVEČJA potrebna višina:
 *
 *   širina okvirja  290  310  330  356  370  420  440  500  560  620  840
 *   potrebna višina 937  894  867  845  819  797  754  727  702  680  651
 *
 * Dokler enota ni izbrana, korakov ni in tloris potrebuje 446 px pri vsaki
 * širini; visoka mera je zato vezana na .je-izbrana, ki ga skript doda ob
 * prvi izbiri. Kadar smemo brati v okvir (isti izvor — na strežniku vedno),
 * skript višino uskladi z vsebino in ta tabela je samo varovalka. */
.zv-frame{flex:1 1 auto;display:flex;flex-direction:column;
  background:var(--paper);container-type:inline-size}
.zv-frame>iframe{flex:1 1 auto;display:block;width:100%;border:0}
.zv-frame>iframe[hidden]{display:none}
.zv-ask{flex:1 1 auto;display:flex;flex-direction:column;align-items:flex-start;
  justify-content:center;gap:var(--s-3);padding:var(--s-5)}
.zv-ask[hidden]{display:none}
.zv-ask-note{margin:0;color:var(--muted);font-size:var(--step--1);max-width:44ch}
.zv-open{appearance:none;display:inline-block;padding:var(--s-2) var(--s-4);
  min-height:2.75rem;border:1.5px solid var(--line-strong);border-radius:999px;
  background:var(--card);color:var(--teal);font:inherit;font-weight:700;
  text-decoration:none;cursor:pointer}
.zv-open:hover{background:var(--tint)}
.zv-open:focus-visible{outline:3px solid var(--teal);outline-offset:2px}

.zv-frame>iframe,.zv-ask{min-height:29.5rem}
@container (min-width:290px){.zv-frame>iframe,.zv-ask{min-height:28rem}}
.zv-frame.je-izbrana>iframe{min-height:59rem}
@container (min-width:310px){.zv-frame.je-izbrana>iframe{min-height:56rem}}
@container (min-width:330px){.zv-frame.je-izbrana>iframe{min-height:55rem}}
@container (min-width:356px){.zv-frame.je-izbrana>iframe{min-height:53rem}}
@container (min-width:370px){.zv-frame.je-izbrana>iframe{min-height:52rem}}
@container (min-width:420px){.zv-frame.je-izbrana>iframe{min-height:50rem}}
@container (min-width:440px){.zv-frame.je-izbrana>iframe{min-height:48rem}}
@container (min-width:500px){.zv-frame.je-izbrana>iframe{min-height:46rem}}
@container (min-width:560px){.zv-frame.je-izbrana>iframe{min-height:44rem}}
@container (min-width:620px){.zv-frame.je-izbrana>iframe{min-height:43rem}}
@container (min-width:840px){.zv-frame.je-izbrana>iframe{min-height:41rem}}

.zv-foot{padding:var(--s-3) var(--s-4) var(--s-4);display:flex;
  flex-direction:column;gap:var(--s-3)}
.zv-a11y{margin:0;color:var(--muted);font-size:var(--step--1)}

/* ORODJA OB TLORISU. Skript jih odkrije šele, ko se tloris javi, zato jih v
   HTML postavi `hidden`; dokler so skrita, v postavitvi ne zasedajo ničesar. */
.zv-tools{display:flex;flex-wrap:wrap;gap:var(--s-3);
  justify-content:space-between;align-items:center}
.zv-tools[hidden]{display:none}
.zv-tools-grp{display:inline-flex;gap:var(--s-2);align-items:center}
.zv-tool{appearance:none;display:inline-flex;align-items:center;
  justify-content:center;min-width:2.75rem;min-height:2.75rem;padding:0 var(--s-2);
  border:1.5px solid var(--line-strong);border-radius:999px;background:var(--card);
  color:var(--teal);font:inherit;font-size:var(--step-0);font-weight:700;
  line-height:1;cursor:pointer}
.zv-tool-w{padding:0 var(--s-4);font-size:var(--step--1)}
.zv-tool:hover{background:var(--tint)}
.zv-tool:focus-visible{outline:3px solid var(--teal);outline-offset:2px}
.zv-tool[hidden]{display:none}

/* Brez JavaScripta: gumba, ki bi naložil okvir, ni — namesto njega stoji
   povezava na objavljeni tloris. Ista pot, ena stran več. */
.zv-no-js{display:none}
html:not(.js) .zv-no-js{display:inline-block}
html:not(.js) .zv-only-js{display:none}


@media (max-width:980px){
  .depts .zv-split{grid-template-columns:1fr;gap:var(--s-5)}
  /* Tloris je PRVI — v3 .map-card{order:-1}. */
  .zv-place{order:-1}
  /* Zloženo stolpca nista ena vrstica in enaka višina nima pomena; tu pa je
     meja 600 px bolj potrebna kakor na široko, ker pod seznamom ni drugega
     stolpca, ki bi čakal. */
  .zv-cat{max-height:var(--zv-max)}
  .zv-list{flex:1 1 auto}
}

/* Pilula ambulante in njen »na tlorisu« sta ENA postavka vrstice. Ločena sta
   se ob prelomu razšla in vsak »na tlorisu« je pristal ob NASLEDNJI pilulI —
   bralec bi pritisnil napačnega in ga bi poslalo k napačnim vratom. */

/* ==========================================================================
   NAROČANJE — /narocanje/, potrjeni predlog 3 (docs/predlog-narocanje-3.html)

   Bralec pride z napotnico v roki in eno nalogo. Obe poti naročanja sta zato
   vidni HKRATI, drug ob drugem — telefon (papirnata napotnica) in eNaročanje
   (elektronska) —, in »Na tej strani« v junaku pelje naravnost do odgovora.

   DVA RAZREDA TAM, KJER JE BESEDILO NAVODILO. Tema da vsakemu odstavku v pasu
   `.band p{color:var(--muted)}` — (0,1,1), kar premaga en razred. Številka je
   v predlogu zato prvič prišla ven siva. Kar človek mora prebrati, da se
   naroči, je v barvi besedila; sivo ostane samo pojasnilo.

   clamp(): okoli + in − morata biti presledka, sicer brskalnik zavrže celo
   izjavo — tako je bila številka v predlogu 2 19 px namesto 51 px.
   ========================================================================== */

.nar-junak .hero-lede{max-width:60ch}
.nar-skoki{display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-3);align-items:center;
  margin-top:var(--s-5);font-size:var(--step--1)}
.nar-skoki-t{color:var(--muted);font-weight:600;margin-right:var(--s-1)}
.nar-skoki a{display:inline-flex;align-items:center;min-height:44px;padding:0 var(--s-4);
  border:1.5px solid var(--line-strong);border-radius:999px;background:var(--card);
  color:var(--teal-deep);font-weight:600;text-decoration:none}
.nar-skoki a:hover{border-color:var(--teal);color:var(--teal)}

.nar-band,.nar-band [id]{scroll-margin-top:var(--s-4)}
.nar-alt{background:var(--card)}
.nar-h3{display:flex;align-items:center;gap:var(--s-2);margin:0 0 var(--s-3);
  font-size:var(--step-1)}
.nar-h3 .sbt-icon{width:1.2em;height:1.2em;flex:none;color:var(--teal)}

/* -------------------------------------------------- obe poti, hkrati */
.nar-poti{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:var(--s-5);
  align-items:stretch;margin-top:var(--s-5)}
.nar-klic,.nar-enar{border-radius:var(--r);padding:var(--s-6)}
.nar-klic{background:var(--card);border:1px solid var(--line);
  box-shadow:inset 4px 0 0 var(--teal)}
.nar-enar{background:var(--tint);border:1px solid var(--line);display:flex;
  flex-direction:column}
.nar-band .nar-kdo{margin:0 0 var(--s-2);font-size:var(--step--1);font-weight:700;
  letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.nar-band .nar-klic .nar-stevilka{margin:0 0 var(--s-4);font-family:var(--font-display);
  font-weight:700;font-size:clamp(2.4rem, 1.9rem + 2vw, 3.4rem);line-height:1.05;
  color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.nar-vrsta{display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:center;margin:0 0 var(--s-4)}
.nar-vrsta:not(:has(> :not([hidden]))){display:none}
.nar-stanje{display:inline-flex;align-items:center;gap:8px;min-height:36px;
  padding:0 var(--s-4);border-radius:999px;font-weight:700;font-size:var(--step--1)}
.nar-stanje[hidden]{display:none}
.nar-stanje::before{content:"";width:10px;height:10px;border-radius:50%;background:currentColor}
.nar-odprto{background:var(--okay-bg);color:var(--okay-ink);border:1px solid var(--okay-line)}
.nar-zaprto{background:var(--paper);color:var(--muted);border:1px solid var(--line)}
.nar-kopiraj[hidden]{display:none}
.nar-band .nar-klic .nar-ure{margin:0 0 var(--s-2);font-weight:600;color:var(--ink)}
.nar-pis{margin:0;max-width:52ch}
.nar-band .nar-enar .nar-enar-t{margin:0 0 var(--s-4);max-width:34ch;color:var(--ink)}
.nar-enar-go .btn .sbt-icon{width:1em;height:1em}
.nar-drobno{margin:auto 0 0;padding-top:var(--s-4);font-size:var(--step--1)}

/* ------------------------------------------------------ kaj potrebujete */
.nar-trije{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-5);
  list-style:none;margin:var(--s-4) 0 0;padding:0}
.nar-trije li{margin:0;padding:0;display:grid;grid-template-columns:auto 1fr;
  column-gap:var(--s-3);row-gap:2px;align-items:start}
.nar-trije li::before{content:none}
.nar-ikona{grid-row:span 2;width:48px;height:48px;border-radius:12px;background:var(--tint);
  display:grid;place-items:center;color:var(--teal)}
.nar-ikona .sbt-icon{width:24px;height:24px}
.nar-trije b{font-size:var(--step-0);line-height:1.3;padding-top:2px}
.nar-zakaj{color:var(--muted);font-size:var(--step--1)}
.nar-opomba{margin:var(--s-5) 0 0;max-width:70ch}

/* ------------------------------------------------- odpoved in čakanje */
.nar-dva{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-7)}
.nar-band .nar-dva p{max-width:52ch;color:var(--ink)}
.nar-gumbi{display:flex;flex-wrap:wrap;gap:var(--s-3)}

/* ------------------------------------------------------------ vprašanja
   Naslov in pomoč levo, seznam desno. `.nar-vpr` je `display:contents`, zato
   sta njena otroka postavki iste mreže kakor naslov razdelka. */
.nar-vpr-band .wrap{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,8fr);
  column-gap:var(--s-7);align-items:start}
.nar-vpr-band .wrap > h2{grid-column:1;grid-row:1}
.nar-vpr{display:contents}
.nar-vpr-pomoc{grid-column:1;grid-row:2;margin:0}
.nar-vpr-seznam{grid-column:2;grid-row:1 / span 2}
.nar-vpr-seznam details{border-top:1px solid var(--line)}
.nar-vpr-seznam details:last-child{border-bottom:1px solid var(--line)}
.nar-vpr-seznam summary{cursor:pointer;list-style:none;position:relative;
  min-height:56px;display:flex;align-items:center;padding:var(--s-3) 40px var(--s-3) 0;
  font-weight:600;color:var(--ink)}
.nar-vpr-seznam summary::-webkit-details-marker{display:none}
.nar-vpr-seznam summary::after{content:"";position:absolute;right:8px;top:50%;
  margin-top:-6px;width:10px;height:10px;border-right:2px solid var(--teal);
  border-bottom:2px solid var(--teal);transform:rotate(45deg);transition:transform .15s}
.nar-vpr-seznam details[open] summary::after{transform:rotate(-135deg)}
.nar-vpr-seznam summary:hover{color:var(--teal)}
.nar-vpr-seznam summary:focus-visible{outline:3px solid var(--teal);outline-offset:2px}
.nar-vpr-seznam details p{margin:0 0 var(--s-4);max-width:62ch}

@media (prefers-reduced-motion:reduce){
  .nar-vpr-seznam summary::after{transition:none}
}

@media (max-width:900px){
  .nar-poti,.nar-dva{grid-template-columns:1fr}
  .nar-dva{gap:var(--s-6)}
  .nar-vpr-band .wrap{display:block}
  .nar-vpr-pomoc{margin:0 0 var(--s-4)}
  .nar-trije{grid-template-columns:1fr;gap:var(--s-4)}
  .nar-klic,.nar-enar{padding:var(--s-5)}
}

/* ==========================================================================
   Stran ambulante in oddelka — postavitev 29. 9. 2026
   (sbt-portal-strani/includes/enota-postavitev.php; predlog, ki ga je naročnik
   potrdil: Predlogi/Predlog - stran ambulante in oddelka.html)

   Stran odgovori na vprašanja, s katerimi pacient pride, v tem vrstnem redu:
   kdaj, kje, kako do vrat, kako se naročiti. Ena sama izrazita stvar je temni
   pas s tlorisom in potjo; vse drugo je tiho. Samo žetoni iz tokens.css.
   ========================================================================== */

/* ---- glava: levo ime in odgovori, desno fotografija ------------------------ */
.page-hero.enota-hero{padding-block:var(--s-6) var(--s-7)}
.page-hero.enota-hero > .wrap{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);
  column-gap:var(--s-7);align-items:start}
.enota-hero > .wrap > *{grid-column:1}
.enota-hero > .wrap > .breadcrumbs{grid-column:1 / -1}
.enota-hero > .wrap > .enota-foto{grid-column:2;grid-row:2 / span 6;margin:var(--s-2) 0 0}
.page-hero.enota-hero h1{margin:6px 0 var(--s-4);line-height:1.05}
.page-hero.enota-hero .hero-kicker{text-transform:none;letter-spacing:0;font-weight:600;font-size:15.5px}

.enota-stanje{display:inline-flex;align-items:center;gap:10px;margin:0;padding:8px 16px 8px 12px;
  border-radius:999px;font-weight:600;font-size:15px;line-height:1.35}
.enota-stanje::before{content:"";width:10px;height:10px;border-radius:50%;background:currentColor;flex:none}
.enota-stanje--open{background:var(--okay-bg);color:var(--okay-ink)}
.enota-stanje--shut{background:var(--warn-bg);color:var(--warn-ink)}
.enota-stanje--info{background:var(--tint);color:var(--teal-deep)}

.enota-odgovori{margin:var(--s-5) 0 0;background:var(--card);border:1px solid var(--line);border-radius:var(--r)}
.enota-odgovori > div{display:grid;grid-template-columns:10rem minmax(0,1fr);gap:4px var(--s-4);
  padding:14px 20px;border-top:1px solid var(--line)}
.enota-odgovori > div:first-child{border-top:0}
.enota-odgovori dt{font-size:14.5px;font-weight:600;color:var(--muted);padding-top:3px}
.enota-odgovori dd{margin:0;font-size:18px;font-weight:600;line-height:1.35;color:var(--ink)}
.enota-odgovori dd small{display:block;margin-top:3px;font-size:15px;font-weight:400;color:var(--muted)}

.enota-foto img{display:block;width:100%;height:auto;aspect-ratio:4 / 3;object-fit:cover;border-radius:var(--r)}
.enota-foto figcaption{margin-top:var(--s-2);font-size:14px;color:var(--muted)}

/* ---- obvestilo enote: časovno omejeno, zato na vrhu ----------------------- */
.band.enota-obvestilo{padding-block:0 var(--s-6)}
.enota-obvestilo__box{background:var(--warn-bg);border:1px solid var(--warn-line);border-radius:var(--r);padding:18px 22px}
.enota-obvestilo .enota-obvestilo__h{font-size:16px;margin:0 0 6px;color:var(--warn-ink)}
.band.enota-obvestilo p{margin:0;color:var(--warn-ink);max-width:75ch}

/* ---- pot: edini temni pas na strani --------------------------------------- */
.band.enota-pot{background:var(--band-deep);color:var(--band-ink);padding-block:var(--s-7) var(--s-8);margin-block:0 var(--s-6)}
.band.enota-pot :is(h2,h3){color:var(--band-ink)}
.band.enota-pot p{color:var(--band-ink-soft)}
.enota-pot__lede{margin:var(--s-2) 0 var(--s-5);max-width:70ch}
.enota-pot__tloris{background:var(--card);border-radius:var(--r);overflow:hidden}
/* Measured on the plan itself (29. 9.): 550–600 px of content at desktop
   width, ~650 at tablet, up to 772 on a 390 px phone. A taller frame is an
   empty grey strip under the steps. */
.enota-pot__tloris iframe{display:block;width:100%;height:610px;border:0}
@media (max-width:1100px){.enota-pot__tloris iframe{height:660px}}
@media (max-width:600px){.enota-pot__tloris iframe{height:780px}}
.enota-pot__povezave{display:flex;flex-wrap:wrap;gap:10px 24px;margin:var(--s-4) 0 0}
.band.enota-pot a{color:var(--band-ink);font-weight:600}
.enota-pot__dodatno{margin:var(--s-3) 0 0}
.band.enota-pot .enota-pot__stran{background:var(--warn-bg);color:var(--warn-ink);border-radius:var(--r);padding:12px 16px}
.enota-pot__koraki{margin:var(--s-4) 0;padding-left:1.4em;color:var(--band-ink)}
.enota-pot__koraki li{margin:0 0 8px}
.enota-pot__koraki small{color:var(--band-ink-soft)}
.band.enota-pot .kv :is(dt,dd){color:var(--band-ink)}

/* ---- razdelki: naslov levo, vsebina desno --------------------------------- */
.band.enota-sec{padding-block:var(--s-6)}
.enota-sec + .enota-sec{border-top:1px solid var(--line)}
.enota-sec__wrap{display:grid;grid-template-columns:minmax(0,4fr) minmax(0,8fr);gap:var(--s-3) var(--s-7);align-items:start}
.enota-sec__head h2{margin:0}
.band .enota-sec__lede{margin:var(--s-2) 0 0;font-size:15.5px}
.enota-sec__body > :first-child{margin-top:0}
.band .enota-sec__body p,.band .enota-sec__body li{color:var(--ink)}
.band .enota-sec__body .fast-src,.band .enota-sec__body .muted{color:var(--muted)}
.enota-velik{font-size:19px}
/* The unit's own text keeps its headings, but at body scale: imported titles
   written in capitals at section size competed with the page's own. */
.enota-besedilo :is(h2,h3,h4,h5){font-size:var(--step-1);line-height:1.3;margin:var(--s-5) 0 var(--s-2);color:var(--teal-deep)}
.enota-besedilo > :first-child{margin-top:0}

/* Teden: pet (ali sedem) dni, današnji označen. Prava tabela (pogodba §3). */
.enota-teden{width:100%;border-collapse:separate;border-spacing:6px 0;table-layout:fixed;margin:-2px 0 var(--s-3) -6px}
.enota-teden caption{text-align:left;font-size:15px;color:var(--muted);padding:0 0 10px 6px}
.enota-teden th{font-size:14px;font-weight:600;color:var(--muted);text-align:left;padding:0 12px 8px}
.enota-teden th abbr{text-decoration:none}
.enota-teden td{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px 12px;
  vertical-align:top;font-weight:600;font-size:16.5px;height:84px;color:var(--ink)}
.enota-teden td.zaprto{background:transparent;border-style:dashed;color:var(--muted);font-weight:400;font-size:15px}
.enota-teden th.je-danes{color:var(--teal)}
.enota-teden td.je-danes{border:2px solid var(--teal)}
.enota-teden td small{display:block;margin-top:4px;font-weight:400;font-size:13px;color:var(--muted)}

/* Naročanje: ena vrstica, ne trije okvirji. */
.enota-narocanje{display:flex;flex-wrap:wrap;align-items:center;gap:14px var(--s-5);background:var(--card);
  border:1px solid var(--line);border-radius:var(--r);padding:20px}
.enota-narocanje p{margin:0}
.band .enota-prinesite{margin:var(--s-3) 0 0}

/* Ljudje: ime, pod njim vloga. */
.enota-ljudje{list-style:none;margin:0 0 var(--s-4);padding:0;display:grid;gap:14px}
.enota-ljudje li{padding-left:16px;border-left:3px solid var(--tint2)}
.enota-ljudje strong{display:block;font-weight:600;color:var(--ink)}
.enota-ljudje span{color:var(--muted);font-size:15.5px}
.band .enota-opomba{font-size:15.5px}
/* Contact rows as the answer panel's: label left, value right, one rule
   between rows — not the old indented definition list. */
.enota-kv{margin:0 0 var(--s-3)}
.enota-kv .kv-row{display:grid;grid-template-columns:10rem minmax(0,1fr);gap:4px var(--s-4);
  padding:10px 0;border-top:1px solid var(--line);margin:0}
.enota-kv .kv-row:first-child{border-top:0;padding-top:0}
.enota-kv dt{font-size:14.5px;font-weight:600;color:var(--muted);margin:0}
.enota-kv dd{margin:0;padding:0;color:var(--ink)}
@media (max-width:600px){.enota-kv .kv-row{grid-template-columns:1fr}}

/* Sorodne enote: povezave v dveh stolpcih. */
.enota-seznam{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.enota-seznam :is(a,span[aria-current]){display:block;height:100%;background:var(--card);border:1px solid var(--line);
  border-radius:10px;padding:14px 16px;font-weight:600;text-decoration:none;color:var(--teal-deep)}
.enota-seznam a:hover{border-color:var(--line-strong)}
.enota-seznam span[aria-current]{background:var(--tint);border-color:var(--tint)}
.enota-seznam small{display:block;margin-top:3px;font-weight:400;font-size:14.5px;color:var(--muted)}

/* Naprej: iskanje druge enote in stalne povezave. */
.band.enota-naprej{background:var(--tint);padding-block:var(--s-6);margin-top:var(--s-5)}
.enota-naprej h2{font-size:clamp(20px,2.2vw,24px);margin:0 0 var(--s-3)}
.enota-naprej__isci{display:flex;flex-wrap:wrap;gap:10px;max-width:560px}
.enota-naprej__isci input{flex:1 1 240px;min-height:50px;border:1.5px solid var(--line-strong);border-radius:12px;
  background:var(--card);padding:0 14px;font:inherit;color:var(--ink)}
.enota-naprej__povezave{display:flex;flex-wrap:wrap;gap:8px 22px;margin:var(--s-4) 0 0}
.enota-naprej__povezave a{font-weight:600}

@media (max-width:860px){
  .page-hero.enota-hero > .wrap{grid-template-columns:1fr}
  .enota-hero > .wrap > .enota-foto{grid-column:1;grid-row:auto;order:-1;margin:0 0 var(--s-4)}
  .enota-hero > .wrap > .breadcrumbs{order:-2}
  .enota-foto img{aspect-ratio:16 / 9}
  .enota-odgovori > div{grid-template-columns:1fr}
  .enota-sec__wrap{grid-template-columns:1fr}
}
@media (max-width:48rem){
  /* Teden postane seznam dni — tabele se pod 48rem zložijo (pogodba §3). */
  .enota-teden,.enota-teden tbody,.enota-teden tr,.enota-teden td{display:block;width:auto}
  .enota-teden caption{display:block}
  .enota-teden{margin:0}
  .enota-teden thead{display:none}
  .enota-teden td{height:auto;display:flex;justify-content:space-between;gap:12px;margin:0 0 6px}
  .enota-teden td::before{content:attr(data-dan);font-weight:600;color:var(--muted)}
  .enota-teden td small{display:none}
  .enota-seznam{grid-template-columns:1fr}
}

/* A page's sub-pages under its own text (sbt-portal-strani vsebina.php):
   set apart from the body above and kept off the footer below. */
.flow>.sbt-podstrani{margin-top:var(--s-7);padding-bottom:var(--s-8)}
.sbt-podstrani>h2{margin:0 0 var(--s-4)}

/* ------------------------------------------------- Ambulante in oddelki
 * One page by reason of visit (sbt-portal-strani t2-katalog.php, 5. 10.
 * 2026): search for what the referral says, three doors, booking said once,
 * clinics by topic in the patients' words, wards with visiting hours, other
 * services. The topic index is the one large element; the rest stays quiet.
 * On a phone the index hides — the topics themselves collapse into it. */
.kat-hero .hero-lede{max-width:60ch}
/* A filtered-out row or topic stays hidden even where a rule below sets its display. */
.kat [hidden],.kat-isci [hidden]{display:none!important}
.kat-isci{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:var(--s-5) var(--s-6);margin-top:var(--s-5);max-width:none}
.kat-isci label{display:block;font-family:var(--font-display);font-weight:700;font-size:clamp(21px,2.3vw,26px);color:var(--teal-deep);margin-bottom:var(--s-3)}
.kat-isci-polje{display:flex;gap:var(--s-3)}
.kat-isci input[type="search"]{flex:1;min-width:0;font:inherit;font-size:20px;min-height:58px;padding:0 18px;border:2px solid var(--line-strong);border-radius:12px;background:var(--card);color:var(--ink)}
.kat-isci input[type="search"]:focus{border-color:var(--teal-deep);outline:none;box-shadow:0 0 0 4px var(--tint)}
.kat-namig{font-size:15px;color:var(--muted);margin:var(--s-2) 0 0}
.kat-isci .result-status{margin:var(--s-2) 0 0;font-weight:600;color:var(--teal-deep)}
.kat-isci .result-status:empty{display:none}

.kat-vstop{padding-block:var(--s-5) 0}
.kat-vrata{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-3);margin:0 0 var(--s-6);padding:0;list-style:none}
.kat-vrata li{position:relative;background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:18px 20px}
.kat-vrata li:hover{border-color:var(--line-strong)}
.kat-vrata-a{font-family:var(--font-display);font-weight:700;font-size:21px;color:var(--teal-deep);text-decoration:none}
.kat-vrata-a::after{content:"";position:absolute;inset:0;border-radius:var(--r)}
.kat-vrata p{margin:4px 0 0;color:var(--muted);font-size:16px}
.kat-vrata .is-nujno{border-left:5px solid var(--sos)}
.kat-112{position:relative;z-index:1;font-weight:700;color:var(--sos)}
.kat-narocanje{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--s-4) var(--s-6);align-items:center;background:var(--tint);border-radius:var(--r);padding:20px 24px;margin:0 0 var(--s-7)}
.kat-narocanje h2{font-size:21px;margin:0 0 4px}
.kat-narocanje p{margin:0}
.kat-st{white-space:nowrap}
.kat-nic{background:var(--card);border:1px dashed var(--line-strong);border-radius:var(--r);padding:18px 22px;margin:0 0 var(--s-6)}
.kat-nic p{margin:0}

.kat-sek{padding-block:0 var(--s-7)}
.kat-glava{margin-bottom:var(--s-5)}
.kat-glava p{color:var(--muted);margin-top:var(--s-2)}
.kat-kazalo{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 28px;margin:0 0 var(--s-7);padding:0;list-style:none;border-top:2px solid var(--teal-deep)}
.kat-kazalo a{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:14px 0;border-bottom:1px solid var(--line);text-decoration:none;font-family:var(--font-display);font-weight:600;font-size:23px;line-height:1.15;color:var(--teal-deep)}
.kat-kazalo a:hover span{text-decoration:underline;text-underline-offset:4px}
.kat-kazalo b{font:600 15px var(--font-body);color:var(--muted);font-variant-numeric:tabular-nums}
.kat-kazalo .is-prazno a{color:var(--line-strong)}
.kat-teme{columns:2;column-gap:48px}
.kat-tema{break-inside:avoid;border-top:2px solid var(--teal-deep);margin:0 0 var(--s-6)}
.kat-tema summary{display:flex;align-items:baseline;gap:12px;padding:14px 0 4px;cursor:pointer;list-style:none}
.kat-tema summary::-webkit-details-marker{display:none}
.kat-tema h3{font-size:24px;margin:0}
.kat-tema .kat-st{font-size:15px;font-weight:600;color:var(--muted)}
.kat-amb{list-style:none;margin:0;padding:0}
.kat-amb li{padding:11px 0;border-bottom:1px solid var(--line)}
.kat-amb a{font-weight:700;font-size:18px;line-height:1.3;text-decoration:none}
.kat-amb a:hover{text-decoration:underline}
.kat-amb p{margin:2px 0 0;font-size:16px;line-height:1.4}
.kat-amb .kat-cas{color:var(--muted);font-size:15px}

.kat-obiski{width:100%;border-collapse:collapse;background:var(--card);border:1px solid var(--line)}
.kat-obiski th,.kat-obiski td{text-align:left;padding:14px 18px;border-top:1px solid var(--line);vertical-align:top;font-size:16px}
.kat-obiski thead th{border-top:0;background:var(--tint);font-size:14px;font-weight:700;color:var(--teal-deep)}
.kat-obiski tbody th a{font-weight:700;font-size:17.5px;text-decoration:none}
.kat-obiski tbody th a:hover{text-decoration:underline}
.kat-obiski tbody th span{display:block;font-weight:400;font-size:15px;color:var(--muted)}
.kat-obiski td{font-weight:600}
.kat-obiski td+td{font-weight:400;color:var(--muted)}
.kat-ni{color:var(--muted);font-weight:400}
.kat-pod{font-size:15px;color:var(--muted);margin-top:var(--s-3)}
.kat-sluzbe{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 32px}
.kat-sluzbe li{padding:12px 0;border-bottom:1px solid var(--line)}
.kat-sluzbe a{font-weight:700;text-decoration:none}
.kat-sluzbe a:hover{text-decoration:underline}
.kat-sluzbe span{display:block;color:var(--muted);font-size:15.5px}
.kat-konec{border-top:1px solid var(--line);padding-block:var(--s-6) var(--s-8)}
.kat-konec h2{font-size:22px;margin-bottom:6px}

@media (max-width:760px){
  .kat-isci{padding:18px 16px 16px}
  .kat-isci-polje{flex-direction:column}
  .kat-vrata{grid-template-columns:1fr}
  .kat-narocanje{grid-template-columns:1fr;padding:18px}
  .kat-kazalo{display:none}
  .kat-teme{columns:1}
  .kat-tema{margin:0;border-top:1px solid var(--line)}
  .kat-tema:first-child{border-top:2px solid var(--teal-deep)}
  .kat-tema summary{padding:16px 0;justify-content:space-between}
  .kat-tema summary::after{content:"";width:10px;height:10px;border-right:2px solid var(--teal-deep);border-bottom:2px solid var(--teal-deep);transform:rotate(45deg);margin-left:auto;align-self:center}
  .kat-tema[open] summary::after{transform:rotate(225deg)}
  .kat-tema h3{font-size:20px}
  .kat-teme{margin-bottom:var(--s-6)}
  .kat-obiski thead{display:none}
  .kat-obiski tr{display:block;border-top:1px solid var(--line);padding:12px 16px}
  .kat-obiski th,.kat-obiski td{display:block;border:0;padding:2px 0}
  .kat-sluzbe{grid-template-columns:1fr}
}
