/* ==========================================================================
   Textové stránky — one shared stylesheet for the plain WPBakery pages:
   Sponzoring, Kontakty, O týmu, Stadion, Historie and the Soutěže landing
   pages. Between them they are almost entirely vc_column_text,
   vc_custom_heading, vc_btn, vc_separator and stm_spacing, so the same rules
   cover all of them; the one-off widgets get their own short sections at the
   bottom of this file.

   Scoped on `.kobra-text-page`, a body class this child theme adds itself
   (see kobra_text_page_body_class). Splash's own body classes were not built
   on: last session was largely spent finding thirteen dead rules that keyed
   on `.blog`, which is not on the body of an archive at all.

   Everything here is styling. No page content is changed — the two things
   that genuinely need fixing in wp-admin (a dead image_size on the sponsor
   carousel, an empty contact block) are worked around here and listed in
   CLAUDE.md instead.
   ========================================================================== */

/* The page masthead (.kobra-page-head / .kobra-page-title) is NOT here.
   It moved to redesign.css in v0.44.0, because five templates need it —
   the text pages, the news listing, the squad page, the coaching staff and
   the team statistics page — and only this file loads on the text ones.
   Which pages get a heading is decided by kobra_page_heading() in PHP, and
   redesign.js injects it. */

/* ==========================================================================
   The type scale — five sizes, and nothing else
   --------------------------------------------------------------------------
   Sponzoring drifted badly before this was written down. Measured on one page:
   **four different sizes doing the same job** — body copy at 17px, the closing
   statement at 18px, its last line at 19px and the CTA text at 16px — and
   **three sizes of section heading**, 25px, 27px and an `<h3>` at 30px, which
   made a body-level line bigger than every heading on the page. Two blocks were
   also `--kobra-mist` where everything around them was `--kobra-ice`.

   None of it was a decision; it accumulated one block at a time. So:

     46px / 800  page title (h1, in redesign.css)
     30px / 700  display callout (h3) — deliberately the largest thing in the
                 body copy, and confirmed by the user. On Sponzoring it is the
                 name to search for in Givt, i.e. the most actionable string on
                 the page, so outranking the section headings is right: it is a
                 pull quote, not a step in the heading outline. Stated
                 explicitly rather than left inheriting Splash's 30px, so it
                 reads as chosen.
     27px / 800  section heading (h2)
     20px / 700  sub-heading (h4)
     17px / 400  body copy — the only size body text ever is
     15px / 700  kicker (h5)
     13px / 700  eyebrow, button label

   Colour goes with it: **ice for anything anyone reads**, sky for eyebrows,
   mist only for genuinely secondary metadata — a contact label, a photo
   credit — never for a paragraph. Deviating from this is fine, but it should be
   a decision with a reason next to it, not a leftover.

   Splash also sizes page text for a white page at a tighter line-height than a
   dark background can carry: light type on dark needs more air to stay
   readable. The measure is capped per column rather than per page, since
   these pages mix full-width and half-width text.
   ========================================================================== */
.kobra-text-page .wpb_text_column p,
.kobra-text-page .wpb_text_column li {
	font-family: 'Bricolage Grotesque', sans-serif;
	font-size: 17px;
	line-height: 1.75;
	color: var(--kobra-ice);
	hyphens: auto;
	-webkit-hyphens: auto;
}

.kobra-text-page .wpb_text_column p {
	margin: 0 0 18px;
}

.kobra-text-page .wpb_text_column p:last-child {
	margin-bottom: 0;
}

.kobra-text-page .wpb_text_column strong,
.kobra-text-page .wpb_text_column b {
	font-weight: 700;
	color: #fff;
}

.kobra-text-page .wpb_text_column a {
	color: var(--kobra-sky);
	text-decoration: none;
	border-bottom: 1px solid rgba(83, 169, 220, 0.4);
}

.kobra-text-page .wpb_text_column a:hover {
	color: var(--kobra-yellow);
	border-bottom-color: var(--kobra-yellow);
}

/* Lists get a marker in the accent colour; Splash leaves them as browser
   defaults, which on this background are invisible grey dots. */
.kobra-text-page .wpb_text_column ul {
	margin: 0 0 18px;
	padding-left: 22px;
	list-style: none;
}

.kobra-text-page .wpb_text_column ul > li {
	position: relative;
	margin-bottom: 8px;
}

.kobra-text-page .wpb_text_column ul > li::before {
	content: "";
	position: absolute;
	top: 12px;
	left: -18px;
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: var(--kobra-sky);
}

/* ==========================================================================
   Legacy inline colours pasted into the page content
   --------------------------------------------------------------------------
   Both pages were written in the classic editor with text pasted in from
   Word or Docs, and carry the editor's colours baked into the markup as
   <span style="color: #000000">. Invisible on the old white page, unreadable
   here — black text on navy.

   An inline style outranks every author rule regardless of selector length,
   so an important author declaration is the only thing in the cascade that
   beats it. Same mechanism, and the same anchored `^=` / `*="; color…"`
   matching, as the equivalent block in post.css: a plain
   [style*="color: #000000"] would also match `background-color: #000000` and
   repaint the text of anything given a dark background.

   The full set present in these two pages:

     #000000   black — body text and headings, most of both pages
     #008000   green — one highlighted line on Sponzoring

   The permanent fix is to strip these spans in the editor. That is a content
   edit, would have to be repeated on production, and cannot travel in the
   theme zip, so it is masked here and listed in CLAUDE.md.
   ========================================================================== */
.kobra-text-page [style^="color: #000000"],
.kobra-text-page [style^="color:#000000"],
.kobra-text-page [style*="; color: #000000"],
.kobra-text-page [style^="color: #333333"],
.kobra-text-page [style^="color:#333333"],
.kobra-text-page [style*="; color: #333333"] {
	color: var(--kobra-ice) !important;
}

/* Links keep looking like links even when the paste painted them body-text
   black. a[style] at (0,2,1) outranks the bare attribute rule at (0,2,0), so
   this wins regardless of source order. */
.kobra-text-page a[style^="color: #000000"],
.kobra-text-page a[style^="color:#000000"],
.kobra-text-page a[style^="color: #333333"],
.kobra-text-page a[style^="color:#333333"],
.kobra-text-page [style^="color: #0000ff"],
.kobra-text-page [style^="color:#0000ff"] {
	color: var(--kobra-sky) !important;
}

/* The one deliberate colour on either page: "Podpora ledního hokeje žen z.s."
   is set in #008000, a green picked to stand out on white. It was chosen to
   emphasise, not to be that particular green — it is the name to search for
   in Givt, so it does need to stand out. Repainted in the palette's own
   accent instead of left as a colour that belongs to no part of this design.
   Given a chip treatment further down. */
.kobra-text-page [style^="color: #008000"],
.kobra-text-page [style^="color:#008000"],
.kobra-text-page [style*="; color: #008000"] {
	color: var(--kobra-yellow) !important;
}

/* ==========================================================================
   A dead background photo from the old server (v0.73.1)
   --------------------------------------------------------------------------
   The "TĚŠÍME SE NA TEBE!" column on Nábor carries, from the page builder's own
   `css=` attribute:

       background-image: url(http://51.124.195.18/…/SMALL-ICE.jpg) !important

   — a raw IP, the site's previous server. The user reported it as "a strange
   white ice you can't read the text on", which is the giveaway that **it still
   loads for a visitor**: the page is served by this stack but the image is
   fetched by the browser, straight off the old host. So it is not a broken
   image, it is a pale photograph under ice-coloured text.

   She asked for no background at all — the column reads fine on the page's own
   ink, and nothing else on these pages is a framed slab.

   Same declaration and the same fix as the coaching-staff page, where it sits in
   staff.css; that file loads only on pages carrying `[staff_profile]`, so Nábor
   needed its own copy. Checked before writing this: `background-image` in a
   `css=` attribute exists on exactly three pages — Realizační tým, Nábor and one
   untitled draft — so this rule reaches Nábor and nothing else.

   Matched on the attribute rather than the generated class name, because
   WPBakery regenerates `vc_custom_…` on every save of the row. `!important`
   because theirs is important: nothing else can beat an important declaration. */
.kobra-text-page [class*="vc_custom_"] {
	background-image: none !important;
}

/* ==========================================================================
   Headings (vc_custom_heading)
   --------------------------------------------------------------------------
   text-align and font-size arrive as inline styles from the page builder and
   are deliberately left alone — those are the editor's decisions and would
   need !important to override, which would then be impossible to change back
   from wp-admin. Only the things Splash gets wrong on a dark background are
   touched: colour, weight and spacing.
   ========================================================================== */
.kobra-text-page .vc_custom_heading {
	font-family: 'Bricolage Grotesque', sans-serif !important;
	font-weight: 800;
	line-height: 1.18;
	letter-spacing: 0.01em;
	color: var(--kobra-ice);
	margin: 0 0 20px;
}

/* h2 is what every one of these pages uses for a section title. Kept
   uppercase where the copy already is, rather than forced. */
.kobra-text-page h2.vc_custom_heading {
	font-size: 27px;
}

