/* A research canvas for the thesis; topology has its own infrastructure layout. */
.thesis-project{padding:48px;background:var(--white);border-top:4px solid var(--blue)}
.project-stats{grid-template-columns:1fr 1.1fr 1fr;gap:32px;padding:38px 0 30px;margin-top:36px}
.project-stats strong{font-size:64px;line-height:1;letter-spacing:-3px}
.project-stats span{margin-top:8px;font-size:12px}
.project-stats>p{grid-column:1/-1;border:0;padding:0;font-size:10px}

.case-copy{grid-template-columns:1fr 1fr;gap:45px;margin-top:40px;padding-top:30px;border-top:1px solid var(--line)}
.project-lesson{background:var(--blue-light);padding:24px;border-radius:6px;grid-template-columns:135px 1fr;gap:24px}
.homelab-project{grid-template-columns:1.45fr 1fr;gap:72px;padding-top:40px;padding-bottom:40px}
.homelab-copy h3{font-size:29px;max-width:none;margin:12px 0 15px}
.homelab-copy>p:not(.eyebrow){font-size:13px;line-height:1.8}
.homelab-services{margin:0;border-top:1px solid var(--line)}
.homelab-services>div{display:flex;justify-content:space-between;gap:20px;padding:19px 0;border-bottom:1px solid var(--line)}
.homelab-services dt{font:500 15px var(--display)}.homelab-services dd{margin:0;font-size:11px;color:var(--muted);text-align:right}
.main-navigation a::after{content:'';position:absolute;bottom:1px;left:0;right:0;height:2px;background:var(--blue);transform:scaleX(0);transform-origin:left;transition:transform .18s}
.main-navigation a:hover::after,.main-navigation a:focus-visible::after,.main-navigation a[aria-current]::after{transform:scaleX(1)}
.text-link{transition:color .18s,border-color .18s}.text-link>span{display:inline-block;transition:transform .18s}
.text-link:hover>span,.text-link:focus-visible>span{transform:translate(2px,-2px)}
.pipeline figcaption a{transition:background .18s,color .18s,transform .18s}.pipeline figcaption a:hover,.pipeline figcaption a:focus-visible{transform:translateY(-2px)}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.traffic-explorer{margin-top:40px;min-width:0}
.explorer-heading{display:flex;justify-content:space-between;align-items:flex-start;gap:30px}
.explorer-heading .eyebrow{color:var(--blue);font-size:10px;margin-bottom:12px}
.explorer-heading h4{font-size:32px;letter-spacing:-1px;line-height:1.2}
.explorer-heading p:not(.eyebrow){font-size:15px;line-height:1.8;color:var(--muted);margin-top:13px;max-width:570px}
.historical-label{font:9px/1.6 var(--mono);color:var(--muted);padding:7px 10px;background:var(--paper);border-radius:4px;white-space:nowrap}

