/* /assets/site.css — shared styles for vk2net's maintained pages.
   Extracted from the per-page Stacks CSS (stacks_page_pageN.css) that used
   to duplicate this on every page; each rule here is confirmed used on more
   than one page. Page-specific rules (e.g. a page's own .banner background
   image) stay inline on that page instead. */

.header-font{font-family:Impact, Haettenschweiler, 'Franklin Gothic Bold', Charcoal, 'Helvetica Inserat', 'Bitstream Vera Sans Bold', 'Arial Black', sans-serif}
.banner{position:relative;z-index:0}
.banner:before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;z-index:-1;opacity:0.45;background-color:rgba(0, 0, 0, 1.00)}
.banner-content{height:25vh}
.menu-background{background-color:rgba(204, 204, 204, 1.00);background-position:center center;background-origin:padding-box;background-blend-mode:normal;background-attachment:scroll;background-clip:border-box}
@media (hover:none) and (pointer:coarse){.menu-background{background-attachment:scroll!important}}
.share-padding{padding-left:0.0625rem}
.fitcontent-h{min-height:none;max-height:fit-content}
.fitcontent-w{min-width:none;max-width:fit-content}
.shrink-to-fit{min-height:fit-content;max-height:fit-content}
.shrink-to-fit{min-width:fit-content;max-width:fit-content}
.social-button{width:2rem;height:2rem;margin-right:0.25rem;color:rgba(255, 255, 255, 1.00)}
.social-button .far, .social-button .fab, .social-button .fal, .social-button .fad, .social-button .fas, .social-button .fa{font-size:calc(23rem/16)}
.social-button .far, .social-button .fab, .social-button .fal, .social-button .fad, .social-button .fas, .social-button .fa{position:relative;z-index:0;top:1px;bottom:unset;left:0px;right:unset;transform:translateY(-50%) translateX(-50%)}
.mastodon, .mastodon:hover{background-color:rgba(49, 133, 211, 1.00)}
.linkedin, .linkedin:hover{background-color:rgba(12, 98, 166, 1.00)}
.twitter, .twitter:hover{background-color:rgba(85, 172, 238, 1.00)}
.github, .github:hover{background-color:rgba(0, 0, 0, 1.00)}
.youtube, .youtube:hover{background-color:rgba(205, 32, 31, 1.00)}
.reddit, .reddit:hover{background-color:rgba(252, 63, 8, 1.00)}
.qrz, .qrz:hover{background-color:rgba(20, 161, 229, 1.00)}

/* Found during Task 4's pixel-diff verification (not in the brief's Step 1 list —
   both are genuinely shared, confirmed by grep across every maintained page's
   per-page Stacks CSS, and their absence caused real 0px-diff failures):

   1. `.alt` is NOT provided by foundation.css (which has no `.alt` selector at
      all) despite living next to the swatch vars Step 1 correctly excluded as
      foundation.css duplicates. It flips header/text colour to white for a
      dark-banner heading (`<h1 class="alt header-font ...">`) and is byte-identical
      across every maintained page's stacks_page_pageN.css (index, links, shack,
      articles, contact). Without it the banner h1 rendered near-invisible
      (dark-on-dark). */
.alt{--header-color:rgba(255, 255, 255, 1.00);--subheader-color:rgba(230, 230, 230, 1.00);--small-color:rgba(202, 202, 202, 1.00);--text-color:rgba(255, 255, 255, 1.00);--link-color:rgba(0, 140, 186, 1.00);--link-color-hover:rgba(0, 102, 136, 1.00);--link-decoration:none;--link-decoration-hover:none}

/* 2. Font Awesome 5 Pro's @font-face declarations (the actual font-file wiring)
      live NOWHERE in rw_common/plugins/stacks/fa5pro.css — that file only maps
      classes to font-family names (and even then only fully for .fab/.fad; the
      Pro-weight classes .fal/.far/.fa/.fas got no font-family at all from it).
      Every page's retired per-page CSS carried its own copy of this block
      (confirmed identical byte-for-byte across pages), because it's genuinely
      global font-loading infrastructure, not page content — so it belongs here.
      Brands (used by the fab social-icon classes) needed only the @font-face,
      since fa5pro.css already binds .fab; Light/Regular/Solid need both the
      @font-face and the family binding fa5pro.css never provided. Duotone is
      left out: the font file exists under fa5-fonts/ but no maintained page
      uses a `fad` icon, so there's nothing to verify it against. */
