/* EkoZmeko Energy — design tokens. THIS FILE IS THE SOURCE OF TRUTH.

   It used to claim it was generated from .claude/skills/ekozmeko-energy-design/
   tokens/*.css and to point at build/make-theme.sh. Checked on 2026-09-21
   (MAR-1591): neither the generator nor that tokens directory exists. The banner
   was sending maintainers to look for a source that is not there, which is the
   same two-sources-of-truth trap that left the Elementor kit at 1140 while CSS
   served 1240. Edit this file directly.

   From MAR-1592 the Elementor kit owns the values a client can change in the UI
   (colours, body typography, content width). Where a value lives in both, the
   kit wins and this file must follow it — never the other way round.

   The Google Fonts @import from fonts.css is deliberately omitted: it is enqueued
   in functions.php with a preconnect so the font is not behind a CSS import chain. */

/* ===== tokens/colors.css ===== */
/* EkoZmeko Energy — colour system.
   Base ramps first, semantic aliases second. Only semantic aliases belong in components. */
:root{
  /* This design exists in one scheme. Saying so stops Chrome's "Auto Dark Mode
     for Web Contents" from inverting it on the fly — the setting that made the
     whole site look as if it were under a grey veil (MAR-1612), including on a
     page with every element deleted. Without this declaration Chrome assumes a
     page that never mentions a scheme is fair game to re-colour. */
  color-scheme: light;

  /* Ink — cool neutral, faintly green-shifted so it sits with the brand green */
  --ekz-ink-900:#0B0E10;
  --ekz-ink-800:#14181B;
  --ekz-ink-700:#232A2E;
  --ekz-ink-600:#39434A;
  --ekz-ink-500:#5B6670;
  --ekz-ink-400:#8A949B;
  --ekz-ink-450:#869096;
  --ekz-ink-300:#B6BEC3;
  --ekz-ink-200:#D7DDDA;
  --ekz-ink-100:#E3E7E4;
  --ekz-ink-50:#F4F6F5;
  --ekz-white:#FFFFFF;

  /* Green — ONE hue. No single value clears 4.5:1 against white AND ink-800 (the two
     luminance windows do not overlap), so the hue has three documented roles:
       green-700 #0F8F45 — the identity value. Non-text UI and text ≥24px only.
                           4.17:1 on white, 4.28:1 on ink-800 — both above the 3:1
                           threshold for graphics, large text and UI boundaries.
       green-800 #0C7538 — small text and solid fills on LIGHT. 5.81:1 on white,
                           and white text on it is 5.81:1.
       green-500 #16A855 — small text on DARK. 5.75:1 on ink-800, 4.85:1 on the wash. */
  --ekz-green-900:#073F1F;
  --ekz-green-850:#0A6430;
  --ekz-green-800:#0C7538;
  --ekz-green-700:#0F8F45;
  --ekz-green-600:#12A04C;
  --ekz-green-500:#16A855;
  --ekz-green-100:#D6EFDF;
  --ekz-green-50:#EEF8F2;

  /* The identity accent: borders, icons, dots, focus rings, statistics ≥24px. */
  --ekz-accent:var(--ekz-green-700);
  /* Small accent text, by surface. Use these for anything under 24px. */
  --ekz-accent-text-light:var(--ekz-green-800);
  --ekz-accent-text-dark:var(--ekz-green-500);
  --ekz-accent-wash:rgba(15,143,69,.16);

  /* Retired: the original logo green. 1.36:1 on white, unusable as UI at any size. */
  --ekz-legacy-logo-green:#39FF14; /* @kind color */
  /* Deprecated aliases — resolve to the identity accent so older markup keeps working.
     Do not introduce new references to these. */
  --ekz-neon:var(--ekz-accent);
  --ekz-neon-wash:var(--ekz-accent-wash);

  /* Status */
  --ekz-warning-700:#8A5300;
  --ekz-warning-500:#C77700;
  --ekz-warning-50:#FDF4E6;
  --ekz-danger-700:#8E2A1F;
  --ekz-danger-500:#C0392B;
  --ekz-danger-50:#FBEDEB;
  --ekz-info-700:#155580;
  --ekz-info-500:#1E6FA8;
  --ekz-info-50:#EAF3F9;

  /* ---- Semantic: surfaces ---- */
  --ekz-surface-page:var(--ekz-white);
  --ekz-surface-raised:var(--ekz-white);
  --ekz-surface-sunken:var(--ekz-ink-50);
  --ekz-surface-inverse:var(--ekz-ink-800);
  --ekz-surface-inverse-deep:var(--ekz-ink-900);
  --ekz-surface-accent:var(--ekz-green-50);
  --ekz-surface-product:var(--ekz-white);

  /* ---- Semantic: text ---- */
  /* MAR-1634 T01: every text ROLE on a light surface resolves to the one body
     colour (brief B2/B3). The roles keep their names so the 3 000+ lines that
     read them need no edit; only what they point at changed. The ink-800/500
     PRIMITIVES are untouched — ink-800 is also a dark surface and the greys own
     borders and fills. Hierarchy now comes from size and weight, not a tint. */
  --ekz-text-strong:var(--ekz-text-body);
  /* MAR-1586 D1: one text colour on light surfaces. Was ink-600. */
  --ekz-text-body:#3F4040;
  --ekz-text-muted:var(--ekz-text-body);
  /* De-emphasised TEXT. Not ink-400 — that is 3.09:1 on white and fails AA at the
     11-13px sizes this is used at (product codes, brand names, facet counts).
     ink-400 stays available for non-text UI via --ekz-line-faint below. */
  --ekz-text-faint:var(--ekz-text-body);
  --ekz-text-on-inverse:var(--ekz-white);
  --ekz-text-on-inverse-muted:#A8B2B9;
  --ekz-text-accent:var(--ekz-accent-text-light);
  --ekz-text-accent-inverse:var(--ekz-accent-text-dark);
  --ekz-text-link:var(--ekz-accent-text-light);
  --ekz-text-link-hover:var(--ekz-green-850);
  --ekz-text-link-inverse:var(--ekz-accent-text-dark);
  --ekz-text-link-inverse-hover:var(--ekz-white);

  /* ---- Semantic: lines ---- */
  --ekz-border-subtle:var(--ekz-ink-100);
  --ekz-border-default:var(--ekz-ink-200);
  --ekz-border-strong:var(--ekz-ink-300);
  --ekz-border-inverse:rgba(255,255,255,.14);
  --ekz-border-accent:var(--ekz-accent);
  /* De-emphasised NON-TEXT UI: chevron separators, input search glyphs, favourite
     and delete icons, tab glyphs. 3:1 is the bar (WCAG 1.4.11), and ink-400 only
     clears it on white (2.85 on the sunken surface) — hence ink-450.
     Never put text on this; text uses --ekz-text-faint. */
  --ekz-line-faint:var(--ekz-ink-450);

  /* ---- Semantic: actions. Fills carry white text, so they use the light-text step
         on both surfaces and hover darkens either way. ---- */
  --ekz-action-primary:var(--ekz-green-800);
  --ekz-action-primary-hover:var(--ekz-green-850);
  --ekz-action-primary-active:var(--ekz-green-900);
  --ekz-action-primary-text:var(--ekz-white);
  --ekz-action-secondary-text:var(--ekz-text-body);
  --ekz-action-disabled:var(--ekz-ink-200);
  /* MAR-1634 T05: disabled reads as disabled through its fill, cursor and
     semantics — not through unreadable grey text. */
  --ekz-action-disabled-text:var(--ekz-text-body);
  --ekz-focus-ring:rgba(15,143,69,.32);
  --ekz-focus-ring-inverse:rgba(22,168,85,.44);

  /* ---- Semantic: commerce. Dots are non-text UI (3:1); labels are 13px text (4.5:1),
         so each state carries a dot value and a darker text value. ---- */
  --ekz-price-main:var(--ekz-text-body);
  --ekz-price-secondary:var(--ekz-text-body);
  --ekz-stock-in:var(--ekz-accent);
  --ekz-stock-in-text:var(--ekz-accent-text-light);
  --ekz-stock-transit:var(--ekz-warning-500);
  --ekz-stock-transit-text:var(--ekz-warning-700);
  --ekz-stock-out:var(--ekz-ink-450);
  --ekz-stock-out-text:var(--ekz-text-body);
  --ekz-sale:var(--ekz-danger-500);
}

