/* ==========================================================================
   Univik Blog GUIDE layout  -  /assets/css/blog-guide.css
   Load order: bootstrap -> style -> blog -> blog-guide.
   Adds: full-width article grid (740px reading column + 1220px "wide"
   breakouts for 1200x900 screenshots), inline Table of Contents, numbered
   H2s with ghost numerals, step headings, framed screenshots with zoom,
   at-a-glance strip, situation cards, readiness checklist, "you should see"
   lines, full-bleed CTA band, verification card, status pills, fix cards,
   related-posts row. Only guide-layout posts load this file.
   ========================================================================== */
/* --------------------------------------------------------------------------
   Univik Blog GUIDE layout  -  /assets/css/blog-guide.css
   Load after blog.css. Adds a full-width article grid with a measured reading
   column and "wide" breakouts for 1200x900 screenshots, an inline TOC,
   step headings, framed screenshots with zoom and a related-posts row.
   -------------------------------------------------------------------------- */

/* Article grid: three named tracks.  full | wide (1220) | prose (740) | wide | full
   Every direct child sits in the prose column by default (~76 characters per line).
   Add class "wide" to a figure, table, card row or CTA to span 1220px.
   Add class "full" for a viewport-wide band. Side tracks collapse to 0 on
   narrow screens so the same markup works on mobile with no extra rules. */
.guide{
  --prose:740px;         /* reading measure */
  --side:240px;          /* each breakout wing: 740 + 2x240 = 1220 = 1200 image + frame */
  --gutter:12px;
  display:grid;
  grid-template-columns:
    [full-start]  minmax(var(--gutter),1fr)
    [wide-start]  minmax(0,var(--side))
    [prose-start] min(calc(100% - 2*var(--gutter)),var(--prose))
    [prose-end]   minmax(0,var(--side))
    [wide-end]    minmax(var(--gutter),1fr)
    [full-end];
  padding:2.2rem 0 0;
}
.guide>*{grid-column:prose;min-width:0;margin-top:0}
.guide>.author-box{margin-top:1.6rem}
.guide>.callout,.guide>.blog-cards,.guide>.table-scroll{margin-top:0}
.guide .blog-table{margin-top:0}
.guide>.wide{grid-column:wide}
.guide>.full{grid-column:full}
/* grid items do not collapse margins, so vertical rhythm is set on the top edge here */
.guide>h2{margin:1.7rem 0 .9rem}
.guide>h3{margin:.6rem 0 .6rem}
.guide>h2:first-child,.guide>h3:first-child{margin-top:0}