@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:400;font-display:block;src:url("../rw_common/plugins/stacks/fa5-fonts/fa-brands-400.eot");src:url("../rw_common/plugins/stacks/fa5-fonts/fa-brands-400.eot?#iefix") format("embedded-opentype"),url("../rw_common/plugins/stacks/fa5-fonts/fa-brands-400.woff2") format("woff2"),url("../rw_common/plugins/stacks/fa5-fonts/fa-brands-400.woff") format("woff"),url("../rw_common/plugins/stacks/fa5-fonts/fa-brands-400.ttf") format("truetype"),url("../rw_common/plugins/stacks/fa5-fonts/fa-brands-400.svg#fontawesome") format("svg")}
@font-face{font-family:'Font Awesome 5 Pro';font-style:normal;font-weight:300;font-display:block;src:url("../rw_common/plugins/stacks/fa5-fonts/fa-light-300.eot");src:url("../rw_common/plugins/stacks/fa5-fonts/fa-light-300.eot?#iefix") format("embedded-opentype"),url("../rw_common/plugins/stacks/fa5-fonts/fa-light-300.woff2") format("woff2"),url("../rw_common/plugins/stacks/fa5-fonts/fa-light-300.woff") format("woff"),url("../rw_common/plugins/stacks/fa5-fonts/fa-light-300.ttf") format("truetype"),url("../rw_common/plugins/stacks/fa5-fonts/fa-light-300.svg#fontawesome") format("svg")}
@font-face{font-family:'Font Awesome 5 Pro';font-style:normal;font-weight:400;font-display:block;src:url("../rw_common/plugins/stacks/fa5-fonts/fa-regular-400.eot");src:url("../rw_common/plugins/stacks/fa5-fonts/fa-regular-400.eot?#iefix") format("embedded-opentype"),url("../rw_common/plugins/stacks/fa5-fonts/fa-regular-400.woff2") format("woff2"),url("../rw_common/plugins/stacks/fa5-fonts/fa-regular-400.woff") format("woff"),url("../rw_common/plugins/stacks/fa5-fonts/fa-regular-400.ttf") format("truetype"),url("../rw_common/plugins/stacks/fa5-fonts/fa-regular-400.svg#fontawesome") format("svg")}
@font-face{font-family:'Font Awesome 5 Pro';font-style:normal;font-weight:900;font-display:block;src:url("../rw_common/plugins/stacks/fa5-fonts/fa-solid-900.eot");src:url("../rw_common/plugins/stacks/fa5-fonts/fa-solid-900.eot?#iefix") format("embedded-opentype"),url("../rw_common/plugins/stacks/fa5-fonts/fa-solid-900.woff2") format("woff2"),url("../rw_common/plugins/stacks/fa5-fonts/fa-solid-900.woff") format("woff"),url("../rw_common/plugins/stacks/fa5-fonts/fa-solid-900.ttf") format("truetype"),url("../rw_common/plugins/stacks/fa5-fonts/fa-solid-900.svg#fontawesome") format("svg")}
.fal{font-family:'Font Awesome 5 Pro';font-weight:300}
.far{font-family:'Font Awesome 5 Pro';font-weight:400}
.fa, .fas{font-family:'Font Awesome 5 Pro';font-weight:900}

/* 3. Found during Task 4's pixel-diff verification (structural, not extracted from
      any stacks_page_pageN.css — this compensates for the skeleton pattern itself).
      foundation.css's nested-grid gutter compensation is a direct-child selector:
      `.grid-container:not(.full)>.grid-padding-x{margin:0 calc(var(--gutter)/-2)}`
      (three copies, one per breakpoint). Before this project, the page's first
      `.grid-x.grid-padding-x` row (2-column content+sidebar) WAS a direct child of
      `.grid-container` (RapidWeaver never put anything else between them), so it
      matched and got pulled back out to the full grid-container width. The skeleton
      in "Making Changes to Static Content" puts `<main>` between them instead, which
      breaks that direct-child match — margin silently drops to 0, the row renders
      ~32px narrower than before, and every paragraph inside it reflows to more
      lines (a real, easy-to-miss pixel-diff failure: taller page, same content).
      Re-declares the same three rules scoped to `main > .grid-padding-x` so the
      skeleton's <main> wrapper is transparent to this specific Foundation mechanic.
      Every later page-conversion task's main content row needs this too. */
