
/* EmirateFreeZoneShortlist ("Top [Emirate] free zones") — SINGLE SOURCE. tools/build-emirate-free-zone-shortlist.py writes
   this into every emirate page inside the "GENERATED emirate-free-zone-shortlist" region. The rules are the Dubai row
   implementation moved here verbatim (2026-09-07, owner brief) minus the retired rank column; the identity slot rules
   are appended by the generator from tools/_zone_logo.py. Tokens only; both themes. */
.dub-fzgrid { padding:100px 0;}
.dub-fzgrid-head { display:flex; justify-content:space-between; align-items:flex-end; margin-bottom:44px; gap:32px; flex-wrap:wrap; }
.dub-fzgrid-head h2 { font-size:clamp(28px,3.2vw,40px); line-height:1.14; letter-spacing:-.02em; font-weight:400; margin:0; color:var(--text); max-width:520px; }
.dub-fzcards { display: flex; flex-direction: column; gap: 10px; }
.dub-fzcard { display: grid; grid-template-columns: minmax(180px,1.05fr) minmax(0,1.5fr) minmax(150px,.9fr) minmax(0,1.35fr) auto; align-items: center; gap: 20px; padding: 18px 22px; border: 1px solid var(--line); border-radius: 12px; background: var(--card); }
.dub-fzcard-id h3 { margin: 0; font-size: 16px; font-weight: 500; letter-spacing: -.01em; color: var(--text); }
.dub-fzcard-id small { display: block; margin-top: 3px; font-size: 12px; line-height: 1.4; color: var(--faint); }
.dub-fzcard-best, .dub-fzcard-bank { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--muted); }
.dub-fzcard-price { margin: 0; font-size: 14px; font-weight: 500; color: var(--text); }
.dub-fzgrid-tier { display:inline-block; font-family:var(--mono); font-size:10px; letter-spacing:.1em; text-transform:uppercase; padding:4px 8px; border-radius:4px; }
.dub-fzgrid-tier.t1 { background:rgba(138,163,148,.14); color:#a8c4b0; }
.dub-fzgrid-tier.t2 { background:rgba(230,224,210,.06); color:var(--mineral); }
.dub-fzgrid-tier.t3 { background:rgba(184,148,116,.12); color:#c8a983; }
:root[data-theme="light"] .dub-fzgrid-tier.t1 { color:#3F6B55; }
:root[data-theme="light"] .dub-fzgrid-tier.t3 { color:#8A5F33; }
.dub-fzcard-id .fzshelf-logo { margin-bottom: 6px; }   /* identity mark, then the location on the same left edge */
@media (max-width: 1080px) { .dub-fzcard { grid-template-columns: 1fr auto; row-gap: 10px; } .dub-fzcard-best, .dub-fzcard-bank, .dub-fzcard-price { grid-column: 1 / -1; } }
@media (max-width: 620px) { .dub-fzcard { grid-template-columns: 1fr auto; padding: 16px 18px; } .dub-fzcard-id, .dub-fzcard-best, .dub-fzcard-bank, .dub-fzcard-price { grid-column: 1 / -1; } }
/* the row as one internal link to the zone page (2026-09-08, owner): rest unchanged, a quiet warm lift on fine pointers, a full-row focus ring */
a.dub-fzcard--link { text-decoration: none; color: inherit; transition: background-color 180ms ease-out, border-color 180ms ease-out; }
@media (hover: hover) and (pointer: fine) { a.dub-fzcard--link:hover { background: var(--surface-tinted); border-color: var(--line-strong); } }
a.dub-fzcard--link:focus-visible { outline: 2px solid var(--focus-ring, var(--mineral)); outline-offset: 3px; }
@media (prefers-reduced-motion: reduce) { a.dub-fzcard--link { transition: none; } }
/* free-zone identity — tools/_zone_logo.py (2026-09-07): an official mark renders as supplied in a transparent box; the quiet
   bordered tile is the neutral fallback (monogram) only. No filter, invert, recolour, plate or clipping is ever applied. */
:root .dub-fzcard-id .fzshelf-logo { position:relative; width:132px; min-width:132px; max-width:132px; height:42px; padding:0; box-sizing:border-box; display:flex; align-items:center; justify-content:flex-start; flex:none; font-size:0; overflow:visible; background:transparent; border:0; border-radius:0; box-shadow:none; }
:root .dub-fzcard-id .fzshelf-logo img { display:none; width:auto; height:auto; max-width:100%; max-height:100%; object-fit:contain; object-position:left center; filter:none; opacity:1; background:transparent; border:0; border-radius:0; box-shadow:none; }
:root .dub-fzcard-id .fzshelf-logo .fzshelf-monogram { display:none; box-sizing:border-box; min-width:72px; max-width:132px; height:42px; padding:0 10px; align-items:center; justify-content:center; text-align:center; border:1px solid var(--line); border-radius:10px; background:var(--control-surface, rgba(230,224,210,.05)); font-family:var(--mono); font-size:10.5px; letter-spacing:.08em; font-weight:600; line-height:1.15; color:var(--text); white-space:normal; text-transform:uppercase; font-style:normal; overflow:hidden; }
:root[data-theme="light"] .dub-fzcard-id .fzshelf-logo .fzshelf-monogram { background:rgba(20,24,27,.04); }
:root:not([data-theme="light"]) .dub-fzcard-id .fzshelf-logo:not([data-fallback]) img[data-on~="dark"] { display:block; }
:root:not([data-theme="light"]) .dub-fzcard-id .fzshelf-logo:not([data-show~="dark"]) .fzshelf-monogram, :root:not([data-theme="light"]) .dub-fzcard-id .fzshelf-logo[data-fallback] .fzshelf-monogram { display:inline-flex; }
:root[data-theme="light"] .dub-fzcard-id .fzshelf-logo:not([data-fallback]) img[data-on~="light"] { display:block; }
:root[data-theme="light"] .dub-fzcard-id .fzshelf-logo:not([data-show~="light"]) .fzshelf-monogram, :root[data-theme="light"] .dub-fzcard-id .fzshelf-logo[data-fallback] .fzshelf-monogram { display:inline-flex; }
:root .dub-fzcard-id .fzshelf-logo .fzshelf-logo__name { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="adgm"] img { width:91.1px; height:24.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="adgm"] img[src="/assets/freezones/adgm-light.png"] { width:91.1px; height:24.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="adjd"] img { width:88.9px; height:34.9px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="ajman"] img { width:115.7px; height:24.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="ajman"] img[src="/assets/freezones/ajman-dark.png"] { width:116.4px; height:24.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="ajman-media-city"] img { width:89.7px; height:24.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="ajman-media-city"] img[src="/assets/freezones/ajman-media-city-dark.png"] { width:89.9px; height:24.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="commercity"] img { width:98.5px; height:17.5px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="commercity"] img[src="/assets/freezones/commercity-light.svg"] { width:88.9px; height:16.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="creative-city"] img { width:57.9px; height:32.3px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="creative-city"] img[src="/assets/freezones/creative-city-dark.png"] { width:57.9px; height:32.3px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="d3"] img { width:35.7px; height:36.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="d3"] img[src="/assets/freezones/d3-light.png"] { width:35.7px; height:36.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dafza"] img { width:63.1px; height:33.6px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dhcc"] img { width:89.7px; height:24.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dhcc"] img[src="/assets/freezones/dhcc.svg"] { width:97.0px; height:24.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dic"] img { width:124.0px; height:17.1px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="difc"] img { width:99.0px; height:31.9px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="difc"] img[src="/assets/freezones/difc-light.png"] { width:99.0px; height:31.9px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="difc-courts"] img { width:66.0px; height:32.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="difc-courts"] img[src="/assets/freezones/difc-courts-white.png"] { width:66.0px; height:32.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dmc"] img { width:36.0px; height:25.7px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dmcc"] img { width:81.4px; height:24.4px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dmcc"] img[src="/assets/freezones/dmcc-light.png"] { width:82.4px; height:24.7px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dso"] img { width:61.8px; height:32.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dso"] img[src="/assets/freezones/dso.svg"] { width:61.8px; height:32.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dubai-courts"] img { width:105.6px; height:26.4px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dubai-courts"] img[src="/assets/freezones/dubai-courts-white.png"] { width:93.1px; height:26.4px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dubai-production-studio"] img { width:124.0px; height:15.3px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dubai-south"] img { width:36.0px; height:32.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dwtc"] img { width:92.3px; height:24.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="dwtc"] img[src="/assets/freezones/dwtc-dark.png"] { width:92.3px; height:24.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="fujairah-fz"] img { width:39.7px; height:28.1px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="hamriyah"] img { width:56.4px; height:32.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="hamriyah"] img[src="/assets/freezones/hamriyah-white.png"] { width:100.5px; height:34.6px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="hub71"] img { width:86.5px; height:24.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="ifza"] img { width:97.4px; height:27.2px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="ifza"] img[src="/assets/freezones/ifza-dark.png"] { width:97.4px; height:27.2px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="jafza"] img { width:54.4px; height:32.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="jafza"] img[src="/assets/freezones/jafza.svg"] { width:36.5px; height:23.5px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="kizad"] img { width:117.1px; height:24.6px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="kizad"] img[src="/assets/freezones/kizad-light.png"] { width:117.1px; height:24.7px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="masdar-city"] img { width:74.4px; height:24.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="masdar-city"] img[src="/assets/freezones/masdar-city.svg"] { width:73.8px; height:24.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="meydan"] img { width:89.7px; height:32.4px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="meydan"] img[src="/assets/freezones/meydan-white.webp"] { width:89.4px; height:32.2px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="rak-maritime-city"] img { width:84.5px; height:32.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="rak-maritime-city"] img[src="/assets/freezones/rak-maritime-city-white.png"] { width:84.5px; height:32.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="rakez"] img { width:28.0px; height:36.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="rakicc"] img { width:36.9px; height:27.2px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="rakicc"] img[src="/assets/freezones/rakicc-white.svg"] { width:36.0px; height:26.4px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="shams"] img { width:73.1px; height:32.0px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="shams"] img[src="/assets/freezones/shams.png"] { width:75.3px; height:32.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="spc"] img { width:37.2px; height:37.2px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="twofour54"] img { width:108.5px; height:47.4px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="twofour54"] img[src="/assets/freezones/twofour54.svg"] { width:90.8px; height:32.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="uaqftz"] img { width:95.3px; height:16.2px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="uaqftz"] img[src="/assets/freezones/uaqftz.svg"] { width:91.4px; height:16.0px; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="da-nang-free-trade-zone"] img { width:64.3px; height:33.8px; max-width:none; max-height:none; }
:root .dub-fzcard-id .fzshelf-logo[data-zone="cai-mep-ha-free-trade-zone"] img { width:36.0px; height:26.2px; max-width:none; max-height:none; }
    