/* ===== tokens/typography.css ===== */
/* Archivo carries the whole system. Headings use the width axis (wdth 100–112)
   to get corporate weight without switching family. */
:root{
  --ekz-font-core:"Archivo","Archivo Narrow",-apple-system,"Segoe UI",system-ui,sans-serif;
  --ekz-font-heading:var(--ekz-font-core);
  --ekz-font-body:var(--ekz-font-core);

  --ekz-wdth-wide:112; /* @kind font */
  --ekz-wdth-normal:100; /* @kind font */
  --ekz-wdth-narrow:88; /* @kind font */

  --ekz-weight-regular:400;
  /* MAR-1634 T02: the brief allows 400, 700 and 900 only (B8). Both names stay
     so no rule that reads them needs an edit; they are now synonyms of bold. */
  --ekz-weight-medium:700;
  --ekz-weight-semibold:700;
  --ekz-weight-bold:700;
  /* MAR-1586: headings are 900. Own token so "bold text" and "heading" stop
     sharing one value — they are different jobs at different sizes. */
  --ekz-weight-heading:900;

  /* Sizes — desktop. Fluid clamps below. */
  --ekz-size-display-1:76px;
  --ekz-size-display-2:60px;
  --ekz-size-h1:48px;
  --ekz-size-h2:38px;
  --ekz-size-h3:28px;
  --ekz-size-h4:22px;
  --ekz-size-h5:18px;
  --ekz-size-body-lg:19px;
  --ekz-size-body:15px; /* MAR-1586 D4: was 17px. 14 and 16 never existed in this scale. */
  --ekz-size-body-sm:15px;
  --ekz-size-caption:13px;
  --ekz-size-overline:12px;

  --ekz-lh-tight:1.02; /* @kind font */
  --ekz-lh-display:1.06; /* @kind font */
  --ekz-lh-heading:1.16; /* @kind font */
  --ekz-lh-snug:1.35; /* @kind font */
  --ekz-lh-body:1.65; /* @kind font */

  /* MAR-1586 D1: no letter-spacing anywhere. The display/heading/overline tokens
     are gone rather than zeroed — a token that always resolves to 0 is a dead
     word in the vocabulary the client's assistant has to read. The declarations
     that referenced them were removed with them; see MAR-1603 for the full sweep. */

  /* Ready-made shorthands */
  --ekz-type-display-1:var(--ekz-weight-heading) var(--ekz-size-display-1)/var(--ekz-lh-tight) var(--ekz-font-heading);
  --ekz-type-display-2:var(--ekz-weight-heading) var(--ekz-size-display-2)/var(--ekz-lh-display) var(--ekz-font-heading);
  --ekz-type-h1:var(--ekz-weight-heading) var(--ekz-size-h1)/var(--ekz-lh-heading) var(--ekz-font-heading);
  --ekz-type-h2:var(--ekz-weight-heading) var(--ekz-size-h2)/var(--ekz-lh-heading) var(--ekz-font-heading);
  --ekz-type-h3:var(--ekz-weight-heading) var(--ekz-size-h3)/var(--ekz-lh-snug) var(--ekz-font-heading);
  --ekz-type-h4:var(--ekz-weight-heading) var(--ekz-size-h4)/var(--ekz-lh-snug) var(--ekz-font-heading);
  --ekz-type-body:var(--ekz-weight-regular) var(--ekz-size-body)/var(--ekz-lh-body) var(--ekz-font-body);
  --ekz-type-body-sm:var(--ekz-weight-regular) var(--ekz-size-body-sm)/var(--ekz-lh-body) var(--ekz-font-body);
}
.ekz-display-1{font:var(--ekz-type-display-1);font-stretch:112%}
.ekz-display-2{font:var(--ekz-type-display-2);font-stretch:110%}
.ekz-h1{font:var(--ekz-type-h1);font-stretch:108%}
.ekz-h2{font:var(--ekz-type-h2);font-stretch:108%}
.ekz-h3{font:var(--ekz-type-h3);font-stretch:104%}
.ekz-h4{font:var(--ekz-type-h4);font-stretch:100%}
.ekz-body-lg{font:var(--ekz-weight-regular) var(--ekz-size-body-lg)/var(--ekz-lh-body) var(--ekz-font-body)}
.ekz-body{font:var(--ekz-type-body)}
.ekz-body-sm{font:var(--ekz-type-body-sm)}
.ekz-caption{font:var(--ekz-weight-regular) var(--ekz-size-caption)/1.5 var(--ekz-font-body)}
.ekz-overline{font:var(--ekz-weight-semibold) var(--ekz-size-overline)/1.4 var(--ekz-font-body);text-transform:uppercase}