/* One stray inline size, normalised — and **only** that one value.
   "Naši sponzoři" on Sponzoring carries an inline `font-size: 25px` while the
   three other headings on the page carry none, so it sat 2px off among them.
   That is a leftover from whoever built the row, not a decision about that
   heading, and it was visible.

   A blanket `font-size: 27px !important` was written first and was wrong:
   **O týmu and Stadion set their h2 to 45px inline**, a deliberate display size,
   and it crushed both to 27px — two pages that have not been reviewed yet,
   broken by a rule aimed at a third. Matching the exact declaration instead
   normalises the leftover and leaves real choices alone. Same technique as the
   legacy-colour block above, for the same reason.

   The inline 25px is still in the page content and wants deleting in the
   editor; this only stops it showing until then.

   (Worth a look when those two pages come up: a 45px h2 now sits directly under
   the injected 46px page title, which may make one of them redundant.) */
.kobra-text-page h2.vc_custom_heading[style*="font-size: 25px"],
.kobra-text-page h2.vc_custom_heading[style*="font-size:25px"] {
	font-size: 27px !important;
}

.kobra-text-page .wpb_text_column h3,
.kobra-text-page .wpb_text_column h4,
.kobra-text-page .wpb_text_column h5 {
	font-family: 'Bricolage Grotesque', sans-serif;
	font-weight: 700;
	color: var(--kobra-ice);
	line-height: 1.3;
	margin: 0 0 16px;
}

/* The display callout — see the scale above. Kept at the 30px it was already
   rendering at, but declared rather than inherited from Splash, so the next
   person can see it is intended. */
.kobra-text-page .wpb_text_column h3 {
	font-size: 30px;
}

.kobra-text-page .wpb_text_column h4 {
	font-size: 20px;
}

/* Kontakty opens on an h5 ("Jsme k zastižení téměř nepřetržitě") used as a
   kicker rather than as a heading, so it gets the design system's eyebrow
   treatment.

   `!important` is against **our own redesign.css**, which paints bare `h5`
   `--kobra-ice !important` site-wide. An important declaration on a type
   selector outranks any non-important rule however long, so the sky colour
   was silently discarded and the kicker rendered as ordinary ice text. Same
   trap that kept the calendar's and match page's table captions ice for
   several versions before anyone noticed. */
.kobra-text-page .wpb_text_column h5 {
	font-size: 15px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	color: var(--kobra-sky) !important;
}

/* ==========================================================================
   Separators
   --------------------------------------------------------------------------
   vc_separator ships `vc_sep_color_grey`, a mid grey that reads as a scratch
   on navy. Repainted to the palette's hairline. The border lives on
   .vc_sep_line, not on the wrapper.
   ========================================================================== */
/* `!important` and a four-class selector, both needed. styles.css declares
   `.vc_separator.vc_sep_color_grey .vc_sep_line` at (0,3,0) **with
   `!important`** — importance outranks specificity outright, so a longer
   selector alone left the line at #e6e6e6, a light grey scratch across the
   navy. Matching through .vc_sep_holder rather than the colour class keeps
   this working if an editor picks a different separator colour. */
.kobra-text-page .vc_separator .vc_sep_holder .vc_sep_line {
	border-color: var(--kobra-line) !important;
}

.kobra-text-page .vc_separator {
	margin: 8px 0;
}

/* ==========================================================================
   Buttons (vc_btn3)
   --------------------------------------------------------------------------
   The page builder's buttons come in a matrix of style and colour classes —
   these two pages alone use `style-3d` + `color-black` and `style-modern` +
   `color-success`, i.e. a fake-embossed black button next to a flat green
   one, neither of which is in this palette.

   Rather than restyle each combination, every vc_btn3 is reset to the site's
   own .kobra-btn shape and then split two ways by intent:

     success / primary / warning  ->  yellow, the affirmative action
     everything else              ->  ghost, the secondary action

   which on Sponzoring gives "Získat pomocníka Givt.cz" the primary and "Jak
   používat Givt?" the secondary, matching what those two buttons actually do.
   The mapping is by meaning, not by page, so it holds for the remaining text
   pages without further work.

   `info` was in the yellow list until v0.50.1 and was moved to ghost at the
   user's request. It is used on exactly one thing site-wide — the season
   links on the four Soutěže pages (1. Liga žen and 2. Liga žen three each,
   AHL two, Přátelská utkání four) — checked across every published post
   before the move, so nothing else shifted. Those are peer links into a
   calendar, not competing calls to action, and three or four solid yellow
   buttons stacked together left no primary for the eye to find. `info` also
   means "informational" in the builder's own vocabulary, so mapping it to
   the affirmative action was the wrong reading to begin with.

   `success` deliberately stays yellow: it is Sponzoring's "Získat pomocníka
   Givt.cz", the one genuine call to action on the text pages, plus the same
   button on the two Givt articles.

   Selector weight: WPBakery's own rules are as specific as
   `.vc_btn3.vc_btn3-style-3d.vc_btn3-color-black` (0,3,0). These lead with
   the body class and the element, `.kobra-text-page a.vc_general.vc_btn3`
   (0,3,1), so they win without !important.
   ========================================================================== */
.kobra-text-page a.vc_general.vc_btn3 {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	padding: 14px 26px;
	border-radius: 3px;
	font-family: 'Bricolage Grotesque', sans-serif;
	font-weight: 700;
	font-size: 13px;
	line-height: 1;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	border: 1.5px solid transparent;
	text-decoration: none;
	top: auto;
	transition: transform .18s ease, box-shadow .18s ease, background .18s ease,
	            color .18s ease, border-color .18s ease;
}

/* ---------- Why the paint properties carry !important ----------
   Layout is won on specificity alone: WPBakery sizes buttons through
   `.vc_btn3.vc_btn3-size-lg` at (0,2,0), which the selector above beats at
   (0,3,1). Colour is not — it combines style, colour *and* size into chains
   like `.vc_btn3.vc_btn3-color-black.vc_btn3-style-3d.vc_btn3-size-lg` at
   (0,4,0), which outranks it. Chasing that with a longer selector would mean
   guessing at every combination the builder can emit across six pages.

   Those rules carry no `!important` of their own, so a single one here wins
   outright — the same documented exception as the match page's scoreboard and
   the player profile's details list. Confirmed by reading the winning rule
   rather than assumed: shipped without it, the "Jak používat Givt?" button
   kept the 3d style's `rgb(14,14,14) 0 5px 0` extruded shadow under an
   otherwise correct ghost button. */

/* Ghost is the default, so any colour class not listed below lands here. */
.kobra-text-page a.vc_general.vc_btn3 {
	background-color: transparent !important;
	background-image: none !important;
	color: var(--kobra-ice) !important;
	border-color: rgba(234, 241, 248, 0.4) !important;
	box-shadow: none !important;
}

/* Both buttons must lift on hover, not one lift and the other sink.
   The `3d` style presses its button *down* on hover —
   `.vc_btn3.vc_btn3-color-black.vc_btn3-style-3d.vc_btn3-size-lg:hover
   { top: 3px }` at (0,5,1) — which outranked a `top: auto` written at (0,4,2),
   so the ghost button dropped 3px while the yellow one rose 2px. Two buttons
   side by side moving opposite ways.

   `top` therefore carries `!important` (their rule has none) and the same
   `translateY(-2px)` as the primary is applied here, so the pair moves as one.
   No shadow on the lift: the primary's is yellow-tinted and belongs to a
   yellow button. */
.kobra-text-page a.vc_general.vc_btn3:hover,
.kobra-text-page a.vc_general.vc_btn3:focus {
	background-color: transparent !important;
	color: var(--kobra-sky) !important;
	border-color: var(--kobra-sky) !important;
	box-shadow: none !important;
	top: auto !important;
	transform: translateY(-2px);
}

.kobra-text-page a.vc_general.vc_btn3.vc_btn3-color-success,
.kobra-text-page a.vc_general.vc_btn3.vc_btn3-color-primary,
.kobra-text-page a.vc_general.vc_btn3.vc_btn3-color-warning {
	background-color: var(--kobra-yellow) !important;
	background-image: none !important;
	color: #101a08 !important;
	border-color: var(--kobra-yellow) !important;
	box-shadow: none !important;
}

.kobra-text-page a.vc_general.vc_btn3.vc_btn3-color-success:hover,
.kobra-text-page a.vc_general.vc_btn3.vc_btn3-color-primary:hover,
.kobra-text-page a.vc_general.vc_btn3.vc_btn3-color-warning:hover {
	background-color: var(--kobra-yellow) !important;
	color: #101a08 !important;
	transform: translateY(-2px);
	box-shadow: 0 10px 28px -6px rgba(241, 232, 19, 0.45) !important;
}

/* The icon sat 8px above the label in both buttons, and `position: static` was
   only half the fix.
   WPBakery centres this icon the absolute-positioning way: `position: absolute;
   top: 50%; transform: translateY(-8px)` — half its own 16px height. Taking it
   out of absolute positioning made `top: 50%` inert but left the transform
   applying to a static box, so the icon was simply shifted 8px up. Measured
   exactly that: icon midpoint 8px above the button's.

   With the transform cleared, the button's own `display: inline-flex;
   align-items: center` centres it, so nothing here has to know the icon's
   height. `vertical-align` is reset too — it is `top` in Splash's rule and
   would matter again if the flex context ever went away. */
.kobra-text-page a.vc_general.vc_btn3 .vc_btn3-icon {
	position: static;
	top: auto;
	transform: none;
	vertical-align: middle;
	margin: 0;
	font-size: 15px;
	line-height: 1;
}

/* Centred buttons are stacked by the builder as one container each, so two
   in a row arrive as two full-width blocks with a gap between them. Pulled
   together into a single centred pair that wraps on a phone. */
.kobra-text-page .vc_btn3-container {
	margin-bottom: 12px;
}

