/* brass — engine-family additions to the approved template 1 CSS (style.gtf0643bae09, global.gtf0643bae09, page-*.gtf0643bae09 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) */
.ble90ab84485.nxbbaf0ddd00 { grid-template-columns: repeat(3, minmax(0, 1fr)); max-width: 360px; }

/* drawn steps: the non-3D "How a visit goes" */
.tv7b33998b43 { background: var(--jd4b17411df4); }
.tv7b33998b43 .kwa26fd2aad2 { max-width: 62ch; margin-bottom: clamp(20px, 4vw, 40px); }
.tv7b33998b43 .kwa26fd2aad2 .dbe25107ebf3 { margin-bottom: 14px; }
.jd9ffdd35ba6 { list-style: none; margin: 0; padding: 0; display: grid; gap: 18px; grid-template-columns: minmax(0, 1fr); counter-reset: bx; }
@media (min-width: 768px) { .jd9ffdd35ba6 { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; } }
.mdf260d1c5e7 { min-width: 0; background: var(--md6bedd04dbd); border-radius: var(--sm61e6e6d478); padding: 22px 22px 24px; box-shadow: var(--rp097da019fa); position: relative; }
.mdf260d1c5e7 .ez36d92da3dc { width: 72px; height: 72px; color: var(--rp96db823fc0); margin-bottom: 12px; }
.mdf260d1c5e7 .cw998116bbdc { font: 650 .8125rem/1 var(--qs9518f37000); letter-spacing: .1em; color: var(--bl66545518b4); margin: 0 0 8px; }
.mdf260d1c5e7 .kw4988c6727f { font: 650 1.25rem/1.22 var(--qs9518f37000); margin: 0 0 8px; overflow-wrap: anywhere; }
.mdf260d1c5e7 p:last-child { margin: 0; color: var(--rp96db823fc0); overflow-wrap: break-word; }
@media (min-width: 768px) { .mdf260d1c5e7:nth-child(2) { transform: translateY(18px); } .mdf260d1c5e7:nth-child(3) { transform: translateY(36px); } .jd9ffdd35ba6 { padding-bottom: 36px; } }

/* inner pages built from content (services, areas, questions, about, contact, site map) */
.kwc177c4dff1 { overflow-wrap: break-word; }
.fyc53679c1a7 .gt6ec8881c5e { margin-top: 10px; }
.fyc53679c1a7 .dbe25107ebf3 a, .md41a7af6b15 .dbe25107ebf3 a, .ir0acd3df5ab .dbe25107ebf3 a { color: inherit; text-decoration: none; }
.fyc53679c1a7 .dbe25107ebf3 a:hover, .md41a7af6b15 .dbe25107ebf3 a:hover, .ir0acd3df5ab .dbe25107ebf3 a:hover { color: var(--bl66545518b4); }
.qs0c93abf285 .db2bf88d28ec { border-radius: var(--sm61e6e6d478); overflow: hidden; aspect-ratio: 4 / 3; box-shadow: var(--rp097da019fa); }
@media (min-width: 768px) { .qs0c93abf285 .db2bf88d28ec { aspect-ratio: 16 / 9; } }
.qs0c93abf285 .db2bf88d28ec iframe { width: 100%; height: 100%; border: 0; display: block; }
.md41a7af6b15 { display: grid; gap: 18px; grid-template-columns: minmax(0, 1fr); align-items: start; }
@media (min-width: 700px) { .md41a7af6b15 { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); gap: 28px; } .md41a7af6b15:nth-of-type(even) .pn44af2aed4d { order: 2; } }
.pn44af2aed4d, .nx6c2b1260ca { min-width: 0; }
.pn44af2aed4d img { width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; border-radius: var(--fyd502aad21d); display: block; }
.md41a7af6b15:nth-of-type(3n+1) .pn44af2aed4d img { border-radius: 999px 999px var(--fyd502aad21d) var(--fyd502aad21d); }
.sm9dc9586cb0 { font-size: .9375rem; color: var(--tv4444f67fc1); border-left: 3px solid var(--pnf920303a87); padding-left: 12px; }
.md41a7af6b15 .ly367c77c7b6 { display: flex; flex-wrap: wrap; gap: 12px 18px; align-items: center; }
.jd9c2d964bb6 { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 16px; align-items: center; margin-bottom: 14px; }
.sm5d1b8d7487 { margin: 0; }
.sm5d1b8d7487 img { width: 96px; height: 96px; object-fit: cover; border-radius: 50%; display: block; box-shadow: 0 0 0 5px var(--uxf8446c30e5), var(--rp097da019fa); }
.gt4294a5a753 { color: var(--rp35d4511899); margin: 8px 0 18px; }
.kwca7480ec70 h2 { font: 650 1.375rem/1.2 var(--db12a494995f); margin: 0 0 10px; }

