/* Physical controls, project views, and evidence extend the chosen desktop. */
body[data-direction="desktop"] .desktop-page:before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: -1;
  opacity: 0.16;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.78' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' opacity='.3' filter='url(%23n)'/%3E%3C/svg%3E");
}
body[data-direction="desktop"] .desk-card {
  box-shadow:
    0 1px 1px #ffffff12,
    inset 0 1px 0 #ffffff15,
    0 4px 6px #00000010,
    0 20px 35px #00000016;
}
body[data-direction="desktop"][data-palette="midnight"] .desk-card,
body[data-direction="desktop"][data-palette="ember"] .desk-card,
body[data-direction="desktop"][data-palette="ultraviolet"] .desk-card {
  box-shadow:
    inset 0 1px 0 #ffffff14,
    0 4px 12px #00000020,
    0 18px 45px #00000030;
}
body[data-direction="desktop"] .window-bar {
  gap: 8px;
  padding: 0 11px;
}
.window-grip .micro {
  font-size: 9px;
  letter-spacing: 0.015em;
}
.window-controls {
  display: flex;
  gap: 2px;
  align-items: center;
}
.window-controls > button {
  width: 27px;
  height: 27px;
  display: grid;
  place-items: center;
  font-size: 18px;
  border-radius: 6px;
  color: inherit;
  transition: background 0.2s;
}
.window-controls > button:hover {
  background: color-mix(in srgb, currentColor, transparent 90%);
}
.window-controls > button:active {
  scale: 0.9;
}
.window-grip .grip-dots {
  margin: 0 5px;
  font-size: 14px;
}
body[data-direction="desktop"] [data-desk-window] {
  transition:
    transform 0.45s cubic-bezier(0.2, 1.2, 0.3, 1),
    box-shadow 0.3s;
}
.desk-snap-guides {
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 20;
}
.desk-snap-guides i {
  display: none;
  position: absolute;
  background: var(--desk-accent);
  opacity: 0.45;
  box-shadow: 0 0 12px color-mix(in srgb, var(--desk-accent), transparent 40%);
}
.desk-snap-guides[data-x] .snap-x {
  display: block;
  left: var(--snap-x);
  top: 8px;
  bottom: 30px;
  width: 1px;
}
.desk-snap-guides[data-y] .snap-y {
  display: block;
  top: var(--snap-y);
  left: 12px;
  right: 12px;
  height: 1px;
}
body[data-direction="desktop"] .desk-window-placeholder {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 16px;
  padding: 25px;
  border: 1px dashed var(--desk-border);
  background: color-mix(in srgb, var(--desk-surface), transparent 85%);
  box-shadow: none;
  color: var(--desk-muted);
  animation: none;
}
.desk-window-placeholder > .micro {
  font-size: 9px;
}
.desk-window-placeholder button {
  font-size: 12px;
  padding: 9px 14px;
  border-radius: 7px;
  background: var(--desk-surface);
  border: 1px solid var(--desk-border);
  color: var(--desk-accent);
}
.desk-window-placeholder button > span {
  margin-left: 12px;
}
.desk-taskbar {
  position: absolute;
  bottom: calc(100% + 10px);
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  gap: 8px;
}
.desk-taskbar button {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 8px 12px;
  background: var(--desk-surface);
  color: var(--desk-ink);
  border: 1px solid var(--desk-border);
  border-radius: 10px;
  font-size: 10px;
  box-shadow: 0 5px 20px #0002;
}
.desk-taskbar button > span {
  display: grid;
  place-items: center;
  width: 24px;
  height: 24px;
  border-radius: 5px;
  background: var(--desk-accent);
  color: var(--desk-on-accent);
  font:
    11px "IBM Plex Mono",
    monospace;
}
.desk-taskbar button:hover {
  translate: 0 -3px;
}
.dock-button {
  transform: translateY(var(--dock-lift, 0px));
  transition:
    transform 0.16s ease-out,
    background 0.2s;
}
.dock-button:hover {
  transform: translateY(var(--dock-lift, -3px));
}
.dock-status,
.dock-palette-name {
  font-size: 9px;
}
.dock-button {
  font-size: 11px;
}
body[data-direction="desktop"] .desk-intro h1 {
  font-size: clamp(42px, 4.25vw, 72px);
}
.desk-intro-actions {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
}
.desk-intro-actions .contact-link {
  border-radius: 7px;
  background: var(--desk-accent);
  color: var(--desk-on-accent);
  padding: 10px 19px;
  font-size: 12px;
  display: inline-block;
  box-shadow: 0 3px 7px #00000016;
  transition: translate 0.2s;
}
.desk-intro-actions .contact-link:hover {
  translate: 0 -3px;
}
.desk-intro-actions .desk-intro-work {
  margin: 0;
  font-size: 11px;
}
.desk-intro-social a {
  font-size: 11px;
  text-decoration: underline;
  text-underline-offset: 4px;
}
.desk-resume {
  display: flex;
  align-items: center;
  gap: 12px;
  width: 100%;
  max-width: 360px;
  margin-top: 24px;
  padding: 13px 14px;
  background: color-mix(in srgb, var(--desk-surface), transparent 14%);
  border: 1px solid var(--desk-border);
  border-radius: 11px;
  box-shadow: 0 6px 20px #00000009;
}
.resume-file-icon {
  width: 27px;
  color: var(--desk-accent);
  flex-shrink: 0;
}
.resume-file-icon svg {
  width: 24px;
  height: 28px;
}
.resume-file {
  flex: 1;
  min-width: 0;
}
.resume-file strong {
  display: block;
  font:
    9px "IBM Plex Mono",
    monospace;
  letter-spacing: -0.04em;
  overflow-wrap: anywhere;
}
.resume-file > span {
  display: block;
  color: var(--desk-muted);
  font-size: 9px;
  margin-top: 5px;
}
.resume-download {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 9px;
  color: var(--desk-accent);
  flex-shrink: 0;
}
.resume-download > span:last-child {
  font-size: 23px;
}
.resume-download:hover > span:last-child {
  animation: download-nudge 0.7s ease-in-out infinite alternate;
}
@keyframes download-nudge {
  to {
    translate: 0 4px;
  }
}