/* ---------- The site's own .kobra-btn needs rescuing on these pages ----------
   redesign.css declares `.kobra-btn { display: inline-flex }` at (0,1,0), and
   `.hockey a { display: inline }` in hockey.css is (0,1,0)+(0,0,1) = (0,1,1),
   so on any page where a .kobra-btn is an anchor it loses. Both buttons this
   file injects — the map link on Kontakty and the sponsor CTA — came out as
   inline text: vertical padding does nothing on an inline box, so they read as
   underlined words rather than buttons.

   `gap` is restated with the display value on purpose. It only applies to
   flex and grid containers, so with display forced back to inline it was
   silently inert — the same dead `gap` that made the squad tabs' labels sit
   flush against their counts. Restoring the display value is the fix, not a
   bigger gap.

   Elsewhere in this theme .kobra-btn is used on elements the parent doesn't
   attack (the hero's own anchors sit outside .hockey a's reach, the roster's
   tabs are real buttons), which is why this only surfaces now. */
.kobra-text-page a.kobra-btn {
	display: inline-flex;
	align-items: center;
	gap: 10px;
}

/* ==========================================================================
   Panel rows — tagged by pages.js
   --------------------------------------------------------------------------
   Bootstrap columns are floats, so side-by-side blocks end up different
   heights and the page looks ragged. Grid on the row fixes that, but it is
   deliberately not applied to every .vc_row: last session `display: flex` on
   a clearfix row promoted its ::before/::after to flex items and a gap shoved
   a heading 20px sideways. So pages.js tags only rows it has checked — two or
   more columns, all of them carrying real content — and the grid is scoped to
   that class.

   The pseudo-elements still have to be neutralised, since grid would promote
   them exactly the same way, and the columns need their float and percentage
   width removed or they would take half of their own grid track.
   ========================================================================== */
/* `.vc_row.kobra-panel-row` at (0,3,0), not `.kobra-panel-row` at (0,2,0):
   WPBakery declares `.vc_row.vc_row-flex { display: flex }` at (0,2,0) too,
   and js_composer.min.css loads after this file, so an equal-specificity rule
   loses on source order. The Givt row carries vc_row-flex (its
   content_placement is "middle"), so it stayed flex and the panels never
   equalised — while the row without that class did become a grid, which made
   it look like the rule worked on one row and not the other. */
.kobra-text-page .vc_row.kobra-panel-row {
	display: grid;
	/* `minmax(0, 1fr)`, not `1fr`. A bare `1fr` is `minmax(auto, 1fr)`, so a
	   track can never shrink below its own content's min-content width — one
	   wide image or one long word and the tracks stop being equal and push the
	   row past its container. Measured on Sponzoring at 390px before this:
	   279px + 114px on one row and 212px + 225px on the other, against 360px of
	   available width. `minmax(0, …)` lets them share honestly. */
	grid-template-columns: repeat(var(--kobra-panel-cols, 2), minmax(0, 1fr));
	gap: 26px;
	align-items: stretch;
	margin-bottom: 30px;
	/* WPBakery pulls every `.vc_row-fluid` 15px into the container's padding
	   (30px when the row carries `vc_column-gap-30`) and gives that space back
	   as column padding — which we zero, because the grid supplies its own gap.
	   Left alone, panels start 15 or 30px left of the page title instead of
	   lining up with it, and two panel rows on one page disagree with each
	   other: measured 33 and 48 against the title's 63. On a phone the same
	   margins push the row past the viewport edge. */
	margin-left: 0;
	margin-right: 0;
}

.kobra-text-page .vc_row.kobra-panel-row::before,
.kobra-text-page .vc_row.kobra-panel-row::after {
	display: none;
}

.kobra-text-page .kobra-panel-row > .wpb_column {
	float: none;
	width: auto;
	padding-left: 0;
	padding-right: 0;
}

.kobra-text-page .kobra-panel-row > .wpb_column > .vc_column-inner {
	height: 100%;
	padding: 0;
}

.kobra-text-page .kobra-panel-row > .wpb_column > .vc_column-inner > .wpb_wrapper {
	height: 100%;
	display: flex;
	flex-direction: column;
	padding: 30px 32px;
	border-radius: 4px;
	background-color: var(--kobra-navy);
	background-image: var(--kobra-ice-texture);
	background-repeat: repeat;
	border: 1px solid var(--kobra-line);
}

/* Buttons sit at the bottom of a panel, so two panels of unequal text length
   still line their actions up. */
.kobra-text-page .kobra-panel-row .vc_btn3-container:last-child {
	margin-top: auto;
	margin-bottom: 0;
}

/* Body copy on these pages is justified.
   It started scoped to the panels, because that was the text the user asked
   about first; she then asked for O týmu's unframed prose to be justified too,
   and one rule for all body copy is both what she wants and simpler than two
   that have to be kept in step.

   Justified Czech needs `hyphens: auto` to avoid rivers of white space between
   long words. That is already on the base paragraph rule above, and it needs the
   document's `lang` attribute or it silently does nothing (these pages carry
   `lang="cs"`).

   Two things are deliberately not caught, and neither needs an exception
   written for it:

   - **Centred paragraphs stay centred.** Sponzoring's thank-you block carries
     `text-align: center` as an inline style from the editor, which outranks
     this. Verified — it still computes `center`.
   - **The CTA text stays centred**, because it is not inside a
     `.wpb_text_column` — it is injected, and has its own rule. */
/* On the block, not only on its paragraphs — `text-align` inherits, so this is
   what catches copy that was never wrapped in a `<p>` at all.
   AHL Soutěž žen is written as three bare text nodes inside the widget's own
   `<div>`, with no paragraph tags anywhere, so a rule targeting `p` and `li`
   never reached it and that page alone stayed ragged while the other three
   justified. Same shape as the news listing's card excerpt, which was a bare
   text node inside `.content` and missed the `.content p` rule for the same
   reason.
   Single-line headings inside the block inherit it harmlessly — justification
   has no effect on a last line. */
.kobra-text-page .wpb_text_column,
.kobra-text-page .wpb_text_column p,
.kobra-text-page .wpb_text_column li {
	text-align: justify;
}

/* Paragraphs the editor explicitly set to **left** need `!important`, because an
   inline style beats any author rule. All three paragraphs on Historie carry
   `style="text-align: left;"` — a leftover from pasting, not a decision about
   those paragraphs — so the rule above silently did nothing there and the text
   stayed ragged while every other page justified.

   Matched on the exact value rather than blanket-importanting `text-align`,
   which would also override the **centred** paragraphs on Sponzoring. Those are
   inline too, and they are a real choice. Same technique as the inline font
   sizes and the legacy colours. */

/* **Headings are never justified.** The copy blocks carry `text-align: justify`
   and it inherits, so a heading that wraps to two lines had its first line
   stretched edge to edge — at the user's instruction: "zarovnání do bloku je
   fajn, ale tam, kde je to nadpis, to musí být zarovnané doleva".

   No `!important`, deliberately: a heading the editor centred on purpose
   carries an inline `text-align`, which still wins, so this only reaches the
   headings that were inheriting the justification rather than choosing it. */
.kobra-text-page .wpb_text_column h1,
.kobra-text-page .wpb_text_column h2,
.kobra-text-page .wpb_text_column h3,
.kobra-text-page .wpb_text_column h4,
.kobra-text-page .wpb_text_column h5,
.kobra-text-page .wpb_text_column h6 {
	text-align: left;
}

.kobra-text-page .wpb_text_column p[style*="text-align: left"],
.kobra-text-page .wpb_text_column p[style*="text-align:left"] {
	text-align: justify !important;
}

/* The mobile counterpart of the rule above used to hand these paragraphs back
   to `left` below 767px. Removed for the same reason: justified on desktop now
   means justified on a phone as well. */

/* A panel whose only content is an image gets **no panel at all** — the image
   is left to be an image.

   The first version gave it a light plate to sit on, on the reasoning that
   these PNGs have solid white backgrounds (they do — verified pixel by pixel)
   and so cannot sit on navy. But the plate is stretched to the height of the
   text panel beside it, and the Givt infographic is 603px tall against that
   panel's 511 — so it became a 557x511 light box holding a 252px image, with
   a large empty light margin above and below and the image's own white inside
   a slightly different off-white. Two tones and a border where the user just
   wanted the picture, and she asked for it removed.

   The white background is still there, because it is baked into the file. That
   is fine: without the plate it reads as one clean white image rather than a
   white image inside a light frame.

   `.kobra-panel-light` is set by pages.js, which checks what the column
   actually holds; doing it in CSS would need :has() and would silently drop
   the whole rule on browsers without it. */
.kobra-text-page .kobra-panel-row > .kobra-panel-light > .vc_column-inner > .wpb_wrapper {
	background: none;
	border: 0;
	padding: 0;
	justify-content: center;
	align-items: center;
}

.kobra-text-page .kobra-panel-row > .kobra-panel-light .wpb_single_image {
	margin: 0;
	width: 100%;
}

.kobra-text-page .kobra-panel-row > .kobra-panel-light img {
	display: block;
	width: 100%;
	height: auto;
	/* 4px, matching every other rounded surface in this design. This rule is
	   (0,4,1) and out-specifies the general image rule further down, so leaving
	   it at 2px meant the panel images were rounded differently from the rest of
	   the page for no reason. */
	border-radius: 4px;
}