/* ===== tokens/spacing.css ===== */
/* 4px base grid with a 2px sub-tier for optical spacing inside components.
   Token names ARE the pixel value — --ekz-space-24 is 24px. No ambiguity.

   THE RULE — every spacing value in this system obeys it:
     below 16px  -> 2px steps  (2 4 6 8 10 12 14)      inside components: icon gaps, chip padding
     16 to 64px  -> 4px steps  (16 20 24 … 60 64)      component padding, grid gaps
     above 64px  -> 8px steps  (72 80 88 96 … 160)     section rhythm
   1px is not spacing; it is a hairline (a border, or a grid gap showing a divider through).

   Section padding is the only vertical rhythm control — never per-widget margins. */
:root{
  --ekz-space-0:0;
  --ekz-space-2:2px;
  --ekz-space-4:4px;
  --ekz-space-6:6px;
  --ekz-space-8:8px;
  --ekz-space-10:10px;
  --ekz-space-12:12px;
  --ekz-space-14:14px;
  --ekz-space-16:16px;
  --ekz-space-20:20px;
  --ekz-space-24:24px;
  --ekz-space-28:28px;
  --ekz-space-32:32px;
  --ekz-space-36:36px;
  --ekz-space-40:40px;
  --ekz-space-44:44px;
  --ekz-space-48:48px;
  --ekz-space-52:52px;
  --ekz-space-56:56px;
  --ekz-space-64:64px;
  --ekz-space-72:72px;
  --ekz-space-80:80px;
  --ekz-space-96:96px;
  --ekz-space-120:120px;
  --ekz-space-160:160px;

  /* Vertical rhythm: two values, both multiples of the 24px base (Maroš,
     MAR-1627 — "A, but unify 64 to 48"). md is a section, sm is the hero and
     the footer. lg (120) and xl (160) are gone: no rule, no page and no
     Elementor data read them — measured on the live DB, not assumed. */
  --ekz-section-sm:48px;
  --ekz-section-md:96px;

  /* The brief of 2026-09-21 allows exactly two gaps: 24 px between blocks,
     12 px inside one. MAR-1586 set these four role tokens to those values but
     left 132 declarations spending raw px and --ekz-space-N, so the shop page
     still measured twelve different widths (MAR-1612). Every gap in the
     stylesheets now resolves to one of the two below; the role names stay
     because 3 680 lines reference them, and they are aliases, not third and
     fourth opinions. */
  --ekz-gap:24px;
  --ekz-gap-tight:12px;
  --ekz-gap-card:var(--ekz-gap);
  --ekz-gap-grid:var(--ekz-gap);
  --ekz-gap-inline:var(--ekz-gap-tight);
  --ekz-gap-stack:var(--ekz-gap);
}

