/* brass — engine-family additions to the approved template 1 CSS (style.bl6633409c8a, global.bl6633409c8a, page-*.bl6633409c8a are the
   hand-built pages' own files, unchanged). Only what the engine needs beyond the hand-built pages:
   the drawn-steps "How a visit goes" (garage), a three-step journey, and the plainer inner pages.
   Nothing here may scroll sideways: every grid/flex child min-width 0, long words wrap. */

/* three-step 3D journey (content gives three steps) */
.aobd62b930f6.blee80bb5b3a { grid-template-columns: repeat(3, minmax(0, 1fr)); max-width: 360px; }

/* drawn steps: the non-3D "How a visit goes" */
.db54bab705eb { background: var(--rpb8df53b9a9); }
.db54bab705eb .ir86dfc2fabf { max-width: 62ch; margin-bottom: clamp(20px, 4vw, 40px); }
.db54bab705eb .ir86dfc2fabf .lyca065131d2 { margin-bottom: 14px; }
.fy9d79a6cca3 { list-style: none; margin: 0; padding: 0; display: grid; gap: 18px; grid-template-columns: minmax(0, 1fr); counter-reset: bx; }
@media (min-width: 768px) { .fy9d79a6cca3 { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; } }
.qsfc25a33a1b { min-width: 0; background: var(--cwd7b42bc8bf); border-radius: var(--ao43de377897); padding: 22px 22px 24px; box-shadow: var(--ezff1e128649); position: relative; }
.qsfc25a33a1b .rp8bef959633 { width: 72px; height: 72px; color: var(--fyb63a49eb8b); margin-bottom: 12px; }
.qsfc25a33a1b .db0848654387 { font: 650 .8125rem/1 var(--jde70254f02d); letter-spacing: .1em; color: var(--cwfed20a3d64); margin: 0 0 8px; }
.qsfc25a33a1b .mde07eeeaaf9 { font: 650 1.25rem/1.22 var(--jde70254f02d); margin: 0 0 8px; overflow-wrap: anywhere; }
.qsfc25a33a1b p:last-child { margin: 0; color: var(--fyb63a49eb8b); overflow-wrap: break-word; }
@media (min-width: 768px) { .qsfc25a33a1b:nth-child(2) { transform: translateY(18px); } .qsfc25a33a1b:nth-child(3) { transform: translateY(36px); } .fy9d79a6cca3 { padding-bottom: 36px; } }

/* inner pages built from content (services, areas, questions, about, contact, site map) */
.bld92438fc51 { overflow-wrap: break-word; }
.jde5b3457c75 .vh462bcd94c2 { margin-top: 10px; }
.jde5b3457c75 .lyca065131d2 a, .qs77355465bd .lyca065131d2 a, .qscce2e9ca2f .lyca065131d2 a { color: inherit; text-decoration: none; }
.jde5b3457c75 .lyca065131d2 a:hover, .qs77355465bd .lyca065131d2 a:hover, .qscce2e9ca2f .lyca065131d2 a:hover { color: var(--cwfed20a3d64); }
.fy3094a3085b .md9e9707757e { border-radius: var(--ao43de377897); overflow: hidden; aspect-ratio: 4 / 3; box-shadow: var(--ezff1e128649); }
@media (min-width: 768px) { .fy3094a3085b .md9e9707757e { aspect-ratio: 16 / 9; } }
.fy3094a3085b .md9e9707757e iframe { width: 100%; height: 100%; border: 0; display: block; }
.qs77355465bd { display: grid; gap: 18px; grid-template-columns: minmax(0, 1fr); align-items: start; }
@media (min-width: 700px) { .qs77355465bd { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); gap: 28px; } .qs77355465bd:nth-of-type(even) .qs13b018a703 { order: 2; } }
.qs13b018a703, .rp620ac6154a { min-width: 0; }
.qs13b018a703 img { width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; border-radius: var(--nxad2786e8f7); display: block; }
.qs77355465bd:nth-of-type(3n+1) .qs13b018a703 img { border-radius: 999px 999px var(--nxad2786e8f7) var(--nxad2786e8f7); }
.lyd2d822d5e3 { font-size: .9375rem; color: var(--nxe12709edd1); border-left: 3px solid var(--bld0891f0652); padding-left: 12px; }
.qs77355465bd .ir03ca221d93 { display: flex; flex-wrap: wrap; gap: 12px 18px; align-items: center; }
.rpec8d00c672 { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 16px; align-items: center; margin-bottom: 14px; }
.ez9f0007083b { margin: 0; }
.ez9f0007083b img { width: 96px; height: 96px; object-fit: cover; border-radius: 50%; display: block; box-shadow: 0 0 0 5px var(--pn2d96049631), var(--ezff1e128649); }
.pn13d2d92564 { color: var(--rp53bdfc7627); margin: 8px 0 18px; }
.jd5efa4e5b7a h2 { font: 650 1.375rem/1.2 var(--pn8fbcc31a65); margin: 0 0 10px; }