/* ==========================================================================
   Sponsor wall — injected by pages.js, replaces [stm_carousel]
   --------------------------------------------------------------------------
   Why replaced rather than restyled: four of the five logos render with an
   empty src, because the shortcode asks for a 1200x1200 crop of images that
   are 1280x720 (see kobra_sponsor_logos for the full mechanism). Fixing that
   in place would mean editing page content, which does not travel in the
   theme zip. Five logos also fit one row at every width this site is used
   at, so the carousel was paging through nothing.

   The tiles are light on purpose. Four of the five logo PNGs have solid
   white backgrounds — checked pixel by pixel, not guessed — so they cannot
   sit on navy without showing their own white box. The fifth (HejdukSport)
   is transparent and mid-dark, so it reads on a light tile too.
   ========================================================================== */
/* Hidden here as well as replaced in JS, mirroring the script's own match.
   pages.js runs at DOMContentLoaded, which is late enough to paint first: the
   broken carousel would flash one logo and four empty boxes before being
   swapped out. Same bet the homepage already makes for the nav and the hero,
   which are also JS-injected — if the script fails, the block is missing
   rather than wrong. */
.kobra-text-page .stm-image-carousel {
	display: none;
}

.kobra-sponsor-wall {
	margin: 0 0 34px;
}

.kobra-sponsor-wall-eyebrow {
	margin: 0 0 6px;
	text-align: center;
}

/* The label the editor put on the widget, reinstated — see buildSponsorWall.
   Section-heading size, like every other h2 on these pages. */
.kobra-text-page h2.kobra-sponsor-wall-title {
	margin: 0 0 20px;
	font-family: 'Bricolage Grotesque', sans-serif;
	font-weight: 800;
	font-size: 27px;
	line-height: 1.18;
	text-align: center;
	color: var(--kobra-ice);
}

.kobra-sponsor-grid {
	display: grid;
	/* auto-fit rather than a fixed five: a sponsor added or removed in
	   wp-admin reflows instead of leaving a hole or overflowing. */
	grid-template-columns: repeat(auto-fit, minmax(min(150px, 100%), 1fr));
	gap: 14px;
}

/* `a.kobra-sponsor-tile`, not the class alone — **third time** `.hockey a`
   (0,1,1) has beaten a one-class rule in this file, after the map button and
   the social links. Here it cost the centring: `display: flex` lost, the tile
   computed to `block`, and `justify-content`/`align-items` are inert on a block
   container — so both declarations were present, correct and doing nothing, and
   every logo sat flush against the left padding edge. Measured 27px off centre.

   Any rule in this file that styles an anchor needs the element in the
   selector. Assume `.hockey a` wins otherwise. */
.kobra-text-page a.kobra-sponsor-tile {
	display: flex;
	align-items: center;
	justify-content: center;
	min-height: 120px;
	padding: 16px 18px;
	border-radius: 4px;
	background: #f4f7fb;
	border: 1px solid rgba(7, 27, 48, 0.1);
	transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}

.kobra-text-page a.kobra-sponsor-tile:hover {
	transform: translateY(-3px);
	border-color: var(--kobra-sky);
	box-shadow: 0 12px 26px -10px rgba(7, 27, 48, 0.55);
}

/* contain, not cover: these are logos of wildly different aspect ratios
   (1280x720 next to 1123x794) and cropping one would cut its wordmark.

   The height cap is what sizes them, not the width: at 92px a 16:9 logo comes
   out 164px wide inside a 181px content box, so it nearly fills the tile with a
   little air left. It was 68px, which left 56px of the tile's width unused and
   made the logos look small in their own frames. `max-width: 100%` still binds
   on narrow viewports, where the grid's tracks shrink below that. */
.kobra-sponsor-tile img {
	display: block;
	max-width: 100%;
	max-height: 92px;
	width: auto;
	height: auto;
	object-fit: contain;
}

/* ==========================================================================
   Sponzoring — the thank-you statement
   --------------------------------------------------------------------------
   The closing paragraphs already sit between two vc_separators in the page
   content, which is the right structure for a pull quote; it just wasn't
   being treated as one. Tagged by pages.js so the treatment applies to that
   block and not to every centred paragraph on the site.
   ========================================================================== */
.kobra-text-page .kobra-statement {
	max-width: 780px;
	margin: 0 auto;
	padding: 6px 0 2px;
}

/* Body size and body colour, like every other paragraph. This block used to be
   18px mist with a 19px ice last line — three deviations from the scale in one
   place, none of them meaning anything. Its prominence comes from being
   centred, narrow and sat between two rules, which is enough; the closing line
   is already `<strong>` in the content, so it emphasises itself. */
.kobra-text-page .kobra-statement p {
	font-size: 17px;
	line-height: 1.8;
	color: var(--kobra-ice);
}

.kobra-text-page .kobra-statement p:last-child {
	margin-bottom: 0;
}

/* ==========================================================================
   Call to action — injected by pages.js
   --------------------------------------------------------------------------
   Sponzoring asks for new sponsors and then gives no way to respond: the
   [stm_socials] that closes the page renders nothing at all on this site.
   ========================================================================== */
.kobra-cta {
	margin: 34px 0 10px;
	padding: 34px 36px;
	border-radius: 4px;
	text-align: center;
	background-color: var(--kobra-navy-2);
	background-image: var(--kobra-ice-texture);
	background-repeat: repeat;
	border: 1px solid var(--kobra-line);
}

/* Section-heading size, like the h2s it sits below — it was 25px, a fourth
   heading size on the same page. line-height is stated because this is a <p>,
   so it would otherwise inherit a 24px line under a 27px letter. */
.kobra-cta-title {
	margin: 0 0 10px;
	font-family: 'Bricolage Grotesque', sans-serif;
	font-weight: 800;
	font-size: 27px;
	line-height: 1.18;
	text-transform: uppercase;
	color: var(--kobra-ice);
}

/* Body size and body colour. This was 16px mist, which is what the user
   noticed: the only paragraph on the page in a different colour from every
   other paragraph, inside the block asking people to get in touch — the last
   thing that should read as secondary. */
.kobra-cta-text {
	max-width: 520px;
	margin: 0 auto 22px;
	font-size: 17px;
	line-height: 1.7;
	color: var(--kobra-ice);
}

/* ==========================================================================
   O týmu (and Stadion) — the second-title problem, and a white band
   --------------------------------------------------------------------------
   Both pages open with an `<h2>` the editor set to 45px inline. That was fine
   when the page had no title at all; since v0.44.0 it does, at 46px, so the two
   sat stacked a few pixels apart in near-identical sizes with no hierarchy
   between them — "O TÝMU" then "Od roku 1987", "STADION" then "Zimní stadion
   Kobra v Braníku".

   Neither line is redundant — each says something the title does not — so they
   become subtitles rather than being hidden. Matched on the exact inline value
   the way the 25px heading is, so a heading the editor sizes deliberately for
   some other purpose is untouched.
   ========================================================================== */
.kobra-text-page h2.vc_custom_heading[style*="font-size: 45px"],
.kobra-text-page h2.vc_custom_heading[style*="font-size:45px"] {
	font-size: 20px !important;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	/* `!important` on the colour is against **our own redesign.css**, which
	   paints bare headings `--kobra-ice !important` site-wide. Without it the
	   subtitle came out ice — the same colour as the title above it, so the two
	   still read as one block. Same trap as the Kontakty kicker and the table
	   captions. */
	color: var(--kobra-sky) !important;
	margin: 0;
	/* Left, at the user's request, and it is the coherent choice: the page title
	   directly above is left-aligned, so a centred subtitle under it sat off the
	   same axis. This is the one place text-align is overridden — the editor sets
	   `text-align: center` inline on both these headings, and an inline style
	   needs `!important` to beat. Everywhere else in this file the editor's
	   alignment is still left alone. */
	text-align: left !important;
}

/* A full-bleed **white** band, on a navy page.
   The sponsor row on O týmu carries `background-color: #ffffff !important` in
   its WPBakery custom CSS, plus 107px of bottom padding, and `stretch_row`
   makes it span the viewport — so the page ended on a 1265x368 white slab. Ours
   needs `!important` too, since theirs has it.

   `[class*="vc_custom_"]` rather than the generated class name, because
   WPBakery regenerates that on every save of the row — the same reason the
   coaching-staff page's dead background image is targeted this way. */
.kobra-text-page .vc_row[class*="vc_custom_"].vc_row-has-fill {
	background-color: var(--kobra-navy) !important;
	background-image: var(--kobra-ice-texture) !important;
	background-repeat: repeat !important;
	padding-bottom: 40px !important;
}

/* The blockquote holds the best copy on the page — every woman can try hockey,
   first training free, players coming back after maternity leave — and Splash
   renders it as 15px near-black (#151515) behind a 3px **red** left border. The
   text itself was already readable, because the paragraph inside it picks up
   the body rule; the frame around it was the problem.
   Given the treatment the words deserve: a yellow rule and a size between body
   and the callout.

   No panel behind it, either. It first got a faint inset, but once the column's
   own frame came off that inset was the only box left on the page's opening
   prose — the very thing the user asked to be rid of. The yellow rule is a quote
   marker rather than a frame, so it stays and carries the emphasis alone. */
.kobra-text-page .wpb_text_column blockquote {
	margin: 6px 0 22px;
	padding: 2px 0 2px 22px;
	border: 0;
	border-left: 3px solid var(--kobra-yellow);
	border-radius: 0;
	background: none;
	color: var(--kobra-ice);
	font-size: 17px;
}

.kobra-text-page .wpb_text_column blockquote p {
	font-size: 18px;
	line-height: 1.75;
	color: var(--kobra-ice);
	margin: 0;
}