/* ===== tokens/radius.css ===== */
/* One radius decision for the whole system: 8px. Everything else derives from it. */
:root{
  --ekz-radius-none:0;
  --ekz-radius-sm:6px;  /* MAR-1586 D1: was 4px. This is the nested/control radius. */
  /* No role reads it, but ten nested rules still did (radio rows, notices, the
     company block, the logo plate) — 8px against the brief's 6 for anything
     nested. Remapped, not hunted down one by one (D1, MAR-1635). */
  --ekz-radius-md:6px;
  --ekz-radius-lg:12px; /* card radius */
  --ekz-radius-xl:16px;
  --ekz-radius-pill:999px;

  /* Zadanie: 12 on cards, 6 on nested elements and buttons. */
  --ekz-radius-card:var(--ekz-radius-lg);
  --ekz-radius-button:var(--ekz-radius-sm);
  --ekz-radius-input:var(--ekz-radius-sm);
  --ekz-radius-image:var(--ekz-radius-sm);
  --ekz-radius-badge:var(--ekz-radius-sm);
  --ekz-radius-chip:var(--ekz-radius-pill);

  --ekz-border-width:1px; /* @kind other */
  --ekz-border-width-strong:2px; /* @kind other */
}

/* ===== tokens/elevation.css ===== */
/* Shadows are quiet. Nothing above level 3 exists in this system.
   No coloured shadows, no glows — the neon does the standing out. */
