/* Minification failed. Returning unminified contents.
(14,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(15,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(16,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(17,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(18,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(21,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(22,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(23,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(26,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(27,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(28,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(29,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(32,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(33,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(34,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(37,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(40,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(41,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(47,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(48,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(49,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(52,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(53,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(54,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(55,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(58,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(61,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(62,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(63,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(64,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(65,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(66,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(67,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(68,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(69,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(70,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(71,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(74,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(75,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(76,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(77,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(78,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(81,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(82,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(83,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(84,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(85,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(90,31): run-time error CSS1039: Token not allowed after unary operator: '-color-dark'
(92,30): run-time error CSS1039: Token not allowed after unary operator: '-font-degular'
(94,30): run-time error CSS1039: Token not allowed after unary operator: '-font-archivo'
(121,82): run-time error CSS1039: Token not allowed after unary operator: '-font-degular'
(122,82): run-time error CSS1039: Token not allowed after unary operator: '-font-degular'
(132,45): run-time error CSS1039: Token not allowed after unary operator: '-font-geom'
(138,159): run-time error CSS1038: Expected hex color, found '#0009'
(144,33): run-time error CSS1039: Token not allowed after unary operator: '-color-dark'
(146,162): run-time error CSS1039: Token not allowed after unary operator: '-font-geom'
(196,68): run-time error CSS1039: Token not allowed after unary operator: '-color-dark'
(212,23): run-time error CSS1039: Token not allowed after unary operator: '-font-montserrat'
(214,17): run-time error CSS1039: Token not allowed after unary operator: '-text-on-dark-soft'
(221,28): run-time error CSS1039: Token not allowed after unary operator: '-color-accent'
(230,28): run-time error CSS1039: Token not allowed after unary operator: '-color-dark'
(240,23): run-time error CSS1039: Token not allowed after unary operator: '-font-montserrat'
(241,68): run-time error CSS1039: Token not allowed after unary operator: '-text-on-dark-soft'
(249,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(255,52): run-time error CSS1039: Token not allowed after unary operator: '-btn-border-strong'
(273,28): run-time error CSS1039: Token not allowed after unary operator: '-btn-border'
(325,32): run-time error CSS1039: Token not allowed after unary operator: '-color-dark'
(430,5): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(460,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(461,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(470,49): run-time error CSS1039: Token not allowed after unary operator: '-ftr-line'
(472,50): run-time error CSS1039: Token not allowed after unary operator: '-ftr-line'
(484,79): run-time error CSS1039: Token not allowed after unary operator: '-ftr-line'
(504,32): run-time error CSS1039: Token not allowed after unary operator: '-ftr-line'
(511,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(512,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-light'
(514,17): run-time error CSS1039: Token not allowed after unary operator: '-text-muted-strong'
(517,34): run-time error CSS1039: Token not allowed after unary operator: '-text-muted-strong'
(533,36): run-time error CSS1039: Token not allowed after unary operator: '-ftr-line'
(562,28): run-time error CSS1039: Token not allowed after unary operator: '-color-dark'
(563,17): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(604,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(605,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-display'
(612,32): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(621,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-20'
(622,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-light'
(626,33): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(657,22): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(658,17): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(697,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(698,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-heading'
(712,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-medium'
(713,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-base'
(719,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-light'
(720,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-base'
(730,40): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(738,32): run-time error CSS1039: Token not allowed after unary operator: '-line-on-light'
(776,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(777,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-eyebrow'
(780,17): run-time error CSS1039: Token not allowed after unary operator: '-text-faint'
(784,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(785,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-attr'
(791,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-light'
(792,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-base'
(852,101): run-time error CSS1039: Token not allowed after unary operator: '-btn-bg'
(861,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(862,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(867,17): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(869,68): run-time error CSS1039: Token not allowed after unary operator: '-line-on-light'
(872,29): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(890,73): run-time error CSS1039: Token not allowed after unary operator: '-line-on-light'
(935,22): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(936,17): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(959,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(960,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(961,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-24'
(965,17): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(976,7): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(985,38): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(985,58): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(986,22): run-time error CSS1039: Token not allowed after unary operator: '-field-stroke'
(988,25): run-time error CSS1039: Token not allowed after unary operator: '-radius-sm'
(989,17): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(990,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(991,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-medium'
(996,35): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(997,39): run-time error CSS1039: Token not allowed after unary operator: '-text-muted'
(1010,38): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(1010,58): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(1011,22): run-time error CSS1039: Token not allowed after unary operator: '-field-stroke'
(1012,28): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(1014,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(1015,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-24'
(1052,38): run-time error CSS1039: Token not allowed after unary operator: '-btn-border'
(1052,57): run-time error CSS1039: Token not allowed after unary operator: '-btn-border'
(1053,22): run-time error CSS1039: Token not allowed after unary operator: '-field-stroke'
(1055,25): run-time error CSS1039: Token not allowed after unary operator: '-radius-sm'
(1059,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1060,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(1061,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-24'
(1072,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1074,17): run-time error CSS1039: Token not allowed after unary operator: '-text-muted'
(1087,25): run-time error CSS1039: Token not allowed after unary operator: '-radius-sm'
(1088,38): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(1088,58): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(1089,22): run-time error CSS1039: Token not allowed after unary operator: '-field-stroke'
(1092,17): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(1120,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1121,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-medium'
(1189,38): run-time error CSS1039: Token not allowed after unary operator: '-btn-border'
(1189,57): run-time error CSS1039: Token not allowed after unary operator: '-btn-border'
(1190,22): run-time error CSS1039: Token not allowed after unary operator: '-field-stroke'
(1192,25): run-time error CSS1039: Token not allowed after unary operator: '-radius-sm'
(1193,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1194,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-medium'
(1195,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-base'
(1198,17): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(1206,49): run-time error CSS1039: Token not allowed after unary operator: '-btn-border-strong'
(1212,31): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(1212,64): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(1251,22): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(1252,17): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(1267,36): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(1277,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1278,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(1279,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-heading'
(1289,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1290,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-medium'
(1291,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-base'
(1307,32): run-time error CSS1039: Token not allowed after unary operator: '-line-on-light-strong'
(1313,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1314,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(1315,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-24'
(1322,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1323,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-medium'
(1324,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-base'
(1338,32): run-time error CSS1039: Token not allowed after unary operator: '-line-on-light-strong'
(1356,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1357,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-medium'
(1358,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-base'
(1403,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1404,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(1405,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-eyebrow'
(1409,17): run-time error CSS1039: Token not allowed after unary operator: '-text-faint'
(1437,22): run-time error CSS1039: Token not allowed after unary operator: '-color-white'
(1438,17): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(1464,32): run-time error CSS1039: Token not allowed after unary operator: '-line-on-light-strong'
(1467,23): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1471,23): run-time error CSS1039: Token not allowed after unary operator: '-fw-bold'
(1472,21): run-time error CSS1039: Token not allowed after unary operator: '-fs-24'
(1477,17): run-time error CSS1039: Token not allowed after unary operator: '-color-black'
(1518,28): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1522,32): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1532,61): run-time error CSS1039: Token not allowed after unary operator: '-line-on-light-strong'
(1535,33): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1547,11): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(1547,127): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1547,288): run-time error CSS1039: Token not allowed after unary operator: '-hp-btn-fill'
(1547,308): run-time error CSS1039: Token not allowed after unary operator: '-hp-btn-fill'
(1547,508): run-time error CSS1039: Token not allowed after unary operator: '-hp-btn-fill'
(1554,25): run-time error CSS1062: Expected semicolon or closing curly-brace, found '-'
(1559,120): run-time error CSS1039: Token not allowed after unary operator: '-color-dark'
(1596,70): run-time error CSS1039: Token not allowed after unary operator: '-line-on-dark'
(1631,37): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1632,37): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1650,38): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1652,53): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1652,228): run-time error CSS1039: Token not allowed after unary operator: '-text-muted'
(1662,33): run-time error CSS1039: Token not allowed after unary operator: '-text-muted'
(1664,64): run-time error CSS1039: Token not allowed after unary operator: '-line-on-light'
(1699,42): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1699,187): run-time error CSS1039: Token not allowed after unary operator: '-text-faint'
(1700,40): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1701,39): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1710,92): run-time error CSS1039: Token not allowed after unary operator: '-color-dark'
(1716,39): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1719,38): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1726,39): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1728,38): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1729,38): run-time error CSS1039: Token not allowed after unary operator: '-font-avant'
(1729,117): run-time error CSS1039: Token not allowed after unary operator: '-text-muted-strong'
 */
/* ==========================================================================
   DESIGN TOKENS
   Derived from the ABC Designs Figma (file ErIWbDeYMNP1lwG5zCA6YJ). The Figma
   has no formal variables, so these are curated from the design's values.
   Loaded first in the ~/content/home bundle (BundleConfig.cs), so every
   stylesheet can reference them with var(). Add new shared values here rather
   than hard-coding them in multiple places.
   Note: CSS custom properties can't be used inside @media conditions, so the
   breakpoints below are documentation only — keep the px in the media queries.
   ========================================================================== */

:root {
    /* ----- Type families ----- */
    --font-avant: "itc-avant-garde-gothic-pro", sans-serif; /* primary redesign font */
    --font-degular: "degular", sans-serif;
    --font-geom: "geom-graphic", sans-serif;
    --font-archivo: "Archivo", sans-serif;
    --font-montserrat: "Montserrat", sans-serif; /* main nav links (per Figma) */

    /* ----- Font weights (Avant Garde ships 300/500/700; Figma "Demi" -> 700) ----- */
    --fw-light: 300;
    --fw-medium: 500;
    --fw-bold: 700;

    /* ----- Brand / surfaces ----- */
    --color-white: #fff;
    --color-black: #000;
    --color-dark: #232323;   /* site background + dark section bg */
    --color-accent: #6ec8ff; /* nav underline / highlight */

    /* ----- Text on light sections ----- */
    --text-dark: #000;
    --text-muted: rgba(0, 0, 0, 0.52);
    --text-muted-strong: rgba(0, 0, 0, 0.6);
    /* 0.42 rendered as #949494 on white — only 3.0:1, failing WCAG AA (4.5:1) for the 12px
       eyebrow labels. 0.55 gives ~#757575 ≈ 4.6:1 and passes. */
    --text-faint: rgba(0, 0, 0, 0.55);

    /* ----- Text on dark sections ----- */
    --text-on-dark: #fff;
    --text-on-dark-soft: rgba(255, 255, 255, 0.84);

    /* ----- Lines / dividers ----- */
    /* Three distinct stroke opacities in the Figma, read from the exported SVGs:
       the full-width section rules are the strongest, the services-link rules
       lighter, and the hero divider is white @ 0.46. */
    --line-on-light: rgba(0, 0, 0, 0.49);        /* services-link rules (Figma Line 4) */
    --line-on-light-strong: rgba(0, 0, 0, 0.64); /* full-width section rules (Figma Line 3) */
    --line-on-dark: rgba(255, 255, 255, 0.46);   /* hero divider over the image (Figma Line 1) */

    /* ----- Buttons ----- */
    --btn-bg: #cdcaca;
    --btn-border: #e9e9e9;
    --btn-border-strong: #1d1d1d;
    --social-border: #ceecff; /* outline on the dark social buttons (footer + interior pages) */

    /* ----- Forms ----- */
    --field-border: #bfbaba; /* input / select / textarea / upload border */

    /* ----- Type scale (Figma px) ----- */
    --fs-hero: 4rem;       /* 64px  hero H1 */
    --fs-display: 3rem;    /* 48px  dark banner heading / review quote */
    --fs-heading: 2.375rem;/* 38px  section headings */
    --fs-project: 2.5rem;  /* 40px  project card title */
    --fs-links: 2.25rem;   /* 36px  service links */
    --fs-attr: 2rem;       /* 32px  review attribution */
    --fs-24: 1.5rem;       /* 24px  form fields/labels, legal-page H2, sitemap links */
    --fs-20: 1.25rem;      /* 20px  hero slide label / breadcrumb */
    --fs-18: 1.125rem;     /* 18px  nav items / buttons */
    --fs-base: 1rem;       /* 16px  body copy */
    --fs-eyebrow: 0.75rem; /* 12px  project eyebrow */

    /* ----- Layout ----- */
    --container-max: 1470px; /* the site .container max-width (= Figma 1440 content + 2×15 gutter) */
    --content-max: 1920px;   /* 1920 cap used by the full-bleed services section */
    --gutter: 15px;          /* .container side padding */
    --radius: 8px;           /* buttons / dropdown */
    --radius-sm: 4px;        /* form fields */

    /* ----- Breakpoints (documentation only — not usable in @media) ----- */
    --bp-xs: 500px;
    --bp-sm: 768px;
    --bp-md: 992px;
    --bp-lg: 1230px;
    --bp-xl: 1671px;
}

html { margin: 0; padding: 0; scroll-behavior: smooth; }