/* The competitions panel — moved here by groupKickerBlocks().
   One frame, full width, below the text-and-photo row, with the two blurbs side
   by side. Before this they were stacked at the bottom of the left column,
   which made that column much taller than the photo beside it and buried two
   short parallel pieces of copy.

   auto-fit rather than a fixed two, so a third competition added in the editor
   flows into the same grid and stacks on a phone without a breakpoint.

   **`minmax(min(280px, 100%), 1fr)`, not `minmax(280px, 1fr)`** — and this is
   the same shape of bug as the `1fr` tracks on the panel rows. auto-fit does
   collapse to one column on a phone, but that one column keeps the 280px
   *minimum*, and inside this panel's 32px padding there is less than that to
   give: measured at 320px, the grid box was 224px wide and the track was still
   280, so every line of copy ran 56px past the panel and was clipped mid-word.
   That is what the user photographed as "na stránce O týmu přetéká text" —
   "hokejové" rendered as "hok" / "jové", with the missing letters cut off
   rather than wrapped.

   `min(280px, 100%)` keeps the two-column behaviour wherever there is room and
   lets the track shrink to the container when there is not. Applied to every
   auto-fit/auto-fill grid in the theme (11 of them) for the same reason —
   several were only safe by accident, and any of them can end up inside a
   padded panel. */
.kobra-kicker-panel {
	margin: 0 0 26px;
	padding: 30px 32px;
	border-radius: 4px;
	background-color: var(--kobra-navy);
	background-image: var(--kobra-ice-texture);
	background-repeat: repeat;
	border: 1px solid var(--kobra-line);
}

.kobra-kicker-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr));
	gap: 26px 40px;
}

/* The blocks arrive carrying the editor's own bottom margins, which inside a
   grid just add to the row gap unevenly — 20px on one, 22px on the other.

   `!important` because WPBakery writes per-block custom CSS that way: the page
   content literally contains
   `css=".vc_custom_1675171693743{margin-bottom: 20px !important;}"`, generated
   into a stylesheet of its own. A plain declaration here lost to it. */
.kobra-text-page .kobra-kicker-grid .wpb_text_column {
	margin-bottom: 0 !important;
}

.kobra-text-page .kobra-kicker-grid .wpb_text_column p:last-child {
	margin-bottom: 0;
}

/* Splash puts a grey box border on WPBakery images. Rounded and given a
   hairline in the palette instead, so the team photo reads as a photo rather
   than as a framed insert. */
.kobra-text-page .wpb_single_image .vc_single_image-wrapper {
	border: 0;
	border-radius: 4px;
	overflow: hidden;
}

.kobra-text-page .wpb_single_image img {
	border-radius: 4px;
}

/* ==========================================================================
   Stadion — the photo under the heading
   --------------------------------------------------------------------------
   Injected by pages.js into the empty images grid the page already carried. The
   shipped default is a generated placeholder, so it is meant to look like a
   graphic rather than a photograph until a real one replaces it.
   ========================================================================== */
/* Prose left, photo right — the user's layout. Two columns that collapse to one
   on a narrow screen, with the photo going *under* the text there rather than
   above it, because on a phone the facts are what you came for.
   `align-items: start` so the photo keeps its own height instead of stretching
   to match a long facilities list. */
.kobra-stadium-split {
	display: grid;
	grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
	gap: 30px 34px;
	align-items: start;
	/* The block that follows — "Doprava" and everything under it — is a sibling
	   of this grid, so the `gap` above never reaches it. Measured on a phone,
	   where the photo drops below the prose and lands directly against that
	   heading: figure bottom 868, heading top 868, i.e. no gap at all, which is
	   what the user reported as "nadpis Doprava je moc blízko obrázku". The
	   spacing belongs to this block rather than to the heading, so it holds
	   whatever the editor puts underneath. */
	margin-bottom: 40px;
}

@media (max-width: 900px) {
	.kobra-stadium-split {
		grid-template-columns: 1fr;
	}
}

.kobra-stadium-photo {
	margin: 0;
	/* Sticks to nothing and floats nowhere — it is a grid item here, and the
	   fallback path (no prose column found) puts it in normal flow where the
	   bottom margin matters. */
	position: relative;
}

.kobra-stadium-prose > *:last-child {
	margin-bottom: 0;
}

.kobra-stadium-photo img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: 4px;
	border: 1px solid var(--kobra-line);
}

.kobra-stadium-caption {
	margin: 10px 0 0;
	font-size: 13px;
	line-height: 1.5;
	text-align: center;
	color: var(--kobra-mist);
}

/* ==========================================================================
   Historie — the annual team photos
   --------------------------------------------------------------------------
   No year labels here. A version that printed each photo's year as a chip was
   built and dropped: **the year is printed inside the photographs
   themselves**, so the chip repeated what the picture already showed. The
   "letopočet" in several of the filenames was saying exactly that.
   ========================================================================== */
.kobra-text-page .stm-images-grid .stm-images-grid-single {
	overflow: hidden;
	border-radius: 4px;
}

.kobra-gallery-actions {
	text-align: center;
	margin-top: 6px;
}

/* The toggle replaces Splash's load-more wrapper, so it is a real <button> and
   needs the same rescue from `.hockey #wrapper button` that the squad tabs
   documented: an ID beats any number of classes, and styles.css puts
   `!important` on bare `button` backgrounds. */
.kobra-text-page #wrapper button.kobra-gallery-toggle {
	display: inline-flex;
	align-items: center;
	margin-top: 4px;
	background: transparent !important;
	color: var(--kobra-ice) !important;
	border: 1.5px solid rgba(234, 241, 248, 0.4);
	padding: 14px 26px;
	font-size: 13px;
}

.kobra-text-page #wrapper button.kobra-gallery-toggle:hover,
.kobra-text-page #wrapper button.kobra-gallery-toggle:hover:focus {
	color: var(--kobra-sky) !important;
	border-color: var(--kobra-sky);
}

/* Splash hangs a skewed red slab off every button as pseudo-elements; on a
   transparent one it shows through. Same removal as the roster tabs. */
.kobra-text-page #wrapper button.kobra-gallery-toggle::before,
.kobra-text-page #wrapper button.kobra-gallery-toggle::after {
	display: none;
}

/* ==========================================================================
   Kontakty
   ========================================================================== */

/* The page is built as a single 2/3 column with nothing beside it, so a third
   of the width was simply empty — the same thing the article detail did. With
   one column in the row, :only-child identifies it exactly and no :has() is
   needed. */
.kobra-text-page .vc_row > .vc_col-sm-8:only-child,
.kobra-text-page .vc_row > .vc_col-sm-9:only-child {
	width: 100%;
}

/* A row where some columns are empty and some are not — tagged by pages.js.
   On Kontakty the right-hand inner column holds an attribute-less
   [stm_contact_info] and an [stm_socials] that renders nothing, so the
   contact card was pinned to half the width with a blank half beside it.
   Grid over the surviving columns, with the same pseudo-element and float
   neutralising as .kobra-panel-row needs. */
.kobra-text-page .vc_row.kobra-row-collapsed {
	display: grid;
	/* minmax(0, …) and the zeroed side margins for the same reasons as
	   .kobra-panel-row above. */
	grid-template-columns: repeat(var(--kobra-row-cols, 1), minmax(0, 1fr));
	gap: 20px;
	margin-left: 0;
	margin-right: 0;
}

.kobra-text-page .vc_row.kobra-row-collapsed::before,
.kobra-text-page .vc_row.kobra-row-collapsed::after {
	display: none;
}

.kobra-text-page .kobra-row-collapsed > .wpb_column {
	float: none;
	width: auto;
	padding-left: 0;
	padding-right: 0;
}

.kobra-text-page .kobra-row-collapsed > .wpb_column.kobra-empty {
	display: none;
}

.kobra-text-page .stm-contact-info {
	padding: 28px 30px;
	border-radius: 4px;
	background-color: var(--kobra-navy);
	background-image: var(--kobra-ice-texture);
	background-repeat: repeat;
	border: 1px solid var(--kobra-line);
}

.kobra-text-page .stm-contact-info > .title {
	margin: 0 0 22px;
	font-family: 'Bricolage Grotesque', sans-serif;
	font-weight: 800;
	font-size: 13px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--kobra-sky);
}

/* ==========================================================================
   The contact card — label above value, three across
   --------------------------------------------------------------------------
   Laid out across the card rather than down it. Once the empty column beside
   it is collapsed the card runs the full page width, and three short values
   in a single column left most of that width blank beside a very tall card.
   auto-fit stacks them again on a phone with no second breakpoint.

   `padding-left` on the chip, not a gap: it reserves the icon's column, and
   the icon is taken out of flow so the label and the value it labels start on
   exactly the same x.

   ---------- Every rule in this block needs the long chain ----------
   hockey.css defends this widget harder than anything else on these two
   pages. Four separate rules here lost on a first attempt, and none of them
   looked wrong in this file:

     .hockey … .stm-single-contact .contact-label  (0,4,0)  #555, inline-block
     .hockey … .stm-single-contact i               (0,3,1)  #f53837, relative

   Routed through .stm-contact-info as well as .stm-contacts, these land at
   (0,5,0) and (0,4,1) — clear of hockey.css rather than tied on source order,
   which is the failure mode that silently killed the calendar's row hover.
   ========================================================================== */