/* advice article: a printed page (rule 60) */
.irb5fab48891 { background: var(--eza8b040da07); border-radius: var(--ir3dbb34a31d); padding: clamp(18px, 4vw, 44px); box-shadow: var(--dbc7a83f19ea); position: relative;
  background-image: repeating-linear-gradient(0deg, color-mix(in srgb, var(--rp35d4511899) 2.5%, transparent) 0 1px, transparent 1px 4px); }
.ux1b4cf2822e { border-bottom: 3px double var(--rp35d4511899); padding-bottom: 14px; margin-bottom: 18px; text-align: center; }
.gtb3030b42d5 { font: 700 .75rem/1.2 var(--qs9518f37000); letter-spacing: .22em; text-transform: uppercase; color: var(--bl66545518b4); margin: 0 0 10px; overflow-wrap: anywhere; }
.jd4e3f2e008b { font: 760 clamp(1.75rem, 1.1rem + 3vw, 3rem)/1.04 var(--db12a494995f); letter-spacing: -.02em; margin: 0 0 10px; overflow-wrap: anywhere; text-wrap: balance; }
.fyac24872074 { font: 500 .8125rem/1.3 var(--qs9518f37000); letter-spacing: .08em; text-transform: uppercase; color: var(--tv4444f67fc1); margin: 0; border-top: 1px solid var(--sm9a50ccd174); padding-top: 8px; }
.ao25ea794330 { margin: 0 0 18px; }
.ao25ea794330 img { width: 100%; height: auto; aspect-ratio: 3 / 2; object-fit: cover; display: block; filter: sepia(.12) contrast(1.02); }
.kw5a74262086 { font: 500 1.1875rem/1.55 var(--qs9518f37000); }
.kw5a74262086::first-letter { float: left; font: 800 3.6em/.82 var(--db12a494995f); margin: .06em .08em 0 0; color: var(--bl66545518b4); }
.gt5d9782a78c { columns: 1; column-gap: 36px; column-rule: 1px solid var(--nxf24728f3cb); }
@media (min-width: 900px) { .gt5d9782a78c { columns: 2; } }
.ir19a78f24a7 { break-inside: avoid-column; }
.ir19a78f24a7 h2 { font: 700 1.1875rem/1.25 var(--db12a494995f); margin: 0 0 8px; border-top: 1px solid var(--rp35d4511899); padding-top: 10px; overflow-wrap: anywhere; }
.ir19a78f24a7 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) */
.rpa08838e9c1.mdfc7fa856e7 img { filter: brightness(1.38) saturate(1.06); }
.rpa08838e9c1.mdfc7fa856e7::after { background: linear-gradient(0deg, color-mix(in srgb, var(--bl074f2b79c8) 78%, transparent) 0%, color-mix(in srgb, var(--bl074f2b79c8) 26%, transparent) 44%, color-mix(in srgb, var(--bl074f2b79c8) 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.qs3cf4b2efe5 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(--md5aab18f3b7); 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; }
.dba12492fa7d[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 --vh2cd14724e0),
   so on a dark site they stay light islands and keep dark words. */
[data-skin="dark"] .smcf5b6b07fe, [data-skin="dark"] .cw4462b4ab1d {
  --rp35d4511899: #141A22; --rp96db823fc0: #2B313A; --tv4444f67fc1: #4F4A42; --bl66545518b4: var(--jd48b264e462);
  --fy8deccf378e: rgb(20 26 34 / .16); --nxf24728f3cb: rgb(20 26 34 / .13); --sm9a50ccd174: rgb(20 26 34 / .24);
  color: #141A22;
}
/*d946ac5ba371*/