.personal-stamp {
  display: flex;
  flex-direction: column;
  align-items: start;
  color: var(--desk-accent);
  rotate: -5deg;
}
.personal-initials {
  font:
    800 clamp(85px, 10vw, 155px) / 1 "Bricolage Grotesque",
    sans-serif;
  letter-spacing: -0.11em;
  position: relative;
  margin-bottom: 20px;
}
.personal-initials > span {
  position: absolute;
  right: -35px;
  top: -12px;
  font:
    400 40px "DM Sans",
    sans-serif;
  letter-spacing: 0;
}
.personal-stamp .micro {
  font-size: 9px;
  letter-spacing: 0.1em;
}
.personal-stamp > p {
  font-size: 35px;
  letter-spacing: -0.045em;
  line-height: 1.1;
  margin: 14px 0;
}
.personal-stamp em {
  font-family: "Instrument Serif", serif;
  font-size: 42px;
}
body[data-direction="desktop"] .desk-about {
  grid-template-columns: 0.5fr 1fr;
  gap: 8%;
  padding: 60px 7vw 130px;
}
.about-document {
  background: var(--desk-surface);
  border: 1px solid var(--desk-border);
  border-radius: 14px;
  overflow: hidden;
  box-shadow: 0 12px 35px #00000010;
  rotate: 1deg;
}
.about-document-bar {
  display: flex;
  justify-content: space-between;
  gap: 15px;
  align-items: center;
  height: 43px;
  padding: 0 17px;
  background: var(--desk-bar);
  border-bottom: 1px solid var(--desk-border);
  color: var(--desk-muted);
}
.about-document-bar .micro {
  font-size: 9px;
}
.about-document-copy {
  padding: 30px 32px;
}
.about-document-copy > .micro {
  font-size: 9px;
  color: var(--desk-muted);
}
body[data-direction="desktop"] .about-document-copy h2 {
  font-size: 32px;
  margin-top: 14px;
}
body[data-direction="desktop"] .about-document-copy p {
  font-size: 16px;
  line-height: 1.65;
}
.about-document-links {
  display: flex;
  gap: 22px;
  flex-wrap: wrap;
  margin-top: 27px;
  font-size: 12px;
  color: var(--desk-accent);
}
.about-document-links a {
  border-bottom: 1px solid currentColor;
  padding-bottom: 4px;
}
.desk-contact-address {
  margin-top: 35px;
  font:
    12px "IBM Plex Mono",
    monospace;
}
.desk-contact-address a {
  border-bottom: 1px solid currentColor;
  padding-bottom: 5px;
}
body[data-direction="desktop"] .desk-header > .micro {
  font-size: 9px;
}
body[data-direction="desktop"] .game-bottom {
  font-size: 9px;
}
body[data-direction="desktop"] .game-caption small {
  font-size: 9px;
}
body[data-direction="desktop"] .desk-clock > .micro {
  font-size: 8px;
}
body[data-direction="desktop"] .clock-zone {
  font-size: 8px !important;
}
/* Signal Lab: actual ports share one repair state across every input method. */
.repair-lab {
  --signal-bg: var(--network-bg, #e9eeff);
  --signal-ink: var(--network-ink, #253bea);
  --signal-pulse: var(--network-pulse, #e66826);
  background: var(--signal-bg);
  color: var(--signal-ink);
}
.repair-meta {
  height: 30px;
  padding: 8px 13px 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  font:
    8px "IBM Plex Mono",
    monospace;
}
.repair-state {
  display: flex;
  align-items: center;
  gap: 6px;
  white-space: nowrap;
}
.repair-state i {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--signal-pulse);
}
.repair-caption {
  font-size: 7px;
  opacity: 0.7;
}
.repair-board {
  position: relative;
  height: 137px;
  background-image: radial-gradient(
    var(--network-dot, #bbc5ed) 0.7px,
    transparent 0.7px
  );
  background-size: 19px 19px;
  margin: 0 5px;
}
.repair-board > svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
  pointer-events: none;
}
.signal-edge {
  stroke: var(--network-line, #bbc5ed);
  stroke-width: 0.65;
}
.signal-edge.edge-2 {
  stroke: var(--signal-pulse);
  stroke-dasharray: 2 2;
}
.signal-packet {
  fill: var(--signal-pulse);
}
.signal-ghost {
  stroke: var(--signal-ink);
  stroke-width: 0.9;
  stroke-dasharray: 1 1;
  opacity: 0;
}
.signal-node {
  position: absolute;
  width: 42px;
  height: 45px;
  transform: translate(-50%, -8.5px);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 7px;
  font:
    8px "IBM Plex Mono",
    monospace;
  touch-action: none;
  color: var(--signal-ink);
}
.signal-port {
  display: block;
  width: 17px;
  height: 17px;
  background: var(--signal-ink);
  border-radius: 50%;
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--signal-ink), transparent 92%);
  position: relative;
  flex-shrink: 0;
}
.signal-port:after {
  content: "";
  position: absolute;
  inset: 6px;
  border-radius: 50%;
  background: var(--network-core, #fff);
}
.node-you .signal-port {
  background: var(--signal-pulse);
}
.node-test .signal-port,
.node-ship .signal-port {
  background: var(--network-line, #bbc5ed);
}
.signal-node:not(:disabled) .signal-port {
  border: 1px dashed var(--signal-pulse);
  box-shadow: 0 0 0 5px color-mix(in srgb, var(--signal-pulse), transparent 86%);
}
.signal-node[aria-pressed="true"] .signal-port {
  background: var(--signal-pulse);
  box-shadow: 0 0 0 7px color-mix(in srgb, var(--signal-pulse), transparent 75%);
}
.signal-node:disabled {
  opacity: 1;
  cursor: default;
}
.repair-controls {
  min-height: 35px;
  padding: 3px 13px 12px;
  display: flex;
  justify-content: space-between;
  gap: 8px;
  align-items: center;
  font-size: 9px;
}
.repair-controls button {
  font:
    8px "IBM Plex Mono",
    monospace;
  text-decoration: underline;
  text-underline-offset: 3px;
  white-space: nowrap;
}
.repair-instruction {
  max-width: 60%;
  font-size: 9px;
  line-height: 1.35;
}
.repair-lab[data-state="repaired"] .signal-edge {
  stroke: var(--signal-ink);
  stroke-dasharray: none;
}
.repair-lab[data-state="repaired"] .signal-port {
  background: var(--signal-ink);
  border: none;
}
.repair-lab[data-state="repaired"] .repair-state i {
  background: var(--signal-ink);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--signal-ink), transparent 80%);
}
.repair-lab[data-state="repaired"] .node-ship .signal-port {
  animation: signal-arrival 0.6s ease-out;
}
@keyframes signal-arrival {
  50% {
    scale: 1.5;
    box-shadow: 0 0 0 10px
      color-mix(in srgb, var(--signal-ink), transparent 85%);
  }
}
/* Expanded project views use the same window materials as their origin. */
.project-dialog {
  --case-bg: var(--desk-surface, #eaf0f6);
  --case-bar: var(--desk-bar, #f4f7fb);
  --case-ink: var(--desk-ink, #182234);
  --case-muted: var(--desk-muted, #536177);
  --case-accent: var(--desk-accent, #2543e8);
  --case-on-accent: var(--desk-on-accent, #fff);
  --case-border: var(--desk-border, #ced7e3);
  background: var(--case-bg);
  color: var(--case-ink);
  border: 1px solid var(--case-border);
  border-radius: 18px;
  max-height: calc(100dvh - 56px);
  width: 1100px;
  transform-origin: 0 0;
}
.case-origin-hidden {
  opacity: 0 !important;
  pointer-events: none !important;
}
.project-dialog .dialog-close {
  top: 12px;
  margin-top: 12px;
  margin-right: 14px;
  padding: 6px 12px;
  z-index: 5;
  background: var(--case-bg);
  color: var(--case-ink);
  border-color: var(--case-border);
  font-size: 10px;
  gap: 14px;
}
.case-titlebar {
  height: 54px;
  display: flex;
  align-items: center;
  gap: 10px;
  position: sticky;
  top: 0;
  z-index: 3;
  background: var(--case-bar);
  border-bottom: 1px solid var(--case-border);
  padding: 0 130px 0 25px;
  font:
    10px "IBM Plex Mono",
    monospace;
  color: var(--case-muted);
}
.case-file-icon {
  background: var(--case-accent);
  color: var(--case-on-accent);
  width: 24px;
  height: 24px;
  display: grid;
  place-items: center;
  border-radius: 6px;
  font-size: 11px;
  flex-shrink: 0;
}
.case-chrome-note {
  margin-left: auto;
  font-size: 8px;
  opacity: 0.7;
}
.case-heading {
  padding: 42px 48px 32px;
}
.case-heading > .micro {
  font-size: 10px;
  color: var(--case-muted);
}
.case-heading h2 {
  font:
    600 clamp(45px, 6vw, 82px) / 1 "Bricolage Grotesque",
    sans-serif;
  letter-spacing: -0.055em;
  margin: 19px 0 15px;
}
.case-heading > p {
  font-size: 20px;
  letter-spacing: -0.03em;
  color: var(--case-muted);
}
.project-dialog .detail-tags {
  margin-top: 22px;
  gap: 7px;
}
.project-dialog .detail-tags > span {
  font-size: 9px;
  color: var(--case-ink);
  background: color-mix(in srgb, var(--case-accent), var(--case-bg) 91%);
  border-color: var(--case-border);
}
.case-summary {
  display: flex;
  gap: 45px;
  align-items: center;
  flex-wrap: wrap;
  margin: 0 48px 30px;
  padding-top: 22px;
  border-top: 1px solid var(--case-border);
}
.case-summary > div {
  display: flex;
  flex-direction: column;
  gap: 7px;
  font-size: 12px;
}
.case-summary .micro {
  font-size: 8px;
  color: var(--case-muted);
}
.case-summary > a {
  margin-left: auto;
  font-size: 12px;
  color: var(--case-accent);
  text-decoration: underline;
  text-underline-offset: 4px;
}
.case-context-note {
  margin-left: auto;
  font-size: 10px;
  color: var(--case-muted);
  max-width: 200px;
}
.case-media {
  margin: 0 20px;
  border-radius: 8px;
  overflow: hidden;
}
.case-media > video {
  display: block;
  width: 100%;
  aspect-ratio: 16/9;
  background: #091323;
}
.case-demo-caption {
  display: block;
  text-align: center;
  font:
    8px "IBM Plex Mono",
    monospace;
  color: var(--case-ink);
  margin-top: 20px;
}
.case-signal-stage {
  background: var(--network-bg, #e9eeff);
  padding: 25px 40px;
}
.case-signal-stage .repair-board {
  height: 255px;
}
.case-signal-stage .repair-meta {
  font-size: 11px;
  height: 40px;
}
.case-signal-stage .repair-caption {
  font-size: 10px;
}
.case-signal-stage .signal-node {
  transform: translate(-50%, -13px);
  font-size: 11px;
  width: 70px;
  height: 65px;
  gap: 12px;
}
.case-signal-stage .signal-port {
  width: 26px;
  height: 26px;
}
.case-signal-stage .signal-port:after {
  inset: 10px;
}
.case-signal-stage .repair-controls {
  padding: 12px 14px;
  font-size: 12px;
}
.case-signal-stage .repair-instruction {
  font-size: 12px;
}
.case-signal-stage .repair-controls button {
  font-size: 10px;
}
.case-signal-stage > p {
  font-size: 12px;
  text-align: center;
  color: var(--network-ink, #253bea);
  padding-top: 20px;
  margin: 0;
  border-top: 1px solid var(--network-line, #bbc5ed);
}
.case-story {
  padding: 38px 48px 45px;
}
.case-description {
  font-size: 22px;
  line-height: 1.5;
  letter-spacing: -0.025em;
  max-width: 880px;
  margin-bottom: 35px;
}
.case-story-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 30px;
  border-top: 1px solid var(--case-border);
  padding-top: 25px;
}
.case-story-grid h3 {
  font-size: 13px;
  margin-bottom: 12px;
}
.case-story-grid p {
  font-size: 13px;
  line-height: 1.65;
  color: var(--case-muted);
}
.case-gallery,
.case-evidence {
  padding: 0 48px 50px;
}
.case-section-cap {
  padding-top: 25px;
  border-top: 1px solid var(--case-border);
  margin-bottom: 25px;
}
.case-section-cap > .micro {
  font-size: 8px;
  color: var(--case-muted);
}
.case-section-cap h3 {
  font:
    500 29px "Bricolage Grotesque",
    sans-serif;
  letter-spacing: -0.04em;
  margin-top: 10px;
}
.case-stills {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 15px;
}
.case-stills figure {
  margin: 0;
}
.case-stills img {
  width: 100%;
  height: auto;
  aspect-ratio: 16/9;
  object-fit: cover;
  display: block;
  border-radius: 6px;
}
.case-stills figcaption {
  display: flex;
  flex-direction: column;
  gap: 5px;
  font-size: 9px;
  color: var(--case-muted);
  padding-top: 12px;
}
.case-stills .micro {
  font-size: 8px;
  color: var(--case-ink);
}
.evidence-switch {
  display: flex;
  gap: 5px;
  width: fit-content;
  padding: 4px;
  border: 1px solid var(--case-border);
  background: var(--case-bar);
  border-radius: 9px;
  margin-bottom: 25px;
}
.evidence-switch button {
  font-size: 11px;
  padding: 9px 15px;
  border-radius: 6px;
  color: var(--case-muted);
}
.evidence-switch button[aria-pressed="true"] {
  background: var(--case-accent);
  color: var(--case-on-accent);
}
.case-architecture {
  display: grid;
  grid-template-columns: 1.1fr 1fr;
  gap: 22px 45px;
}
.case-architecture h3 {
  font:
    500 25px/1.1 "Bricolage Grotesque",
    sans-serif;
  letter-spacing: -0.03em;
  grid-column: 1;
}
.case-architecture > p {
  font-size: 14px;
  line-height: 1.65;
  color: var(--case-muted);
  grid-column: 1;
}
.architecture-path {
  list-style: none;
  margin: 0;
  padding: 0;
  grid-column: 2;
  grid-row: 1/4;
  display: flex;
  flex-direction: column;
  gap: 22px;
}
.architecture-path li {
  display: flex;
  flex-direction: column;
  gap: 9px;
  background: var(--case-bar);
  border: 1px solid var(--case-border);
  border-radius: 9px;
  padding: 18px 20px;
  position: relative;
}
.architecture-path .micro {
  font-size: 8px;
  color: var(--case-accent);
}
.architecture-path strong {
  font-size: 12px;
  font-weight: 500;
}
.architecture-arrow {
  position: absolute;
  bottom: -19px;
  left: 50%;
  font-size: 15px;
  color: var(--case-accent);
}
.architecture-path li:last-child .architecture-arrow {
  display: none;
}
.module-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  grid-column: 1;
  padding: 10px 0;
}
.module-list > .micro {
  font-size: 8px;
  color: var(--case-muted);
  margin-bottom: 4px;
}
.module-list code {
  font:
    10px "IBM Plex Mono",
    monospace;
  color: var(--case-accent);
  overflow-wrap: anywhere;
}
.case-source {
  border: 1px solid var(--case-border);
  border-radius: 9px;
  overflow: hidden;
  background: var(--desk-console, #20273e);
  color: var(--desk-console-ink, #e5e9f5);
}
.source-header {
  display: flex;
  justify-content: space-between;
  gap: 15px;
  padding: 16px 20px;
  background: color-mix(in srgb, var(--desk-console, #20273e), white 6%);
  border-bottom: 1px solid #ffffff1a;
  font:
    10px "IBM Plex Mono",
    monospace;
}
.source-header > span:last-child {
  color: var(--desk-console-muted, #abb6d1);
}
.case-source pre {
  overflow-x: auto;
  padding: 25px 20px;
  margin: 0;
  font:
    11px/1.9 "IBM Plex Mono",
    monospace;
}
.case-source code {
  font: inherit;
}
.source-line {
  display: flex;
  gap: 24px;
  min-width: max-content;
}
.source-number {
  color: var(--desk-console-muted, #abb6d1);
  opacity: 0.6;
  user-select: none;
}
.case-source > p {
  padding: 18px 20px;
  border-top: 1px solid #ffffff1a;
  font-size: 11px;
  line-height: 1.6;
  color: var(--desk-console-muted, #abb6d1);
  margin: 0;
}
.case-footer {
  display: flex;
  justify-content: space-between;
  gap: 20px;
  align-items: center;
  background: var(--case-bar);
  padding: 24px 48px;
  border-top: 1px solid var(--case-border);
  font-size: 10px;
  color: var(--case-muted);
}
.case-footer button {
  font-size: 12px;
  color: var(--case-accent);
  padding: 9px 0;
  text-decoration: underline;
  text-underline-offset: 4px;
}
.project-dialog :focus-visible {
  outline: 2px solid var(--case-accent);
  outline-offset: 5px;
}
@media (min-width: 1550px) {
  .desk-resume {
    margin-top: 30px;
    max-width: 390px;
  }
  .resume-file strong {
    font-size: 10px;
  }
}
@media (max-width: 1100px) {
  .dock-status {
    display: none;
  }
  .dock-palette-name {
    font-size: 8px;
  }
  body[data-direction="desktop"] .desk-intro h1 {
    font-size: 4.25vw;
  }
  .desk-intro-actions {
    gap: 12px;
  }
  .desk-resume {
    padding: 11px;
    gap: 9px;
  }
  .resume-file strong {
    font-size: 8px;
  }
  .resume-download > span:first-child {
    display: none;
  }
}
@media (max-width: 850px) {
  body[data-direction="desktop"] .desk-intro h1 {
    font-size: clamp(36px, 5.4vw, 45px);
  }
  .desk-resume {
    margin-top: 20px;
    max-width: 300px;
  }
  .desk-parallel .repair-board {
    height: 145px;
  }
  body[data-direction="desktop"] .desk-about {
    padding: 45px 6vw 100px;
    gap: 7%;
    grid-template-columns: 0.35fr 1fr;
  }
  .personal-stamp > p {
    font-size: 27px;
  }
  .personal-stamp em {
    font-size: 32px;
  }
  .about-document-copy {
    padding: 25px;
  }
  .case-story-grid {
    gap: 22px;
  }
  .case-architecture {
    gap: 20px 30px;
  }
}
@media (max-width: 600px) {
  body[data-direction="desktop"] .desk-intro h1 {
    font-size: clamp(38px, 10.7vw, 61px);
  }
  .desk-intro-actions {
    gap: 14px;
  }
  .desk-intro-actions .contact-link {
    padding: 10px 17px;
  }
  .desk-intro-social a {
    font-size: 10px;
  }
  .desk-resume {
    max-width: 340px;
    margin-top: 22px;
    padding: 13px 12px;
  }
  .resume-file strong {
    font-size: 9px;
  }
  .resume-download > span:first-child {
    display: block;
  }
  .desk-parallel .repair-meta {
    height: 30px;
    padding-left: 9px;
    padding-right: 9px;
    font-size: 7px;
  }
  .desk-parallel .repair-caption {
    display: none;
  }
  .desk-parallel .repair-board {
    height: 171px;
  }
  .desk-parallel .signal-node {
    font-size: 7px;
    width: 30px;
    height: 35px;
    gap: 6px;
  }
  .desk-parallel .signal-port {
    width: 13px;
    height: 13px;
  }
  .desk-parallel .signal-port:after {
    inset: 5px;
  }
  .desk-parallel .repair-controls {
    padding: 8px 9px 12px;
    flex-direction: column;
    gap: 10px;
    align-items: start;
  }
  .desk-parallel .repair-instruction {
    max-width: 100%;
    font-size: 8px;
  }
  .desk-parallel .repair-controls button {
    font-size: 8px;
  }
  .window-controls > button {
    width: 24px;
    height: 24px;
    font-size: 16px;
  }
  .window-grip .grip-dots {
    display: none;
  }
  .window-lights {
    display: none;
  }
  .window-grip .micro {
    font-size: 8px;
  }
  .desk-taskbar {
    gap: 5px;
  }
  .desk-taskbar button {
    font-size: 8px;
    padding: 6px 8px;
    gap: 5px;
  }
  .desk-taskbar button > span {
    width: 19px;
    height: 19px;
    font-size: 9px;
  }
  .dock-button {
    font-size: 8px;
  }
  .dock-palette-name {
    display: none;
  }
  body[data-direction="desktop"] .desk-about {
    grid-template-columns: 1fr;
    padding: 20px 22px 85px;
    gap: 35px;
  }
  .personal-stamp {
    display: grid;
    grid-template-columns: 1fr 1fr;
    align-items: center;
  }
  .personal-initials {
    font-size: 95px;
    grid-row: 1/3;
    margin: 0;
  }
  .personal-stamp > .micro {
    font-size: 8px;
  }
  .personal-stamp > p {
    font-size: 29px;
    margin: 8px 0;
  }
  .about-document {
    rotate: 0deg;
  }
  .about-document-copy {
    padding: 26px 22px;
  }
  body[data-direction="desktop"] .about-document-copy h2 {
    font-size: 29px;
  }
  body[data-direction="desktop"] .about-document-copy p {
    font-size: 15px;
  }
  .about-document-bar .micro {
    font-size: 8px;
  }
  .about-document-links {
    gap: 18px;
    font-size: 11px;
  }
  .desk-contact-address {
    font-size: 10px;
  }
  .desk-footer .footer-bottom {
    align-items: start;
  }
  .desk-footer .footer-bottom > div {
    flex-wrap: wrap;
    gap: 15px;
  }
  .project-dialog {
    max-width: calc(100% - 20px);
    max-height: calc(100dvh - 20px);
    border-radius: 13px;
  }
  .case-titlebar {
    padding: 0 95px 0 15px;
    font-size: 9px;
    height: 50px;
    gap: 7px;
  }
  .case-file-icon {
    width: 20px;
    height: 20px;
    font-size: 10px;
  }
  .case-chrome-note {
    display: none;
  }
  .project-dialog .dialog-close {
    margin: 11px 10px 0 0;
    padding: 6px 9px;
    font-size: 9px;
    gap: 8px;
  }
  .case-heading {
    padding: 30px 22px 24px;
  }
  .case-heading h2 {
    font-size: 48px;
  }
  .case-heading > .micro {
    font-size: 8px;
  }
  .case-heading > p {
    font-size: 17px;
  }
  .project-dialog .detail-tags > span {
    font-size: 8px;
    padding: 6px 8px;
  }
  .case-summary {
    margin: 0 22px 24px;
    gap: 22px;
    align-items: start;
  }
  .case-summary > div {
    font-size: 10px;
    gap: 6px;
  }
  .case-summary .micro {
    font-size: 7px;
  }
  .case-summary > a,
  .case-context-note {
    margin: 0;
    font-size: 10px;
  }
  .case-media {
    margin: 0 10px;
  }
  .case-signal-stage {
    padding: 15px 8px;
  }
  .case-signal-stage .repair-board {
    height: 190px;
  }
  .case-signal-stage .repair-meta {
    font-size: 8px;
  }
  .case-signal-stage .repair-caption {
    font-size: 7px;
  }
  .case-signal-stage .signal-node {
    width: 40px;
    font-size: 8px;
  }
  .case-signal-stage .repair-controls {
    padding: 5px 10px 15px;
    gap: 15px;
  }
  .case-signal-stage .repair-instruction {
    font-size: 10px;
  }
  .case-signal-stage .repair-controls button {
    font-size: 8px;
  }
  .case-signal-stage > p {
    font-size: 10px;
  }
  .case-story {
    padding: 27px 22px 35px;
  }
  .case-description {
    font-size: 18px;
    margin-bottom: 25px;
  }
  .case-story-grid {
    grid-template-columns: 1fr;
    gap: 23px;
  }
  .case-story-grid h3 {
    margin-bottom: 7px;
  }
  .case-story-grid p {
    font-size: 12px;
  }
  .case-gallery,
  .case-evidence {
    padding: 0 22px 35px;
  }
  .case-section-cap h3 {
    font-size: 27px;
  }
  .case-stills {
    grid-template-columns: 1fr;
    gap: 24px;
  }
  .case-stills figcaption {
    flex-direction: row;
    justify-content: space-between;
  }
  .evidence-switch button {
    font-size: 10px;
    padding: 9px 10px;
  }
  .case-architecture {
    grid-template-columns: 1fr;
    gap: 20px;
  }
  .case-architecture h3,
  .case-architecture > p,
  .module-list,
  .architecture-path {
    grid-column: 1;
    grid-row: auto;
  }
  .architecture-path {
    margin-top: 7px;
  }
  .case-architecture > p {
    font-size: 13px;
  }
  .module-list {
    margin-top: 6px;
  }
  .case-source pre {
    padding: 20px 12px;
    font-size: 9px;
  }
  .source-line {
    gap: 15px;
  }
  .source-header {
    padding: 13px 12px;
    font-size: 8px;
  }
  .case-source > p {
    padding: 14px 12px;
    font-size: 10px;
  }
  .case-footer {
    padding: 20px 22px;
    flex-direction: column;
    align-items: start;
    gap: 10px;
  }
}
@media (max-width: 360px) {
  .desk-intro-actions {
    gap: 11px;
  }
  .desk-intro-social a {
    font-size: 9px;
  }
  .desk-resume {
    gap: 9px;
  }
  .resume-file strong {
    font-size: 8px;
  }
  .resume-download > span:first-child {
    display: none;
  }
  .window-bar {
    gap: 4px !important;
  }
  .window-controls > button {
    width: 21px;
  }
  .window-grip .micro {
    font-size: 7px;
  }
}
@media (prefers-reduced-motion: reduce) {
  .signal-node,
  .dock-button,
  .window-controls > button,
  .desk-taskbar button {
    transition: none;
  }
  .repair-lab[data-state="repaired"] .node-ship .signal-port,
  .resume-download:hover > span:last-child {
    animation: none;
  }
}
[hidden] {
  display: none !important;
}

/* PacketQuest remains an honest work-in-progress concept, in a distinct console material. */
.packetquest-preview {
  background: var(--desk-console, #182638);
  color: var(--desk-console-ink, #e3eef7);
  font-family: "IBM Plex Mono", monospace;
  padding: 18px 20px;
}
.pq-case {
  display: flex;
  justify-content: space-between;
  gap: 10px;
  font-size: 8px;
  color: var(--desk-console-muted, #9dacc1);
}
.pq-wip {
  display: flex;
  gap: 5px;
  align-items: center;
  font-size: 7px;
}
.pq-wip i {
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--desk-console-accent, #9fc8f5);
  box-shadow: 0 0 10px currentColor;
}
.pq-route {
  display: flex;
  align-items: center;
  margin: 22px 0 26px;
  padding: 0 9px;
  color: var(--desk-console-accent, #9fc8f5);
}
.pq-route > span:not(.pq-wire) {
  position: relative;
  display: grid;
  place-items: center;
  min-width: 28px;
  font-size: 25px;
  line-height: 1;
}
.pq-route small {
  position: absolute;
  top: calc(100% + 7px);
  font-size: 6px;
  color: var(--desk-console-muted, #9dacc1);
}
.pq-wire {
  height: 1px;
  background: currentColor;
  flex: 1;
  margin: 0 5px;
  position: relative;
  opacity: 0.7;
}
.pq-wire i {
  position: absolute;
  left: 0;
  top: -2px;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: currentColor;
  box-shadow: 0 0 8px currentColor;
  animation: pq-travel 2.6s ease-in-out infinite;
}
.pq-wire.missing {
  background: repeating-linear-gradient(
    90deg,
    currentColor 0 3px,
    transparent 3px 7px
  );
  opacity: 0.3;
}
@keyframes pq-travel {
  0%,
  15% {
    left: 0;
    opacity: 0;
  }
  30% {
    opacity: 1;
  }
  80% {
    left: 95%;
    opacity: 1;
  }
  100% {
    left: 95%;
    opacity: 0;
  }
}
.pq-console code {
  font:
    9px "IBM Plex Mono",
    monospace;
  color: var(--desk-console-muted, #9dacc1);
}
.pq-prompt {
  color: var(--desk-console-accent, #9fc8f5);
}
.pq-console strong {
  display: block;
  font:
    500 20px/1.14 "Bricolage Grotesque",
    sans-serif;
  letter-spacing: -0.025em;
  margin: 13px 0;
}
.pq-caption {
  font-size: 6px;
  letter-spacing: 0.05em;
  color: var(--desk-console-muted, #9dacc1);
}
body[data-direction="desktop"] .desk-software {
  height: 339px;
  align-self: start;
}
body[data-direction="desktop"] .desk-software .packetquest-preview {
  flex: 1;
  min-height: 0;
}
body[data-direction="desktop"] .desk-case-link {
  font-size: 10px;
  padding: 11px 16px;
}

.stage-software .packetquest-preview {
  width: 100%;
  max-width: 480px;
}
.case-packetquest-stage {
  padding: 35px;
  background: var(--case-bar);
}
.case-packetquest-stage .packetquest-preview {
  max-width: 680px;
  margin: auto;
  padding: 30px 35px;
  border-radius: 10px;
}
.case-packetquest-stage .pq-case {
  font-size: 11px;
}
.case-packetquest-stage .pq-wip {
  font-size: 9px;
}
.case-packetquest-stage .pq-route {
  margin: 38px 0 45px;
}
.case-packetquest-stage .pq-route > span:not(.pq-wire) {
  font-size: 36px;
}
.case-packetquest-stage .pq-route small {
  font-size: 9px;
}
.case-packetquest-stage .pq-console strong {
  font-size: 42px;
}
.case-packetquest-stage .pq-console code {
  font-size: 12px;
}
.case-packetquest-stage .pq-caption {
  font-size: 9px;
}
@media (max-width: 850px) {
  body[data-direction="desktop"] .desk-software {
    height: 345px;
  }
}
@media (max-width: 600px) {
  body[data-direction="desktop"] .desk-software {
    height: 294px;
  }
  .packetquest-preview {
    padding: 14px 12px;
  }
  .pq-case {
    flex-wrap: wrap;
    font-size: 7px;
    gap: 6px;
  }
  .pq-route {
    padding: 0;
    margin: 16px 0 24px;
  }
  .pq-route > span:not(.pq-wire) {
    min-width: 20px;
    font-size: 21px;
  }
  .pq-console strong {
    font-size: 19px;
  }
  .pq-console code {
    font-size: 7px;
  }
  .pq-caption {
    font-size: 5px;
  }
  .case-packetquest-stage {
    padding: 20px 10px;
  }
  .case-packetquest-stage .packetquest-preview {
    padding: 22px 17px;
  }
  .case-packetquest-stage .pq-case {
    font-size: 8px;
  }
  .case-packetquest-stage .pq-wip {
    font-size: 7px;
  }
  .case-packetquest-stage .pq-console strong {
    font-size: 32px;
  }
  .case-packetquest-stage .pq-console code {
    font-size: 10px;
  }
  .case-packetquest-stage .pq-caption {
    font-size: 7px;
  }
  .case-packetquest-stage .pq-route small {
    font-size: 7px;
  }
}
@media (prefers-reduced-motion: reduce) {
  .pq-wire i {
    animation: none;
  }
}
body[data-motion="off"] .pq-wire i {
  animation: none;
}

/* Keep useful labels readable; narrow screens give each working window a row. */
.pq-case {
  font-size: 9px;
}
.pq-wip {
  font-size: 8px;
}
.pq-caption {
  font-size: 8px;
  line-height: 1.5;
  display: block;
}
.pq-route small {
  font-size: 8px;
}
.window-grip .micro {
  font-size: 10px;
}
.repair-meta {
  font-size: 9px;
}
.repair-caption {
  font-size: 8px;
}
.signal-node {
  font-size: 9px;
}
.repair-controls button {
  font-size: 9px;
}
@media (min-width: 601px) and (max-width: 850px) {
  body[data-direction="desktop"] .desk-grid {
    grid-template-rows: 165px minmax(380px, auto) 345px;
  }
  body[data-direction="desktop"] .desk-game {
    height: 540px;
  }
}
@media (max-width: 600px) {
  body[data-direction="desktop"] .desk-grid {
    grid-template-rows: 135px auto 320px 310px 260px;
    row-gap: 28px;
  }
  body[data-direction="desktop"] .desk-software {
    grid-column: 1 / -1;
    grid-row: 4;
    height: 310px;
  }
  body[data-direction="desktop"] .desk-parallel {
    grid-column: 1 / -1;
    grid-row: 5;
    height: 260px;
  }
  .packetquest-preview {
    padding: 18px 22px;
  }
  .pq-case {
    font-size: 9px;
  }
  .pq-route {
    margin: 20px 0 30px;
    padding: 0 5px;
  }
  .pq-route > span:not(.pq-wire) {
    min-width: 28px;
    font-size: 26px;
  }
  .pq-console code {
    font-size: 10px;
  }
  .pq-console strong {
    font-size: 26px;
  }
  .window-grip .micro {
    font-size: 9px;
  }
  .desk-parallel .repair-meta {
    font-size: 9px;
    padding: 8px 16px 0;
  }
  .desk-parallel .repair-caption {
    display: block;
  }
  .desk-parallel .repair-board {
    height: 145px;
  }
  .desk-parallel .signal-node {
    width: 42px;
    height: 45px;
    font-size: 9px;
    gap: 7px;
  }
  .desk-parallel .signal-port {
    width: 17px;
    height: 17px;
  }
  .desk-parallel .signal-port:after {
    inset: 6px;
  }
  .desk-parallel .repair-controls {
    flex-direction: row;
    align-items: center;
    padding: 10px 16px 16px;
    gap: 12px;
  }
  .desk-parallel .repair-instruction {
    max-width: 56%;
    font-size: 10px;
  }
  .desk-parallel .repair-controls button {
    font-size: 9px;
  }
  .desk-taskbar {
    gap: 4px;
    width: calc(100vw - 28px);
    justify-content: center;
  }
  .desk-taskbar button {
    padding: 7px;
    font-size: 8px;
    gap: 5px;
  }
  .desk-taskbar button > span {
    width: 18px;
    height: 18px;
    font-size: 9px;
    flex-shrink: 0;
  }
}