/* ---- Hero additions: screenshot count chip ---- */
.blog-meta .chip{display:inline-flex;align-items:center;gap:6px;background:#f1f5f9;border:1px solid var(--blog-line);border-radius:999px;padding:2px 10px;font-size:.85rem;color:var(--blog-body)}

/* ---- Inline table of contents ----
   Card with a full 1px border (never border-left). Two groups on desktop:
   numbered Sections and the Steps with the same green badges used on the
   step headings, so the TOC and the content share one visual language.
   Rows are whole-row links with a chevron so they read as navigation,
   not as body hyperlinks (NN/g in-page links guidance). */
.guide-toc{margin:0 0 34px}
.guide-toc details{background:#fff;border:1px solid var(--blog-line);border-radius:16px;box-shadow:0 6px 22px rgba(30,41,59,.06)}
.guide-toc summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:12px;padding:16px 20px;border-radius:16px}
.guide-toc summary::-webkit-details-marker{display:none}
.guide-toc details[open] summary{border-bottom:1px solid var(--blog-line);border-radius:16px 16px 0 0}
.guide-toc .toc-title{display:inline-flex;align-items:center;gap:10px;font-weight:800;color:var(--blog-ink);font-size:1.02rem;letter-spacing:-.005em}
.guide-toc .toc-title svg{color:var(--blog-green)}
.guide-toc .toc-meta{margin-left:auto;font-size:.82rem;color:var(--blog-muted);font-weight:600;white-space:nowrap}
.guide-toc .toc-caret{width:10px;height:10px;border-right:2px solid var(--blog-muted);border-bottom:2px solid var(--blog-muted);transform:rotate(45deg);transition:transform .2s;margin:0 4px 4px 0;flex-shrink:0}
.guide-toc details[open] .toc-caret{transform:rotate(-135deg);margin:4px 4px 0 0}
.guide-toc .toc-grid{display:grid;grid-template-columns:1fr;gap:6px 0;padding:14px 12px 14px}
@media(min-width:640px){.guide-toc .toc-grid{grid-template-columns:1.1fr 1fr;gap:0 28px;padding:16px 16px 18px}}
.guide-toc .toc-eyebrow{font-size:.74rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--blog-green-d);padding:4px 10px 8px}
.guide-toc ol{list-style:none;margin:0;padding:0}
.guide-toc li{margin:0}
.guide-toc li a{display:flex;align-items:center;gap:12px;min-height:44px;padding:8px 10px;border-radius:10px;text-decoration:none;color:var(--blog-ink);font-size:1rem;font-weight:600;line-height:1.35;transition:background .15s,color .15s}
.guide-toc li a::after{content:"";width:7px;height:7px;border-right:2px solid #cbd5e1;border-top:2px solid #cbd5e1;transform:rotate(45deg);margin-left:auto;flex-shrink:0;transition:border-color .15s,transform .15s}
.guide-toc li a:hover,.guide-toc li a:focus-visible{background:var(--blog-green-l);color:var(--blog-green-d);outline:none}
.guide-toc li a:hover::after,.guide-toc li a:focus-visible::after{border-color:var(--blog-green);transform:rotate(45deg) translate(2px,-2px)}
/* section rows: tabular numeral */
.guide-toc .toc-sections{counter-reset:sec}
.guide-toc .toc-sections li a::before{counter-increment:sec;content:counter(sec) ".";font-variant-numeric:tabular-nums;font-weight:700;font-size:.9rem;color:var(--blog-muted);min-width:22px;text-align:right;flex-shrink:0}
.guide-toc .toc-sections li a:hover::before{color:var(--blog-green-d)}
/* step rows: the same green badge as the step headings */
.guide-toc .toc-steps{counter-reset:stp}
.guide-toc .toc-steps li a{font-weight:500;color:var(--blog-body)}
.guide-toc .toc-steps li a::before{counter-increment:stp;content:counter(stp);width:26px;height:26px;border-radius:50%;background:var(--blog-green);color:#fff;font-size:.8rem;font-weight:800;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}
@media(max-width:639.98px){.guide-toc .toc-col-steps{margin-top:8px;padding-top:10px;border-top:1px solid var(--blog-line)}}

/* ---- Step jump chips under the how-to H2 ---- */
.step-jump{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 1.4rem}
.step-jump a{display:inline-flex;align-items:center;gap:8px;text-decoration:none;color:var(--blog-body);font-size:.88rem;font-weight:600;border:1px solid var(--blog-line);background:#fff;border-radius:999px;padding:5px 12px 5px 5px}
.step-jump a b{width:24px;height:24px;border-radius:50%;background:var(--blog-green);color:#fff;font-size:.78rem;display:inline-flex;align-items:center;justify-content:center}
.step-jump a:hover{border-color:var(--blog-green);color:var(--blog-green-d);background:var(--blog-green-l)}

/* ---- Step heading (number + title) ---- */
.guide>h3.gstep-title{display:flex;align-items:center;gap:14px;font-size:1.3rem;font-weight:800;color:var(--blog-ink);scroll-margin-top:90px;margin:1.2rem 0 .5rem}
.guide .gstep-title .gstep-num{flex-shrink:0;width:38px;height:38px;border-radius:50%;background:var(--blog-green);color:#fff;font-size:1rem;font-weight:800;display:inline-flex;align-items:center;justify-content:center}
.guide .gstep-title .gstep-label{font-size:.78rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--blog-green-d);display:block;line-height:1}

/* ---- Framed screenshot (1200x900) ---- */
.shot{margin:.4rem 0 2rem}
.shot .shot-frame{position:relative;background:#fff;border:1px solid rgba(30,41,59,.16);border-radius:14px;box-shadow:0 10px 30px rgba(30,41,59,.10);overflow:hidden}
.shot .shot-frame::after{content:"";position:absolute;right:12px;bottom:12px;width:34px;height:34px;border-radius:50%;background:rgba(30,41,59,.72) url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2.2' stroke-linecap='round'><circle cx='11' cy='11' r='7'/><path d='M21 21l-4.3-4.3M11 8v6M8 11h6'/></svg>") center/18px no-repeat;pointer-events:none;opacity:.85}
.shot .shot-bar{display:flex;align-items:center;gap:10px;padding:8px 14px;background:#f1f5f9;border-bottom:1px solid var(--blog-line);font-size:.82rem;color:var(--blog-muted);font-weight:600}
.shot .shot-bar .bar-step{display:inline-flex;align-items:center;gap:6px;color:var(--blog-green-d)}
.shot .shot-bar .bar-step i{width:8px;height:8px;border-radius:50%;background:var(--blog-green);display:inline-block}
.shot .shot-bar .bar-env{margin-left:auto;font-weight:500;white-space:nowrap}
@media(max-width:575.98px){.shot .shot-bar .bar-env{display:none}}
.shot .shot-img{display:block;width:100%;height:auto;cursor:zoom-in;background:#fff}
.shot .shot-cap{display:flex;gap:10px;align-items:baseline;font-size:.92rem;color:var(--blog-muted);margin-top:10px;padding:0 4px}
.shot .shot-cap b{color:var(--blog-green-d);font-weight:800;flex-shrink:0}
.shot .shot-cap .zoom-hint{margin-left:auto;font-size:.8rem;white-space:nowrap}
@media(max-width:767.98px){.shot .shot-cap .zoom-hint{display:none}}

/* ---- Zoom dialog (native <dialog>, image at natural 1200px, scroll to pan on small screens) ---- */
.shot-zoom{border:0;padding:0;background:transparent;max-width:none;max-height:none;width:100vw;height:100vh;margin:0}
.shot-zoom::backdrop{background:rgba(15,23,42,.88)}
.shot-zoom .zoom-scroll{width:100%;height:100%;overflow:auto;display:grid;place-items:center;padding:56px 16px 24px}
.shot-zoom img{display:block;width:1200px;max-width:none;height:auto;border-radius:10px;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.shot-zoom .zoom-close{position:fixed;top:14px;right:16px;width:44px;height:44px;border-radius:50%;border:0;background:#fff;color:var(--blog-ink);font-size:1.4rem;font-weight:700;cursor:pointer;z-index:2}
.shot-zoom .zoom-cap{position:fixed;top:20px;left:20px;right:76px;color:#fff;font-size:.95rem;font-weight:600;text-shadow:0 1px 2px rgba(0,0,0,.5)}

/* ---- Wide CTA band: text left, buttons right on desktop ---- */
.guide .blog-cta.cta-band{display:flex;flex-wrap:wrap;align-items:center;gap:18px 28px;text-align:left;padding:26px 30px}
.guide .blog-cta.cta-band .cta-text{flex:1 1 380px}
.guide .blog-cta.cta-band .cta-text p{margin:0}
.guide .blog-cta.cta-band .cta-actions{display:flex;flex-wrap:wrap;gap:10px}
@media(max-width:575.98px){.guide .blog-cta.cta-band .cta-actions{width:100%}.guide .blog-cta.cta-band .btn{width:100%}}

/* ---- Related posts row (replaces the sidebar widget) ---- */
.guide .post-card,.guide .post-card *{text-decoration:none}
.related-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin:0 0 8px}
@media(max-width:991.98px){.related-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:575.98px){.related-grid{grid-template-columns:1fr}}

/* ---- Wide cards get four across when there is room ---- */
.guide>.blog-cards.wide .bcard{flex:1 1 200px}

/* ==================== SECTION DESIGN ====================
   Numbered H2s with a ghost numeral behind them (background text effect).
   The counter matches the Table of Contents, so "03" on the page is item 3
   in the TOC. Decorative only: generated content, aria neutral, light enough
   to never compete with the heading text. */
.guide{counter-reset:gsec}
.guide>h2{position:relative;counter-increment:gsec;padding-top:2.35rem;padding-left:0;isolation:isolate}
.guide>h2::before{content:counter(gsec,decimal-leading-zero);position:absolute;left:-4px;top:-.6rem;font-size:5.4rem;font-weight:900;line-height:1;letter-spacing:-.04em;color:#fff;-webkit-text-stroke:1.5px rgba(45,168,118,.42);z-index:-1;pointer-events:none;user-select:none;font-variant-numeric:tabular-nums}
@supports not (-webkit-text-stroke:1px #000){.guide>h2::before{color:#eaf6f0}}
.guide>h2.no-num{counter-increment:none}
.guide>h2.no-num::before{content:none}
@media(max-width:575.98px){.guide>h2{padding-top:1.9rem}.guide>h2::before{font-size:4.2rem;top:-.2rem}}

/* ---- Hero: soft brand glow instead of flat white ---- */
.guide-hero{background:radial-gradient(900px 260px at 50% 0%,#fbe9ea 0%,rgba(251,233,234,0) 70%),radial-gradient(700px 240px at 85% 60%,#ecfdf5 0%,rgba(236,253,245,0) 70%),#fff}

/* ---- At-a-glance strip ---- */
.glance{list-style:none;margin:0 0 26px;padding:0;display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
@media(max-width:767.98px){.glance{grid-template-columns:repeat(2,1fr)}}
.glance li{display:grid;grid-template-columns:34px 1fr;grid-template-rows:auto auto;column-gap:10px;align-items:center;background:#fff;border:1px solid var(--blog-line);border-radius:12px;padding:10px 12px}
.glance .g-ic{grid-row:1/3;width:34px;height:34px;border-radius:10px;background:var(--blog-green-l);border:1px solid var(--blog-green-b);display:inline-flex;align-items:center;justify-content:center}
.glance .g-ic svg{width:18px;height:18px;fill:none;stroke:var(--blog-green-d);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.glance .g-k{font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--blog-muted);line-height:1.2}
.glance .g-v{font-size:.93rem;font-weight:700;color:var(--blog-ink);line-height:1.25;white-space:nowrap}

/* ---- Situation cards (intent routing) ---- */
.lead-q{font-weight:600;color:var(--blog-ink)}
.situations{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:0 0 30px}
@media(max-width:991.98px){.situations{grid-template-columns:1fr}}
.guide .sit{display:flex;flex-direction:column;gap:8px;background:#fff;border:1px solid var(--blog-line);border-radius:16px;padding:20px 20px 18px;text-decoration:none;color:var(--blog-ink);transition:border-color .15s,box-shadow .15s,transform .15s}
.guide .sit:hover{border-color:var(--blog-green);box-shadow:0 10px 26px rgba(30,41,59,.09);transform:translateY(-2px);color:var(--blog-ink)}
.sit .sit-ic{width:44px;height:44px;border-radius:12px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--blog-line);background:#f8fafc;margin-bottom:4px}
.sit .sit-ic svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.sit .sit-ic.is-blue{background:var(--blog-blue-l);border-color:var(--blog-blue-b);color:var(--blog-blue-d)}
.sit .sit-ic.is-green{background:var(--blog-green-l);border-color:var(--blog-green-b);color:var(--blog-green-d)}
.sit .sit-ic.is-amber{background:var(--blog-amber-l);border-color:var(--blog-amber-b);color:var(--blog-amber-d)}
.sit .sit-h{font-weight:800;font-size:1.08rem;line-height:1.3}
.sit .sit-p{font-size:.95rem;line-height:1.55;color:var(--blog-body)}
.sit .sit-go{margin-top:auto;padding-top:6px;font-size:.88rem;font-weight:700;color:var(--blog-green-d);display:inline-flex;align-items:center;gap:6px}
.sit .sit-go::after{content:"";width:7px;height:7px;border-right:2px solid currentColor;border-top:2px solid currentColor;transform:rotate(45deg);transition:transform .15s}
.guide .sit:hover .sit-go::after{transform:rotate(45deg) translate(2px,-2px)}

/* ---- Readiness checklist ---- */
.ready{background:#fff;border:1px solid var(--blog-line);border-radius:16px;padding:18px 20px 8px;margin:0 0 30px}
.ready .ready-h{font-weight:800;color:var(--blog-ink);font-size:1.02rem;margin-bottom:10px}
.ready-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:4px 22px}
@media(max-width:639.98px){.ready-list{grid-template-columns:1fr}}
.guide .ready-list li{position:relative;padding:8px 0 12px 34px;margin:0;font-size:.95rem;line-height:1.5;color:var(--blog-body)}
.ready-list li::before{content:"";position:absolute;left:0;top:10px;width:22px;height:22px;border-radius:50%;background:var(--blog-green);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M5 12l5 5 9-10'/></svg>");background-size:14px;background-repeat:no-repeat;background-position:center}
.ready-list .ready-t{display:block;font-weight:700;color:var(--blog-ink)}

/* ---- "You should see" expectation line under a step ---- */
.guide p.expect{display:flex;gap:10px;align-items:flex-start;background:var(--blog-green-l);border:1px solid var(--blog-green-b);border-radius:10px;padding:10px 14px;font-size:.98rem;color:var(--blog-body);margin:-.3rem 0 1.1rem}
.expect .expect-k{flex-shrink:0;font-size:.72rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--blog-green-d);padding-top:.35em;white-space:nowrap}

/* ---- Full-bleed CTA band with background text ---- */
.cta-full{position:relative;overflow:hidden;background:linear-gradient(120deg,#064e3b 0%,#065f46 45%,#1f9a68 100%);color:#fff;padding:52px 12px;margin:14px 0 22px;isolation:isolate}
.cta-full .cta-ghost{position:absolute;right:-1%;top:50%;transform:translateY(-50%);font-size:clamp(5rem,15vw,13rem);font-weight:900;letter-spacing:-.05em;line-height:1;color:rgba(255,255,255,.07);white-space:nowrap;pointer-events:none;user-select:none;z-index:0}
.cta-full .cta-inner{position:relative;z-index:1;max-width:1220px;margin:0 auto;display:grid;grid-template-columns:1.3fr 1fr;gap:28px 40px;align-items:center}
@media(max-width:991.98px){.cta-full .cta-inner{grid-template-columns:1fr}.cta-full{padding:40px 12px}.cta-full .cta-ghost{top:auto;bottom:-8px;transform:none;font-size:5rem;color:rgba(255,255,255,.05)}}
.cta-full .cta-eyebrow{display:inline-block;font-size:.76rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#a7f3d0;margin-bottom:10px}
.cta-full .cta-title{color:#fff;font-size:clamp(1.4rem,2.4vw,1.9rem);font-weight:800;line-height:1.2;margin:0 0 10px}
.cta-full p{color:rgba(255,255,255,.85);margin:0;font-size:1.02rem}
.cta-full .cta-side{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.guide .cta-full .btn{gap:8px}
.guide .cta-full .cta-primary{background:#fff;color:var(--blog-green-d);border:2px solid #fff}
.guide .cta-full .cta-primary:hover{background:var(--blog-green-l);color:var(--blog-green-d)}
.guide .cta-full .cta-secondary{background:transparent;color:#fff;border:2px solid rgba(255,255,255,.55)}
.guide .cta-full .cta-secondary:hover{border-color:#fff;background:rgba(255,255,255,.08);color:#fff}
.cta-full .cta-fine{flex-basis:100%;font-size:.82rem;color:rgba(255,255,255,.7)}
@media(max-width:575.98px){.guide .cta-full .btn{width:100%}}

/* ---- Verification card ---- */
.verify{background:#fff;border:1px solid var(--blog-green-b);border-radius:14px;padding:16px 20px 6px;margin:0 0 22px}
.verify .verify-h{font-weight:800;color:var(--blog-green-d);font-size:.8rem;letter-spacing:.06em;text-transform:uppercase;margin-bottom:8px}
.guide .verify ul{list-style:none;margin:0;padding:0}
.guide .verify li{position:relative;padding:4px 0 10px 32px;margin:0;font-size:1rem;color:var(--blog-body)}
.verify li::before{content:"";position:absolute;left:0;top:7px;width:20px;height:20px;border-radius:50%;border:2px solid var(--blog-green);background:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232da876' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'><path d='M5 12l5 5 9-10'/></svg>") center/12px no-repeat}

/* ---- Status pills in tables ---- */
.pill{display:inline-block;font-size:.78rem;font-weight:800;letter-spacing:.03em;padding:3px 10px;border-radius:999px;white-space:nowrap;border:1px solid transparent}
.pill-ok{background:var(--blog-green-l);color:var(--blog-green-d);border-color:var(--blog-green-b)}
.pill-warn{background:var(--blog-amber-l);color:var(--blog-amber-d);border-color:var(--blog-amber-b)}
.pill-no{background:var(--blog-red-l);color:var(--blog-red);border-color:var(--blog-red-b)}

/* ---- Symptom to fix cards ---- */
.fixes{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:0 0 18px}
@media(max-width:991.98px){.fixes{grid-template-columns:1fr}}
.fix{border:1px solid var(--blog-line);border-radius:16px;overflow:hidden;background:#fff;display:flex;flex-direction:column}
@supports(grid-template-rows:subgrid){.fix{display:grid;grid-template-rows:subgrid;grid-row:span 2}}
.fix .fix-see,.fix .fix-do{padding:16px 18px;font-size:.97rem;line-height:1.55}
.fix .fix-see{background:var(--blog-red-l);color:var(--blog-ink);font-weight:600}
.fix .fix-do{background:#fff;color:var(--blog-body);flex:1;border-top:1px solid var(--blog-line)}
.fix .fix-k{display:block;font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;margin-bottom:4px}
.fix .fix-see .fix-k{color:var(--blog-red)}
.fix .fix-do .fix-k{color:var(--blog-green-d)}
.guide p.escalate{display:flex;gap:10px;align-items:flex-start;color:var(--blog-body);font-size:.98rem;padding:12px 14px;background:#f8fafc;border:1px solid var(--blog-line);border-radius:10px}
.escalate svg{flex-shrink:0;margin-top:5px;color:var(--blog-muted)}

/* ---- Key terms (definition block) ---- */
.terms{background:#fff;border:1px solid var(--blog-line);border-radius:16px;padding:18px 20px 6px;margin:0 0 30px}
.terms .terms-h{font-weight:800;color:var(--blog-ink);font-size:1.02rem;margin-bottom:10px}
.terms-list{margin:0;display:grid;grid-template-columns:1fr 1fr;gap:2px 22px}
@media(max-width:639.98px){.terms-list{grid-template-columns:1fr}}
.terms-list>div{padding:8px 0 12px}
.terms-list dt{font-weight:800;color:var(--blog-green-d);font-size:.95rem;margin-bottom:2px}
.terms-list dd{margin:0;font-size:.95rem;line-height:1.5;color:var(--blog-body)}
/* ---- Sources line in the author box ---- */
.author-box .sources{font-size:.85rem;color:var(--blog-muted);margin-top:.6rem;line-height:1.6}
.author-box .sources a{color:var(--blog-muted);text-decoration:underline}
.author-box .sources a:hover{color:var(--blog-blue-d)}

/* ==================== CSS MOCK SCREENS ====================
   Hand-built UI screens that sit inside .shot-frame instead of an <img>.
   The .mock box is a 4:3 container; every size inside uses cqw units, so a
   layout designed at 1200x900 scales with the column and stays sharp at any
   width. Decorative recreations of vendor screens, never real data.
   Mark each with role="img" and an aria-label that says what it shows. */
.mock{container-type:inline-size;position:relative;width:100%;aspect-ratio:4/3;overflow:hidden;background:#f3f4f6;color:#1f2937;font-family:"Segoe UI",system-ui,-apple-system,Roboto,Arial,sans-serif;font-size:1.25cqw;line-height:1.35;text-align:left}
.mock *{box-sizing:border-box}
.mock p{margin:0}
/* top bar (dark app header) */
.mk-top{position:absolute;left:0;right:0;top:0;height:4cqw;background:#0f172a;color:#fff;display:flex;align-items:center;gap:1.4cqw;padding:0 1.6cqw;font-size:1.2cqw}
.mk-top .mk-brand{font-weight:700;font-size:1.3cqw;letter-spacing:.01em}
.mk-top .mk-search{margin-left:2cqw;flex:1;max-width:36cqw;height:2.6cqw;border-radius:.4cqw;background:rgba(255,255,255,.12);color:#cbd5e1;display:flex;align-items:center;padding:0 1cqw;font-size:1.1cqw}
.mk-top .mk-user{margin-left:auto;width:2.6cqw;height:2.6cqw;border-radius:50%;background:#2563eb;display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:1.05cqw}
/* left nav */
.mk-side{position:absolute;left:0;top:4cqw;bottom:0;width:19cqw;background:#fff;border-right:1px solid #e5e7eb;padding:1.2cqw 0}
.mk-side div{padding:.8cqw 1.6cqw;font-size:1.15cqw;color:#374151;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mk-side .mk-group{font-size:.95cqw;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#9ca3af;padding-top:1.4cqw}
.mk-side .on{background:#eff6ff;color:#1d4ed8;font-weight:600}
.mk-side .sub{padding-left:3cqw}
/* main pane */
.mk-main{position:absolute;left:19cqw;right:0;top:4cqw;bottom:0;padding:2.2cqw 2.6cqw;overflow:hidden}
.mk-main.full{left:0}
.mk-crumb{font-size:1.05cqw;color:#6b7280;margin-bottom:1cqw}
.mk-h1{font-size:2.1cqw;font-weight:700;margin:0 0 .5cqw;color:#111827}
.mk-sub{color:#6b7280;font-size:1.15cqw;margin-bottom:1.8cqw}
.mk-h2{font-size:1.45cqw;font-weight:700;margin:0 0 .8cqw;color:#111827}
.mk-row{display:flex;align-items:center;gap:1cqw;flex-wrap:wrap}
.mk-btn{display:inline-flex;align-items:center;gap:.6cqw;padding:.75cqw 1.5cqw;border-radius:.4cqw;background:#2563eb;color:#fff;font-weight:600;font-size:1.15cqw;white-space:nowrap}
.mk-btn.ghost{background:#fff;color:#1f2937;border:1px solid #d1d5db}
.mk-btn.link{background:transparent;color:#1d4ed8;padding-left:0;padding-right:0}
.mk-card{background:#fff;border:1px solid #e5e7eb;border-radius:.7cqw;padding:1.8cqw 2cqw}
.mk-card+.mk-card{margin-top:1.2cqw}
.mk-table{width:100%;border-collapse:collapse;background:#fff;font-size:1.1cqw;border:1px solid #e5e7eb}
.mk-table th{background:#f9fafb;text-align:left;font-weight:600;color:#374151;padding:.9cqw 1.2cqw;border-bottom:1px solid #e5e7eb;white-space:nowrap}
.mk-table td{padding:.9cqw 1.2cqw;border-bottom:1px solid #f3f4f6;color:#1f2937;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mk-table tr.sel td{background:#eff6ff}
.mk-a{color:#1d4ed8}
.mk-pill{display:inline-flex;align-items:center;gap:.5cqw;padding:.25cqw .9cqw;border-radius:99cqw;font-size:1cqw;font-weight:600;background:#f3f4f6;color:#374151}
.mk-pill i{width:.8cqw;height:.8cqw;border-radius:50%;background:#9ca3af;display:inline-block}
.mk-pill.ok{background:#ecfdf5;color:#065f46}.mk-pill.ok i{background:#10b981}
.mk-pill.run{background:#eff6ff;color:#1e40af}.mk-pill.run i{background:#3b82f6}
.mk-pill.warn{background:#fffbeb;color:#92400e}.mk-pill.warn i{background:#f59e0b}
.mk-pill.bad{background:#fef2f2;color:#b91c1c}.mk-pill.bad i{background:#ef4444}
.mk-radio,.mk-check{display:inline-block;width:1.5cqw;height:1.5cqw;border:.15cqw solid #9ca3af;background:#fff;vertical-align:middle;margin-right:.9cqw;flex-shrink:0}
.mk-radio{border-radius:50%}.mk-check{border-radius:.3cqw}
.mk-radio.on{border-color:#2563eb;box-shadow:inset 0 0 0 .32cqw #fff,inset 0 0 0 1cqw #2563eb}
.mk-check.on{background:#2563eb;border-color:#2563eb;position:relative}
.mk-check.on::after{content:"";position:absolute;left:.42cqw;top:.12cqw;width:.45cqw;height:.85cqw;border:solid #fff;border-width:0 .2cqw .2cqw 0;transform:rotate(45deg)}
.mk-opt{display:flex;align-items:flex-start;gap:.4cqw;padding:1.2cqw 1.4cqw;border:1px solid #e5e7eb;border-radius:.6cqw;background:#fff;margin-bottom:1cqw}
.mk-opt.on{border-color:#2563eb;background:#eff6ff}
.mk-opt b{display:block;font-size:1.2cqw;color:#111827}
.mk-opt span{font-size:1.05cqw;color:#6b7280}
.mk-label{font-size:1.05cqw;color:#374151;font-weight:600;margin:1cqw 0 .4cqw}
.mk-input{height:3cqw;border:1px solid #d1d5db;border-radius:.4cqw;background:#fff;padding:0 1cqw;display:flex;align-items:center;font-size:1.1cqw;color:#1f2937;overflow:hidden;white-space:nowrap}
.mk-input.ph{color:#9ca3af}
.mk-code{font-family:Consolas,"Courier New",monospace;font-size:1.02cqw;background:#0f172a;color:#e2e8f0;border-radius:.5cqw;padding:1.2cqw 1.4cqw;white-space:pre-wrap;word-break:break-all;line-height:1.5}
.mk-steps{position:absolute;left:0;top:0;bottom:0;width:22cqw;background:#fff;border-right:1px solid #e5e7eb;padding:2.4cqw 1.8cqw}
.mk-steps div{display:flex;align-items:center;gap:1cqw;padding:.9cqw 0;font-size:1.15cqw;color:#6b7280}
.mk-steps div b{width:2.2cqw;height:2.2cqw;border-radius:50%;border:.15cqw solid #d1d5db;display:inline-flex;align-items:center;justify-content:center;font-size:1cqw;color:#6b7280;flex-shrink:0}
.mk-steps div.done b{background:#10b981;border-color:#10b981;color:#fff}
.mk-steps div.on{color:#111827;font-weight:600}.mk-steps div.on b{border-color:#2563eb;color:#2563eb}
.mk-wiz{position:absolute;left:22cqw;right:0;top:0;bottom:0;padding:2.6cqw 3cqw}
.mk-foot{position:absolute;left:22cqw;right:0;bottom:0;height:5.2cqw;border-top:1px solid #e5e7eb;background:#fff;display:flex;align-items:center;gap:1cqw;padding:0 3cqw}
.mk-overlay{position:absolute;inset:0;background:rgba(15,23,42,.45)}
.mk-dialog{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:56cqw;background:#fff;border-radius:.8cqw;box-shadow:0 2cqw 6cqw rgba(0,0,0,.35);padding:2.4cqw 2.6cqw}
.mk-dialog .mk-h2{font-size:1.7cqw}
.mk-hl{outline:.35cqw solid #e11f26;outline-offset:.35cqw;border-radius:.4cqw}
.mk-note{font-size:1.05cqw;color:#6b7280;margin-top:1cqw}
/* Windows explorer style window */
.mk-win{position:absolute;inset:0;background:#fff}
.mk-win .mk-title{height:3.4cqw;display:flex;align-items:center;gap:1cqw;padding:0 1.4cqw;border-bottom:1px solid #e5e7eb;font-size:1.15cqw;font-weight:600}
.mk-win .mk-addr{height:3.6cqw;display:flex;align-items:center;gap:1cqw;padding:0 1.4cqw;border-bottom:1px solid #e5e7eb;font-size:1.1cqw;color:#374151}
.mk-win .mk-addr span{background:#f3f4f6;border:1px solid #e5e7eb;border-radius:.3cqw;padding:.5cqw 1cqw;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mk-win .mk-tree{position:absolute;left:0;top:7cqw;bottom:0;width:22cqw;border-right:1px solid #e5e7eb;padding:1cqw 0}
.mk-win .mk-tree div{padding:.6cqw 1.6cqw;font-size:1.1cqw;color:#374151;white-space:nowrap}
.mk-win .mk-tree .on{background:#e5efff;color:#1d4ed8}
.mk-files{position:absolute;left:22cqw;right:0;top:7cqw;bottom:0;padding:1cqw 1.6cqw;overflow:hidden}
.mk-files table{width:100%;border-collapse:collapse;font-size:1.1cqw}
.mk-files th{text-align:left;font-weight:400;color:#6b7280;padding:.6cqw .8cqw;border-bottom:1px solid #e5e7eb}
.mk-files td{padding:.7cqw .8cqw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#1f2937}
.mk-files tr.sel td{background:#e5efff}
.mk-ico{display:inline-block;width:1.6cqw;height:1.3cqw;border-radius:.2cqw;background:#fcd34d;vertical-align:-.2cqw;margin-right:.9cqw}
.mk-ico.pst{background:#1d4ed8}.mk-ico.xml{background:#f97316}.mk-ico.zip{background:#a16207}.mk-ico.eml{background:#94a3b8}.mk-ico.csv{background:#16a34a}.mk-ico.html{background:#dc2626}
.mk-status{position:absolute;left:22cqw;right:0;bottom:0;height:2.8cqw;border-top:1px solid #e5e7eb;background:#fafafa;font-size:1cqw;color:#6b7280;display:flex;align-items:center;padding:0 1.6cqw}
/* ---- Flow map diagram (sources -> exports -> converter -> destinations) ---- */
.flowmap{display:grid;grid-template-columns:1fr auto 1fr auto 1fr;gap:14px;align-items:stretch;margin:0 0 10px}
@media(max-width:767.98px){.flowmap{grid-template-columns:1fr}.flowmap .fm-arrow{transform:rotate(90deg);justify-self:center}}
.flowmap .fm-col{background:#fff;border:1px solid var(--blog-line);border-radius:14px;padding:16px 16px 10px}
.flowmap .fm-h{font-size:.74rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--blog-green-d);margin-bottom:10px}
.flowmap .fm-col.is-mid{background:var(--blog-green-l);border-color:var(--blog-green-b)}
.flowmap .fm-item{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:.93rem;color:var(--blog-ink);border-top:1px solid #f1f5f9}
.flowmap .fm-item:first-of-type{border-top:0}
.flowmap .fm-item i{width:8px;height:8px;border-radius:50%;background:var(--blog-green);display:inline-block;flex-shrink:0}
.flowmap .fm-item.dim{color:var(--blog-muted)}.flowmap .fm-item.dim i{background:#cbd5e1}
.flowmap .fm-arrow{align-self:center;color:#94a3b8;font-size:1.6rem;line-height:1}
.flowmap .fm-tag{display:inline-block;font-size:.72rem;font-weight:700;padding:1px 8px;border-radius:999px;background:#f1f5f9;color:var(--blog-body);margin-left:auto}
.flowmap .fm-tag.ok{background:var(--blog-green-l);color:var(--blog-green-d)}
.flowmap .fm-tag.warn{background:var(--blog-amber-l);color:var(--blog-amber-d)}
.shot .shot-frame:has(.mock)::after{display:none}
.shot .shot-frame:has(.mock){box-shadow:0 10px 30px rgba(30,41,59,.12)}
/* spreadsheet-style mock */
.mk-sheet{position:absolute;inset:0;background:#fff}
.mk-sheet .mk-ribbon{height:4cqw;background:#217346;color:#fff;display:flex;align-items:center;gap:1.4cqw;padding:0 1.6cqw;font-size:1.15cqw;font-weight:600}
.mk-sheet .mk-fx{height:2.8cqw;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;gap:1cqw;padding:0 1.2cqw;font-size:1.05cqw;color:#374151}
.mk-sheet .mk-fx span{border:1px solid #d1d5db;padding:.3cqw .8cqw;border-radius:.2cqw;min-width:5cqw;text-align:center}
.mk-sheet table{border-collapse:collapse;width:100%;font-size:1.05cqw;table-layout:fixed}
.mk-sheet th{background:#f3f4f6;color:#6b7280;font-weight:400;border:1px solid #e5e7eb;padding:.5cqw;text-align:center;width:2.6cqw}
.mk-sheet thead th.h{width:auto;text-align:left;font-weight:600;color:#111827;background:#e8f5ee}
.mk-sheet td{border:1px solid #e5e7eb;padding:.55cqw .8cqw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#1f2937}
.mk-sheet td.c{text-align:center}
.mk-sheet td.ok{background:#ecfdf5;color:#065f46;font-weight:600}.mk-sheet td.run{background:#eff6ff;color:#1e40af;font-weight:600}.mk-sheet td.todo{background:#fffbeb;color:#92400e;font-weight:600}.mk-sheet td.bad{background:#fef2f2;color:#b91c1c;font-weight:600}
.mock.short{aspect-ratio:16/9}