/* advice article: a printed page (rule 60) */
.md1e33240113 { background: var(--fy59da852658); border-radius: var(--db7a1024246a); padding: clamp(18px, 4vw, 44px); box-shadow: var(--rp0c7cdeaf40); position: relative;
  background-image: repeating-linear-gradient(0deg, color-mix(in srgb, var(--rp53bdfc7627) 2.5%, transparent) 0 1px, transparent 1px 4px); }
.tv7a4c5067d6 { border-bottom: 3px double var(--rp53bdfc7627); padding-bottom: 14px; margin-bottom: 18px; text-align: center; }
.ire2d43f9600 { font: 700 .75rem/1.2 var(--jde70254f02d); letter-spacing: .22em; text-transform: uppercase; color: var(--cwfed20a3d64); margin: 0 0 10px; overflow-wrap: anywhere; }
.nx5ecdadf767 { font: 760 clamp(1.75rem, 1.1rem + 3vw, 3rem)/1.04 var(--pn8fbcc31a65); letter-spacing: -.02em; margin: 0 0 10px; overflow-wrap: anywhere; text-wrap: balance; }
.cw4c5cb85c2d { font: 500 .8125rem/1.3 var(--jde70254f02d); letter-spacing: .08em; text-transform: uppercase; color: var(--nxe12709edd1); margin: 0; border-top: 1px solid var(--vh5d96721d53); padding-top: 8px; }
.ux1865edae40 { margin: 0 0 18px; }
.ux1865edae40 img { width: 100%; height: auto; aspect-ratio: 3 / 2; object-fit: cover; display: block; filter: sepia(.12) contrast(1.02); }
.lycaed608aff { font: 500 1.1875rem/1.55 var(--jde70254f02d); }
.lycaed608aff::first-letter { float: left; font: 800 3.6em/.82 var(--pn8fbcc31a65); margin: .06em .08em 0 0; color: var(--cwfed20a3d64); }
.sm8b85169097 { columns: 1; column-gap: 36px; column-rule: 1px solid var(--tv1fd35c03f8); }
@media (min-width: 900px) { .sm8b85169097 { columns: 2; } }
.vhd6612d1284 { break-inside: avoid-column; }
.vhd6612d1284 h2 { font: 700 1.1875rem/1.25 var(--pn8fbcc31a65); margin: 0 0 8px; border-top: 1px solid var(--rp53bdfc7627); padding-top: 10px; overflow-wrap: anywhere; }
.vhd6612d1284 p { margin: 0 0 18px; overflow-wrap: break-word; }

/* "What happened?" tiles: a photo that is dark on its own is lifted, and the shade under the words eased,
   so no tile reads as a black square (Tamir's note on the High Security Locks tile, 2026-09-27) */
.md2a2edb4487.rpb9a3b9bead img { filter: brightness(1.38) saturate(1.06); }
.md2a2edb4487.rpb9a3b9bead::after { background: linear-gradient(0deg, color-mix(in srgb, var(--vh530dfe0d96) 78%, transparent) 0%, color-mix(in srgb, var(--vh530dfe0d96) 26%, transparent) 44%, color-mix(in srgb, var(--vh530dfe0d96) 0%, transparent) 66%); }

/* ------------------------------------------------------------------ clip slots (the engine's approved clips, 2026-09-28)
   The photo is on screen first and stays under the clip. The clip sits exactly on the photo's box (no
   layout shift), fades in only once it is really playing (never a black box), and under reduced motion
   there is no clip at all (app.ez07d015a31a also removes it). */
figure[data-clip-frame] { position: relative; }
video[data-clip-v] { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity .8s var(--jdd727e8241c); pointer-events: none; }
[data-playing] > video[data-clip-v] { opacity: 1; }
/* the still under a clip is the clip's own first frame: both sit on exactly the same crop, with no zoom or drift,
   so the fade from still to moving picture shows no jump */
img[data-clip-still], video[data-clip-v] { object-position: 50% 50% !important; animation: none !important; transform: none !important; }
video[data-clip-v]::-webkit-media-controls, video[data-clip-v]::-webkit-media-controls-start-playback-button { display: none !important; -webkit-appearance: none; }
.rpa5c728b60e[hidden] { display: none; }
@media (prefers-reduced-motion: reduce) { video[data-clip-v] { display: none; } }

/* ------------------------------------------------------------------ dark-ground themes (palette skin "dark", rule 73)
   Colours only. The two 3D scroll stages are rendered on a light ground (re-tinted per theme by --jdee826efcf7),
   so on a dark site they stay light islands and keep dark words. */
[data-skin="dark"] .ir8282c03eb5, [data-skin="dark"] .dbc32bd5608b {
  --rp53bdfc7627: #141A22; --fyb63a49eb8b: #2B313A; --nxe12709edd1: #4F4A42; --cwfed20a3d64: var(--rp52e1184f84);
  --vhd49e52d0f2: rgb(20 26 34 / .16); --tv1fd35c03f8: rgb(20 26 34 / .13); --vh5d96721d53: rgb(20 26 34 / .24);
  color: #141A22;
}
/*109ccf23a879*/