.grid-container:not(.full) > main > .grid-padding-x{margin-right:calc(var(--small-gutter) / -2);margin-left:calc(var(--small-gutter) / -2)}
@media print,screen and (min-width: 40em){.grid-container:not(.full) > main > .grid-padding-x{margin-right:calc(var(--medium-gutter) / -2);margin-left:calc(var(--medium-gutter) / -2)}}
@media print,screen and (min-width: 64em){.grid-container:not(.full) > main > .grid-padding-x{margin-right:calc(var(--large-gutter) / -2);margin-left:calc(var(--large-gutter) / -2)}}

/* Added during Task 7 (image-position bake, Mikrotik article — the plan's worked
   example for the ~7 image-bearing articles). The MarkdownPro "Scribe Floating
   Image" stack's generic CSS, extracted from the retired
   Use-Aussie-Broadband-Framed-Route-on-a-Mikrotik-Router_files/stacks_page_page25.css.
   Confirmed genuinely shared, not page-specific: every one of this page's 18
   per-image blocks (originally scoped as `#stacks_in_540 .scribe-image.img_stacks_in_NNN`)
   was byte-identical to the others once the substituted image-class name was
   normalized out — diffed programmatically before extracting, not assumed — so
   the per-image class/id scoping the original per-page CSS used was never
   load-bearing. Rescoped here to the `.com_bigwhiteduck_stacks_markdownpro_stack`
   class (kept on every article's markdown-body wrapper div for exactly this)
   instead of a page-specific `#stacks_in_NNN` id, so the same rules cover this
   stack wherever it's used, on this page and the remaining 6 image-bearing
   articles alike. */
.com_bigwhiteduck_stacks_markdownpro_stack figure{margin:0;text-align:center}
.com_bigwhiteduck_stacks_markdownpro_stack figure img{max-width:100%;height:auto}
.com_bigwhiteduck_stacks_markdownpro_stack figure figcaption{display:none}
.com_bigwhiteduck_stacks_markdownpro_stack pre{white-space:pre-wrap;word-wrap:break-word}
.com_bigwhiteduck_stacks_markdownpro_stack .mdph{display:none}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.p-center p{text-align:center}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.p-left p{text-align:left}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.p-right p{text-align:right}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.p-justify p{text-align:justify}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.p-inherit{text-align:inherit}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-center h1,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-center h2,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-center h3,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-center h4,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-center h5,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-center h6{text-align:center}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-left h1,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-left h2,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-left h3,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-left h4,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-left h5,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-left h6{text-align:left}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-right h1,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-right h2,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-right h3,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-right h4,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-right h5,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-right h6{text-align:right}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-inherit h1,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-inherit h2,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-inherit h3,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-inherit h4,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-inherit h5,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.h-inherit h6{text-align:inherit}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.l-center ul{display:table;margin:0 auto}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.l-left ul{text-align:left}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.l-right ul{display:table;margin:0 0 0 auto}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.l-txt-center ul li p{text-align:center}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.l-txt-left ul li p{text-align:left}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.l-txt-right ul li p{text-align:right}
@media only screen and (max-width:640px){
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.small-only-text-center,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.small-only-text-center p{text-align:center}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.small-only-header-center h1,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.small-only-header-center h2,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.small-only-header-center h3,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.small-only-header-center h4,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.small-only-header-center h5,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.small-only-header-center h6{text-align:center}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.small-only-list-center ul{display:table;margin:0 auto}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.small-only-listtext-center ul li p{text-align:center}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.p-justify.small-only-just-left p{text-align:left !important}
}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp p:empty{display:none !important}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.quote-left[class*="text-"] blockquote{text-align:left}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.quote-left[class*="text-"] blockquote > p{text-align:left;margin-bottom:0}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.no-bot-margin >:nth-last-child(2){margin-bottom:0 !important}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set{widows:5;orphans:5}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set p:not(:first-of-type){text-indent:1.40rem}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set p:not(:last-of-type){margin-bottom:1.25rem !important}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set.indent-all p:first-of-type{text-indent:1.40rem}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set.indent-all blockquote > p:first-of-type{text-indent:0}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set:not(.indent-all) h1 + p,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set:not(.indent-all) h2 + p,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set:not(.indent-all) h3 + p,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set:not(.indent-all) h4 + p,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set:not(.indent-all) h5 + p,.com_bigwhiteduck_stacks_markdownpro_stack .mdp.book-set:not(.indent-all) h6 + p{text-indent:0 !important}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp.p-lead p:first-of-type{font-size:130%}
.com_bigwhiteduck_stacks_markdownpro_stack .md-clearfix::before,.com_bigwhiteduck_stacks_markdownpro_stack .md-clearfix::after{content:" ";display:table}
.com_bigwhiteduck_stacks_markdownpro_stack .md-clearfix::after{clear:both}
.com_bigwhiteduck_stacks_markdownpro_stack .mdp-cntrls{display:none !important}

