/* v23: full-format evidence, accessible image viewer and connected-system views. */
[hidden]{display:none!important}
:where(a,button,summary):focus-visible{outline:3px solid #4676ad;outline-offset:4px}
.visual-hero{grid-template-columns:.92fr 1.08fr;gap:40px}
.showcase-grid{grid-template-columns:1.12fr 1fr;grid-template-rows:225px 225px}
.showcase-main.scene-photo{display:grid;grid-template-rows:minmax(0,1fr) auto;background:#e8eceb;height:auto}
.scene-photo>img,.showcase-tile img,.project-media img{object-fit:contain!important;object-position:center!important;transform:none!important;transition:none!important;max-width:100%;width:100%;height:100%;display:block}
.scene-photo:hover>img,.showcase-tile:hover img,.visual-card:hover .project-media img{transform:none!important}
.scene-caption{position:static;padding:15px 17px;background:#203c41;color:white}
.scene-caption strong{font-size:21px;margin-bottom:8px}
.scene-caption .scene-overline{margin-bottom:7px}
.showcase-tile{display:grid;grid-template-rows:minmax(0,1fr) auto;background:#e8eceb;border:1px solid #dce2e2}
.showcase-tile>span{position:static;padding:12px 13px;background:#fff;color:#253e51;font-size:12px;align-items:center}
.showcase-toolbar>a{color:#315b86;text-decoration:none;font-size:11px;white-space:nowrap}
.showcase-toolbar>a:hover{text-decoration:underline}
.project-media{height:230px;background:#edf0ef;overflow:hidden;display:block}
.project-media img,.showcase-grid img{min-height:0;min-width:0}
.project-state{position:static;display:inline-block;padding:5px 8px;margin:0 0 11px;font-size:10px;border:1px solid #d5e0e1;background:#f0f5f3;color:#365e58;box-shadow:none;max-width:100%}
.visual-card .card-body{display:flex;flex-direction:column;align-items:flex-start}
.visual-card .card-bottom{align-self:stretch}
.visual-card:hover{transform:translateY(-2px)}
.case-hero-figure>a{display:block;background:#edf1f0}
.case-hero-figure img{display:block;width:100%;height:auto;max-height:470px;object-fit:contain}
.project-detail :is(.detail-image,.project-image,.card-cover){object-fit:contain!important;height:auto;max-height:550px}
.project-evidence{margin:0;background:white;border:1px solid #dde4e8;border-radius:14px;overflow:hidden}
.project-evidence>a{display:block;background:#edf1f0}
.project-evidence img{display:block;width:100%;height:auto;max-height:560px;object-fit:contain}
.project-evidence figcaption{padding:13px 16px;margin:0;color:#627285;font-size:12px;line-height:1.55}
[data-lightbox]{cursor:zoom-in}
.evidence-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;align-items:start}
.evidence-grid img{height:370px;object-fit:contain}
.evidence-grid figure{margin:0}
.case-conclusion{border-left:3px solid #b0c4bb;padding-left:22px}
.topology-link{display:inline-flex;padding:12px 16px;border:1px solid #c9d8e5;border-radius:9px;background:#f1f5fa;font-weight:600;text-decoration:none}
.process-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.process-cards article{padding:24px;background:#f0f5f3;border:1px solid #dce6e1;border-radius:13px}
.process-number{color:#547469;font-size:12px;font-weight:700;letter-spacing:.1em}
.process-cards h3{margin:14px 0 8px;font-size:20px}
.process-cards p{margin:0;font-size:14px}
.topology-section{padding:38px;background:#eaf0f1;border:1px solid #d7e1e3;border-radius:22px}
.topology-heading{display:flex;justify-content:space-between;gap:30px;align-items:end;margin-bottom:24px}
.topology-heading .section-head{margin:0}
.topology-heading>p{margin:0;max-width:310px;font-size:13px;color:#526b75}
.topology-controls{display:flex;gap:8px;margin-bottom:23px;flex-wrap:wrap}
.topology-controls button{border:1px solid #c4d3d8;background:transparent;padding:11px 19px;border-radius:9px;color:#3c5965;font-weight:600;font-size:13px}
.topology-controls button[aria-pressed="true"]{background:#244852;border-color:#244852;color:white}
.topology-panel>h3{font-size:19px;letter-spacing:-.02em;margin:0 0 18px}
.topology-route{margin:0 0 16px;background:#fff;border-radius:13px;padding:18px;border:1px solid #d5e1e1}
.route-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:#5c777f;margin:0 0 12px}
.route-nodes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:stretch;gap:27px}
.route-nodes.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.route-node{position:relative;min-width:0;padding:15px 12px;background:#eff5f3;border:1px solid #d9e5df;border-radius:9px;text-decoration:none;color:#294e49}
.route-node:not(:last-child):after{content:'→';position:absolute;left:calc(100% + 6px);top:50%;transform:translateY(-50%);font-size:20px;color:#638d85}
.route-node strong{display:block;font-size:13px;line-height:1.4}
.route-node small{display:block;margin-top:5px;font-size:11px;line-height:1.5;color:#56716f}
a.route-node:hover{background:#dfece6;border-color:#91b4a4}
.route-node.cloud{background:#f5f0e6;border-color:#e6d6b9}
.route-node.cloud small{color:#766646}
.topology-note{font-size:12px;line-height:1.65;color:#516c72;margin:16px 0 0}
.topology-note a{color:#2d5f75;font-weight:650}
.topology-side-notes{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:16px}
.topology-side-notes>div{border:1px solid #cbdcdb;border-radius:10px;padding:17px;font-size:12px;line-height:1.6;color:#4b666b}
.topology-side-notes strong{display:block;color:#284f55;margin-bottom:6px;font-size:13px}
.topology-side-notes .planned{border-style:dashed}
.source-date{font-size:10px;color:#677e84;margin-top:19px}
.topology-panel+.topology-panel{margin-top:30px}
.topology-controls:not([hidden])~.topology-panel{margin-top:0}
.image-viewer{padding:0;border:1px solid #637581;border-radius:14px;background:#17252c;color:#fff;width:min(1280px,96vw);max-width:96vw;max-height:94dvh;overflow:auto;box-shadow:0 20px 80px #0006}
.image-viewer::backdrop{background:#0a1523dd}
.viewer-toolbar{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 18px;border-bottom:1px solid #43515c}
.viewer-toolbar a{font-size:13px;color:#d5e5f4}
.viewer-close{font:inherit;cursor:pointer;color:#fff;background:#354852;border:1px solid #687b87;border-radius:7px;padding:8px 13px;min-height:40px}
.image-viewer img{display:block;max-height:calc(94dvh - 150px);width:100%;height:auto;object-fit:contain;background:#142129}
.viewer-caption{padding:13px 18px;margin:0;line-height:1.5;font-size:13px;color:#dce6eb}
html:has(.image-viewer[open]){overflow:hidden}
@media(max-width:1050px){.showcase-grid{grid-template-rows:210px 210px}.scene-caption strong{font-size:19px}.project-media{height:205px}.topology-section{padding:27px}.route-nodes{gap:22px}.route-node:not(:last-child):after{left:calc(100% + 3px)}.route-node{padding:12px 9px}}
@media(max-width:800px){.visual-hero{grid-template-columns:1fr}.showcase-grid{grid-template-columns:1fr 1fr;grid-template-rows:225px 225px}.project-media{height:230px}.topology-heading{display:block}.topology-heading>p{max-width:none;margin-top:14px}.route-node strong{font-size:12px}.topology-side-notes{grid-template-columns:1fr}.evidence-grid img{height:300px}}
@media(max-width:600px){.topology-section{padding:23px 16px}.route-nodes,.route-nodes.three{grid-template-columns:1fr;gap:25px}.route-node{padding:13px 15px}.route-node strong{font-size:14px}.route-node:not(:last-child):after{content:'↓';left:50%;top:calc(100% + 3px);transform:translateX(-50%);line-height:22px}.topology-controls button{flex:1;padding:11px 9px}.process-cards{grid-template-columns:1fr}.evidence-grid{grid-template-columns:1fr}.evidence-grid img{height:auto;max-height:480px}}
@media(max-width:540px){.showcase-grid{grid-template-columns:1fr 1fr;grid-template-rows:195px 195px;gap:9px}.showcase-main{min-height:0}.scene-caption{padding:13px 11px}.scene-caption strong{font-size:18px}.scene-caption>span:last-child{font-size:9px}.scene-overline{font-size:8px}.showcase-tile>span{font-size:10px;padding:10px}.showcase-toolbar{font-size:9px;gap:8px}.showcase-toolbar>a{font-size:9px}.showcase-toolbar>span{max-width:150px}.project-media{height:250px}.visual-grid{grid-template-columns:1fr}.site-header .nav{gap:12px}.viewer-toolbar{padding:10px 12px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