body { background-color: var(--color-dark); color: #fff; margin: 0; padding: 0; position: relative; font-size: 1rem; overflow-x: hidden; }

.degular { font-family: var(--font-degular); font-style: normal; font-display: swap; }

.archivo { font-family: var(--font-archivo); font-style: normal; font-display: swap; }

/* ----- Inline SVG icons (replaces the Font Awesome kit) -----
   The sprite itself must stay in the DOM for <use> to resolve, but must not take up space.
   display:none would work in modern browsers, but the zero-size/absolute approach is the
   safer, more widely-supported way to hide a sprite.
   .icon sizes by height and inherits colour, so it behaves like the <i> font icons it
   replaces - drop it anywhere text is styled and it matches. width:auto matters because
   the icons have three different aspect ratios (viewBoxes of 320, 448 and 512 wide). */
.icon-sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
.icon {
    height: 1em;
    width: auto;
    fill: currentColor;
    display: inline-block;
    vertical-align: -0.125em; /* matches the optical baseline FA used */
}

/* Breakpoint-gated line break. `<br class="br-md">` forces the design's wrap from
   the md breakpoint (992px) up, and collapses below it so narrow headings use the
   full width and wrap naturally. `md` matches the dw-responsive breakpoint scale
   (xs 500 / sm 768 / md 992 / lg 1230 / xl 1671). */
.br-md { display: none; }
@media screen and (min-width: 992px) {
    .br-md { display: inline; }
}

h1 { margin: 0; padding: 0; line-height: 1; font-size: 5.3rem; font-family: var(--font-degular); font-style: normal; font-weight: 300; }
h2 { margin: 0; padding: 0; line-height: 1; font-size: 2.4rem; font-family: var(--font-degular); font-style: normal; font-weight: 300; }

.banner { background-size: cover; background-repeat: no-repeat; background-attachment: fixed; background-position: top center; }

/* JS (dwjquery.js) swaps data-src in and removes .lazy, so this rule is only ever
   applied before load - it will not match in a finished DOM. Do not delete. */
.lazy { max-height: 1px; }

/* Rendered by MVC only when a field fails validation, so it also will not match a
   freshly loaded page. Do not delete. */
.field-validation-error { font-family: var(--font-geom); font-weight: 300; font-style: normal; font-display: swap; color: #ff0000; padding-bottom: 5px; padding-top: 5px; font-size: 0.9rem; }

.upper { text-transform: uppercase }

a { color: #fff; text-decoration: none; }

.img-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; background-color: #0009; color: #fff; }

a:hover .img-overlay { display: none; }


/*FORM*/
select { background-color: var(--color-dark) !important; }
::placeholder { color: #fff; font-weight: 300; }
input, textarea, select, .upload-btn { border: none; outline: none; height: 50px; background-color: transparent; color: #fff; font-size: 1rem; font-family: var(--font-geom); font-weight: 500; font-style: normal; font-display: swap; border-bottom: 2px solid #fff; width: 100%; }

/* file upload button */
input[type="file"] { border: none; max-height: min-content; height: initial; }
input[type="file"]::file-selector-button { display: none; }


.dw-theme .dw-nav { position: absolute; left: 0; top: 0; margin-top: 0 !important; }

.dw-dots { position: absolute; left: 150px; top: 45px; }


.hov-und:hover { text-decoration: underline; cursor: pointer; }


.support-container { margin-top: 60px; font-size: 1.2rem; }

.support-container h1 { font-size: 3.5rem; }


@media screen and (max-width:1230px) {
  .dw-dots { position: absolute; left: 0; top: 76px; }
}

@media screen and (max-width: 992px) {
  #footer { text-align: center; }
  .dw-theme .dw-nav { width: 100%; display: flex; justify-content: space-between; }
  .dw-dots { position: absolute; left: 50%; transform: translateX(-50%); top: 45px; }
  .dw-prev, .dw-next { display: flex; align-items: center; justify-content: center; height: 40px; width: 40px; background-color: #7a7a7a !important; }
}

@media screen and (max-width: 767px) {
  h1 { font-size: 4rem; }
}

@media screen and (max-width: 500px) {
  h1 { font-size: 3rem; }
  .mt-60 { margin-top: 30px!important; }
  h1 { margin-bottom: 60px!important; }
}

/* ==========================================================================
   SITE HEADER / NAV (2026 redesign)
   Global header (SiteHead.cshtml). Transparent over the hero on pages that set
   ViewBag.TransparentHeader (homepage); solid dark bar elsewhere.
   Desktop: horizontal nav with a Services dropdown. Mobile (<992px): hamburger
   that folds a panel down; Services becomes an accordion. Logic: site-header.js.
   ========================================================================== */

.site-header { position: absolute; top: 0; left: 0; width: 100%; z-index: 100; }
.site-header.is-solid { position: relative; background-color: var(--color-dark); }

.site-header__bar { display: flex; align-items: center; justify-content: space-between; padding: 36px 0; } /* Figma: menu frame py-36 */
.site-header__logo { display: inline-flex; align-items: center; }
.site-header__logo img { width: 114px; height: auto; display: block; transition: transform .2s ease; }
.site-header__logo:hover img { transform: scale(1.05); }

/* ----- Desktop nav ----- */
.site-nav { display: flex; align-items: center; gap: 60px; }
.site-nav__list { display: flex; align-items: center; gap: 54px; list-style: none; margin: 0; padding: 0; }
.site-nav__item { position: relative; }

.site-nav__link {
    display: inline-flex; align-items: center; gap: 10px;
    /* Figma: Montserrat Medium 18px / 18.851px / +0.36px, uppercase. The nav is the
       only place the site uses Montserrat — everything else is Avant Garde. */
    font-family: var(--font-montserrat); font-weight: 500;
    font-size: 1.125rem; line-height: 1.047; letter-spacing: 0.02em; text-transform: uppercase;
    color: var(--text-on-dark-soft); background: none; border: 0; cursor: pointer;
    padding: 6px 0; position: relative; white-space: nowrap;
}
.site-nav__link:hover { color: #fff; }
/* Blue underline accent on hover (matches Figma) */
.site-nav__link::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 2px;
    background-color: var(--color-accent); transform: scaleX(0); transform-origin: left; transition: transform .2s ease;
}
.site-nav__item:hover > .site-nav__link::after { transform: scaleX(1); }
.site-nav__chev { font-size: 0.7rem; transition: transform .2s ease; }
.site-nav__item.has-dropdown:hover .site-nav__chev { transform: rotate(180deg); }

/* Services dropdown */
.site-nav__dropdown {
    position: absolute; top: 100%; left: 0; min-width: 270px;
    background-color: var(--color-dark); border: 1px solid #3a3a3a; border-radius: 8px;
    padding: 8px; display: flex; flex-direction: column;
    opacity: 0; visibility: hidden; transform: translateY(8px);
    transition: opacity .2s ease, transform .2s ease; z-index: 10;
}
.site-nav__item.has-dropdown:hover .site-nav__dropdown,
.site-nav__item.has-dropdown.is-open .site-nav__dropdown { opacity: 1; visibility: visible; transform: translateY(0); }
.site-nav__dropdown-link {
    /* Not in the Figma (the dropdown is never shown open) — matched to the parent
       nav links so the whole menu reads as one family. */
    font-family: var(--font-montserrat); font-weight: 500; font-size: 1rem;
    letter-spacing: 0.01em; text-transform: uppercase; color: var(--text-on-dark-soft);
    padding: 11px 12px; border-radius: 6px; white-space: nowrap; transition: background-color .15s ease, color .15s ease;
}
.site-nav__dropdown-link:hover { background-color: #333; color: #fff; }

/* CTA button */
.site-nav__cta {
    display: inline-flex; align-items: center; justify-content: center;
    font-family: var(--font-avant); font-weight: 700; font-size: 1.125rem;
    letter-spacing: 0.02em; text-transform: uppercase; color: #000 !important;
    /* Figma: 47px tall = 1px border + 13px padding + 19px content, each side.
       Set as an explicit height (rather than vertical padding) so the hover state
       below can thicken the border to 2px without changing the button's size. */
    box-sizing: border-box; height: 47px;
    background-color: #fff; border: 1px solid var(--btn-border-strong); border-radius: 8px; padding: 0 16px; line-height: 19px;
    transition: background-color .2s ease, color .2s ease, border-color .2s ease;
}
/* Hover — Figma component 410:50 ("Property 1=Variant2"). The solid white pill
   empties out into a ghost button: transparent fill so the dark header/hero shows
   through, white label, and a 2px light outline.
   The outline is flat rather than the gradient .hp-btn uses. Sampled off the
   variant render it does ramp, but only rgb(222) -> rgb(248) across a 2px line —
   imperceptible, and reproducing it would need a mask-composite pseudo-element
   because a gradient can only be confined to the border with a second padding-box
   layer, which a transparent-centred button cannot have. #e9e9e9 sits mid-ramp and
   is the same token Figma reports for the sibling button component.
   The 1px -> 2px border is absorbed by the fixed height and the 1px-tighter
   horizontal padding, so the header layout does not shift on hover. */
.site-nav__cta:hover,
.site-nav__cta:focus-visible {
    color: #fff !important;
    background-color: transparent;
    border: 2px solid var(--btn-border);
    padding: 0 15px;
}

/* ----- Desktop: no hamburger, and no menu logo (the bar has one) ----- */
.site-header__burger { display: none; }
.site-nav__brand { display: none; }

/* ==========================================================================
   MOBILE (<992px): full-screen overlay menu
   The panel covers the viewport, with the logo centred on the same line as the
   close (X) and the links stacked beneath it. Logic: site-header.js.
   ========================================================================== */

/* Page scroll is locked while the overlay is open, so the content behind it can't
   be dragged around under the menu. The panel does its own scrolling if the links
   overflow a short viewport (see overflow-y below). Set on <html> by site-header.js
   rather than in a media query, because the class is only ever added on mobile. */
html.nav-open,
html.nav-open body { overflow: hidden; }

@media screen and (max-width: 991px) {
    .site-header__bar { padding: 18px 0; }
    .site-header__logo img { width: 92px; }

    /* ----- Hamburger / close ----- */
    /* z-index keeps it above the overlay (both are children of .site-header, which is
       the stacking context) so the same button that opens the menu also closes it. */
    .site-header__burger {
        display: inline-flex; flex-direction: column; justify-content: center; gap: 5px;
        width: 44px; height: 44px; padding: 0; background: none; border: 0; cursor: pointer;
        position: relative; z-index: 2;
    }
    .site-header__burger span { display: block; height: 3px; width: 26px; background-color: #fff; border-radius: 2px; transition: transform .3s ease, opacity .2s ease; }
    .site-header.is-open .site-header__burger span:nth-child(1) { transform: translateY(8px) rotate(45deg); }
    .site-header.is-open .site-header__burger span:nth-child(2) { opacity: 0; }
    .site-header.is-open .site-header__burger span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }

    /* The panel's own centred logo replaces this one while the menu is open, so hide it
       rather than leaving it stacked behind the overlay - it would otherwise still be
       announced by a screen reader as a second identical link. */
    .site-header.is-open .site-header__logo { visibility: hidden; }

    /* ----- The overlay ----- */
    .site-nav {
        position: fixed;
        top: 0; right: 0; bottom: 0; left: 0;
        z-index: 1;
        flex-direction: column;
        align-items: center;
        gap: 0;
        /* Fully opaque: the panel sits over the hero photo on the homepage. */
        background-color: var(--color-dark);
        padding: 0 15px 40px;
        overflow-y: auto;
        /* Stop a scroll that reaches the end of the panel from chaining to the page. */
        overscroll-behavior: contain;
        /* Closed. visibility (not display) so it can transition, and so nothing inside
           is focusable or announced while hidden - which display:none would also give,
           but without the fade. The 0s .25s delay holds visibility until the fade has
           finished; the open state below drops that delay so it appears immediately. */
        opacity: 0;
        visibility: hidden;
        transform: translateY(-8px);
        transition: opacity .25s ease, transform .25s ease, visibility 0s linear .25s;
    }
    .site-header.is-open .site-nav {
        opacity: 1;
        visibility: visible;
        transform: none;
        transition: opacity .25s ease, transform .25s ease, visibility 0s;
    }

    /* ----- Centred logo ----- */
    .site-nav__brand {
        display: flex; align-items: center; justify-content: center;
        flex: 0 0 auto;
        /* Same construction as .site-header__bar - 18px of padding around a 92px-wide
           logo - so this logo lands on exactly the same line as the X without hard-coding
           a height. (A fixed height has to be 88.5px here: the bar is sized by the logo,
           which is 52.5px tall at 92px wide, not by the 44px burger.) */
        padding: 18px 0;
        margin-bottom: 36px;
    }
    .site-nav__brand img { display: block; width: 92px; height: auto; }

    /* ----- Links ----- */
    /* Capped and centred so the rules don't run the full width of a tablet.
       Anchored under the logo rather than floated to the middle of the panel: auto
       margins centred the group but pushed it ~250px clear of the logo on a tall phone,
       which read as two disconnected halves. The empty space below is left as-is. */
    .site-nav__list { flex-direction: column; align-items: stretch; gap: 0; width: 100%; max-width: 420px; }
    .site-nav__item { border-bottom: 1px solid #333; }
    .site-nav__item:first-child { border-top: 1px solid #333; }
    .site-nav__link {
        width: 100%;
        /* Centred, with the chevron tucked against the label rather than pushed out to
           the far edge as it was in the old full-width fold-down panel. */
        justify-content: center; gap: 10px;
        padding: 18px 4px; color: #fff; font-size: 1.375rem;
    }
    .site-nav__link::after { display: none; } /* no hover underline on a touch panel */

    /* ----- Services accordion ----- */
    .site-nav__dropdown {
        position: static; min-width: 0; background: none; border: 0; border-radius: 0;
        padding: 0; opacity: 1; transform: none;
        align-items: center;
        /* Collapsed: visibility (not just max-height:0) so the links inside are not
           focusable while the accordion is shut - otherwise Tab lands on invisible
           items, and they count towards the overlay's focus cycle. */
        max-height: 0; visibility: hidden; overflow: hidden;
        transition: max-height .3s ease, visibility 0s linear .3s;
    }
    /* Kill the desktop hover rule here: a tap can leave :hover stuck on a touch device,
       which would reveal the dropdown's links without opening the accordion. Declared
       before the .is-open rule so that one still wins when both match. */
    .site-nav__item.has-dropdown:hover .site-nav__dropdown { visibility: hidden; }
    .site-nav__item.has-dropdown.is-open .site-nav__dropdown {
        max-height: 420px; visibility: visible;
        transition: max-height .3s ease, visibility 0s;
    }
    .site-nav__item.has-dropdown.is-open .site-nav__chev { transform: rotate(180deg); }
    .site-nav__dropdown-link { font-size: 1.05rem; padding: 12px 8px; text-align: center; }

    /* ----- CTA ----- */
    /* flex-shrink:0 because .site-nav__cta has a fixed 47px height that a flex column
       would otherwise squash when the panel runs short. */
    .site-nav__cta { width: 100%; max-width: 420px; flex: 0 0 auto; margin-top: 28px; }

    /* Short viewports (landscape phones): tighten so the CTA stays reachable without
       the panel needing to scroll. */
    @media screen and (max-height: 560px) {
        .site-nav__brand { padding: 10px 0; margin-bottom: 16px; }
        .site-nav__brand img { width: 78px; }
        .site-nav__link { padding: 12px 4px; font-size: 1.125rem; }
        .site-nav__cta { margin-top: 18px; }
    }

    @media (prefers-reduced-motion: reduce) {
        .site-nav { transform: none; transition: opacity .01s linear, visibility 0s linear .01s; }
        .site-header.is-open .site-nav { transition: opacity .01s linear, visibility 0s; }
        .site-header__burger span { transition: none; }
    }
}

/* ==========================================================================
   SITE FOOTER (2026 redesign)
   Light footer used site-wide. Matches the Figma (file ErIWbDeYMNP1lwG5zCA6YJ,
   node 262:155): a bordered 2×2 grid — email / phone on top, address / social
   icons below — with a full-width horizontal rule, a full-height vertical rule
   splitting the two columns, and three short rules dividing the four socials.
   Loaded in the ~/content/home bundle (BundleConfig.cs), which is on every page.
   ========================================================================== */
.site-ftr {
    /* Figma strokes these at black @ 0.5 (Line 5 / Line 6 / Line 9 all export as
       stroke="black" stroke-opacity="0.5"); 0.15 was far too faint. */
    --ftr-line: rgba(0, 0, 0, 0.5);
    background-color: #fff;
    color: #000;
    padding: 80px 0 45px;
    /* The page content above ends on a fractional pixel (e.g. y=5919.46875). On a
       fractional devicePixelRatio (Windows display scaling at 125% -> DPR 1.25)
       neither this block nor the one above fully covers that device-pixel row, so
       the dark <body> behind shows through as a grey hairline right across the
       viewport. Overlap by 1px to close the seam; both sides are white, so nothing
       is hidden. Negative margin (not a white box-shadow) so it stays invisible on
       pages whose last section is dark. */
    margin-top: -1px;
}
/* Site.css sets `a { color:#fff }` globally — restate for the light footer. */
.site-ftr a { color: #000; }
/* ...but the social buttons are black with a white glyph — the `a` rule above
   (class+type) outranks the `.site-ftr__social` class, so restate white here at
   higher specificity or the icons render black-on-black (invisible). */
.site-ftr a.site-ftr__social { color: #fff; }

/* ----- Contact grid ----- */
.site-ftr__grid {
    display: grid;
    grid-template-columns: 890fr 552fr; /* Figma 890 / 552 within the 1440 content */
    grid-template-rows: minmax(138px, auto) minmax(135px, auto);
}
.site-ftr__cell {
    box-sizing: border-box;
    display: flex;
    align-items: center;
    font-family: var(--font-avant);
    font-weight: var(--fw-bold);
    font-size: 1.125rem; /* 18px */
    letter-spacing: 0.02em;
    text-transform: uppercase;
    line-height: 1.2;
}
/* The middle cross: horizontal rule above the bottom row, vertical rule left of
   the right column. Together they form the full-width + full-height dividers. */
.site-ftr__cell--address,
.site-ftr__socials { border-top: 1px solid var(--ftr-line); }
.site-ftr__cell--phone,
.site-ftr__socials { border-left: 1px solid var(--ftr-line); }

.site-ftr__cell--phone { justify-content: center; } /* phone is centred in the right column */

/* ----- Social row (right column, bottom cell) ----- */
.site-ftr__socials { padding: 0; align-items: stretch; }
.site-ftr__social-cell {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
}
.site-ftr__social-cell + .site-ftr__social-cell { border-left: 1px solid var(--ftr-line); }
.site-ftr__social {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 57px;
    background-color: #000;
    color: #fff;
    border: 1px solid #ceecff; /* subtle light-blue outline from the Figma */
    border-radius: 8px;
    font-size: 1.5rem; /* ~24px glyph */
    transition: transform .2s ease;
}
.site-ftr__social:hover { transform: scale(1.08); }

/* ----- Legal / copyright bar (kept from the old footer, restyled light) ----- */
.site-ftr__legal {
    margin-top: 45px;
    padding-top: 22px;
    border-top: 1px solid var(--ftr-line);
}
.site-ftr__legal-inner {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    font-family: var(--font-avant);
    font-weight: var(--fw-light);
    font-size: 0.8rem;
    color: var(--text-muted-strong);
    text-align: center;
}
.site-ftr__legal a { color: var(--text-muted-strong); }
.site-ftr__legal-links { display: flex; gap: 15px; }

@media screen and (min-width: 1230px) {
    .site-ftr__legal-inner { flex-direction: row; justify-content: space-between; text-align: left; }
    .site-ftr__legal-inner > div { flex: 1 1 0; }
    .site-ftr__legal-links { justify-content: center; }
    .site-ftr__legal-inner > #footnoteright { text-align: right; }
}

/* ----- Stack below the desktop grid ----- */
@media screen and (max-width: 991px) {
    .site-ftr { padding: 50px 0 35px; }
    .site-ftr__grid { grid-template-columns: 1fr; grid-template-rows: none; }
    .site-ftr__cell {
        border-left: 0;
        border-top: 1px solid var(--ftr-line);
        justify-content: center;
        text-align: center;
        padding: 22px 0;
    }
    .site-ftr__cell--email { border-top: 0; padding-top: 0; }
    /* Socials become a centred row of buttons */
    .site-ftr__socials { align-items: center; justify-content: center; gap: 15px; }
    .site-ftr__social-cell { flex: 0 0 auto; }
    .site-ftr__social-cell + .site-ftr__social-cell { border-left: 0; }
    /* Drop the desktop 45px gap so the space below the icons matches the 22px above */
    .site-ftr__legal { margin-top: 0; }
}

/* ==========================================================================
   PAGE HERO + BREADCRUMB (2026 redesign)
   Shared interior-page banner (Figma file ErIWbDeYMNP1lwG5zCA6YJ). Two variants:
   - default: full-bleed background photo + dark gradient (the 4 category pages).
   - .page-hero--flat: flat dark banner, no photo (About, get-a-quote, terms,
     cookies, sitemap).
   Layout on both: large uppercase H1, a full-width white rule, then a breadcrumb
   trail (chevron-separated). Rendered by Views/Shared/_PageHero.cshtml.
   Loaded in the ~/content/home bundle (BundleConfig.cs), which is on every page.
   ========================================================================== */
.page-hero {
    position: relative;
    display: flex;
    align-items: flex-end;
    min-height: 632px; /* Figma category-page banner height */
    background-color: var(--color-dark);
    color: var(--color-white);
    overflow: hidden;
}
.page-hero--flat { min-height: 380px; } /* Figma legal/utility banner height */

/* ----- Background photo (image variant only) ----- */
.page-hero__bg { position: absolute; inset: 0; z-index: 0; }
.page-hero__img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
/* NO CSS darkening overlay here. The banner exports already carry the Figma
   gradient baked in — same as the homepage hero (banner-home.webp), which is why
   that one applies no overlay either. A CSS gradient on top double-darkens the
   photo: the old rgba(0,0,0,.7) left the nav area at ~17% brightness.
   Evidence: the top 3% of external/exhibition/vehicle peaks at 97-123 per channel,
   above the 76 ceiling a baked 0.7 overlay would impose, and in the same range as
   the known-baked banner-home.webp (105).
   White nav/title text stays legible unaided — the brightest of the four banners
   averages 71 luminance across its top band, ~9:1 against white. If a future banner
   IS supplied undarkened, bake the gradient into that export rather than
   reintroducing a global overlay. */

/* ----- Content ----- */
/* NB: `.page-hero__inner` is also `.container`, and dw-responsive.css's
   `.container { padding: 0 15px }` loads AFTER this file — at equal specificity
   its shorthand would zero our padding-top/bottom. Scope with `.page-hero` to
   out-specify it (the 15px side gutters still come from .container). */
.page-hero .page-hero__inner {
    position: relative;
    z-index: 1;
    width: 100%;
    padding-top: 160px;  /* clear the transparent header sitting over the banner */
    padding-bottom: 34px; /* Figma: breadcrumb baseline sits 34px above the banner bottom */
}
/* Flat (legal) banner sits the breadcrumb 36px off the bottom in Figma. */
.page-hero--flat .page-hero__inner { padding-bottom: 36px; }
.page-hero__title {
    margin: 0;
    font-weight: var(--fw-bold);
    font-size: var(--fs-display); /* 48px */
    line-height: 1;
    text-transform: uppercase;
    letter-spacing: -0.03em;
}
.page-hero__rule {
    border: 0;
    border-top: 1px solid var(--color-white);
    margin: 6px 0 19px; /* Figma: 6px below title, 19px above breadcrumb */
}

/* ----- Breadcrumb ----- */
.page-hero__crumbs {
    display: flex;
    align-items: center;
    gap: 9px;
    font-size: var(--fs-20); /* 20px */
    font-weight: var(--fw-light); /* Figma "Book" */
    text-transform: uppercase;
    letter-spacing: -0.02em;
}
.page-hero__crumb { color: var(--color-white); text-decoration: none; }
.page-hero__crumb:hover { text-decoration: underline; }
.page-hero__crumb--current { cursor: default; }
.page-hero__crumb-sep { font-size: 0.7em; opacity: 0.85; }

/* ----- Responsive ----- */
@media screen and (max-width: 991px) {
    .page-hero { min-height: 55vh; }
    .page-hero--flat { min-height: 280px; }
    .page-hero .page-hero__inner { padding-top: 120px; padding-bottom: 30px; }
    .page-hero__title { font-size: 2.25rem; }
    .page-hero__rule { margin: 18px 0 12px; }
    .page-hero__crumbs { font-size: 1rem; }
}
@media screen and (max-width: 500px) {
    .page-hero--flat { min-height: 240px; }
    .page-hero .page-hero__inner { padding-bottom: 26px; }
    .page-hero__title { font-size: 1.75rem; }
    .page-hero__crumbs { flex-wrap: wrap; gap: 7px; }
}

/* ==========================================================================
   CATEGORY PAGE BODY (2026 redesign)
   Light body for the four category pages (Figma ErIWbDeYMNP1lwG5zCA6YJ):
   an intro block (heading + copy + rule) then alternating image/text service
   rows. The imagery is a SIZED, RESPONSIVE PLACEHOLDER for now — swap
   `.cat-row__placeholder` for a real <img> once the photos are ready; the
   827:526 aspect ratio and layout stay the same.
   Loaded in the ~/content/home bundle (BundleConfig.cs).
   ========================================================================== */
.cat-body {
    background: var(--color-white);
    color: var(--color-black);
    padding: 112px 0 88px; /* Figma: 112px below hero, 88px above footer */
}

/* ----- Per-page intro padding -----
   The category Figma frames do NOT share one intro rhythm — External sits at
   ~112/78 (confirmed: its heading-to-rule measures 130 here vs 134 in Figma)
   while Indoor's frame is much tighter. Values below are the design's ink-to-ink
   gaps converted to box values (the first copy line's box sits ~8px above its cap
   height, the last ~9px below its baseline), so they are what CSS padding needs
   to be to land the text where Figma puts it.
   NB the copy block itself still runs a line taller than the design's: Avant Garde
   lays out ~3-4% narrower in Figma than in Chrome, so the same paragraph wraps to
   9 lines there and 10 here. That difference is not reachable from padding. */
.cat-body--indoor-signage { padding-top: 59px; }              /* Figma ink gap 67px */
.cat-body--indoor-signage .cat-rule { margin-top: 52px; }     /* Figma ink gap 61px */

.cat-body--vehicle-graphics { padding-top: 54px; }            /* Figma ink gap 62px */
.cat-body--vehicle-graphics .cat-rule { margin-top: 55px; }   /* Figma ink gap 64px */

.cat-body--exhibition-signage { padding-top: 52px; }          /* Figma ink gap 60px */
.cat-body--exhibition-signage .cat-rule { margin-top: 52px; } /* Figma ink gap 61px */
/* Site.css sets a global `a { color:#fff }` — restate for the light body. */
.cat-body a { color: inherit; }

/* ----- Intro ----- */
.cat-intro {
    display: flex;
    justify-content: space-between;
    /* Heading is vertically centred against the copy column, not top-aligned —
       same as the homepage intro (.hp-intro__grid). Top-aligning it left the
       heading ~41px too high: the hero->rule height was right, but the gap under
       the heading measured 179px against the Figma's 134px. */
    align-items: center;
    gap: 60px;
}
.cat-intro__heading {
    flex: 0 0 auto;
    margin: 0;
    font-weight: var(--fw-bold);
    font-size: var(--fs-heading); /* 38px */
    line-height: 1;
    text-transform: uppercase;
    letter-spacing: -0.03em; /* Figma -1.14px @ 38px */
}
.cat-intro__text {
    display: flex;
    flex-direction: column;
    gap: 16px; /* Figma gap between lead and body */
    flex: 0 1 683px; /* Figma copy column = 683px */
    max-width: 683px;
}
.cat-intro__lead {
    margin: 0;
    font-weight: var(--fw-medium);
    font-size: var(--fs-base);
    line-height: 1.625; /* 26/16 */
    letter-spacing: -0.02em; /* Figma -0.32px @ 16px */
}
.cat-intro__body {
    margin: 0;
    font-weight: var(--fw-light);
    font-size: var(--fs-base);
    line-height: 1.625;
    letter-spacing: -0.02em;
}
/* Inline text links in the intro copy get the site's text-link treatment: bold and
   underlined, losing the underline on hover (see the note by .sitemap a:hover in
   legal.css). Scoped to the copy paragraphs rather than `.cat-body a`, because that
   would also catch the service rows and about cards - which are whole-block links,
   not text links. */
.cat-intro__lead a,
.cat-intro__body a { font-weight: var(--fw-bold); text-decoration: underline; }
.cat-intro__lead a:hover,
.cat-intro__lead a:focus-visible,
.cat-intro__body a:hover,
.cat-intro__body a:focus-visible { text-decoration: none; }

.cat-rule {
    border: 0;
    border-top: 1px solid var(--line-on-light);
    margin: 78px 0 88px; /* Figma: 78px under intro, 88px above first row */
}

/* ----- Service rows ----- */
.cat-rows {
    display: flex;
    flex-direction: column;
    gap: 88px; /* Figma row gap */
}
.cat-row {
    display: flex;
    align-items: center;
    gap: 127px; /* Figma column gap */
}
.cat-row--reverse { flex-direction: row-reverse; }

.cat-row__media {
    flex: 0 0 57.43%; /* 827 / 1440 */
    display: block;
}
/* Images are the design's 827×526; width/height attrs reserve the ratio (no CLS),
   and width:100%/height:auto keep them fully responsive as the column scales. */
.cat-row__img {
    display: block;
    width: 100%;
    height: auto;
}

.cat-row__text {
    display: flex;
    flex-direction: column;
    gap: 22px; /* Figma gap between eyebrow / title / body (and between body paragraphs) */
    flex: 1 1 auto;
    max-width: 486px; /* Figma text column */
}
.cat-row__eyebrow {
    margin: 0;
    font-weight: var(--fw-bold); /* Figma: eyebrow is Bold, muted via colour */
    font-size: var(--fs-eyebrow); /* 12px */
    text-transform: uppercase;
    letter-spacing: 0.06em; /* Figma 0.72px @ 12px */
    color: var(--text-faint); /* Figma says rgba(0,0,0,.42); the token is .55 on purpose — see variables.css */
}
.cat-row__title {
    margin: 0;
    font-weight: var(--fw-bold);
    font-size: var(--fs-attr); /* 32px */
    line-height: 0.9; /* Figma 28.8px @ 32px */
    text-transform: uppercase;
}
.cat-row__body {
    margin: 0;
    font-weight: var(--fw-light);
    font-size: var(--fs-base);
    line-height: 1.625;
    letter-spacing: -0.02em; /* Figma -0.32px @ 16px */
}

/* ----- Responsive ----- */
@media screen and (max-width: 1229px) {
    .cat-row { gap: 60px; }
}
@media screen and (max-width: 991px) {
    .cat-body { padding: 64px 0 56px; }
    .cat-intro { flex-direction: column; gap: 20px; }
    .cat-intro__heading,
    .cat-intro__text { flex: 1 1 auto; max-width: none; }
    .cat-rule { margin: 48px 0 56px; }
    .cat-rows { gap: 56px; }
    /* Stack every row image-over-text (ignore the desktop alternation) */
    .cat-row,
    .cat-row--reverse { flex-direction: column; align-items: stretch; gap: 22px; }
    .cat-row__media,
    .cat-row__text { flex: 1 1 auto; max-width: none; }
}

/* ==========================================================================
   ABOUT US (2026 redesign)
   Figma file ErIWbDeYMNP1lwG5zCA6YJ, node 346:3255.

   Deliberately thin — most of the page is existing furniture:
     - flat dark banner            -> .page-hero--flat   (page-hero.css)
     - "Who We Are" intro          -> .cat-intro*        (category.css)
     - divider under the intro     -> .cat-rule          (category.css)
     - "Learn more" buttons        -> .hp-btn            (home.css)
     - "Our Customers" heading     -> .hp-heading        (home.css)
     - reviews carousel            -> .hp-review*        (home.css)
   Only the 2x2 service card grid and the customers row are new.

   Design geometry (1920 frame, 1440 content): banner ends 380, intro 441,
   divider 831, cards 865 / 1463.04, customers 2128, footer 3118.
   ========================================================================== */

/* Reuses .cat-body for the white surface; only the vertical rhythm differs.
   Figma: 61px banner -> intro, 113px below the last block to the footer. */
.cat-body--about { padding-top: 61px; padding-bottom: 113px; }
/* Figma: copy ends 775 -> divider 831, divider 831 -> first card 865. */
.cat-body--about .cat-rule { margin-top: 56px; margin-bottom: 34px; }

/* ==========================================================================
   SERVICE CARDS (2x2)
   ========================================================================== */
/* Figma: two 710px columns inside the 1440 content = a 20px column gap; the
   first card's rule sits 46px above the second row's image. */
.about-cards {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 20px;
    row-gap: 46px;
}
.about-card { display: flex; flex-direction: column; text-decoration: none; }
/* Fixed ratio (Figma 710 x 451.584) so the differently-sized source photos all
   crop identically and the box reserves its height before the image loads. */
.about-card__media { width: 100%; aspect-ratio: 710 / 452; overflow: hidden; background-color: var(--btn-bg); }
.about-card__img { display: block; width: 100%; height: 100%; object-fit: cover; }
/* Figma: 16px image -> caption row, the row is 75px tall, then 9px to the rule. */
.about-card__foot {
    display: flex; align-items: center; justify-content: space-between; gap: 20px;
    min-height: 75px; margin-top: 16px;
}
.about-card__title {
    margin: 0;
    font-family: var(--font-avant);
    font-weight: var(--fw-bold);
    font-size: 2rem;          /* 32px */
    line-height: 1.025;       /* Figma 32.8px @ 32px */
    letter-spacing: 0.02em;   /* Figma 0.64px @ 32px */
    text-transform: uppercase;
    color: var(--color-black);
}
.about-card__rule { border: 0; height: 1px; background-color: var(--line-on-light); margin: 9px 0 0; }
/* The whole card is the link, so give the button its hover state when the card is
   hovered anywhere - same treatment as .hp-btn:hover in home.css. */
.about-card:hover .hp-btn { --hp-btn-fill: #1b1b1b; color: #fff; }

/* ==========================================================================
   OUR CUSTOMERS
   ========================================================================== */
/* Figma: 113px from the last card rule down to this block. */
.about-customers { margin-top: 113px; }
.about-customers__row { display: flex; align-items: center; justify-content: space-between; gap: 60px; }
/* Figma: five logos spaced across a 1072px track, each at its own natural size
   (they are deliberately NOT height-normalised - Cardiff Airport is 32px of ink,
   the Vale crest 94px). The supplied files carry differing amounts of internal
   padding, so the width/height attributes in the markup are set from each file's
   measured ink box, not its canvas, to make the visible marks match the design.
   The track is pinned to the Figma's 94px row height; tidy.webp's transparent
   padding overflows it harmlessly rather than inflating the section. */
.about-customers__logos { display: flex; align-items: center; justify-content: space-between; gap: 30px; flex: 0 1 1072px; height: 94px; }
.about-customers__logos img { display: block; flex: 0 0 auto; max-width: 100%; }
/* Figma: 46px below the logo row. */
.about-customers__rule { border: 0; height: 1px; background-color: var(--line-on-light); margin: 46px 0 0; }

/* ==========================================================================
   REVIEWS
   Same carousel as the homepage (shared partial); only the surrounding
   spacing differs, so .hp-reviews' own padding is not reused here.
   Figma: 98px from the customers rule to the quote.
   ========================================================================== */
.about-reviews { margin-top: 98px; }

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */
@media screen and (max-width: 1229px) {
    .about-card__title { font-size: 1.7rem; }
    .about-customers__logos { gap: 30px; }
}

@media screen and (max-width: 991px) {
    .cat-body--about { padding-top: 50px; padding-bottom: 70px; }
    .cat-body--about .cat-rule { margin-top: 40px; margin-bottom: 30px; }
    /* One card per row once the columns get too narrow for a 32px title plus a button. */
    .about-cards { grid-template-columns: minmax(0, 1fr); row-gap: 40px; }
    .about-customers { margin-top: 60px; }
    .about-customers__row { flex-direction: column; align-items: flex-start; gap: 24px; }
    /* height:auto so wrapped rows aren't clipped by the desktop 94px track. */
    .about-customers__logos { flex: 0 1 auto; width: 100%; height: auto; flex-wrap: wrap; gap: 30px 40px; justify-content: flex-start; }
    .about-customers__rule { margin-top: 30px; }
    .about-reviews { margin-top: 60px; }
}

@media screen and (max-width: 767px) {
    /* Stack the title above the button so neither is squeezed on a phone. */
    .about-card__foot { flex-direction: column; align-items: flex-start; gap: 14px; min-height: 0; }
    .about-card__title { font-size: 1.5rem; }
}

/* ==========================================================================
   GET A QUOTE FORM (2026 redesign)
   Figma ErIWbDeYMNP1lwG5zCA6YJ (node 350:3616). A light, bordered form with
   labels above each field. Overrides Site.css's global dark input styling
   (which was built for the old form). Rendered by Views/Home/ContactUsForm.cshtml
   inside the get-quote page's .qf-section. Loaded in the ~/content/home bundle.
   ========================================================================== */
.qf-section {
    background: var(--color-white);
    color: var(--color-black);
    /* Figma (1920 frame): hero ends 380 -> form starts 448 = 68px. Form ends 1225
       and the footer grid starts 1359 = 134px, of which .site-ftr already supplies
       80px of padding-top, so only 54px belongs to this section. */
    padding: 68px 0 54px;
}
/* Figma spans the form 483 -> 1438 inside the 240 -> 1680 content column: its
   midpoint is 960.5, i.e. dead centre of the 1920 frame. So it is centred, not
   left-aligned in the container. */
.qf { max-width: 955px; margin: 0 auto; }

/* Vertical rhythm mirrors the Figma frame gaps */
.qf__form { display: flex; flex-direction: column; gap: 29px; }
.qf__body { display: flex; flex-direction: column; gap: 51px; }
.qf__top  { display: flex; flex-direction: column; gap: 47px; }
.qf__rows { display: flex; flex-direction: column; gap: 45px; }

.qf__grid { display: flex; gap: 21px; }
.qf__grid > * { flex: 1 1 0; min-width: 0; }

.qf__field { display: flex; flex-direction: column; }
.qf__label {
    margin: 0 0 1px; /* Figma: 1px between label and field */
    font-family: var(--font-avant);
    font-weight: var(--fw-bold);
    font-size: var(--fs-24); /* 24px */
    line-height: 1.583; /* Figma 38px @ 24px */
    letter-spacing: -0.03em; /* -0.72px */
    text-transform: uppercase;
    color: var(--color-black);
}

/* Every bordered control in this design is stroked with the SAME top-to-bottom
   gradient, not the flat #bfbaba that get_design_context reports (codegen
   flattens gradient strokes to their first stop). Measured off the design render,
   the stroke runs rgb(156,151,151) at the top edge to rgb(47,46,46) at the bottom
   on every control regardless of its height — i.e. #bfbaba -> #000 with the ramp
   extended past both ends of the box, which is the same construction Figma uses
   for the upload icon's stroke. Applied via the padding-box/border-box two-layer
   trick (as .hp-btn does) since a border can't take a gradient directly. */
.qf { --field-stroke: linear-gradient(180deg, var(--field-border) -32%, #000 143%); }

/* Fields — override Site.css's global `input, textarea, select {…}` dark rules */
.qf__input {
    box-sizing: border-box;
    width: 100%;
    height: 60px;
    /* 15px + the 1px border = the Figma's 16px inset from the outer edge. */
    padding: 0 15px;
    background: linear-gradient(var(--color-white), var(--color-white)) padding-box,
                var(--field-stroke) border-box;
    border: 1px solid transparent;
    border-radius: var(--radius-sm); /* 4px */
    color: var(--color-black);
    font-family: var(--font-avant);
    font-weight: var(--fw-medium);
    font-size: 1.125rem; /* 18px */
}
/* Swapping the custom property re-resolves the border-box layer above, so focus
   works for the select's three-layer background too without restating it. */
.qf__input:focus { outline: none; --field-stroke: linear-gradient(#000, #000); }
.qf__input::placeholder { color: var(--text-muted); }

.qf__select {
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    /* Three layers: the chevron on top, then the white fill, then the gradient
       stroke. Restated (rather than inherited from .qf__input) because the
       chevron layer has to sit above the fill.
       NOTE: the Figma has a chevron drawn for this control but the layer is
       toggled off, so the design render shows none. Kept, because a <select> with
       appearance:none and no affordance is indistinguishable from a text input. */
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='8' fill='none'%3E%3Cpath d='M1 1l7 6 7-6' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E") no-repeat right 15px center,
                linear-gradient(var(--color-white), var(--color-white)) padding-box,
                var(--field-stroke) border-box;
    background-color: var(--color-white) !important; /* beat Site.css `select {…!important}` */
    padding-right: 44px;
    font-weight: var(--fw-bold);
    font-size: var(--fs-24); /* 24px */
    letter-spacing: -0.03em;
    text-transform: uppercase;
    cursor: pointer;
}
.qf__textarea {
    height: 198px; /* Figma */
    padding: 14px 15px;
    line-height: 1.5;
    resize: vertical;
}

.qf__divider {
    width: 100%;
    /* Figma's Line 7 is a zero-height node whose 2px stroke is painted OUTSIDE the
       node (inset -2px top), so it costs the column no height: measured on the
       design, the rule paints at y736-737 with 45px of clearance above it and 47px
       below. An <hr> is a real 2px box, so without this pull-up it shunts the
       select row, textarea and submit 2px down the page. */
    margin: -2px 0 0;
    border: 0;
    /* Figma Line 7 exports as stroke="black" stroke-opacity="0.78" stroke-width="2" */
    border-top: 2px solid rgba(0, 0, 0, 0.78);
}

/* ----- File upload: grey box with label + icon, native input hidden ----- */
.qf__upload {
    box-sizing: border-box;
    display: flex;
    align-items: center;
    gap: 12px;
    width: 100%;
    height: 60px;
    /* Figma measures its children from the box's outer edge: text at x15, icon box
       ending 9px short of the right edge. Our 1px border eats into both, so the
       padding is set 1px tighter than the Figma numbers. */
    padding: 0 8px 0 14px;
    background: linear-gradient(var(--btn-border), var(--btn-border)) padding-box, /* #e9e9e9 */
                var(--field-stroke) border-box;
    border: 1px solid transparent;
    border-radius: var(--radius-sm);
    cursor: pointer;
}
.qf__upload-text {
    font-family: var(--font-avant);
    font-weight: var(--fw-bold);
    font-size: var(--fs-24); /* 24px */
    letter-spacing: -0.03em;
    text-transform: uppercase;
    white-space: nowrap;
}
.qf__upload-name {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-family: var(--font-avant);
    font-size: 0.8125rem;
    color: var(--text-muted);
}
/* Icon sits in its own bordered rounded box on the right (Figma) */
.qf__upload-icon {
    flex: 0 0 auto;
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    /* Figma strokes this one explicitly with the #BFBABA -> #000 gradient. */
    border: 1px solid transparent;
    border-radius: var(--radius-sm);
    background: linear-gradient(var(--color-white), var(--color-white)) padding-box,
                var(--field-stroke) border-box;
    font-size: 1.375rem; /* ~22px glyph */
    line-height: 0;
    color: var(--color-black);
}
.qf__upload-name:not(:empty) + .qf__upload-icon { margin-left: 12px; }
.qf__file { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; }

/* ----- reCAPTCHA + submit ----- */
/* reCAPTCHA v3 renders no widget (just a hidden token field), so the foot holds
   nothing but the button and any captcha error message stacked above it. */
.qf__foot { display: block; }
/* Visuals (grey #cdcaca fill + white→black gradient border) come from the shared
   .hp-btn; .qf__submit only sets the Figma size. Figma node 350:3650 is w-full
   against the 955px form column, so the button spans the whole form. */
.qf__submit {
    box-sizing: border-box;
    width: 100%;
    height: 63px;
    cursor: pointer; /* .hp-btn targets <a> (pointer by default); a <button> needs it set */
}

/* Site.css styles these globally in geom-graphic 300 — a different typeface to
   everything else on this page, which reads as a bug rather than a deliberate
   contrast. Restate in Avant Garde so the messages sit in the same family as the
   labels above them; the red (#ff0000) and the block display carry over. Padding
   is zeroed because Site.css's 5px top/bottom would double up with the margin. */
.qf .field-validation-error {
    display: block;
    margin-top: 6px;
    padding: 0;
    font-family: var(--font-avant);
    font-weight: var(--fw-medium);
    font-size: 0.875rem; /* 14px — subordinate to the 16px body copy */
    line-height: 1.5;
    letter-spacing: -0.02em;
}

/* ----- Submit loading state -----
   .hp-btn is already a centring inline-flex box, so swapping the label out for
   the spinner leaves the spinner dead centre without any extra positioning.
   quote-form.js adds .qf__submit--loading on click and removes it if the submit
   never goes through (see that file for the clearing paths). */
.qf__submit-spinner { display: none; }
.qf__submit--loading {
    /* The button is inert while in flight. A guard flag in quote-form.js covers
       the keyboard path; this stops a second mouse click. Deliberately NOT the
       disabled attribute — that would pull in the UA's greyed-out styling and
       fight the .hp-btn gradient. */
    pointer-events: none;
}
.qf__submit--loading .qf__submit-label { display: none; }
.qf__submit--loading .qf__submit-spinner {
    display: block;
    box-sizing: border-box;
    width: 24px;
    height: 24px;
    /* currentColor keeps the ring on the button's own text colour, so it stays
       correct if the fill/label pair ever changes. */
    border: 2px solid currentColor;
    border-top-color: transparent;
    border-radius: 50%;
    animation: qf-spin 0.7s linear infinite;
}
@keyframes qf-spin { to { transform: rotate(360deg); } }
/* Still show motion (the button being inert needs to be legible) but slow enough
   not to trigger anyone sensitive to it. */
@media (prefers-reduced-motion: reduce) {
    .qf__submit--loading .qf__submit-spinner { animation-duration: 2.4s; }
}

/* ----- Form-level messages -----
   Everything that is about the form as a whole rather than one field: the server's
   reCAPTCHA rejection, the model-level validation summary, the controller's
   UserMessage (.KO / .OK from BaseViewModel.GetUserMessage), and the client-side
   captcha failure _Layout injects. They all sit in the one .qf__messages slot below
   the submit button (see ContactUsForm.cshtml).

   .KO and .OK had no styles anywhere in the project, so every one of these rendered
   as bare browser-default text. They are given the same construction as the form's
   own controls - #e9e9e9 fill, 4px radius, the shared gradient stroke - so a message
   reads as part of the form, with a 4px status flag down the left edge carrying the
   only colour. Red text on the grey fill was the alternative and fails contrast at
   this size, hence the flag.

   The slot itself is layout-only: no padding, no margin, no min-height. That matters
   because MVC leaves placeholder <span class="field-validation-valid"> markup in it
   even when nothing is wrong, so it can never be relied on to be :empty. */
.qf__messages { display: flex; flex-direction: column; }

/* Higher specificity than `.qf .field-validation-error` above (same 0,2,0, so this
   wins on order) - a form-level message gets the panel, not the small red line a
   field message gets. The -valid variants of both classes deliberately don't match. */
.qf__messages .field-validation-error,
.qf__messages .validation-summary-errors,
.qf__messages .KO,
.qf__messages .OK {
    box-sizing: border-box;
    margin: 24px 0 0;
    padding: 14px 16px;
    background: linear-gradient(var(--btn-border), var(--btn-border)) padding-box,
                var(--field-stroke) border-box;
    border: 1px solid transparent;
    border-radius: var(--radius-sm);
    font-family: var(--font-avant);
    font-weight: var(--fw-medium);
    font-size: var(--fs-base); /* 16px - form-level, so not shrunk like field errors */
    line-height: 1.625;
    letter-spacing: -0.02em;
    color: var(--color-black);
}
/* The status flag. Replacing the transparent left border with a solid one leaves the
   gradient showing on the other three edges. Padding drops by the 3px the border
   grew so the text stays on the same vertical line as an unflagged message. */
.qf__messages .field-validation-error,
.qf__messages .validation-summary-errors,
.qf__messages .KO { border-left: 4px solid #ff0000; padding-left: 13px; }
.qf__messages .OK { border-left: 4px solid var(--btn-border-strong); padding-left: 13px; }

/* ValidationSummary renders a <ul>; the panel already provides the box. */
.qf__messages ul { margin: 0; padding-left: 20px; }
/* UserMessage can contain a mailto link (the file-too-large message). Match the
   site's text-link treatment - see the note by .sitemap a:hover in legal.css. */
.qf__messages a { color: var(--color-black); font-weight: var(--fw-bold); text-decoration: underline; }
.qf__messages a:hover,
.qf__messages a:focus-visible { text-decoration: none; }

/* ----- Responsive -----
   The Figma only specifies the 1920 desktop frame. Above 1230 the container is
   1470 wide (1440 content) so the 955px form is the design 1:1; from 1229 down
   the container narrows past 955 and the form simply tracks it, keeping the two
   columns even, until they stack at 768. */
@media screen and (max-width: 991px) {
    .qf-section { padding: 52px 0 48px; }
    .qf__body { gap: 44px; }
    .qf__top { gap: 38px; }
    .qf__rows { gap: 32px; }
    .qf__grid { gap: 18px; }
}

@media screen and (max-width: 767px) {
    .qf-section { padding: 40px 0 40px; }
    .qf__body { gap: 40px; }
    .qf__top { gap: 32px; }
    .qf__rows { gap: 24px; }
    .qf__grid { flex-direction: column; gap: 24px; }
    /* Scale the 24px type down together so the labels, the select and the upload
       control stay on one line in a single narrow column. */
    .qf__label,
    .qf__select,
    .qf__upload-text { font-size: 1.25rem; } /* 20px */
    .qf__label { line-height: 1.5; }
    .qf__textarea { height: 168px; }
}

/* ==========================================================================
   LEGAL / UTILITY PAGES (2026 redesign)
   Figma ErIWbDeYMNP1lwG5zCA6YJ. Light body shared by the terms and cookies
   pages (page title + lead + sections separated by short 58px dividers), plus
   the sitemap link grid. Loaded in the ~/content/home bundle.
   ========================================================================== */
.legal-body {
    background: var(--color-white);
    color: var(--color-black);
    /* Figma (node 350:3652, 1920 frame): hero ends 380 -> title 440 = 60px. The copy
       ends 1673 and the footer grid starts 1759 = 86px, of which .site-ftr already
       supplies 80px of its own padding-top, so only 6px belongs to this section. */
    padding: 60px 0 6px;
}
/* Site.css sets a global `a { color:#fff }` — restate for the light body. */
.legal-body a { color: inherit; }
/* Text links in body copy: bold + underlined at rest, losing the underline on
   hover. See the shared note above .sitemap a:hover.
   Scoped to the copy elements rather than `.legal-body a`, because the thank-you
   page reuses this body for whole-block card links and .hp-btn buttons - neither
   of which is a text link, and both of which a blanket underline would wreck. */
.legal__lead a,
.legal__text a,
.legal__list a { font-weight: var(--fw-bold); text-decoration: underline; }
.legal__lead a:hover,
.legal__lead a:focus-visible,
.legal__text a:hover,
.legal__text a:focus-visible,
.legal__list a:hover,
.legal__list a:focus-visible { text-decoration: none; }

.legal__title {
    margin: 0;
    font-family: var(--font-avant);
    font-weight: var(--fw-bold);
    font-size: var(--fs-heading); /* 38px */
    line-height: 1;
    letter-spacing: -0.03em; /* -1.14px */
    text-transform: uppercase;
}
.legal__lead {
    /* The terms frame stacks the lead straight under the title with no gap (title
       box ends 478, lead box starts 478). The cookies frame uses 9px - see the
       --cookies overrides at the bottom of this section. */
    margin: 0;
    font-family: var(--font-avant);
    font-weight: var(--fw-medium);
    font-size: var(--fs-base); /* 16px */
    line-height: 1.625; /* 26/16 */
    letter-spacing: -0.02em;
}
/* Cookies opens with three lead paragraphs, gapped 10px (Figma 350:3827). Terms
   has a single lead, so this never fires there. */
.legal__lead + .legal__lead { margin-top: 10px; }

.legal__rule {
    /* Figma: the lead ends 504, the rule paints on row 546, the first section starts
       590. Like every rule in this file it is a zero-height node whose 1px stroke is
       painted outside the flow, so an <hr> - a real 1px box - needs the gap split
       42 above / 43 below to land on the same rows. */
    margin: 42px 0 43px;
    border: 0;
    /* Figma Line 3 exports as stroke="black" stroke-opacity="0.64". */
    border-top: 1px solid var(--line-on-light-strong);
}

.legal__section { margin: 0; }
.legal__heading {
    margin: 0 0 3px;
    font-family: var(--font-avant);
    font-weight: var(--fw-bold);
    font-size: var(--fs-24); /* 24px */
    line-height: 1.583; /* 38/24 */
    letter-spacing: -0.03em; /* -0.72px */
    text-transform: uppercase;
}
.legal__text {
    margin: 0;
    font-family: var(--font-avant);
    font-weight: var(--fw-medium);
    font-size: var(--fs-base);
    line-height: 1.625;
    letter-spacing: -0.02em;
}
.legal__text + .legal__text { margin-top: 10px; }
.legal__divider { /* short hairline between sections */
    width: 58px;
    /* Figma gaps this 32px on both sides, but as a zero-height node - so the 1px our
       <hr> actually occupies comes off the top. Without this the drift compounds:
       one extra pixel per divider, pushing the last section 4px down the page. */
    margin: 31px 0 32px;
    border: 0;
    /* Figma Line 4 exports as stroke="black" stroke-opacity="0.64" - the same
       strength as the full-width rule above, not a lighter one. */
    border-top: 1px solid var(--line-on-light-strong);
}
/* Figma draws each bullet by hand (350:3844): a 10px-wide frame holding a 6px dot
   at cx5/cy11, then a 6px gap, then the text - so the copy is indented exactly
   16px, not by a browser default. */
.legal__list {
    margin: 10px 0 0;
    padding: 0;
    list-style: none;
}
.legal__list li {
    position: relative;
    padding-left: 16px;
    /* That bullet frame is 38px tall, so it - not the 26px line box - sets the floor
       on a single-line item's height. Reproduced because it is what positions
       everything below the list; drop this line if the trailing space on short
       items ever looks wrong. */
    min-height: 38px;
    font-family: var(--font-avant);
    font-weight: var(--fw-medium);
    font-size: var(--fs-base);
    line-height: 1.625;
    letter-spacing: -0.02em;
}
.legal__list li + li { margin-top: 10px; } /* Figma 350:3842 gap */
.legal__list li::before {
    content: "";
    position: absolute;
    left: 2px;  /* Figma circle cx 5 - r 3 */
    top: 8px;   /* Figma circle cy 11 - r 3 */
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background-color: currentColor;
}

/* --------------------------------------------------------------------------
   COOKIES-ONLY OVERRIDES
   The two legal frames were laid out by hand and disagree on a couple of gaps,
   so the shared rules above follow the terms frame and these follow cookies.
   -------------------------------------------------------------------------- */
/* Figma 350:3825 gaps the title from the lead by 9px; the terms frame uses 0. */
.legal-body--cookies .legal__title + .legal__lead { margin-top: 9px; }
/* Figma: the lead ends 611, the rule paints on row 650, sections start 698 - the
   same ~86px total as terms but with the rule sitting 3px higher in the gap. */
.legal-body--cookies .legal__rule { margin: 39px 0 47px; }

/* ==========================================================================
   QUOTE THANK-YOU  (/quote-thank-you)
   No Figma frame exists for this page, so it borrows .legal-body wholesale and
   only adds the status line, the copy measure and the button row. Values below
   are picked to sit on the same rhythm as the legal frames rather than measured
   off a design.
   ========================================================================== */
/* .legal-body's 6px bottom assumes the copy runs right down to the footer. This
   page ends on the service-card grid, so it needs the same clearance the About
   page gives that grid: 34px here + the footer's own 80px = ~114px, matching
   .cat-body--about's 113px. */
.ty-body { padding-bottom: 34px; }

/* Small uppercase confirmation above the title - the eyebrow treatment from the
   project cards, not a new style. Green would be the obvious choice for a success
   message but the palette has no green, so the emphasis is typographic. */
.ty__status {
    margin: 0 0 6px;
    font-family: var(--font-avant);
    font-weight: var(--fw-bold);
    font-size: var(--fs-eyebrow); /* 12px */
    line-height: 1;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--text-faint);
}

/* Held to the legal pages' copy measure so the lines stay readable on a page
   that is otherwise mostly empty. */
.ty__copy { max-width: 820px; margin-top: 14px; }
.ty__cards-lead { margin: 8px 0 0; }

/* Figma has no button row anywhere on a light body, so this follows the card
   footers: buttons on one line, wrapping rather than shrinking. */
.ty__actions { display: flex; flex-wrap: wrap; gap: 15px; margin-top: 30px; }

/* The section heading above the cards, then the cards themselves. */
.ty-body .hp-heading { margin-top: 0; }
.ty-body .about-cards { margin-top: 34px; }

@media screen and (max-width: 991px) {
    .ty-body { padding-bottom: 24px; }
    .ty__copy { max-width: none; }
    .ty-body .about-cards { margin-top: 28px; }
}

/* ==========================================================================
   SITEMAP GRID
   Three-column rows: category heading (Bold) + two columns of sub-links (Demi).
   All links are 24px, uppercase, underlined.
   ========================================================================== */
.sitemap {
    background: var(--color-white);
    color: var(--color-black);
    /* Figma (350:3983): hero ends 380 -> the first row starts 463 = 83px. At the
       bottom the last row ends 1397 and the footer grid starts 1468 = 71px, which
       is less than the 80px .site-ftr already supplies itself, so there is nothing
       left to add here. */
    padding: 83px 0 0;
}
.sitemap__grid { display: flex; flex-direction: column; }
/* Figma puts the three columns at x240 / x729 / x1286 inside the 1440 content
   column. Those gutters are part of the tracks (the rows are laid out as fixed
   widths plus a 240px flex gap), so the grid uses butted 489/557/394 tracks and
   no column-gap rather than percentages plus a gap. */
.sitemap__row {
    display: grid;
    grid-template-columns: 489fr 557fr 394fr;
    align-items: start;
    column-gap: 0;
}
.sitemap__rule {
    width: 100%;
    /* 40px both sides in Figma, but the rule is a zero-height node whose stroke is
       painted outside the flow, so 1px comes off the top for our <hr>'s own box. */
    margin: 39px 0 40px;
    border: 0;
    /* Figma Line 3 exports as stroke="black" stroke-opacity="0.64" (measured 92 on
       white); the old 0.2 rendered far too faint. */
    border-top: 1px solid var(--line-on-light-strong);
}
.sitemap a {
    font-family: var(--font-avant);
    /* Every link on the condensed sitemap is a top-level page, so all of them take
       the Figma's Bold/-0.72px/38px-leading treatment. The Demi/-0.48px/26px style
       in the design belongs to sub-category links, which this site no longer has. */
    font-weight: var(--fw-bold);
    font-size: var(--fs-24); /* 24px */
    line-height: 1.583;      /* Figma 38px @ 24px */
    letter-spacing: -0.03em; /* -0.72px */
    text-transform: uppercase;
    text-decoration: underline;
    color: var(--color-black);
}
/* THE site-wide text-link hover: drop the underline, change nothing else. The
   Figma specifies no hover for text links, so this is chosen rather than measured
   - it reads as deliberate on a design whose links are already heavy and
   underlined, where a colour shift would not (there is no secondary text colour
   in the palette) and a weight shift would reflow the line. Applied here, on
   .legal-body a, and on the category-page intro copy (category.css) - i.e.
   everywhere the site has an inline text link. */
.sitemap a:hover,
.sitemap a:focus-visible { text-decoration: none; }
.sitemap__links { display: flex; flex-direction: column; gap: 20px; }

/* ----- Responsive ----- */
@media screen and (max-width: 991px) {
    /* Bottom stays tight as on desktop - the footer's own 80px padding-top is the
       breathing room here. */
    .legal-body { padding: 40px 0 6px; }
    /* The title is one line at the design's width, where line-height:1 is exact.
       Once it wraps (4 lines at phone width) 1.0 sets the lines touching, so open
       it up and scale down. Below 992 only - desktop stays 1:1 with the Figma. */
    .legal__title { font-size: 1.75rem; line-height: 1.1; } /* 28px */
    .legal__rule { margin: 32px 0; }
    .sitemap { padding: 60px 0 0; }
    .sitemap a { font-size: 1.25rem; } /* 20px */
    /* The design's 489/557/394 split only works while the tracks are wide enough
       for a 24px line; below 992 fall back to even columns. */
    .sitemap__row { grid-template-columns: 1fr 1fr; row-gap: 24px; }
    .sitemap__rule { margin: 27px 0 28px; }
}
@media screen and (max-width: 560px) {
    .sitemap__row { grid-template-columns: 1fr; }
    .sitemap a { font-size: 1.125rem; } /* 18px */
}

/* ==========================================================================
   NEW HOMEPAGE (2026 redesign) — Figma "Avant Garde"
   All homepage-specific styles are scoped under .hp so other pages are
   unaffected. Design reference: 1920px-wide desktop frame.
   ========================================================================== */

.avant { font-family: var(--font-avant); font-style: normal; font-display: swap; }

/* Light content sections sit on white with dark text (site body is dark). */
.hp { background-color: #fff; color: #000; }
.hp .avant { font-family: var(--font-avant); }
/* Links inherit their section's text colour (white on dark hero/banner, black on light) */
.hp a { color: inherit; text-decoration: none; }

/* Shared section rhythm */
.hp-section { padding-top: 90px; padding-bottom: 90px; }
/* Figma: the rule above sits 70px off the heading (2612 -> 2682), and the last
   project band clears the dark banner by 100px (3910 -> 4010). Declared before the
   responsive block below so the ≤991px `.hp-section` rule still collapses it to 60px. */
.hp-section--projects { padding-top: 70px; padding-bottom: 100px; }
.hp-rule { height: 1px; width: 100%; background-color: var(--line-on-light-strong); border: 0; margin: 0; } /* colour + margin:0 so it sits flush against the image */

/* Shared eyebrow/section heading */
.hp-heading { font-family: var(--font-avant); font-weight: 700; font-size: 2.375rem; /* 38px */ line-height: 1; /* Figma: 38/38 */ letter-spacing: 0.02em; text-transform: uppercase; color: #000; margin: 0; }

/* Shared pill button (Figma: #cdcaca fill, 8px radius, 13/16 padding, and a 1px
   gradient stroke #fff→#000 top-to-bottom for a subtle bevel). A gradient border
   with rounded corners needs the two-background trick: the fill paints on
   padding-box, the gradient paints on border-box, and the actual border is
   transparent so the border-box gradient shows through it. */
/* Figma: 47px tall = 1px border + 13px padding + 19px content, each side. */
/* Registering the fill as a typed custom property lets it animate; browsers
   without @property still get the (instant) colour swap, just without the fade. */
@property --hp-btn-fill { syntax: '<color>'; inherits: false; initial-value: #cdcaca; }

.hp-btn { --hp-btn-fill: var(--btn-bg); display: inline-flex; align-items: center; justify-content: center; font-family: var(--font-avant); font-weight: 700; font-size: 1.125rem; /* 18px */ letter-spacing: 0.02em; text-transform: uppercase; color: #000; background: linear-gradient(var(--hp-btn-fill), var(--hp-btn-fill)) padding-box, linear-gradient(180deg, #fff, #000) border-box; border: 1px solid transparent; border-radius: 8px; padding: 13px 16px; line-height: 19px; white-space: nowrap; transition: --hp-btn-fill .2s ease, color .2s ease; }
/* Hover — Figma component 410:36 ("Property 1=Variant2", the "View all Projects"
   button). The grey fill goes near-black and the label flips to white; the
   gradient stroke is unchanged between the two variants. This is the site's main
   button hover, so it applies to every .hp-btn (View all Projects, the Learn more
   buttons on the project and About cards, and the quote form's Submit). */
.hp-btn:hover,
.hp-btn:focus-visible { --hp-btn-fill: #1b1b1b; color: #fff; }

/* ==========================================================================
   HERO
   ========================================================================== */
.hp-hero { position: relative; min-height: 100vh; display: flex; color: #fff; overflow: hidden; background-color: var(--color-dark); }

/* Background slider: stacked full-bleed images that crossfade (driven by hero-slider.js).
   Add/remove slides in markup — the arrows, dots and label update automatically. */
.hp-hero__bg { position: absolute; inset: 0; z-index: 0; }
.hp-hero__slide { position: absolute; inset: 0; opacity: 0; z-index: 0; transition: opacity .8s ease; }
.hp-hero__slide.is-active { opacity: 1; z-index: 1; }
/* banner-home.webp is the already-cropped 1920×1083 hero frame exported from
   Figma, so it's shown 1:1 (object-fit: cover just handles viewport aspect). */
.hp-hero__bg-img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: center top; }

/* Content is constrained by .container; layout uses the dw-grid system.
   All spacing is anchored to the bottom of the viewport-height hero.
   NOTE: the selector is intentionally more specific than `.container`
   because dw-responsive.css (loaded after this file) sets
   `.container { padding: 0 15px }`, which would otherwise reset padding-bottom. */
.hp-hero .hp-hero__inner { position: relative; z-index: 2; width: 100%; align-self: flex-end; padding-bottom: 95px; /* space below the "Our Customers" row */ }

/* Headline row: H1 (left) + project indicator (right), baseline-aligned */
.hp-hero__headline-row { align-items: end; }
/* Figma's leading on the H1 (122.897px) overflows its own 87px text frame and is
   clipped, so 87px — the frame height, and what the mockup renders — is the value
   to match: 87/64 = 1.359. Relaxed to 1.1 on mobile, where the title wraps and the
   desktop leading would look airy (the Figma has no mobile frame for this). */
.hp-hero__title { font-weight: 700; font-size: 4rem; /* 64px */ line-height: 1.359; letter-spacing: 1.92px; /* matches Figma tracking exactly */ text-transform: uppercase; color: #fff; margin: 0; max-width: 764px; /* Figma H1 box width */ }

/* Project indicator (arrows + label + slide dots) */
.hp-hero__indicator { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; color: #fff; padding-bottom: 6px; }
.hp-hero__indicator-row { display: flex; align-items: center; gap: 19px; }
.hp-hero__indicator-arrows { display: flex; align-items: center; gap: 6px; }
.hp-hero__arrow { width: 20px; height: 20px; border-radius: 50%; background-color: #fff; color: #1f1f1f; display: inline-flex; align-items: center; justify-content: center; font-size: 0.6rem; cursor: pointer; flex-shrink: 0; transition: opacity .2s ease; }
.hp-hero__arrow:hover { opacity: 0.8; }
.hp-hero__indicator-label { font-weight: 300; font-size: 1.25rem; /* 20px */ line-height: 1.3; /* Figma: 26/20 */ letter-spacing: 0.02em; text-transform: uppercase; white-space: nowrap; }
.hp-hero__thumbs { display: flex; align-items: center; gap: 8px; }
.hp-hero__thumb { width: 10px; height: 10px; border-radius: 50%; background-color: #fff; cursor: pointer; }
.hp-hero__thumb.is-active { width: 8px; height: 8px; background-color: transparent; border: 1px solid #fff; }

.hp-hero__divider { height: 1px; width: 100%; background-color: var(--line-on-dark); margin-top: 10px; } /* Figma: H1 frame bottom 881 -> rule 891 */

/* Our Customers */
.hp-hero__customers { align-items: center; margin-top: 55px; }
.hp-hero__customers-label { font-weight: 700; font-size: 2.375rem; /* 38px */ line-height: 1.0; letter-spacing: 0.02em; text-transform: uppercase; color: #fff; }
.hp-hero__customers-label span { display: block; } /* desktop: "Our" / "Customers" on two lines */
/* Logos: a flex track holding two identical sets. Desktop shows one set right-
   aligned (the duplicate is hidden); mobile turns the track into a marquee. */
.hp-hero__logos { display: flex; justify-content: flex-end; }
.hp-hero__logos-track { display: flex; justify-content: flex-end; max-width: 100%; }
.hp-hero__logos-set { display: flex; align-items: center; gap: 45px; flex-wrap: wrap; justify-content: flex-end; }
.hp-hero__logos-set[aria-hidden="true"] { display: none; } /* duplicate only needed for the mobile loop */
/* The logo files are 2x assets (for retina), so their natural size is twice the intended
   display size. NO `width: auto` here: that would override the width attribute in the markup
   and render each logo at its full 2x natural size. Letting the width attribute apply and
   deriving height from the aspect ratio keeps the 1x display size with 2x sharpness. */
.hp-hero__logos img { height: auto; opacity: 0.95; }
/* The BBC logo was exported in grey (~#9b9b9b), not white. It's a single-colour
   mark, so brightness(0) invert(1) forces it white (preserving anti-aliasing).
   Scoped to BBC only — other logos are already white or have internal contrast
   (e.g. S4C) that must be preserved. */
.hp-hero__logos img[alt="BBC"] { filter: brightness(0) invert(1); }
/* Mobile marquee loop: two identical sets, so -50% advances exactly one set. */
@keyframes hero-logos-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@media (prefers-reduced-motion: reduce) { .hp-hero__logos-track { animation: none; } }

/* ==========================================================================
   INTRO — "Signage Design, Manufacture & Installation specialists"
   ========================================================================== */
/* Intro section spacing matches Figma: 105px above the content (from the hero)
   and 105px below (to the divider). Heading is vertically centred with the body. */
.hp-section--intro { padding-top: 105px; padding-bottom: 105px; }
.hp-section--intro .hp-heading { max-width: 560px; } /* wraps to 3 lines like the Figma */
.hp-intro__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 60px; align-items: center; }
.hp-intro__body { display: flex; flex-direction: column; gap: 16px; max-width: 715px; }
.hp-intro__lead { font-family: var(--font-avant); font-weight: 500; font-size: 1rem; /* 16px */ line-height: 1.625; color: #000; margin: 0; }
.hp-intro__text { font-family: var(--font-avant); font-weight: 300; font-size: 1rem; line-height: 1.625; color: #000; margin: 0; }

/* ==========================================================================
   SERVICES LINKS + image
   ========================================================================== */
/* The image is an in-flow right-half block, flush to the viewport's right edge,
   and it defines the section height (matches Figma: image spans divider→divider,
   x 970→1920). The left text is overlaid inside a real .container so its left edge
   lines up with every other section at all breakpoints. */
/* The whole section is capped at 1920px and centred, so the image stops at the
   1920 boundary (gutters appear beyond that) rather than growing with the viewport.
   The left text still aligns with .container because the overlay is centred within
   this 1920 box, which is itself centred in the viewport. */
.hp-svc { position: relative; max-width: 1920px; margin: 0 auto; }
.hp-svc__media { width: 50%; margin-left: auto; }
.hp-svc__img { display: block; width: 100%; height: auto; }
.hp-svc__overlay { position: absolute; top: 0; left: 0; right: 0; height: 100%; pointer-events: none; }
.hp-svc__content { width: 580px; max-width: 100%; padding-top: 85px; pointer-events: auto; }
.hp-svc__heading { font-family: var(--font-avant); font-weight: 700; font-size: 2.375rem; /* 38px */ line-height: 38px; letter-spacing: 0.02em; text-transform: uppercase; color: #000; margin: 0; max-width: 380px; }
.hp-svc__links { display: flex; flex-direction: column; gap: 20px; margin-top: 211px; } /* Figma: 211px below the heading, 20px between rows */
.hp-svc__link { text-align: left; font-family: var(--font-avant); font-weight: 500; font-size: 2.25rem; /* 36px */ line-height: 1.546; /* Figma row box: 55.65px */ letter-spacing: 0.02em; text-transform: uppercase; color: var(--text-muted); padding: 0; transition: color .2s ease, transform .2s ease; }
/* Hover: indent + bold + dark (matches the Figma hover state on "External Signage") */
.hp-svc__links .hp-svc__link:last-of-type { line-height: 43px; }

.hp-svc__link:hover { color: #000; font-weight: 600; transform: translateX(28px); }
/* Force the long last link onto two lines like the Figma ("Exhibition Signage" /
   "& Displays"), left-aligned like the others. */
.hp-svc__link:last-child { max-width: 390px; }
/* `.hp a { color: inherit }` (for the dark hero/banner links) has higher
   specificity, so restate the link colours here to keep the default muted grey. */
.hp .hp-svc__link { color: var(--text-muted); }
.hp .hp-svc__link:hover { color: #000; }
.hp-svc__rule { border: 0; height: 1px; background-color: var(--line-on-light); margin: 0; }

/* Section divider that starts at the container's left edge and bleeds to the right
   viewport edge (the Figma lines run past the image). */
/* Starts at the container's left edge, ends at the 1920px boundary's right edge
   (matches the image; both stop growing past 1920px). */
/* Bleed rule: use 100% (containing-block content width) NOT 100vw — 100vw counts the
   scrollbar, so it would push the right edge ~half a scrollbar short of the image (which
   is laid out in the content box). 100% matches .container (left) and .hp-svc (right) exactly. */
.hp-rule--bleed { width: auto; margin-left: max(15px, calc((100% - 1470px) / 2 + 15px)); margin-right: max(0px, calc((100% - 1920px) / 2)); }

/* ==========================================================================
   FILM & TV PROJECTS
   Two stacked full-width project bands (Figma: image 1440×526 with a white
   info-card overlaying the bottom-right corner). "View all Projects" links out.
   ========================================================================== */
.hp-projects__head { display: flex; align-items: center; justify-content: space-between; gap: 20px; margin-bottom: 70px; }
.hp-projects__title { max-width: 270px; } /* forces the Figma 2-line wrap: "OUR FILM &" / "TV PROJECTS" */
.hp-projects__list { display: flex; flex-direction: column; gap: 30px; } /* Figma: 30px between bands */
.hp-project { position: relative; background-color: #d4d4d4; }
.hp-project__img { display: block; width: 100%; height: auto; }
/* White card over the image, bottom-right. Figma: fixed 530×244 card whose inner
   frame is 44px from the left and 36px from the top and runs flush to the right and
   bottom edges (44+486=530, 36+208=244), so the Learn more button sits hard in the
   bottom-right corner with no padding around it. Fixed width (not %) keeps the copy
   at design scale on our wider container; caps to 48% so it never dominates. */
/* right/bottom -1px so the opaque card fully covers the image's anti-aliased
   (fractional-height) edge — otherwise the image bleeds ~1px through the seam.
   The overhang sits in the white section gaps, so it's invisible. */
.hp-project__card { position: absolute; right: -1px; bottom: -1px; width: 530px; max-width: 48%; background-color: #fff; padding: 36px 0 0 44px; display: flex; flex-direction: column; align-items: flex-end; }
.hp-project__body { width: 100%; display: flex; flex-direction: column; align-items: flex-start; gap: 13px; }
/* Tight line-heights so the visual eyebrow/title/desc rhythm matches Figma's
   cap-height boxes (otherwise default leading makes the 13px gaps look too loose).
   Figma's own leading on these (26px / 40.8px) overflows and is clipped by its
   text frames, so the frame heights — 13 / 30 / 52 — are what the mockup shows. */
.hp-project__eyebrow { font-family: var(--font-avant); font-weight: 700; font-size: 0.75rem; /* 12px */ line-height: 13px; letter-spacing: 0.02em; text-transform: uppercase; color: var(--text-faint); margin: 0; }
.hp-project__title { font-family: var(--font-avant); font-weight: 700; font-size: 2.5rem; /* 40px */ line-height: 0.75; /* Figma title box: 30px */ letter-spacing: 0.02em; text-transform: uppercase; color: #000; margin: 0; }
.hp-project__desc { font-family: var(--font-avant); font-weight: 300; font-size: 1rem; /* 16px */ line-height: 1.625; letter-spacing: 0.02em; color: #000; margin: 0; max-width: 325px; }
.hp-project__cta { margin-top: 37px; } /* Figma: 37px from the copy block down to the Learn more button */

/* ==========================================================================
   DARK "Our Signage & Display Services" banner
   ========================================================================== */
/* Capped at 1920px (the image's native width) and centred, like the services
   section — beyond that the dark body background shows either side. The dark
   fade behind the text is baked into the image, so no CSS gradient is needed. */
.hp-banner { position: relative; max-width: 1920px; margin: 0 auto; background-color: var(--color-dark); background-size: cover; background-position: center; background-repeat: no-repeat; color: #fff; min-height: 762px; display: flex; align-items: flex-end; overflow: hidden; }
.hp-banner--services { background-image: url(/Content/images/home/signage-and-display-services.webp); }
/* More specific than `.container` (see hero note) so vertical padding survives.
   Figma: content block sits 89px off the bottom of the 762px section. */
.hp-banner .hp-banner__inner { position: relative; z-index: 2; width: 100%; padding-top: 89px; padding-bottom: 89px; }
.hp-banner__grid { display: flex; align-items: center; gap: 60px; }
.hp-banner__title { font-family: var(--font-avant); font-weight: 700; font-size: 3rem; /* 48px */ line-height: 0.9375; /* 45/48 */ letter-spacing: 0.02em; text-transform: uppercase; color: #fff; margin: 0; flex-shrink: 0; }
/* Body is capped at its Figma 685px and pushed to the container's right edge; the
   auto margin becomes the ~309px desktop gap and collapses gracefully as it narrows. */
.hp-banner__text { font-family: var(--font-avant); font-weight: 300; font-size: 1.125rem; /* 18px */ line-height: 1.444; /* 26/18 */ letter-spacing: 0.02em; color: #fff; margin: 0 0 0 auto; flex: 0 1 685px; min-width: 0; }

/* ==========================================================================
   REVIEWS
   ========================================================================== */
.hp-reviews { padding-top: 110px; padding-bottom: 90px; }
.hp-review { display: flex; flex-direction: column; gap: 35px; align-items: flex-start; text-align: left; }
.hp-review__quote { font-family: var(--font-avant); font-weight: 500; font-size: 3rem; /* 48px */ line-height: 1.45; letter-spacing: 0.01em; color: #000; margin: 0; }
.hp-review__quote .muted { color: rgba(0,0,0,0.5); }
.hp-review__name { font-family: var(--font-avant); font-weight: 700; font-size: 2rem; /* 32px */ line-height: 1.3; letter-spacing: 0.02em; color: #000; margin: 0; }
.hp-review__role { font-family: var(--font-avant); font-weight: 300; font-size: 2rem; line-height: 1.3; color: var(--text-muted-strong); margin: 0; }
#review-carousel .dw-dots { position: static; margin-top: 76px; transform: none; left: auto; display: flex; gap: 19.2px; }
/* dwCarousel draws its own grey circle in an inner <span>; hide it and style the
   <button> as the dot so we get a single, controllable shape. */
#review-carousel .dw-dot { width: 24px; height: 24px; box-sizing: border-box; border-radius: 50%; background-color: #000; border: 0; padding: 0; }
#review-carousel .dw-dot > span { display: none; }
/* Figma: the active slide's dot is a hollow ring; the others are solid black. */
#review-carousel .dw-dot.active { background-color: transparent; border: 2px solid #000; }

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */
/* Services: shrink the heading→links gap and type between lg and xl so the
   overlaid content still fits within the (smaller) image height. */
@media screen and (min-width: 1230px) and (max-width: 1670px) {
    .hp-svc__links { margin-top: 90px; } /* smaller gap so content fits the shorter image; type stays 36px */
}

@media screen and (max-width: 1229px) {
    .hp-hero__title { font-size: 3.25rem; }
    .hp-heading { font-size: 2rem; }
    .hp-banner__title { font-size: 2.4rem; }
    .hp-review__quote { font-size: 2.4rem; }
    .hp-review__name, .hp-review__role { font-size: 1.7rem; }
    .hp-project__title { font-size: 2.1rem; }
    /* Services stacks below lg (the overlaid image needs desktop width) */
    .hp-svc { display: flex; flex-direction: column-reverse; }
    .hp-svc__media { width: 100%; margin: 0; }
    .hp-svc__overlay { position: static; height: auto; }
    .hp-svc__content { width: 100%; max-width: none; padding-top: 50px; padding-bottom: 45px; } /* breathing room below the top rule (stacked mobile layout) */
    .hp-svc__heading { max-width: none; font-size: 2rem; }
    .hp-svc__links { margin-top: 40px; }
    .hp-svc__link { text-align: left; font-size: 1.9rem; }
    .hp-svc__link:last-child { max-width: none; align-self: auto; }
    .hp-rule--bleed { margin-left: 15px; }
}

@media screen and (max-width: 991px) {
    .hp-section { padding-top: 60px; padding-bottom: 60px; }
    .hp-intro__grid { grid-template-columns: 1fr; gap: 30px; }
    .hp-banner { min-height: 520px; }
    .hp-banner .hp-banner__inner { padding-top: 60px; padding-bottom: 60px; }
    .hp-banner__grid { flex-direction: column; align-items: flex-start; gap: 20px; }
    .hp-banner__text { flex-basis: auto; margin-left: 0; max-width: 685px; }
    .hp-reviews { padding-top: 60px; padding-bottom: 60px; }
    .hp-review__quote { font-size: 2rem; }
    /* The 12-col grid + 30px gap collapses to 1.25px tracks at phone width, which
       mangles the indicator's placement. Stack the headline as plain flex instead.
       Selector out-specifies `.dw-grid` (dw-responsive.css loads after this file). */
    .hp-hero__inner .hp-hero__headline-row { display: flex; flex-direction: column; align-items: stretch; gap: 0; }
    .hp-hero__title { line-height: 1.1; margin-bottom: 28px !important; } /* beats the global mobile `h1 { margin-bottom: 60px !important }` */
    /* Indicator below the title, left-aligned: arrows + label on a row, dots
       beneath. Force full width + zero margins (a dw column class otherwise
       leaves it content-width and flush-right in the flex column). */
    .hp-hero__inner .hp-hero__indicator { display: flex; align-items: center; width: 100%; margin: 0; padding-bottom: 0; gap: 14px; } /* centre the label + arrows and the dots */
    .hp-hero__customers { margin-top: 18px; }
    /* NB: the customers stack + logo marquee live in their own max-width:1024px
       block below so iPad-mini-landscape (1024px) gets the carousel too. */

    /* Projects: the overlay card gets cramped on tablets, so stack it below the image */
    .hp-project { background-color: #fff; }
    .hp-project__card { position: static; width: 100%; max-width: none; padding: 24px 0 0; align-items: flex-start; } /* clear the desktop 48% cap so the stacked card spans full width */
    /* Titles wrap once stacked — 0.8 (tuned for the single-line desktop titles)
       makes the two lines collide, so relax the leading. */
    .hp-project__title { line-height: 1.05; }
    .hp-project__desc { max-width: none; } /* use the full stacked width instead of the 325px desktop cap */
    .hp-project__cta { margin-top: 24px; }
}

@media screen and (max-width: 767px) {
    .hp-hero { min-height: 100vh; min-height: 100dvh; } /* fill the screen so content sits low & the next section doesn't peek */
    .hp-hero__title { font-size: 2.5rem; }
    /* Phone: pull the content a touch lower than the base padding (mockup match) */
    .hp-hero .hp-hero__inner { padding-bottom: 78px; }
    .hp-hero__divider { margin-top: 12px; }

    /* Projects: card already stacked (≤991); just tighten type and the header */
    .hp-project__title { font-size: 1.9rem; }
    /* A taller crop gives the wide 1440×526 stills real presence on a phone
       instead of a thin strip; keep the copy flush with the image's left edge. */
    .hp-project__img { aspect-ratio: 3 / 2; object-fit: cover; }
    .hp-projects__head { flex-wrap: wrap; gap: 15px; margin-bottom: 30px; } /* 70px desktop gap is too much once stacked */
    .hp-projects__title { max-width: none; }

    .hp-review__quote { font-size: 1.6rem; line-height: 1.4; }
    .hp-review__name, .hp-review__role { font-size: 1.3rem; }
    .hp-banner__title { font-size: 2rem; }
}

@media screen and (max-width: 500px) {
    .hp-hero__title { font-size: 2rem; }
    .hp-heading { font-size: 1.7rem; }
    .hp-svc__link { font-size: 1.6rem; }
    /* Shrink the (nowrap) slide label so arrows + label can't overflow narrow phones */
    .hp-hero__indicator-label { font-size: 1rem; }
    .hp-hero__indicator-row { gap: 12px; }
}

/* Small phones in landscape: the viewport is too short for a 100vh hero with
   bottom-anchored content — the title collides with the header. Let the hero
   grow to fit its content and top-pad it clear of the transparent header. */
@media screen and (max-height: 500px) and (orientation: landscape) {
    /* Top-align the content (padded clear of the header) instead of bottom-anchoring
       it. min-height:100vh keeps it filling the viewport but the hero still grows
       if the content is taller than the (short) viewport, so nothing is clipped. */
    .hp-hero .hp-hero__inner { align-self: flex-start; padding-top: 78px; padding-bottom: 40px; }
    .hp-hero__title { font-size: 2rem; }
    .hp-hero__customers { margin-top: 22px; }
}

/* Customers block: stack the label + run the auto-scrolling logo marquee up to
   1024px — this covers mobile, tablet portrait AND iPad-mini landscape (1024px),
   so those get the carousel instead of the desktop side-by-side static logos. */
@media screen and (max-width: 1024px) {
    .hp-hero__inner .hp-hero__customers { display: flex; flex-direction: column; align-items: stretch; }
    .hp-hero__customers-label { font-size: 1.5rem; margin-bottom: 8px; }
    .hp-hero__customers-label span { display: inline; } /* "Our Customers" on one line */
    .hp-hero__logos { display: block; overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
    .hp-hero__logos-track { display: flex; width: max-content; max-width: none; justify-content: flex-start; animation: hero-logos-scroll 22s linear infinite; }
    .hp-hero__logos-set { flex-wrap: nowrap; gap: 40px; padding-right: 40px; justify-content: flex-start; flex-shrink: 0; }
    .hp-hero__logos-set[aria-hidden="true"] { display: flex; }
    .hp-hero__logos img { max-height: 30px; width: auto; }
}

/*
 * DW Carousel v2.3.4
 * Copyright 2013-2018 David Deutsch
 * Licensed under: SEE LICENSE IN https://github.com/DWCarousel2/DWCarousel2/blob/master/LICENSE
 */


/*
 *  DW Carousel - Custom
 */


.dw-item { transition: all 0.6s; }
.dw-item:not(.active) { opacity: 0; pointer-events: none; }

.dw-prev, .dw-next { display: flex; align-items: center; justify-content: center; height: 56px; width: 56px; background-color: #7a7a7a !important; }

.dw-prev:hover, .dw-next:hover { background-color: #474747 !important; }

.dw-prev i, .dw-next i { color: #fff; font-size: 1.5em; }


#review-carousel .dw-dots { position: static !important; transform: translate(0) !important }
.nav-controls { position: static !important; }

@media screen and (min-width:992px) {
  .dots-controls { position: static !important; }
}

@media screen and (max-width:992px) {
  .dots-controls { transform:translateX(-50%)!important; height:100%;  top:initial; justify-content:center; }
} 

/*
 *  DW Carousel - Core
 */

.dw-carousel { display: none; width: 100%; -webkit-tap-highlight-color: transparent; /* position relative and z-index fix webkit rendering fonts issue */ position: relative; z-index: 1; }
.dw-carousel .dw-stage { position: relative; -ms-touch-action: pan-Y; touch-action: manipulation; -moz-backface-visibility: hidden; /* fix firefox animation glitch */ }
.dw-carousel .dw-stage:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; }
.dw-carousel .dw-stage-outer { position: relative; overflow: hidden; /* fix for flashing background */ -webkit-transform: translate3d(0px, 0px, 0px); }
.dw-carousel .dw-wrapper,
.dw-carousel .dw-item { -webkit-backface-visibility: hidden; -moz-backface-visibility: hidden; -ms-backface-visibility: hidden; -webkit-transform: translate3d(0, 0, 0); -moz-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); }
.dw-carousel .dw-item { position: relative; min-height: 1px; float: left; -webkit-backface-visibility: hidden; -webkit-tap-highlight-color: transparent; -webkit-touch-callout: none; }
.dw-carousel .dw-item img { display: block; width: 100%; }
.dw-carousel .dw-nav.disabled,
.dw-carousel .dw-dots.disabled { display: none; }
.dw-carousel .dw-nav .dw-prev,
.dw-carousel .dw-nav .dw-next,
.dw-carousel .dw-dot { cursor: pointer; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }
.dw-carousel .dw-nav button.dw-prev,
.dw-carousel .dw-nav button.dw-next,
.dw-carousel button.dw-dot { background: none; color: inherit; border: none; padding: 0 !important; font: inherit; }
.dw-carousel.dw-loaded { display: block; }
.dw-carousel.dw-loading { opacity: 0; display: block; }
.dw-carousel.dw-hidden { opacity: 0; }
.dw-carousel.dw-refresh .dw-item { visibility: hidden; }
.dw-carousel.dw-drag .dw-item { -ms-touch-action: pan-y; touch-action: pan-y; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; }
.dw-carousel.dw-grab { cursor: move; cursor: grab; }
.dw-carousel.dw-rtl { direction: rtl; }
.dw-carousel.dw-rtl .dw-item { float: right; }

/* No Js */
.no-js .dw-carousel { display: block; }

/*
 *  DW Carousel - Animate Plugin
 */
.dw-carousel .animated { animation-duration: 1000ms; animation-fill-mode: both; }

.dw-carousel .dw-animated-in { z-index: 0; }

.dw-carousel .dw-animated-out { z-index: 1; }

.dw-carousel .fadeOut { animation-name: fadeOut; }

@keyframes fadeOut {
  0% { opacity: 1; }
  100% { opacity: 0; }
}

/*
 * 	DW Carousel - Auto Height Plugin
 */
.dw-height { transition: height 500ms ease-in-out; }

/*
 * 	DW Carousel - Lazy Load Plugin
 */
.dw-carousel .dw-item { /**
			This is introduced due to a bug in IE11 where lazy loading combined with autoheight plugin causes a wrong
			calculation of the height of the dw-item that breaks page layouts
		 */ }
.dw-carousel .dw-item .dw-lazy { opacity: 0; transition: opacity 400ms ease; }
.dw-carousel .dw-item .dw-lazy[src^=""], .dw-carousel .dw-item .dw-lazy:not([src]) { max-height: 0; }
.dw-carousel .dw-item img.dw-lazy { transform-style: preserve-3d; }

/*
 * 	DW Carousel - Video Plugin
 */
.dw-carousel .dw-video-wrapper { position: relative; height: 100%; background: #000; }

.dw-carousel .dw-video-play-icon { position: absolute; height: 80px; width: 80px; left: 50%; top: 50%; margin-left: -40px; margin-top: -40px; background: url("dw.video.play.png") no-repeat; cursor: pointer; z-index: 1; -webkit-backface-visibility: hidden; transition: transform 100ms ease; }

.dw-carousel .dw-video-play-icon:hover { -ms-transform: scale(1.3, 1.3); transform: scale(1.3, 1.3); }

.dw-carousel .dw-video-playing .dw-video-tn,
.dw-carousel .dw-video-playing .dw-video-play-icon { display: none; }

.dw-carousel .dw-video-tn { opacity: 0; height: 100%; background-position: center center; background-repeat: no-repeat; background-size: contain; transition: opacity 400ms ease; }

.dw-carousel .dw-video-frame { position: relative; z-index: 1; height: 100%; width: 100%; }

.dw-theme .dw-nav { margin-top: 10px; text-align: center; -webkit-tap-highlight-color: transparent; }
.dw-theme .dw-nav [class*='dw-'] { color: #FFF; font-size: 14px; margin: 5px; padding: 4px 7px; background: #D6D6D6; display: inline-block; cursor: pointer; border-radius: 3px; }
.dw-theme .dw-nav [class*='dw-']:hover { background: #869791; color: #FFF; text-decoration: none; }
.dw-theme .dw-nav .disabled { opacity: 0.5; cursor: default; }

.dw-theme .dw-nav.disabled + .dw-dots { margin-top: 10px; }

.dw-theme .dw-dots { text-align: center; -webkit-tap-highlight-color: transparent; }
.dw-theme .dw-dots .dw-dot { display: inline-block; zoom: 1; *display: inline; }
.dw-theme .dw-dots .dw-dot span { width: 10px; height: 10px; margin: 5px 7px; background: #D6D6D6; display: block; -webkit-backface-visibility: visible; transition: opacity 200ms ease; border-radius: 30px; }
.dw-theme .dw-dots .dw-dot.active span, .dw-theme .dw-dots .dw-dot:hover span { background: #869791; }


*, *:before, *:after { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
.container, .left-container, .right-container { width: 100%; margin: 0 auto; padding: 0 15px; }
/* Content caps at 1470px (= Figma's 1440 content area + 2×15px gutters). Below that
   the container is fluid full-width, keeping the 15px gutters so content never touches
   the viewport edge. Applied site-wide for consistency (replaces the old stepped
   750/970/1500/1640 fixed widths). */
.container { max-width: 1470px; }

.container:before, .container:after, .section:before, .section:after { display: table; content: " "; }

@-ms-viewport { width: device-width; }

.rel {position:relative;}
.nowrap {white-space:nowrap;}
.dw-hide { display:none!important;}
.underline {text-decoration:underline;}
/*GRID*/
.dw-grid {
  display:grid;
  grid-template-columns:repeat(12, 1fr);
}
/*GAP*/
.gap-5 { grid-gap: 5px; }
.gap-10 { grid-gap: 10px; }
.gap-15 { grid-gap: 15px; }
.gap-30 { grid-gap: 30px; }
.gap-45 { grid-gap: 45px; }
.gap-60 { grid-gap: 60px; }
.gap-75 { grid-gap: 75px; }

/*FLEXBOX*/
.flx { display: flex; }
.flx-col { flex-direction: column; }
.flx-row { flex-direction: row; }
.flx-col-rev { flex-direction: column-reverse; }
.flx-row-rev { flex-direction: row-reverse; }

.fl-wrap { flex-wrap: wrap; }

/*FLEXBOX*/
.xxs-al-start { align-items: center; }
.xxs-al-center { align-items: center; }
.xxs-al-end { align-items: flex-end; }

.xxs-ju-start { justify-content: flex-start; }
.xxs-ju-center { justify-content: center; }
.xxs-ju-end { justify-content: end; }
.xxs-ju-evenly { justify-content: space-evenly; }
.xxs-ju-around { justify-content: space-around; }
.xxs-ju-between { justify-content: space-between; }
.xxs-show {display:block;}

/*FLEX ITEM*/
.xxs-self-start { align-self: flex-start; }
.xxs-self-end { align-self: flex-end; }
.xxs-self-center { align-self: center; }
/*GRID-ITEM*/
.ju-self-end {justify-self:flex-end;}

.fl-grow { flex-grow: 1; }
.fl-no-shrink { flex-shrink: 0; }

.dw-xxs-10th { width: calc(100% / 10); }
.dw-xxs-9th { width: calc(100% / 9); }
.dw-xxs-8th { width: calc(100% / 8); }
.dw-xxs-7th { width: calc(100% / 7); }
.dw-xxs-5th { width: calc(100% / 5); }
.dw-xxs-12 { grid-column: span 12; }
.dw-xxs-11 { grid-column: span 11; }
.dw-xxs-10 { grid-column: span 10; }
.dw-xxs-9 { grid-column: span 9; }
.dw-xxs-8 { grid-column: span 8; }
.dw-xxs-7 { grid-column: span 7; }
.dw-xxs-6 { grid-column: span 6; }
.dw-xxs-5 { grid-column: span 5; }
.dw-xxs-4 { grid-column: span 4; }
.dw-xxs-3 { grid-column: span 3; }
.dw-xxs-2 { grid-column: span 2; }
.dw-xxs-1 { grid-column: span 1; }


/*MARGIN*/
.xxs-m-0 {margin:0!important;}

/*MOBILE*/


@media (min-width:500px) {
  .dw-xs-10th { width: calc(100% / 10); }
  .dw-xs-9th { width: calc(100% / 9); }
  .dw-xs-8th { width: calc(100% / 8); }
  .dw-xs-7th { width: calc(100% / 7); }
  .dw-xs-5th { width: calc(100% / 5); }
  .dw-xs-12 { grid-column: span 12; }
  .dw-xs-11 { grid-column: span 11; }
  .dw-xs-10 { grid-column: span 10; }
  .dw-xs-9 { grid-column: span 9; }
  .dw-xs-8 { grid-column: span 8; }
  .dw-xs-7 { grid-column: span 7; }
  .dw-xs-6 { grid-column: span 6; }
  .dw-xs-5 { grid-column: span 5; }
  .dw-xs-4 { grid-column: span 4; }
  .dw-xs-3 { grid-column: span 3; }
  .dw-xs-2 { grid-column: span 2; }
  .dw-xs-1 { grid-column: span 1; }

  /*MARGIN*/
  .xs-m-0 { margin: 0 !important; }

  /*FLEXBOX*/
  .xs-flx-col { flex-direction: column; }
  .xs-flx-row { flex-direction: row; }
  .xs-flx-col-rev { flex-direction: column-reverse; }
  .xs-flx-row-rev { flex-direction: row-reverse; }

  .xs-al-start { align-items: center; }
  .xs-al-center { align-items: center; }
  .xs-al-end { align-items: flex-end; }

  .xs-ju-start { justify-content: flex-start; }
  .xs-ju-center { justify-content: center; }
  .xs-ju-end { justify-content: end; }
  .xs-ju-evenly { justify-content: space-evenly; }
  .xs-ju-around { justify-content: space-around; }
  .xs-ju-between { justify-content: space-between; }
  .xs-show { display: block; }

  /*FLEX ITEM*/
  .xs-self-start { align-self: flex-start; }
  .xs-self-end { align-self: flex-end; }
  .xs-self-center { align-self: center; }
}

/*TABLET*/
@media (min-width:768px) {
  .dw-sm-10th { width: calc(100% / 10); }
  .dw-sm-9th { width: calc(100% / 9); }
  .dw-sm-8th { width: calc(100% / 8); }
  .dw-sm-7th { width: calc(100% / 7); }
  .dw-sm-5th { width: calc(100% / 5); }
  .dw-sm-12 { grid-column: span 12; }
  .dw-sm-11 { grid-column: span 11; }
  .dw-sm-10 { grid-column: span 10; }
  .dw-sm-9 { grid-column: span 9; }
  .dw-sm-8 { grid-column: span 8; }
  .dw-sm-7 { grid-column: span 7; }
  .dw-sm-6 { grid-column: span 6; }
  .dw-sm-5 { grid-column: span 5; }
  .dw-sm-4 { grid-column: span 4; }
  .dw-sm-3 { grid-column: span 3; }
  .dw-sm-2 { grid-column: span 2; }
  .dw-sm-1 { grid-column: span 1; }
  .visible-xs { display: none !important; }
  /*MARGIN*/
  .sm-m-0 { margin: 0 !important; }

  /*FLEXBOX*/
  .sm-flx-col { flex-direction: column; }
  .sm-flx-row { flex-direction: row; }
  .sm-flx-col-rev { flex-direction: column-reverse; }
  .sm-flx-row-rev { flex-direction: row-reverse; }

  .sm-al-start { align-items: center; }
  .sm-al-center { align-items: center; }
  .sm-al-end { align-items: flex-end; }

  .sm-ju-start { justify-content: flex-start; }
  .sm-ju-center { justify-content: center; }
  .sm-ju-end { justify-content: end; }
  .sm-ju-evenly { justify-content: space-evenly; }
  .sm-ju-around { justify-content: space-around; }
  .sm-ju-between { justify-content: space-between; }
  .sm-show {display:block!important;}
  .sm-hide { display: none!important; }

  /*FLEX ITEM*/
  .sm-self-start { align-self: flex-start; }
  .sm-self-end { align-self: flex-end; }
  .sm-self-center { align-self: center; }
}



/*SMALL DESKTOP*/
@media (min-width:992px) {
  .dw-md-10th { width: calc(100% / 10); }
  .dw-md-9th { width: calc(100% / 9); }
  .dw-md-8th { width: calc(100% / 8); }
  .dw-md-7th { width: calc(100% / 7); }
  .dw-md-5th { width: calc(100% / 5); }

  .dw-md-12 { grid-column: span 12; }
  .dw-md-11 { grid-column: span 11; }
  .dw-md-10 { grid-column: span 10; }
  .dw-md-9 { grid-column: span 9; }
  .dw-md-8 { grid-column: span 8; }
  .dw-md-7 { grid-column: span 7; }
  .dw-md-6 { grid-column: span 6; }
  .dw-md-5 { grid-column: span 5; }
  .dw-md-4 { grid-column: span 4; }
  .dw-md-3 { grid-column: span 3; }
  .dw-md-2 { grid-column: span 2; }
  .dw-md-1 { grid-column: span 1; }

  /*MARGIN*/
  .md-m-0 { margin: 0 !important; }

  /*FLEXBOX*/
  .md-flx-col { flex-direction: column; }
  .md-flx-row { flex-direction: row; }
  .md-flx-col-rev { flex-direction: column-reverse; }
  .md-flx-row-rev { flex-direction: row-reverse; }

  .md-al-start { align-items: center; }
  .md-al-center { align-items: center; }
  .md-al-end { align-items: flex-end; }

  .md-ju-start { justify-content: flex-start; }
  .md-ju-center { justify-content: center; }
  .md-ju-end { justify-content: end; }
  .md-ju-evenly { justify-content: space-evenly; }
  .md-ju-around { justify-content: space-around; }
  .md-ju-between { justify-content: space-between; }
  .md-show {display:block;}

  /*FLEX ITEM*/
  .md-self-start { align-self: flex-start; }
  .md-self-end { align-self: flex-end; }
  .md-self-center { align-self: center; }
}


/*DESKTOP*/

@media (min-width: 1230px) {
  .dw-lg-10th { width: calc(100% / 10); }
  .dw-lg-9th { width: calc(100% / 9); }
  .dw-lg-8th { width: calc(100% / 8); }
  .dw-lg-7th { width: calc(100% / 7); }
  .dw-lg-5th { width: calc(100% / 5); }

  .dw-lg-12 { grid-column: span 12; }
  .dw-lg-11 { grid-column: span 11; }
  .dw-lg-10 { grid-column: span 10; }
  .dw-lg-9 { grid-column: span 9; }
  .dw-lg-8 { grid-column: span 8; }
  .dw-lg-7 { grid-column: span 7; }
  .dw-lg-6 { grid-column: span 6; }
  .dw-lg-5 { grid-column: span 5; }
  .dw-lg-4 { grid-column: span 4; }
  .dw-lg-3 { grid-column: span 3; }
  .dw-lg-2 { grid-column: span 2; }
  .dw-lg-1 { grid-column: span 1; }

  /*MARGIN*/
  .lg-m-0 { margin: 0 !important; }

  /*FLEXBOX*/
  .lg-flx-col { flex-direction: column; }
  .lg-flx-row { flex-direction: row; }
  .lg-flx-col-rev { flex-direction: column-reverse; }
  .lg-flx-row-rev { flex-direction: row-reverse; }

  .lg-al-start { align-items: center; }
  .lg-al-center { align-items: center; }
  .lg-al-end { align-items: flex-end; }

  .lg-ju-start { justify-content: flex-start; }
  .lg-ju-center { justify-content: center; }
  .lg-ju-end { justify-content: end; }
  .lg-ju-evenly { justify-content: space-evenly; }
  .lg-ju-around { justify-content: space-around; }
  .lg-ju-between { justify-content: space-between; }
  .lg-show {display:block;}

  /*FLEX ITEM*/
  .lg-self-start { align-self: flex-start; }
  .lg-self-end { align-self: flex-end; }
  .lg-self-center { align-self: center; }
}


@media (min-width: 1671px) {
  .dw-xl-10th { width: calc(100% / 10); }
  .dw-xl-9th { width: calc(100% / 9); }
  .dw-xl-8th { width: calc(100% / 8); }
  .dw-xl-7th { width: calc(100% / 7); }
  .dw-xl-5th { width: calc(100% / 5); }

  .dw-xl-12 { grid-column: span 12; }
  .dw-xl-11 { grid-column: span 11; }
  .dw-xl-10 { grid-column: span 10; }
  .dw-xl-9 { grid-column: span 9; }
  .dw-xl-8 { grid-column: span 8; }
  .dw-xl-7 { grid-column: span 7; }
  .dw-xl-6 { grid-column: span 6; }
  .dw-xl-5 { grid-column: span 5; }
  .dw-xl-4 { grid-column: span 4; }
  .dw-xl-3 { grid-column: span 3; }
  .dw-xl-2 { grid-column: span 2; }
  .dw-xl-1 { grid-column: span 1; }

  /*MARGIN*/
  .xl-m-0 { margin: 0 !important; }

  /*FLEXBOX*/
  .xl-flx-col { flex-direction: column; }
  .xl-flx-row { flex-direction: row; }
  .xl-flx-col-rev { flex-direction: column-reverse; }
  .xl-flx-row-rev { flex-direction: row-reverse; }

  .xl-al-start { align-items: center; }
  .xl-al-center { align-items: center; }
  .xl-al-end { align-items: flex-end; }

  .xl-ju-start { justify-content: flex-start; }
  .xl-ju-center { justify-content: center; }
  .xl-ju-end { justify-content: end; }
  .xl-ju-evenly { justify-content: space-evenly; }
  .xl-ju-around { justify-content: space-around; }
  .xl-ju-between { justify-content: space-between; }
  .xl-show {display:block;}

  /*FLEX ITEM*/
  .xl-self-start { align-self: flex-start; }
  .xl-self-end { align-self: flex-end; }
  .xl-self-center { align-self: center; }
}


@media (min-width:1671px) {
  .dw-xxl-10th { width: calc(100% / 10); }
  .dw-xxl-9th { width: calc(100% / 9); }
  .dw-xxl-8th { width: calc(100% / 8); }
  .dw-xxl-7th { width: calc(100% / 7); }
  .dw-xxl-5th { width: calc(100% / 5); }

  .dw-xxl-12 { grid-column: span 12; }
  .dw-xxl-11 { grid-column: span 11; }
  .dw-xxl-10 { grid-column: span 10; }
  .dw-xxl-9 { grid-column: span 9; }
  .dw-xxl-8 { grid-column: span 8; }
  .dw-xxl-7 { grid-column: span 7; }
  .dw-xxl-6 { grid-column: span 6; }
  .dw-xxl-5 { grid-column: span 5; }
  .dw-xxl-4 { grid-column: span 4; }
  .dw-xxl-3 { grid-column: span 3; }
  .dw-xxl-2 { grid-column: span 2; }
  .dw-xxl-1 { grid-column: span 1; }

  /*MARGIN*/
  .xxl-m-0 { margin: 0 !important; }

  /*FLEXBOX*/
  .xxl-flx-col { flex-direction: column; }
  .xxl-flx-row { flex-direction: row; }
  .xxl-flx-col-rev { flex-direction: column-reverse; }
  .xxl-flx-row-rev { flex-direction: row-reverse; }

  .xxl-al-start { align-items: center; }
  .xxl-al-center { align-items: center; }
  .xxl-al-end { align-items: flex-end; }

  .xxl-ju-start { justify-content: flex-start; }
  .xxl-ju-center { justify-content: center; }
  .xxl-ju-end { justify-content: end; }
  .xxl-ju-evenly { justify-content: space-evenly; }
  .xxl-ju-around { justify-content: space-around; }
  .xxl-ju-between { justify-content: space-between; }
  .xxl-show {display:block;}

  /*FLEX ITEM*/
  .xxl-self-start { align-self: flex-start; }
  .xxl-self-end { align-self: flex-end; }
  .xxl-self-center { align-self: center; }

}

@media (min-width:1800px) {
  .container { margin: 0 auto!important; }
}


/*TEXT-ALIGN*/
.center-txt { text-align: center; }
.left-txt { text-align: left; }
.right-txt { text-align: right; }

/*MARGIN*/

.center-block { margin: 0 auto; }


.m-5 { margin: 5px; }
.m-10 { margin: 10px; }
.m-15 { margin: 15px; }
.m-30 { margin: 30px; }
.m-45 { margin: 45px; }
.m-60 { margin: 60px; }
.m-75 { margin: 75px; }

.my-5 { margin-top: 5px; margin-bottom: 5px; }
.my-10 { margin-top: 10px; margin-bottom: 10px; }
.my-15 { margin-top: 15px; margin-bottom: 15px; }
.my-30 { margin-top: 30px; margin-bottom: 30px; }
.my-45 { margin-top: 45px; margin-bottom: 45px; }
.my-60 { margin-top: 60px; margin-bottom: 60px; }
.my-75 { margin-top: 75px; margin-bottom: 75px; }

.mx-5 { margin-right: 5px; margin-left: 5px; }
.mx-10 { margin-right: 10px; margin-left: 10px; }
.mx-15 { margin-right: 15px; margin-left: 15px; }
.mx-30 { margin-right: 30px; margin-left: 30px; }
.mx-45 { margin-right: 45px; margin-left: 45px; }
.mx-60 { margin-right: 60px; margin-left: 60px; }
.mx-75 { margin-right: 75px; margin-left: 75px; }

.mt-5 { margin-top: 5px; }
.mt-10 { margin-top: 10px; }
.mt-15 { margin-top: 15px; }
.mt-30 { margin-top: 30px; }
.mt-45 { margin-top: 45px; }
.mt-60 { margin-top: 60px; }
.mt-75 { margin-top: 75px; }

.mb-5 { margin-bottom: 5px; }
.mb-10 { margin-bottom: 10px; }
.mb-15 { margin-bottom: 15px; }
.mb-30 { margin-bottom: 30px; }
.mb-45 { margin-bottom: 45px; }
.mb-60 { margin-bottom: 60px; }
.mb-75 { margin-bottom: 75px; }

.mr-5 { margin-right: 5px; }
.mr-10 { margin-right: 10px; }
.mr-15 { margin-right: 15px; }
.mr-30 { margin-right: 30px; }
.mr-45 { margin-right: 45px; }
.mr-60 { margin-right: 60px; }
.mr-75 { margin-right: 75px; }

.ml-5 { margin-left: 5px; }
.ml-10 { margin-left: 10px; }
.ml-15 { margin-left: 15px; }
.ml-30 { margin-left: 30px; }
.ml-45 { margin-left: 45px; }
.ml-60 { margin-left: 60px; }
.ml-75 { margin-left: 75px; }

/*PADDING*/

.p-5 { padding: 5px; }
.p-10 { padding: 10px; }
.p-15 { padding: 15px; }
.p-30 { padding: 30px; }
.p-45 { padding: 45px; }
.p-60 { padding: 60px; }
.p-75 { padding: 75px; }

.py-5 { padding-top: 5px; padding-bottom: 5px; }
.py-10 { padding-top: 10px; padding-bottom: 10px; }
.py-15 { padding-top: 15px; padding-bottom: 15px; }
.py-30 { padding-top: 30px; padding-bottom: 30px; }
.py-45 { padding-top: 45px; padding-bottom: 45px; }
.py-60 { padding-top: 60px; padding-bottom: 60px; }
.py-75 { padding-top: 75px; padding-bottom: 75px; }

.px-5 { padding-right: 5px; padding-left: 5px; }
.px-10 { padding-right: 10px; padding-left: 10px; }
.px-15 { padding-right: 15px; padding-left: 15px; }
.px-30 { padding-right: 30px; padding-left: 30px; }
.px-45 { padding-right: 45px; padding-left: 45px; }
.px-60 { padding-right: 60px; padding-left: 60px; }
.px-75 { padding-right: 75px; padding-left: 75px; }

.pt-5 { padding-top: 5px; }
.pt-10 { padding-top: 10px; }
.pt-15 { padding-top: 15px; }
.pt-30 { padding-top: 30px; }
.pt-45 { padding-top: 45px; }
.pt-60 { padding-top: 60px; }
.pt-75 { padding-top: 75px; }

.pb-5 { padding-bottom: 5px; }
.pb-10 { padding-bottom: 10px; }
.pb-15 { padding-bottom: 15px; }
.pb-30 { padding-bottom: 30px; }
.pb-45 { padding-bottom: 45px; }
.pb-60 { padding-bottom: 60px; }
.pb-75 { padding-bottom: 75px; }

.pr-5 { padding-right: 5px; }
.pr-10 { padding-right: 10px; }
.pr-15 { padding-right: 15px; }
.pr-30 { padding-right: 30px; }
.pr-45 { padding-right: 45px; }
.pr-60 { padding-right: 60px; }
.pr-75 { padding-right: 75px; }

.pl-5 { padding-left: 5px; }
.pl-10 { padding-left: 10px; }
.pl-15 { padding-left: 15px; }
.pl-30 { padding-left: 30px; }
.pl-45 { padding-left: 45px; }
.pl-60 { padding-left: 60px; }
.pl-75 { padding-left: 75px; }

/*FONT-SIZE*/
.fs-08 { font-size: 0.8rem; }
.fs-11 { font-size: 1.1rem; }
.fs-12 { font-size: 1.2rem; }
.fs-13 { font-size: 1.3rem; }
.fs-14 { font-size: 1.4rem; }
.fs-15 { font-size: 1.5rem; }
.fs-17 { font-size: 1.6rem; }
.fs-16 { font-size: 1.7rem; }
.fs-18 { font-size: 1.8rem; }
.fs-19 { font-size: 1.9rem; }
.fs-20 { font-size: 2.0rem; }
.fs-23 { font-size: 2.3rem; }
.fs-25 { font-size: 2.5rem; }
.fs-27 { font-size: 2.7rem; }
.fs-28 { font-size: 2.8rem; }
.fs-30 { font-size: 3.0rem; }
.fs-32 { font-size: 3.2rem; }
.fs-33 { font-size: 3.3rem; }
.fs-34 { font-size: 3.4rem; }
.fs-35 { font-size: 3.5rem; }
.fs-40 { font-size: 4rem; }
.fs-45 { font-size: 4.5rem; }

/*FONT-WEIGHT*/
.fw-300 { font-weight: 300; }
.fw-400 { font-weight: 400; }
.fw-500 { font-weight: 500; }
.fw-600 { font-weight: 600; }
.fw-700 { font-weight: 700; }

/*WIDTH*/
.w-full { width: 100% }
.w-fifth { grid-column: span 6 }
.max-w-cont { max-width: fit-cont; }
.max-w-10 { max-width: 10px; }
.max-w-20 { max-width: 20px; }
.max-w-30 { max-width: 30px; }
.max-w-40 { max-width: 40px; }
.max-w-50 { max-width: 50px; }
.max-w-60 { max-width: 60px; }
.max-w-70 { max-width: 70px; }
.max-w-80 { max-width: 80px; }
.max-w-90 { max-width: 90px; }
.max-w-100 { max-width: 100px; }
.max-w-110 { max-width: 110px; }
.max-w-120 { max-width: 120px; }
.max-w-130 { max-width: 130px; }
.max-w-140 { max-width: 140px; }
.max-w-150 { max-width: 150px; }
.max-w-160 { max-width: 160px; }
.max-w-170 { max-width: 170px; }
.max-w-180 { max-width: 180px; }
.max-w-190 { max-width: 190px; }
.max-w-200 { max-width: 200px; }
.max-w-210 { max-width: 210px; }
.max-w-220 { max-width: 220px; }
.max-w-230 { max-width: 230px; }
.max-w-240 { max-width: 240px; }
.max-w-250 { max-width: 250px; }
.max-w-260 { max-width: 260px; }
.max-w-270 { max-width: 270px; }
.max-w-280 { max-width: 280px; }
.max-w-290 { max-width: 290px; }
.max-w-300 { max-width: 300px; }
.max-w-310 { max-width: 310px; }
.max-w-320 { max-width: 320px; }
.max-w-330 { max-width: 330px; }
.max-w-340 { max-width: 340px; }
.max-w-350 { max-width: 350px; }
.max-w-360 { max-width: 360px; }
.max-w-370 { max-width: 370px; }
.max-w-380 { max-width: 380px; }
.max-w-390 { max-width: 390px; }
.max-w-400 { max-width: 400px; }
.max-w-410 { max-width: 410px; }
.max-w-420 { max-width: 420px; }
.max-w-430 { max-width: 430px; }
.max-w-440 { max-width: 440px; }
.max-w-450 { max-width: 450px; }
.max-w-460 { max-width: 460px; }
.max-w-470 { max-width: 470px; }
.max-w-480 { max-width: 480px; }
.max-w-490 { max-width: 490px; }
.max-w-500 { max-width: 500px; }
.max-w-510 { max-width: 510px; }
.max-w-520 { max-width: 520px; }
.max-w-530 { max-width: 530px; }
.max-w-540 { max-width: 540px; }
.max-w-550 { max-width: 550px; }
.max-w-560 { max-width: 560px; }
.max-w-570 { max-width: 570px; }
.max-w-580 { max-width: 580px; }
.max-w-590 { max-width: 590px; }
.max-w-600 { max-width: 600px; }
.max-w-610 { max-width: 610px; }
.max-w-620 { max-width: 620px; }
.max-w-630 { max-width: 630px; }
.max-w-640 { max-width: 640px; }
.max-w-650 { max-width: 650px; }
.max-w-660 { max-width: 660px; }
.max-w-670 { max-width: 670px; }
.max-w-680 { max-width: 680px; }
.max-w-690 { max-width: 690px; }
.max-w-700 { max-width: 700px; }
.max-w-710 { max-width: 710px; }
.max-w-720 { max-width: 720px; }
.max-w-730 { max-width: 730px; }
.max-w-740 { max-width: 740px; }
.max-w-750 { max-width: 750px; }
.max-w-760 { max-width: 760px; }
.max-w-770 { max-width: 770px; }
.max-w-780 { max-width: 780px; }
.max-w-790 { max-width: 790px; }
.max-w-800 { max-width: 800px; }
.max-w-810 { max-width: 810px; }
.max-w-820 { max-width: 820px; }
.max-w-830 { max-width: 830px; }
.max-w-840 { max-width: 840px; }
.max-w-850 { max-width: 850px; }
.max-w-860 { max-width: 860px; }
.max-w-870 { max-width: 870px; }
.max-w-880 { max-width: 880px; }
.max-w-890 { max-width: 890px; }
.max-w-900 { max-width: 900px; }
.max-w-910 { max-width: 910px; }
.max-w-920 { max-width: 920px; }
.max-w-930 { max-width: 930px; }
.max-w-940 { max-width: 940px; }
.max-w-950 { max-width: 950px; }
.max-w-960 { max-width: 960px; }
.max-w-970 { max-width: 970px; }
.max-w-980 { max-width: 980px; }
.max-w-990 { max-width: 990px; }
.max-w-1000 { max-width: 1000px; }
.max-w-1010 { max-width: 1010px; }
.max-w-1020 { max-width: 1020px; }
.max-w-1030 { max-width: 1030px; }
.max-w-1040 { max-width: 1040px; }
.max-w-1050 { max-width: 1050px; }
.max-w-1060 { max-width: 1060px; }
.max-w-1070 { max-width: 1070px; }
.max-w-1080 { max-width: 1080px; }
.max-w-1090 { max-width: 1090px; }
.max-w-1100 { max-width: 1100px; }
.max-w-1110 { max-width: 1110px; }
.max-w-1120 { max-width: 1120px; }
.max-w-1130 { max-width: 1130px; }
.max-w-1140 { max-width: 1140px; }
.max-w-1150 { max-width: 1150px; }
.max-w-1160 { max-width: 1160px; }
.max-w-1170 { max-width: 1170px; }
.max-w-1180 { max-width: 1180px; }
.max-w-1190 { max-width: 1190px; }
.max-w-1200 { max-width: 1200px; }
.max-w-1210 { max-width: 1210px; }
.max-w-1220 { max-width: 1220px; }
.max-w-1230 { max-width: 1230px; }
.max-w-1240 { max-width: 1240px; }
.max-w-1250 { max-width: 1250px; }
.max-w-1260 { max-width: 1260px; }
.max-w-1270 { max-width: 1270px; }
.max-w-1280 { max-width: 1280px; }
.max-w-1290 { max-width: 1290px; }
.max-w-1300 { max-width: 1300px; }
.max-w-1310 { max-width: 1310px; }
.max-w-1320 { max-width: 1320px; }
.max-w-1330 { max-width: 1330px; }
.max-w-1340 { max-width: 1340px; }
.max-w-1350 { max-width: 1350px; }
.max-w-1360 { max-width: 1360px; }
.max-w-1370 { max-width: 1370px; }
.max-w-1380 { max-width: 1380px; }
.max-w-1390 { max-width: 1390px; }
.max-w-1400 { max-width: 1400px; }
.max-w-1410 { max-width: 1410px; }
.max-w-1420 { max-width: 1420px; }
.max-w-1430 { max-width: 1430px; }
.max-w-1440 { max-width: 1440px; }
.max-w-1450 { max-width: 1450px; }
.max-w-1460 { max-width: 1460px; }
.max-w-1470 { max-width: 1470px; }
.max-w-1480 { max-width: 1480px; }
.max-w-1490 { max-width: 1490px; }
.max-w-1500 { max-width: 1500px; }
.max-w-1510 { max-width: 1510px; }
.max-w-1520 { max-width: 1520px; }
.max-w-1530 { max-width: 1530px; }
.max-w-1540 { max-width: 1540px; }
.max-w-1550 { max-width: 1550px; }
.max-w-1560 { max-width: 1560px; }
.max-w-1570 { max-width: 1570px; }
.max-w-1580 { max-width: 1580px; }
.max-w-1590 { max-width: 1590px; }
.max-w-1600 { max-width: 1600px; }
.max-w-1610 { max-width: 1610px; }
.max-w-1620 { max-width: 1620px; }
.max-w-1630 { max-width: 1630px; }
.max-w-1640 { max-width: 1640px; }
.max-w-1650 { max-width: 1650px; }
.max-w-1660 { max-width: 1660px; }
.max-w-1670 { max-width: 1670px; }
.max-w-1680 { max-width: 1680px; }
.max-w-1690 { max-width: 1690px; }
.max-w-1700 { max-width: 1700px; }
.max-w-1710 { max-width: 1710px; }
.max-w-1720 { max-width: 1720px; }
.max-w-1730 { max-width: 1730px; }
.max-w-1740 { max-width: 1740px; }
.max-w-1750 { max-width: 1750px; }
.max-w-1760 { max-width: 1760px; }
.max-w-1770 { max-width: 1770px; }
.max-w-1780 { max-width: 1780px; }
.max-w-1790 { max-width: 1790px; }
.max-w-1800 { max-width: 1800px; }
.max-w-1810 { max-width: 1810px; }
.max-w-1820 { max-width: 1820px; }
.max-w-1830 { max-width: 1830px; }
.max-w-1840 { max-width: 1840px; }
.max-w-1850 { max-width: 1850px; }
.max-w-1860 { max-width: 1860px; }
.max-w-1870 { max-width: 1870px; }
.max-w-1880 { max-width: 1880px; }
.max-w-1890 { max-width: 1890px; }
.max-w-1900 { max-width: 1900px; }
.max-w-1910 { max-width: 1910px; }
.max-w-1920 { max-width: 1920px; }
.max-w-1930 { max-width: 1930px; }
.max-w-1940 { max-width: 1940px; }
.max-w-1950 { max-width: 1950px; }
.max-w-1960 { max-width: 1960px; }
.max-w-1970 { max-width: 1970px; }
.max-w-1980 { max-width: 1980px; }
.max-w-1990 { max-width: 1990px; }
.max-w-2000 { max-width: 2000px; }
.max-w-2010 { max-width: 2010px; }
.max-w-2020 { max-width: 2020px; }
.max-w-2030 { max-width: 2030px; }
.max-w-2040 { max-width: 2040px; }
.max-w-2050 { max-width: 2050px; }
.max-w-2060 { max-width: 2060px; }
.max-w-2070 { max-width: 2070px; }
.max-w-2080 { max-width: 2080px; }
.max-w-2090 { max-width: 2090px; }


/*HEIGHT*/
.vh-100 { height: 100vh; }
.vh-75 { height: 75vh; }
.vh-50 { height: 50vh; }
.vh-25 { height: 25vh; }
.min-h-1 { min-height: 1px; }
.min-h-2 { min-height: 2px; }
.min-h-10 { min-height: 10px; }
.min-h-15 { min-height: 15px }
.min-h-20 { min-height: 20px }
.min-h-25 { min-height: 25px }
.min-h-30 { min-height: 30px }
.min-h-35 { min-height: 35px }
.min-h-40 { min-height: 40px }
.min-h-45 { min-height: 45px }
.min-h-50 { min-height: 50px }
.min-h-55 { min-height: 55px }
.min-h-60 { min-height: 60px }
.min-h-65 { min-height: 65px }
.min-h-70 { min-height: 70px }
.min-h-75 { min-height: 75px }
.min-h-80 { min-height: 80px }
.min-h-85 { min-height: 85px }
.min-h-20 { min-height: 20px; }
.min-h-105 { min-height: 105px; }
.min-h-120 { min-height: 120px; }
.min-h-210 { min-height: 210px; }
.min-h-220 { min-height: 220px; }
.min-h-230 { min-height: 230px; }
.min-h-250 { min-height: 250px; }
.min-h-270 { min-height: 270px; }
.min-h-500 { min-height: 500px; }
.min-h-280 { min-height: 280px; }
.h-full { height: 100% }


/*BORDER RADIUS*/
.rad-0 { border-radius: 0px; }
.rad-5 { border-radius: 5px; }
.rad-10 { border-radius: 10px; }
.rad-20 { border-radius: 20px; }