/* Columns sized to their contents and centred as a group, rather than three
   equal tracks stretched from edge to edge of the card.

   `1fr` tracks were the first version and spread the three chips right across
   1078px, so the card read as three things pinned to the corners of a wide
   empty box. Simply capping the grid's width and centring it does not work
   either: the address value is 284px, so a track narrower than ~318px wraps it
   onto a second line — and at this card width equal tracks that keep the
   address on one line already fill almost the whole card, so there would be
   nothing left to centre.

   **Three equal tracks across the full width of the card — settled twice, do not
   offer either alternative again.** Both have been built and shown to the user:
   content-sized columns *centred as a group* (v0.43.2) and content-sized columns
   *distributed edge to edge* with `justify-content: space-between` (v0.76.4, at
   her own request — the phone's label landed exactly on the card's centre and the
   e-mail flush right). She looked at each and asked for this one back. It is a
   settled decision, not an oversight.

   The complaint that prompted the second attempt is worth understanding, because
   it is accurate: each chip's text starts at its own track's left edge, so the
   phone's label sits 137px left of the card's centre and the e-mail's value ends
   160px short of the right edge. The content is 318 / 178 / 207 px in 342px
   tracks — 375px of slack, inside the chips rather than between them. That is the
   trade this layout makes.

   auto-fit also means the same rule stacks the rows on a phone with no second
   breakpoint, and a track of 342px keeps the 284px address value on one line. */
.kobra-text-page .stm-contacts {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));
	gap: 22px 26px;
}

/* The long chain again, and here it is `margin` that needs it. hockey.css
   nudges the e-mail row specifically —
   `.hockey .stm-contacts .stm-single-contact.stm-email { margin-top: 2px }`
   at (0,4,0) — which made sense in Splash's own stacked layout, where that
   row's envelope needed lining up with the ones above it. In a grid it just
   drops the whole e-mail chip 2px below the other two, so its label and value
   sat 2px lower than their neighbours'. There is a 6px bottom margin on all
   three as well, which added to the grid's own row gap. */
.kobra-text-page .stm-contact-info .stm-contacts .stm-single-contact {
	position: relative;
	margin: 0;
	padding: 0 0 0 34px;
}

/* Out of the text flow. hockey.css sets this icon `position: relative`, and
   with a shorter selector that won — so the icon sat inline, took 33px of the
   line, and pushed the label that far right of its own value. The label ended
   up indented relative to the text it labels, which is the wrong way round
   and was the first thing visible in the screenshot. */
.kobra-text-page .stm-contact-info .stm-contacts .stm-single-contact > i {
	position: absolute;
	top: 2px;
	left: 0;
	width: 22px;
	font-size: 15px;
	text-align: center;
	color: var(--kobra-yellow);
}

/* `display: block` is the point of this rule, not the colour.
   hockey.css makes the label `inline-block` at (0,4,0), so it shared a line
   with its value wherever there was room — phone and e-mail came out as
   "TELEFON +420 …" on one line while the address, being longer, wrapped its
   value onto a second. Three chips, two different shapes.

   Forced to a block so the layout is the same in all three regardless of
   value length: labels on one line, values on the next, and the values line
   up with each other across the card. */
.kobra-text-page .stm-contact-info .stm-contacts .stm-single-contact .contact-label {
	display: block;
	margin: 0 0 6px;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--kobra-mist);
}

/* Also forced to a block, and for the same reason — Splash ships it
   inline-block, which is the other half of why the label sat beside it. */
.kobra-text-page .stm-contact-info .stm-contacts .stm-single-contact .contact-value {
	display: block;
	margin: 0;
	font-family: 'Bricolage Grotesque', sans-serif;
	font-weight: 700;
	font-size: 17px;
	line-height: 1.4;
	color: var(--kobra-ice);
}

/* The e-mail row's value is an anchor, so it also has `.hockey a` (0,1,1) to
   clear — the trap that turned the social icons black. */
.kobra-text-page .stm-contact-info .stm-contacts .stm-single-contact .contact-value a {
	color: var(--kobra-ice);
	text-decoration: none;
}

.kobra-text-page .stm-contact-info .stm-contacts .stm-single-contact .contact-value a:hover {
	color: var(--kobra-yellow);
}

/* Two blocks on this page have no business being visible, both of them
   artifacts of how the page was assembled rather than anything anyone chose:

   - `.stm-url` is a website row whose value is the site's own address and
     whose href Splash renders empty, so it is a link to nowhere on the
     contact page of the very site it names. It also has no label, unlike
     every other row.
   - the second [stm_contact_info] on the page was added with no attributes
     at all and renders as an empty bordered box.

   Both want deleting in the editor; hidden here so the page reads correctly
   before anyone gets to that. .kobra-empty is set by pages.js, which can
   check for genuinely-empty contents without :has(). */
.kobra-text-page .stm-single-contact.stm-url,
.kobra-text-page .stm-contact-info.kobra-empty {
	display: none;
}

/* A grid item in the address column, centred in its own track.
   `grid-column: 1` is what keeps it there: with auto-fit tracks, auto-placement
   would otherwise drop it into the fourth track beside the e-mail rather than
   below the address. The row is deliberately left to auto-placement — pinning
   `grid-row: 2` is only safe while the flow is `row`, and it was what broke the
   content-sized-column attempt. */
.kobra-text-page .stm-contacts .kobra-contact-actions {
	grid-column: 1;
	justify-self: center;
	margin-top: 6px;
}

/* Social links: the "Sledujte nás" block was removed in v0.63.0. The footer
   carries the same two icons on every page, so on Kontakty — the only text page
   that had it — it was the same thing twice. See the note in pages.js. */

/* ==========================================================================
   Spacing
   --------------------------------------------------------------------------
   stm_spacing reserves fixed pixel heights that were tuned for the old
   layout; the first one on every page sat above a heading that did not exist
   and now pushes the masthead down for no reason.
   ========================================================================== */
.kobra-text-page .vc_row:first-child .stm-spacing {
	display: none;
}

.kobra-text-page .wpb-content-wrapper > .vc_row {
	margin-bottom: 26px;
}

.kobra-text-page .wpb-content-wrapper > .vc_row:last-child {
	margin-bottom: 0;
}

/* Room above a row of buttons — tagged by pages.js.
   On the Soutěže pages the season buttons sat 26px under the panel above them:
   the generic row margin and nothing more, because the `vc_separator` row
   between the two measures **zero height**. That close to a framed block they
   read as part of it.

   56px, not 26 + 30. Adjacent siblings' vertical margins collapse, so the gap is
   `max(previous margin-bottom, this margin-top)` — adding 30 here would have
   produced 30px, not 56, and looked like the rule barely applied. */
.kobra-text-page .vc_row.kobra-button-row {
	margin-top: 56px;
}

@media (max-width: 767px) {
	.kobra-text-page .vc_row.kobra-button-row {
		margin-top: 34px;
	}
}

/* A row left completely empty by a shortcode that rendered nothing — the
   trailing [stm_socials] row on Sponzoring is exactly this — otherwise still
   contributes its margins. Tagged by pages.js. */
.kobra-text-page .vc_row.kobra-empty {
	display: none;
}

/* ==========================================================================
   Responsive
   ========================================================================== */
/* One column on anything narrower than a laptop.

   **This has to set `grid-template-columns`, not the variable.** It used to
   read `--kobra-panel-cols: 1` here, and it never once applied: `pages.js`
   writes that same custom property as an *inline style* on the row
   (`row.style.setProperty('--kobra-panel-cols', columns.length)`), and an
   inline declaration beats any author rule no matter its specificity or where
   it sits in the file. So every two-column panel stayed two-column on a phone,
   the tracks blew past the viewport, and the text was clipped down the right
   edge — which is what the user was seeing as "na mobilu se spousta věcí
   necentruje": on Sponzoring the visible copy sat in a 204px band with 163px of
   empty page beside it.

   Written against `grid-template-columns` there is no variable to lose to, and
   at (0,3,0) it matches the base rule's specificity and wins on source order.
   The rule this replaced is the reason to state it plainly: **a media query
   cannot override a value the script set inline.** */
@media (max-width: 991px) {
	.kobra-text-page .vc_row.kobra-panel-row,
	.kobra-text-page .vc_row.kobra-row-collapsed {
		grid-template-columns: minmax(0, 1fr);
	}
}