.com_bigwhiteduck_stacks_markdownpro_stack .effect-label{display:block !important}
/* line-height:1.6 restores what a .scribe-image's figcaption inherited on the live
   (pre-bake) page, where the JS always spliced .scribe-image as a child of its target
   (imgParaFirst/Cust/Last: a <p>, Foundation's p{line-height:1.6}) — bake.mjs's hoist
   (task-7a) moves .scribe-image to be a preceding SIBLING of that element instead (to
   fix a real div-in-p HTML5 parser corruption bug), which is correct for float geometry
   and clearfix, but line-height is an *inherited* property: hoisted out of the <p>, a
   .scribe-image with no explicit line-height instead inherits body's Foundation default
   of 1.5, shrinking any figcaption's wrapped-text height (25.6px/line -> 24px/line at
   16px) and, since figures with a figcaption are taller than their image, spare content
   height with it — caught as a pixel-diff SIZE MISMATCH on iphone-hardening-theft-
   mitigation.html's article, the first of these articles with .scribe-image figcaptions;
   Mikrotik had none, so it never exercised this inheritance dependency. */
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image{opacity:1.0;margin:0px 20px 0px 0px;line-height:1.6}
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image img{width:100%;max-width:100%;border-radius:0px}
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image figcaption{text-align:center;padding:8px 8px 0 0}
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.prop-width{width:20%;max-width:250px;min-width:100px;height:auto}
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.fixed-width{width:200px;height:auto}
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.align-left{float:left}
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.align-right{float:right}
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.align-top-center{display:block;margin:0 auto}
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.fc-bold figcaption{font-weight:bold}
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.fc-italic figcaption{font-style:italic}
.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.toggle-off,.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.toggle-Off,.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.toggle-OFF,.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.toggle-NO,.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.toggle-No,.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.toggle-no,.com_bigwhiteduck_stacks_markdownpro_stack .scribe-image.toggle-false{display:none}

/* Found by the 2026-09-22 re-review of the dropdown-nav fix (final-review-fix-
   rereview.md, PRE-EXISTING-EXPOSED-1): the open `.is-dropdown-submenu` renders
   with a fully transparent background on every maintained page, both viewports,
   so whatever is underneath (body text on index.html; the entire live contact
   form on contact.html mobile) bleeds straight through the open menu.
   foundation.css sets the submenu background via a custom-property chain:
     .is-dropdown-submenu{background:var(--submenu-bg-color)}
     --submenu-bg-color: var(--white);           (defined in foundation.css's own :root)
   but foundation.css's own :root never defines a bare `--white` (only
   `--white-color`, used everywhere else). `--white` was defined only by each
   page's now-deleted RapidWeaver/Stacks per-page CSS (`stacks_page_pageN.css`),
   which carried a full :root block aliasing `--white-color: var(--white)`
   alongside a `--white:rgba(254, 254, 254, 1.00)` definition. Once those
   per-page files were deleted during this project's page-by-page conversion,
   nothing left in the tree defines `--white`, so `var(--white)` is
   unresolvable — which invalidates the whole `background` declaration at
   computed-value time (CSS spec: falls to the property's initial value,
   `transparent`, not to any earlier same-selector rule) — not merely
   "un-themed". This was unobservable until a separate fix (removing the
   `no-js` gate) made the submenu actually open for the first time; the
   site's pixel-diff gate only ever shoots pages at rest, with the menu
   closed. Confirmed via grep that this is the *only* place anywhere in
   foundation.css or this repo that references the bare `--white` custom
   property, so this is a complete fix, not a partial one covering just the
   noticed symptom. #fefefe matches both foundation.css's own
   `--white-color` default and the pre-project baseline's measured submenu
   background (getComputedStyle: rgb(254, 254, 254)). Declared as a plain
   background-color (not a restored `--white` custom property) so it can't
   be silently broken again by some future unrelated var() chain — same
   specificity as foundation.css's rule, wins on source order since
   site.css loads after foundation.css on every page. */
.is-dropdown-submenu{background-color:#fefefe}