.traffic-research-figure{margin-top:24px;padding-top:17px;border-top:1px solid var(--line)}
.traffic-plot{touch-action:pan-y;cursor:crosshair;border-radius:3px}
.traffic-plot:focus-visible{outline:3px solid var(--blue);outline-offset:7px}
.research-chart{display:block;width:100%;height:auto;overflow:visible}
.chart-grid{stroke:var(--line);stroke-width:1}
.chart-tick,.chart-axis-label{font:11px var(--mono);fill:var(--muted)}
.chart-axis-label{font-size:10px}.chart-hour{font:11px var(--mono);fill:var(--ink)}
.chart-inspection-value{font:500 16px var(--display)}
.chart-color-weekdays{fill:var(--blue)}.chart-color-weekend{fill:#396e6d}
.speed-series{fill:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.speed-weekdays,.chart-stroke-weekdays{stroke:var(--blue)}.speed-weekend,.chart-stroke-weekend{stroke:#396e6d}.speed-weekend{stroke-dasharray:6 4}
.chart-reference{stroke:#bac9db;stroke-width:1;stroke-dasharray:3 4}.chart-reference-label{font:9px var(--mono);fill:var(--blue)}
.chart-cursor{stroke:#6a7a89;stroke-width:1;stroke-dasharray:2 4}.chart-point{stroke:white;stroke-width:2}
.chart-fill-weekdays{fill:var(--blue)}.chart-fill-weekend{fill:#396e6d}
.chart-leader{fill:none;stroke-width:1}.chart-series-label{font:500 12px var(--display)}
.chart-help{font-size:12px;line-height:1.8;color:var(--muted);margin-top:10px}
.traffic-caption{font-size:12px;line-height:1.9;color:var(--muted);padding-top:19px;border-top:1px solid var(--line)}
.traffic-caption strong{font-weight:400;display:block;color:var(--ink);margin-bottom:7px}
.traffic-caption code,.explorer-heading code{font-size:.85em;overflow-wrap:anywhere}
.explorer-note{font-size:14px;line-height:1.8;margin:23px 0 12px;max-width:780px;color:var(--ink)}
.traffic-evidence{font-size:12px;color:var(--muted)}
.traffic-evidence summary{list-style:none;display:flex;justify-content:space-between;align-items:center;gap:20px;cursor:pointer;padding:13px 0;font-family:var(--display);color:var(--ink)}
.traffic-evidence summary::-webkit-details-marker{display:none}.traffic-evidence summary>span{color:var(--blue);font-size:21px;line-height:1;transition:transform .18s}
.traffic-evidence[open] summary>span{transform:rotate(45deg)}.traffic-evidence summary:hover{color:var(--blue)}
.traffic-evidence summary:focus-visible,.traffic-table-wrap:focus-visible{outline:3px solid var(--blue);outline-offset:5px;border-radius:3px}
.traffic-evidence p{line-height:1.9;margin-top:12px;overflow-wrap:anywhere}.traffic-evidence p .text-link{display:inline-block;font-size:11px;margin:0 20px 8px 0}
.traffic-table-wrap{overflow-x:auto;margin-top:16px;max-width:100%}.traffic-evidence table{width:100%;min-width:520px;border-collapse:collapse;font:10px/1.7 var(--mono);text-align:right}
.traffic-evidence caption{text-align:left;padding:12px 0;color:var(--ink)}.traffic-evidence th,.traffic-evidence td{padding:9px 10px;border-bottom:1px solid var(--line)}
.traffic-evidence thead{background:var(--paper)}.traffic-evidence th{font-weight:400;color:var(--ink)}.traffic-evidence th:first-child{text-align:left}

@media(max-width:1100px){.thesis-project{padding:32px}.project-stats strong{font-size:54px}.explorer-heading{gap:20px}.historical-label{display:none}.homelab-project{gap:35px}.homelab-services>div{gap:15px}.homelab-services dt{font-size:13px}.homelab-services dd{font-size:10px}}
@media(max-width:760px){.thesis-project{padding:28px 22px}.project-stats{gap:24px 18px;padding:28px 0;margin-top:25px;grid-template-columns:1fr 1.1fr}.project-stats strong{font-size:48px}.project-stats span{font-size:10px}.project-stats>p{grid-column:auto;font-size:9px;line-height:1.9;align-self:center}.project-stats>p br{display:block}.traffic-explorer{margin-top:30px}.explorer-heading h4{font-size:27px}.explorer-heading p:not(.eyebrow){font-size:13px}.chart-inspection-value{font-size:13px}.chart-tick{font-size:10px}.chart-series-label{font-size:10px}.chart-hour{font-size:10px}.traffic-caption{font-size:11px}.explorer-note{font-size:13px}.traffic-evidence summary{font-size:12px}.traffic-evidence p{font-size:11px}.case-copy{grid-template-columns:1fr;gap:25px;margin-top:28px;padding-top:26px}.project-lesson{grid-template-columns:1fr;gap:10px;padding:18px}.homelab-project{grid-template-columns:1fr;gap:24px;padding-top:32px;padding-bottom:32px}.homelab-copy h3{font-size:27px}.homelab-services{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;border-bottom:1px solid var(--line)}.homelab-services>div{display:block;border:0;padding:16px 0}.homelab-services dt{font-size:12px}.homelab-services dd{margin-top:8px;font-size:10px;text-align:left}}
@media(max-width:380px){.project-stats strong{font-size:42px}.homelab-services{grid-template-columns:1fr}.homelab-services>div{display:flex;border-bottom:1px solid var(--line);padding:12px 0}.homelab-services>div:last-child{border:0}.homelab-services dd{margin:0}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;animation:none!important}.text-link:hover>span,.text-link:focus-visible>span,.pipeline figcaption a:hover,.pipeline figcaption a:focus-visible{transform:none}}
@media print{.thesis-project{padding:20px}.project-stats strong{font-size:30pt}.chart-help{display:none!important}.traffic-research-figure{break-inside:avoid}.traffic-explorer{margin-top:20px}.traffic-evidence{display:none}.homelab-project{display:block}.homelab-services{margin-top:15px}.project-lesson{background:none;padding:15px 0}.case-copy{margin-top:20px}.explorer-heading h4{font-size:20pt}}

.thesis-brief{display:grid;grid-template-columns:1fr 1.65fr;gap:40px;padding:30px 0 34px;border-bottom:1px solid var(--line)}
.thesis-brief h4{font:500 22px/1.35 var(--display);letter-spacing:-.65px;max-width:260px;margin-bottom:14px}
.thesis-brief p{font-size:14px;line-height:1.8;color:var(--muted)}
.collection-flow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin:0;padding:0;list-style:none;align-self:center;counter-reset:stage}
.collection-flow li{position:relative;padding-top:14px;border-top:2px solid #b4c8f1}
.collection-flow strong{font:500 16px/1.5 var(--display);color:var(--blue)}
.collection-flow p{font-size:12px;line-height:1.8;margin-top:12px}
.explorer-heading p.chart-finding{font-size:17px;color:var(--ink);line-height:1.7;max-width:690px;margin-top:17px}
.explorer-heading p.chart-scope{font-size:12px;line-height:1.8;margin-top:12px;color:var(--muted)}
.chart-help{display:flex;gap:18px;align-items:baseline;padding:0 0 20px;margin:0;max-width:850px}
.chart-help>span{font:500 12px/1.6 var(--display);color:var(--blue);white-space:nowrap}
.traffic-research-figure{margin-top:26px;padding-top:20px}
.traffic-caption{margin-top:14px}
@media(max-width:1100px){.thesis-brief{grid-template-columns:1fr;gap:25px}.thesis-brief>div{max-width:660px}.thesis-brief h4{max-width:none}.collection-flow{gap:25px}.collection-flow p{font-size:13px}}
@media(max-width:760px){.thesis-brief{padding:26px 0;gap:22px}.thesis-brief h4{font-size:22px}.thesis-brief p{font-size:14px}.collection-flow{grid-template-columns:1fr;gap:16px}.collection-flow li{display:grid;grid-template-columns:64px 1fr;gap:15px;padding-top:16px;border-top-width:1px}.collection-flow strong{font-size:14px}.collection-flow p{font-size:12px;margin:0}.explorer-heading p.chart-finding{font-size:16px;line-height:1.75}.explorer-heading p.chart-scope{font-size:11px}.chart-help{display:block;font-size:12px;padding-bottom:16px;line-height:1.8}.chart-help>span{display:block;margin-bottom:6px}.traffic-caption{font-size:12px}.explorer-note{font-size:14px}.project-lesson>p{font-size:14px;line-height:1.8}}
@media print{.thesis-brief{break-inside:avoid}.chart-help{display:none}.thesis-brief p,.collection-flow p{font-size:9pt}.explorer-heading p.chart-finding{font-size:10pt}}

@media print{
 .portfolio-page .project-stats{grid-template-columns:repeat(3,1fr);gap:15px;margin-top:20px;padding:20px 0 14px}
 .portfolio-page .project-stats strong{font-size:25pt}
 .portfolio-page .project-stats span{font-size:8pt}
 .portfolio-page .project-stats>p{grid-column:1/-1;font-size:7pt}
 .portfolio-page .thesis-brief{grid-template-columns:1fr;gap:18px;padding:20px 0}
 .portfolio-page .thesis-brief h4{font-size:13pt;margin-bottom:8px}
 .portfolio-page .collection-flow{grid-template-columns:repeat(3,1fr);gap:20px}
 .portfolio-page .collection-flow li{display:block;padding-top:10px}
 .portfolio-page .collection-flow strong{font-size:10pt}
 .portfolio-page .collection-flow p{font-size:8pt;line-height:1.6;margin-top:8px}
 .portfolio-page .traffic-plot:focus-visible{outline:none}
 .portfolio-page .traffic-caption{font-size:8pt;line-height:1.7}
 .portfolio-page .explorer-note{font-size:9pt;line-height:1.7}
 .portfolio-page .project-lesson{break-inside:avoid;display:block;margin-top:15px;padding:15px 0}
 .portfolio-page .project-lesson>p{font-size:9pt;line-height:1.6;margin-top:8px}
}

/* Keep the source table usable without losing its column or hour context. */
@media screen{
 .traffic-table-help{font-size:12px;color:var(--muted)}
 .traffic-table-wrap{max-height:440px;border:1px solid var(--line);border-radius:4px;scroll-padding-top:46px;isolation:isolate}
 .traffic-evidence table{font-size:12px;min-width:580px;border-collapse:separate;border-spacing:0}
 .traffic-evidence caption{padding:12px}
 .traffic-evidence thead th{position:sticky;top:0;z-index:2;background:var(--blue-light)}
 .traffic-evidence th:first-child{position:sticky;left:0;z-index:1;background:var(--paper);border-right:1px solid var(--line)}
 .traffic-evidence thead th:first-child{z-index:3;background:var(--blue-light)}
 .traffic-evidence summary{min-height:48px}
 .traffic-evidence p .text-link{display:inline-flex;align-items:center;min-height:44px;font-size:12px}
}
@media screen and (max-width:760px){
 .traffic-evidence p{font-size:13px}
 .traffic-table-wrap{max-height:min(440px,60vh)}
 .traffic-research-figure .traffic-plot{margin-left:-10px;margin-right:-10px}
 .chart-tick,.chart-hour,.chart-series-label{font-size:11px}
 .chart-inspection-value{font-size:14px}
}
@media print{.portfolio-page .explorer-heading{break-after:avoid}}