@media (max-width: 767px) {
	.kobra-text-page .wpb_text_column p,
	.kobra-text-page .wpb_text_column li {
		font-size: 16px;
	}

	/* Copy stays justified on a phone, at the user's instruction: "můžeš
	   ohlídat, že u stránek, kde je text zarovnaný do bloku, ho zarovnáš do
	   bloku i v mobilním rozhraní?" This block used to left-align it below
	   767px on the reasoning that a narrow measure tears holes in justified
	   text. She has seen both and wants the block; `hyphens: auto` on the
	   desktop rule is what keeps the word spacing sane, and it applies here
	   too. Same change as the Historie timeline in redesign.css. */

	.kobra-sponsor-grid {
		grid-template-columns: repeat(auto-fit, minmax(min(126px, 100%), 1fr));
		gap: 10px;
	}

	.kobra-sponsor-tile {
		min-height: 86px;
		padding: 14px;
	}

	.kobra-sponsor-tile img {
		max-height: 54px;
	}

	.kobra-cta {
		padding: 26px 22px;
	}

	.kobra-cta-title {
		font-size: 21px;
	}

	.kobra-text-page .stm-contact-info {
		padding: 22px 20px;
	}

	/* Two centred buttons stop being a pair and become a stack, each full
	   width, so neither ends up a stub next to the other. */
	.kobra-text-page a.vc_general.vc_btn3 {
		width: 100%;
		justify-content: center;
	}

	/* ---------- The phone-wide trim ----------
	   "celkově si myslím, že když je to na mobilu, je potřeba ty věci na
	   stránkách prostě o něco zmenšit, aby to nebylo tak obrovský."

	   Measured at 360px before this, the type scale was barely reduced from
	   desktop: the section heading still 27px and the display callout still
	   30px — larger than the page title's own 31 — with 24px of padding inside
	   every panel. One step down across the board, keeping the *relationships*
	   of the desktop scale so the pages still read as the same design:

	       page title   31 -> 26   (redesign.css, the shared masthead)
	       h2 section   27 -> 21
	       h3 callout   30 -> 21   — no longer bigger than the page title
	       h4 sub       20 -> 18
	       panel pad    24/22 -> 18/16

	   The homepage is deliberately not touched: the user reviewed it at phone
	   width and said "všechno ostatní na homepage vypadalo v pohodě", so the
	   hero, the stats band and the fixture cards keep their sizes. */
	.kobra-text-page h2.vc_custom_heading,
	.kobra-text-page h2.vc_custom_heading[style*="font-size: 25px"],
	.kobra-text-page h2.vc_custom_heading[style*="font-size:25px"] {
		/* `!important` because the desktop rule normalising the stray inline
		   25px carries one — without it that heading alone stayed 27px on a
		   phone while its neighbours came down, which is how this was found. */
		font-size: 21px !important;
	}

	.kobra-text-page .wpb_text_column h3 {
		font-size: 21px;
	}

	.kobra-text-page .wpb_text_column h4 {
		font-size: 18px;
	}

	.kobra-text-page .kobra-panel-row > .wpb_column > .vc_column-inner > .wpb_wrapper {
		padding: 18px 16px;
	}

	.kobra-kicker-panel {
		padding: 20px 18px;
	}

	.kobra-text-page .vc_row.kobra-panel-row {
		gap: 18px;
		margin-bottom: 20px;
	}
}

/* ==========================================================================
   Ikonové seznamy — [stm_icon_list] (v0.67.0)
   --------------------------------------------------------------------------
   Six of these are on the Nábor page and nowhere else on the site: training
   times, what a session contains, what to bring. Splash renders each as
   `ul.stm-list-icon > li.heading-font` with a Font Awesome `<i>` in front of the
   text, and the shortcode asks for `circle_bg="enable"` — but **no circle is
   drawn**: measured background transparent, border-radius 0, and the icon
   itself 15px against 16px text, so it read as punctuation rather than as an
   icon.

   The circle is drawn here instead, in the sky blue this redesign uses for
   supporting marks, and the row is a hanging indent so the text of a wrapping
   item aligns under itself rather than under the icon.

   **It was a two-column grid until v0.74.1 and that broke Stadion**, which the
   v0.67.0 note above got wrong: it says these lists are "on the Nábor page and
   nowhere else", because that is where the *shortcode* was looked for — but
   `ul.stm-list-icon` is on Stadion too, as redesign.css says a few hundred lines
   earlier in its own footprint check.

   The bug is one space, and it is worth understanding before touching this
   again. Both pages wrap their copy in a legacy `<span style="color:#000000">`,
   and the two put the shortcode's `&nbsp;` on opposite sides of it:

     Nábor     <li><i></i><span>&nbsp; text</span></li>      2 children
     Stadion   <li><i></i>&nbsp; <span>text</span></li>      3 children

   A grid places children one per cell, so on Stadion the `<i>` took cell 1, the
   loose `&nbsp;` text node became an anonymous item in cell 2, and **the span
   with all the actual text was pushed to row 2, column 1** — a 34px-wide column.
   Measured: a one-line item 592px wide and **228px tall**, its text in a 34px
   column stacked under the icon. Nábor was correct by luck.

   So the layout must not depend on how many children a `<li>` has. The icon is
   absolutely positioned and the row carries matching left padding, which behaves
   identically for two children, three, or ten — and gives the same aligned wrap
   the grid was there for.
   ========================================================================== */
.kobra-text-page ul.stm-list-icon {
	margin: 0 0 26px;
	padding: 0;
	list-style: none;
}
.kobra-text-page ul.stm-list-icon > li {
	position: relative;
	display: block;
	/* 34px circle + the 14px gap the grid used to declare. */
	padding: 0 0 0 48px;
	margin: 0 0 14px;
	font-size: 16px;
	line-height: 1.6;
	color: var(--kobra-ice);
}
/* Splash's generic bullet dot, which would otherwise sit in front of the icon. */
.kobra-text-page ul.stm-list-icon > li::before {
	display: none;
	content: none;
}
.kobra-text-page ul.stm-list-icon > li > i {
	position: absolute;
	left: 0;
	/* Centres the 34px circle on the first line rather than on the whole item,
	   which is what keeps it in place when the text wraps: the line box is
	   16px x 1.6 = 25.6px, so (25.6 - 34) / 2 rounds to -4px. */
	top: -4px;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	margin: 0;
	font-size: 14px;
	color: var(--kobra-sky);
	background: rgba(83, 169, 220, 0.12);
	border: 1px solid rgba(83, 169, 220, 0.35);
	border-radius: 50%;
	box-sizing: border-box;
}

@media (max-width: 700px) {
	.kobra-text-page ul.stm-list-icon > li {
		padding-left: 39px;
		font-size: 15px;
	}
	.kobra-text-page ul.stm-list-icon > li > i {
		width: 28px;
		height: 28px;
		top: -2px;
		font-size: 12px;
	}
}


/* The season buttons must not flash before the table replaces them (v0.76.6)
   --------------------------------------------------------------------------
   `competitionAnchor()` hides that row with `.kobra-competition-replaced`, and
   the row is found through `.kobra-button-row` — **both classes are added by
   pages.js**, so nothing hid the buttons at the first paint. On a slow load the
   page showed the old row of season links, which then vanished and was replaced
   by the fixture table. The user reported it; measured in a script-free render of
   the page, the row was visible at **1170x58**.

   Second time this exact mistake has surfaced, after the footer in v0.76.3. The
   rule it breaks is this project's own: **anything JS hides must be hidden in CSS
   too** — and a hide rule keyed on a class the script adds is not hidden in CSS
   at all.

   The selector mirrors `tagButtonRows()` deliberately, including its lesson:
   *some* column has a button and *no* column has content — written as "every
   column has a button" it would miss AHL Soutěž žen, whose row is two buttons
   and an empty third column. `:not(:has())` is valid where `:has(:has())` is not.

   Scoped to `body.kobra-competition-page`, which PHP sets only when
   `kobra_competition_data()` returns something — the same condition that decides
   whether the table gets built. So Sponzoring's Givt row, which is a button row
   on a page with no competition, is untouched, and a competition page whose
   league has no matches keeps its buttons instead of losing them and getting
   nothing in return. */
body.kobra-competition-page .wpb-content-wrapper > .vc_row:has(.vc_btn3-container):not(:has(.wpb_text_column)):not(:has(.vc_custom_heading)):not(:has(.wpb_single_image)) {
	display: none !important;
}

/* ==========================================================================
   Rozpis soutěže — the fixture table on a Soutěže page (v0.71.0)
   --------------------------------------------------------------------------
   Replaces the row of hand-typed season buttons that used to link out to the
   season calendars. Built by buildCompetition() in pages.js from the matches
   themselves, so a season appears the moment its first fixture is entered.

   **The buttons had already gone stale**, which is the argument for deriving it:
   the 1. Liga žen page offered 2024/25, 2023/24 and 2022/23 while 2025/26
   already had fifteen matches, and the AHL page was missing two whole seasons.

   The rows borrow the fixture list's card treatment — navy with the ice texture,
   rounded, a hairline that lifts to sky on hover — so a season's fixtures look
   the same here as on /kalendar/. The season switcher borrows the squad tabs.
   ========================================================================== */

/* The replaced row is hidden, not removed: WPBakery keys per-row custom CSS on
   its generated class, and taking a row out of the document has bitten this
   project before. */
.kobra-text-page .kobra-button-row.kobra-competition-replaced {
	display: none;
}

.kobra-competition {
	/* 64px above, at the user's request: the filters sat almost against the
	   block that describes the competition. The bottom keeps the page's own
	   rhythm. */
	margin: 64px 0 56px;
}

/* ---------- Season switcher ----------
   The statistics page's filter buttons, via the shared `.kobra-filter-btn`
   component that moved into redesign.css in v0.71.1. **The first version used
   `.kobra-btn` alone and came out as Splash's skewed red slabs** — every defence
   against the theme's `<button>` styling lived in team.css and roster.css, and
   neither loads on a text page. Only the count chip is new here. */
.kobra-competition-tabs {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0 0 26px;
}

/* `#wrapper` because `.hockey #wrapper button` sits at (1,1,1) and has eaten six
   properties in this project. An id beats any number of classes. */
body.hockey #wrapper .kobra-competition-tab {
	gap: 8px;
	/* Splash's `margin-left: 10px` is zeroed on the shared `.kobra-filter-btn`
	   component in redesign.css as of v0.73.1, which these tabs carry — so the
	   copy that used to sit here has gone rather than being kept in two
	   places. */
}