:root{
  --ekz-shadow-0:none;
  /* MAR-1586 D1: the brief's default card shadow. shadow-1 is what every card,
     tile and panel already rests on (7 of its 8 uses), so the value lands here
     rather than in a new token nobody references. */
  --ekz-shadow-1:0px 8px 16px 0px #0212090f;
  --ekz-shadow-2:0 2px 8px rgba(20,24,27,.07); /* unreferenced; MAR-1603 decides its fate */
  --ekz-shadow-3:0 14px 34px rgba(20,24,27,.12);
  --ekz-shadow-header:0 1px 0 rgba(20,24,27,.08);
  --ekz-shadow-overlay:0 24px 60px rgba(11,14,16,.28);
  --ekz-shadow-focus:0 0 0 3px var(--ekz-focus-ring);
  --ekz-shadow-focus-inverse:0 0 0 3px var(--ekz-focus-ring-inverse);
  --ekz-scrim-dark:linear-gradient(90deg,#0B0E10 8%,rgba(11,14,16,.55) 55%,rgba(11,14,16,.15)); /* @kind other */
  --ekz-scrim-bottom:linear-gradient(180deg,rgba(11,14,16,0) 40%,rgba(11,14,16,.78)); /* @kind other */
}

/* ===== tokens/motion.css ===== */
/* Short, flat, unshowy. No bounce, no spring, no scroll-triggered reveals on body copy. */
:root{
  --ekz-duration-instant:100ms; /* @kind other */
  --ekz-duration-fast:160ms; /* @kind other */
  --ekz-duration-base:200ms; /* @kind other */
  --ekz-duration-slow:280ms; /* @kind other */
  --ekz-ease-standard:cubic-bezier(.2,0,0,1); /* @kind other */
  --ekz-ease-out:cubic-bezier(0,0,.2,1); /* @kind other */
  --ekz-ease-in:cubic-bezier(.4,0,1,1); /* @kind other */
  --ekz-transition-color:color var(--ekz-duration-fast) var(--ekz-ease-standard),background-color var(--ekz-duration-fast) var(--ekz-ease-standard),border-color var(--ekz-duration-fast) var(--ekz-ease-standard); /* @kind other */
  --ekz-transition-card:border-color var(--ekz-duration-fast) var(--ekz-ease-standard); /* @kind other — a card's hover is its border turning green (MAR-1634, 2026-09-27); it was a 3px lift and a deeper shadow */
  --ekz-lift-hover:translateY(-3px); /* @kind other */
  --ekz-press-scale:.985; /* @kind other */
}
@media (prefers-reduced-motion:reduce){:root{--ekz-duration-fast:0ms; /* @kind other */ --ekz-duration-base:0ms; /* @kind other */ --ekz-duration-slow:0ms; /* @kind other */ --ekz-lift-hover:none /* @kind other */}}

/* ===== tokens/layout.css ===== */
/* Container + breakpoint contract. Elementor: set Content Width to 1440,
   and match the breakpoints below in Site Settings > Layout.

   MAR-1586 D1: 1240 → 1440. Until MAR-1592 makes the kit the single owner of
   width, this token and the kit's container_width both exist — keep them equal.
   Two disagreeing sources of truth is how the kit ended up a dead entry at 1140
   while CSS quietly served 1240. */
:root{
  --ekz-container-max:1440px;
  --ekz-container-wide:1320px;
  --ekz-container-narrow:820px;
  --ekz-gutter:40px;
  --ekz-gutter-tablet:24px;
  /* 24 like the tablet: 20 was the only side value off the 24/12 scale
     (MAR-1635 Q04). */
  --ekz-gutter-mobile:24px;

  --ekz-bp-desktop:1440px;
  --ekz-bp-laptop:1240px;
  --ekz-bp-tablet:1024px;
  --ekz-bp-mobile-lg:768px;
  --ekz-bp-mobile:480px;

  --ekz-header-height:80px;
  --ekz-topbar-height:40px;
  --ekz-z-header:100; /* @kind other */
  --ekz-z-dropdown:200; /* @kind other */
  --ekz-z-overlay:300; /* @kind other */
  --ekz-z-modal:400; /* @kind other */
}
/* Section rhythm 96 / 72 / 48 — every step on the 24 scale (MAR-1635 Q04: "on
   mobile it has to be unified too"). The small rhythm (hero, footer, page head)
   stays 48 at every width. */
@media (max-width:1024px){:root{--ekz-gutter:var(--ekz-gutter-tablet);--ekz-section-md:72px}}
@media (max-width:768px){:root{--ekz-gutter:var(--ekz-gutter-mobile);--ekz-size-display-1:44px;--ekz-size-display-2:36px;--ekz-size-h1:32px;--ekz-size-h2:27px;--ekz-size-h3:22px;--ekz-section-md:48px}}

/* ===== tokens/base.css ===== */
/* Minimal resets + the two element defaults Elementor never gets right:
   link colour and focus visibility. Everything else is component-level. */
*,*::before,*::after{box-sizing:border-box}
body{font:var(--ekz-type-body);color:var(--ekz-text-body);background:var(--ekz-surface-page);-webkit-font-smoothing:antialiased}
a{color:var(--ekz-text-link);text-decoration:none;transition:var(--ekz-transition-color)}
a:hover{color:var(--ekz-text-link-hover)}
:focus-visible{outline:2px solid var(--ekz-action-primary);outline-offset:2px}
.ekz-on-dark :focus-visible{outline-color:var(--ekz-accent)}
h1,h2,h3,h4,h5{color:var(--ekz-text-strong);text-wrap:balance;margin:0}
p{text-wrap:pretty}
.ekz-container{width:100%;max-width:var(--ekz-container-max);margin-inline:auto;padding-inline:var(--ekz-gutter)}
.ekz-section{padding-block:var(--ekz-section-md)}
.ekz-on-dark{background:var(--ekz-surface-inverse);color:var(--ekz-text-on-inverse-muted)}
.ekz-on-dark h1,.ekz-on-dark h2,.ekz-on-dark h3,.ekz-on-dark h4{color:var(--ekz-text-on-inverse)}
.ekz-on-dark a{color:var(--ekz-text-link-inverse)}
.ekz-on-dark a:hover{color:var(--ekz-text-link-inverse-hover)}
.ekz-grid-2,.ekz-grid-3,.ekz-grid-4{display:grid;gap:var(--ekz-gap)}
.ekz-grid-2{grid-template-columns:repeat(2,1fr)}
.ekz-grid-3{grid-template-columns:repeat(3,1fr)}
.ekz-grid-4{grid-template-columns:repeat(4,1fr);gap:var(--ekz-gap)}
/* Same four columns as the tile band — see the note in ekz-overrides.css. */
.ekz-grid-catalog{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--ekz-gap);align-items:start}
.ekz-grid-product{display:grid;grid-template-columns:1.05fr 1fr;gap:var(--ekz-gap);align-items:start}
.ekz-grid-checkout{display:grid;grid-template-columns:1fr 384px;gap:var(--ekz-gap);align-items:start}
.ekz-grid-form-2{display:grid;grid-template-columns:1fr 1fr;gap:var(--ekz-gap)}
.ekz-grid-form-3{display:grid;grid-template-columns:2fr 1fr 1fr;gap:var(--ekz-gap)}
.ekz-grid-blog-lead{display:grid;grid-template-columns:1.1fr 1fr;gap:0}
/* Page body under a PageHeader band. One value so every subpage sits the same
   distance below its header and the same distance above the footer: 24 under the
   header, the section rhythm above the footer (MAR-1635 Q05, "96 everywhere"). */
.ekz-page-body{padding-top:var(--ekz-gap);padding-bottom:var(--ekz-section-md)}
@media (max-width:1024px){.ekz-grid-4{grid-template-columns:repeat(3,1fr)}.ekz-grid-catalog,.ekz-grid-checkout{grid-template-columns:1fr}.ekz-grid-product{gap:var(--ekz-gap)}}
@media (max-width:900px){.ekz-grid-product,.ekz-grid-blog-lead{grid-template-columns:1fr}}
@media (max-width:768px){.ekz-grid-2,.ekz-grid-3,.ekz-grid-4{grid-template-columns:repeat(2,1fr)}}
@media (max-width:768px){.ekz-grid-form-3{grid-template-columns:1fr 1fr}}
@media (max-width:480px){.ekz-grid-2,.ekz-grid-3,.ekz-grid-4,.ekz-grid-form-2,.ekz-grid-form-3{grid-template-columns:1fr}}
.ekz-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}
.ekz-icon svg{width:100%;height:100%;display:block}