.kobra-competition-count {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 20px;
	padding: 0 5px;
	border-radius: 2px;
	background: rgba(7, 27, 48, 0.22);
	font-size: 11px;
	font-weight: 700;
	line-height: 18px;
	font-variant-numeric: tabular-nums;
}
/* On a ghost tab the chip needs a light fill instead, or it disappears into the
   transparent button. */
.kobra-competition-tab.kobra-btn-ghost .kobra-competition-count {
	background: rgba(234, 241, 248, 0.12);
	color: var(--kobra-mist);
}

/* ==========================================================================
   Fixture rows — the season calendar's treatment (v0.71.1)
   --------------------------------------------------------------------------
   The user asked for this page to hold to the design on /kalendar/, and the
   first version had an arrangement of its own. Measured off the calendar rather
   than guessed:

     date    centred    101px   14px / 700   ice
     home    right      398px   14px / 700   ice
     score   centred    273px   26px / 700   Big Shoulders, winner yellow
     away    left       398px   14px / 700   ice
     row     72px tall, navy + ice texture, 1px --kobra-line, 4px radius
     hover   sky border + --kobra-navy-2, and no movement

   That last one is deliberate there and copied here: a `<tr>` does not transform
   reliably, and shifting rows read as fidgety. The row here is an `<a>` and
   could move, but then the two pages would behave differently for no reason.
   ========================================================================== */
.kobra-competition-list {
	display: flex;
	flex-direction: column;
	gap: 8px;
}

/* **`a.kobra-fixture`, naming the element.** `.hockey a { display: inline }` is
   (0,1,1) and beats a one-class rule on an anchor — the trap that cost the
   search results their whole layout, where `display: grid` lost and a 116px
   thumbnail stretched to 860. */
a.kobra-fixture,
.kobra-fixture {
	display: grid;
	/* The calendar's proportions: a fixed date column, the two teams sharing
	   what is left, and the score its own middle track. */
	grid-template-columns: 110px minmax(0, 1fr) 120px minmax(0, 1fr);
	align-items: center;
	gap: 10px;
	padding: 14px 12px;
	min-height: 72px;
	box-sizing: border-box;
	background-color: var(--kobra-navy);
	background-image: var(--kobra-ice-texture);
	background-repeat: repeat;
	background-position: 50% 50%;
	border: 1px solid var(--kobra-line);
	border-radius: 4px;
	color: var(--kobra-ice);
	text-decoration: none !important;
	transition: background-color .2s ease, border-color .2s ease;
}
a.kobra-fixture:hover,
a.kobra-fixture:focus {
	border-color: var(--kobra-sky);
	background-color: var(--kobra-navy-2);
	color: var(--kobra-ice);
}
a.kobra-fixture:focus-visible {
	outline: 2px solid var(--kobra-sky);
	outline-offset: 2px;
}

.kobra-fixture-date,
.kobra-fixture-home,
.kobra-fixture-away {
	font-family: 'Bricolage Grotesque', sans-serif;
	font-size: 14px;
	font-weight: 700;
	line-height: 1.35;
	color: var(--kobra-ice);
}
.kobra-fixture-date {
	text-align: center;
	color: var(--kobra-mist);
	font-variant-numeric: tabular-nums;
	white-space: nowrap;
}
.kobra-fixture-home { text-align: right; }
.kobra-fixture-away { text-align: left; }

/* ---------- Score ----------
   Big Shoulders at 26px, the calendar's own display face for a scoreboard
   number, with the winning figure in yellow and a mist separator. The winner
   comes from SportsPress's recorded outcome rather than from comparing the two
   numbers, which is right for a match settled in overtime. */
.kobra-fixture-score {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 7px;
	font-family: 'Big Shoulders', 'Bricolage Grotesque', sans-serif;
	font-size: 26px;
	font-weight: 700;
	line-height: 1;
	color: var(--kobra-ice);
}
.kobra-fixture-score .kobra-score-value {
	color: var(--kobra-ice);
	font-variant-numeric: tabular-nums;
}
.kobra-fixture-score .kobra-score-value.is-winner {
	color: var(--kobra-yellow);
}
.kobra-fixture-score .kobra-score-sep {
	color: var(--kobra-mist);
}
/* Four of the club's matches have no score entered at all — 0:0 would be a claim
   rather than a blank. */
.kobra-fixture-score.is-empty {
	font-family: 'Bricolage Grotesque', sans-serif;
	font-size: 15px;
	font-weight: 700;
	color: var(--kobra-mist);
}
/* ---------- A fixture still to be played ----------
   The countdown gets **its own line under the teams**, spanning the row.

   In the score's own track it did not fit and never could: the track is 120px
   and "9 dní 22 h 37 min 51 s" needs about 150, so with `white-space: nowrap`
   the text overflowed into both team names. The user photographed it.

   **My check had said there was no overlap, and it was measuring the wrong
   thing** — the element's box is exactly the 120px track, so comparing boxes
   found nothing while the painted text ran straight through the names either
   side. Overflowing text does not widen its box.

   Her instruction was to keep it centred and leave the team positions alone, so
   the teams stay in row 1 and the middle track stays empty there — the two names
   sit exactly where they do on a played fixture. */
.kobra-fixture-score.is-countdown {
	/* **Column 3, the score's own column — not the whole row.**
	   Spanning the row centred the countdown on the row's middle, and the row's
	   middle is not where scores sit: the columns are `110 427 120 427`, so the
	   score track runs 623..743 with its centre at 683, while the row's content
	   box is 76..1190 with its centre at 633. Fifty pixels out, and the user
	   spotted it against the scores in the rows above.

	   Staying in column 3 puts it exactly where every score is. The text is wider
	   than the 120px track and overflows — which is harmless here and was not on
	   the first line: **on row 2 the cells either side are empty**, so there is
	   nothing to run into. */
	grid-column: 3;
	grid-row: 2;
	justify-content: center;
	margin-top: 6px;
	font-family: 'Bricolage Grotesque', sans-serif;
	font-size: 13px;
	font-weight: 700;
	letter-spacing: 0.02em;
	line-height: 1.3;
	color: var(--kobra-sky);
	white-space: nowrap;
}
/* The row grows by one line, so its minimum has to come off or the extra line
   leaves a gap under the teams instead. */
.kobra-fixture.is-upcoming {
	min-height: 0;
	padding-top: 12px;
	padding-bottom: 12px;
}

/* **The three cells on the first line have to be pinned, or the away team moves
   into the middle.** With the countdown taken out of row 1, auto-placement put
   the away name in the first free cell — which is the 120px score track — so it
   sat where the score belongs, squeezed from 427px to 120. Measured: away at
   633..753 instead of 763..1190.

   The check that missed it compared the *home* name's position between a played
   and an upcoming row and passed. **Comparing one side of a symmetric pair
   proves nothing about the other.** */
.kobra-fixture.is-upcoming .kobra-fixture-date { grid-column: 1; grid-row: 1; }
.kobra-fixture.is-upcoming .kobra-fixture-home { grid-column: 2; grid-row: 1; }
.kobra-fixture.is-upcoming .kobra-fixture-away { grid-column: 4; grid-row: 1; }

/* A fixture whose other side was never chosen in SportsPress. Two of the club's
   own matches are like this, and the row is shown with a visible gap rather than
   dropped: a page calling itself the season's fixtures must not quietly lose a
   match that was played. */
.kobra-fixture.has-missing-team { cursor: help; }

@media (max-width: 700px) {
	.kobra-competition { margin: 44px 0 40px; }
	.kobra-competition-tabs { gap: 6px; margin-bottom: 20px; }

	/* Four columns become two rows: the date on its own, then the two teams
	   with the score between them. 110px of date plus a 26px score leaves
	   nothing for two team names on a phone. */
	a.kobra-fixture,
	.kobra-fixture {
		grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
		gap: 4px 10px;
		padding: 12px 14px;
		min-height: 0;
	}
	/* **These have to carry `.is-upcoming` too.** The desktop rules pin the three
	   first-line cells at (0,3,0) and **a media query grants no specificity**, so
	   a bare `.kobra-fixture-away` at (0,1,0) loses to them even in here. The
	   consequence was concrete: away stayed pinned to column 4, which does not
	   exist in this three-column grid, so the browser made an implicit fourth
	   track and the two names came out 78px and 36px wide instead of 155 each. */
	.kobra-fixture-date,
	.kobra-fixture.is-upcoming .kobra-fixture-date { grid-column: 1 / -1; grid-row: 1; text-align: left; font-size: 12px; }
	.kobra-fixture-home,
	.kobra-fixture.is-upcoming .kobra-fixture-home { grid-column: 1; grid-row: 2; }
	.kobra-fixture-score { grid-column: 2; grid-row: 2; font-size: 21px; }
	.kobra-fixture-away,
	.kobra-fixture.is-upcoming .kobra-fixture-away { grid-column: 3; grid-row: 2; }

	/* Row 3 here, because the date takes row 1 on a phone and the teams row 2.
	   The desktop rule already gives the countdown its own line; this only moves
	   it down one and lets it wrap if a very long string ever needs to. */
	/* Across the row on a phone, where the three columns are `1fr auto 1fr` and
	   the middle collapses to nothing once the countdown leaves it — so the row's
	   centre and the score's centre are the same place here, unlike at desktop
	   width. Column 3 would be the away team. */
	.kobra-fixture.is-upcoming .kobra-fixture-score {
		grid-column: 1 / -1;
		grid-row: 3;
		margin-top: 2px;
		font-size: 12px;
		white-space: normal;
	}
	.kobra-fixture-home,
	.kobra-fixture-away { font-size: 13px; }
}
