@font-face {
  font-family: "Michroma";
  src: url("/static/Michroma-Regular.ttf") format("truetype");
  font-style: normal;
  font-weight: 400;
  font-display: swap;
}

:root {
  --ink: #222222;
  --muted: #696560;
  --line: #dedbd7;
  --paper: #f7f6f4;
  --white: #fff;
  --black: #040508;
  --charcoal: #272727;
  --orange: #f67704;
  --orange-dark: #d85f00;
  /* --orange on paper is 2.78:1 and --orange-dark is 3.50:1 — both fail the
     4.5:1 minimum at the 12px/780 weight the kickers use. --orange-ink is
     4.65:1 on --paper and 5.02:1 on white. --orange and --orange-dark are
     unchanged and stay the fill/hover colours, so the brand does not move. */
  --orange-ink: #b45309;
  --warm: #f5e4d4;
  --sand: #e9e1d7;
  --concrete: #e2e1dd;
  --steel: #dce0e1;
  --smoke: #e7e6e3;
  --shadow: 0 24px 70px rgba(4, 5, 8, .10);
}

/* A committed light theme: every panel and control paints its own background.
   Declaring it stops Chrome on Android applying Auto Dark Theme, which would
   invert the white cards under the black hero and leave the orange alone. */
:root { color-scheme: light; }

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  color: var(--ink);
  background: var(--paper);
  font-family: proxima-nova, "Avenir Next", Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  -webkit-font-smoothing: antialiased;
}
button, input, select { font: inherit; }
a { color: inherit; }
.shell { width: min(1180px, calc(100% - 48px)); margin-inline: auto; }

.site-header {
  height: 78px;
  padding: 0 max(24px, calc((100vw - 1180px) / 2));
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-bottom: 1px solid #262626;
  background: rgba(4, 5, 8, .97);
  backdrop-filter: blur(18px);
  position: relative;
  z-index: 20;
}
.brand { min-height: 44px; display: inline-flex; align-items: center; color: white; text-decoration: none; }
.tiscan-wordmark {
  color: white;
  font-family: "Michroma", "Arial Black", sans-serif;
  font-size: 21px;
  font-weight: 400;
  line-height: 1;
  letter-spacing: .035em;
  white-space: nowrap;
  -webkit-text-stroke: .55px currentColor;
}
.tiscan-wordmark b { color: var(--orange); font: inherit; }
.header-meta { display: flex; align-items: center; gap: 22px; color: #a9a9a9; font-size: 13px; }
.signal { display: inline-flex; align-items: center; gap: 8px; }
.signal i, .live-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--orange); box-shadow: 0 0 11px rgba(246,119,4,.7); }
.header-link { font-weight: 700; color: white; text-decoration: none; }
.header-link:hover { color: var(--orange); }

.admin-hero {
  min-height: 470px;
  padding: 86px 0 74px;
  display: grid;
  grid-template-columns: 1fr 260px;
  gap: 80px;
  align-items: end;
}
.admin-hero h1, .job-hero h1, .error-panel h1 {
  margin: 8px 0 22px;
  max-width: 800px;
  font-size: clamp(52px, 7vw, 92px);
  line-height: .92;
  letter-spacing: -.07em;
  font-weight: 730;
}
.admin-hero h1 span { color: var(--orange); }
.kicker { margin: 0; color: var(--orange-ink); font-size: 12px; font-weight: 800; letter-spacing: .14em; text-transform: uppercase; }
.lede { max-width: 650px; margin: 0; color: var(--muted); font-size: 18px; line-height: 1.65; }
.hero-stat {
  padding: 30px;
  border: 1px solid var(--line);
  border-radius: 7px;
  color: white;
  background: var(--black);
  box-shadow: var(--shadow);
}
.hero-stat strong { display: block; font-size: 64px; line-height: 1; letter-spacing: -.06em; }
.hero-stat span { display: block; margin-top: 4px; font-size: 16px; font-weight: 750; }
.hero-stat strong { color: var(--orange); }
.hero-stat small { display: block; margin-top: 19px; color: #aaa; line-height: 1.45; }

.projects { padding-bottom: 110px; }
.section-heading { display: flex; justify-content: space-between; align-items: end; gap: 24px; margin-bottom: 24px; }
.section-heading h2 { margin: 5px 0 0; font-size: 30px; line-height: 1.1; letter-spacing: -.04em; }
.section-heading > p { margin: 0; color: var(--muted); font-size: 13px; }
.project-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; }
.project-card {
  min-width: 0;
  border: 1px solid var(--line);
  border-radius: 8px;
  overflow: hidden;
  background: var(--white);
  text-decoration: none;
  box-shadow: 0 8px 30px rgba(45, 40, 67, .04);
  transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.project-card:hover { transform: translateY(-5px); border-color: #c8b39f; box-shadow: var(--shadow); }
.project-card:first-child { grid-column: span 1; }
.card-visual { position: relative; height: 255px; display: grid; grid-template-columns: 1.45fr .8fr; grid-template-rows: 1fr 1fr; gap: 5px; padding: 10px; overflow: hidden; }
.accent-orange .card-visual, .accent-orange.job-hero { background: var(--warm); }
.accent-sand .card-visual, .accent-sand.job-hero { background: var(--sand); }
.accent-concrete .card-visual, .accent-concrete.job-hero { background: var(--concrete); }
.accent-steel .card-visual, .accent-steel.job-hero { background: var(--steel); }
.accent-smoke .card-visual, .accent-smoke.job-hero { background: var(--smoke); }
.card-visual img { width: 100%; height: 100%; object-fit: cover; object-position: center; border-radius: 3px; filter: saturate(.86) contrast(.98); background: #fff; }
.card-visual img:first-child { grid-row: 1 / 3; }
.card-status { position: absolute; top: 22px; right: 22px; display: inline-flex; align-items: center; gap: 7px; padding: 7px 10px; border-radius: 2px; background: rgba(4,5,8,.88); color: white; font-size: 11px; font-weight: 750; backdrop-filter: blur(9px); }
.card-status i { width: 6px; height: 6px; border-radius: 50%; }
.card-status.ready i { background: var(--orange); box-shadow: 0 0 9px rgba(246,119,4,.8); }
.card-status.pending i { background: #ffc936; box-shadow: 0 0 9px rgba(255,201,54,.7); }
.card-body { padding: 25px 27px 27px; }
.card-eyebrow { margin: 0 0 6px; color: var(--muted); font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; }
.card-title-row { display: flex; justify-content: space-between; align-items: center; }
.card-title-row h3 { margin: 0; font-size: 31px; letter-spacing: -.045em; }
.card-title-row > span { font-size: 22px; transition: transform .2s; }
.project-card:hover .card-title-row > span { transform: translate(3px, -3px); }
.card-body > p:not(.card-eyebrow) { min-height: 44px; margin: 12px 0 22px; color: var(--muted); font-size: 14px; line-height: 1.55; }
.card-stats { display: grid; grid-template-columns: .55fr .55fr .7fr .8fr 1.25fr; margin: 0; padding-top: 18px; border-top: 1px solid var(--line); }
.card-stats div { padding-right: 8px; }
.card-stats dt { color: var(--muted); font-size: 10px; text-transform: uppercase; letter-spacing: .07em; }
.card-stats dd { margin: 5px 0 0; font-size: 13px; font-weight: 750; white-space: nowrap; }
.pending-visual { grid-column: 1 / 3; grid-row: 1 / 3; position: relative; overflow: hidden; border: 1px solid rgba(72,70,89,.12); border-radius: 3px; background: rgba(255,255,255,.3); }
.pending-visual span { position: absolute; left: 12%; right: 12%; height: 1px; background: rgba(77,74,94,.18); transform: rotate(-8deg); }
.pending-visual span:nth-child(1) { top: 25%; }
.pending-visual span:nth-child(2) { top: 44%; left: 20%; }
.pending-visual span:nth-child(3) { top: 63%; right: 20%; }
.pending-visual span:nth-child(4) { top: 78%; }

.job-hero { min-height: 390px; border-bottom: 1px solid rgba(45,41,57,.1); overflow: hidden; }
.job-hero-inner { min-height: 390px; display: grid; grid-template-columns: minmax(0, 1fr) 430px; align-items: center; gap: 70px; }
.job-hero h1 { margin: 8px 0 14px; font-size: clamp(58px, 7vw, 88px); }
.job-hero .kicker { color: var(--orange-ink); }
.back-link { min-height: 44px; display: inline-flex; align-items: center; margin-bottom: 24px; color: var(--muted); text-decoration: none; font-size: 13px; font-weight: 700; }
.back-link:hover { color: var(--ink); }
.job-pills { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 28px; }
.job-pills span { display: inline-flex; align-items: center; gap: 8px; padding: 8px 11px; border: 1px solid rgba(53,48,42,.18); border-radius: 2px; background: rgba(255,255,255,.46); font-size: 11px; font-weight: 750; }
.job-preview-stack { position: relative; height: 290px; }
.job-preview-stack img { position: absolute; width: 355px; height: 238px; right: 0; top: 26px; object-fit: cover; object-position: center; background: white; border: 7px solid white; border-radius: 3px; box-shadow: 0 17px 50px rgba(4,5,8,.18); }
.job-preview-stack img:nth-child(2) { transform: translate(-28px, 9px) rotate(-5deg); }
.job-preview-stack img:nth-child(3) { transform: translate(24px, 3px) rotate(5deg); }
.job-preview-stack img:first-child { z-index: 3; }
.job-preview-stack.placeholder span { position: absolute; width: 350px; height: 230px; right: 0; top: 30px; border: 1px solid rgba(50,47,62,.12); border-radius: 12px; background: rgba(255,255,255,.32); }
.job-preview-stack.placeholder span:nth-child(2) { transform: rotate(-5deg) translate(-20px, 2px); }
.job-preview-stack.placeholder span:nth-child(3) { transform: rotate(5deg) translate(20px, 2px); }

.job-content { padding: 62px 0 110px; display: grid; gap: 24px; }
.viewer-feature {
  min-height: 270px;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(360px, 44%);
  overflow: hidden;
  border: 1px solid var(--black);
  border-radius: 8px;
  color: white;
  background: var(--black);
  text-decoration: none;
  box-shadow: 0 18px 55px rgba(4,5,8,.16);
  transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.viewer-feature:hover { transform: translateY(-4px); border-color: var(--orange); box-shadow: 0 26px 70px rgba(4,5,8,.22); }
.viewer-feature-copy { display: flex; align-items: flex-start; justify-content: center; flex-direction: column; padding: 38px 42px; }
.viewer-feature-copy .kicker { color: var(--orange); }
.viewer-feature-copy h2 { max-width: 580px; margin: 8px 0 14px; font-size: clamp(30px, 3.4vw, 45px); line-height: 1.02; letter-spacing: -.05em; }
.viewer-feature-copy > p:not(.kicker) { max-width: 620px; margin: 0; color: #aaa; font-size: 14px; line-height: 1.6; }
.viewer-feature-copy > span { display: inline-flex; align-items: center; gap: 12px; margin-top: 25px; color: white; font-size: 12px; font-weight: 780; }
.viewer-feature-copy > span b { color: var(--orange); font-size: 20px; transition: transform .2s ease; }
.viewer-feature:hover .viewer-feature-copy > span b { transform: translateX(4px); }
.viewer-feature-preview { min-width: 0; display: flex; align-items: center; justify-content: center; padding: 25px 31px; overflow: hidden; background: var(--warm); }
.viewer-feature-window { width: 100%; max-width: 430px; overflow: hidden; border: 7px solid white; border-radius: 4px; background: white; box-shadow: 0 17px 48px rgba(4,5,8,.22); transform: rotate(1.5deg); transition: transform .25s ease; }
.viewer-feature:hover .viewer-feature-window { transform: rotate(0); }
.viewer-feature-window > i { height: 18px; display: flex; align-items: center; gap: 5px; padding: 0 4px; background: white; }
.viewer-feature-window > i b { width: 5px; height: 5px; border-radius: 50%; background: #d4d0cb; }
.viewer-feature-window > i b:first-child { background: var(--orange); }
.viewer-feature-window img { width: 100%; height: 190px; display: block; object-fit: contain; object-position: center; border: 1px solid #ece9e5; background: white; }
.pointcloud-feature {
  min-height: 285px;
  display: grid;
  grid-template-columns: minmax(360px, 44%) minmax(0, 1fr);
  overflow: hidden;
  border: 1px solid #25272b;
  border-radius: 8px;
  color: white;
  background: #121316;
  text-decoration: none;
  box-shadow: 0 18px 55px rgba(4,5,8,.15);
  transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.pointcloud-feature:hover { transform: translateY(-4px); border-color: var(--orange); box-shadow: 0 26px 70px rgba(4,5,8,.23); }
.pointcloud-feature-copy { display: flex; align-items: flex-start; justify-content: center; flex-direction: column; padding: 38px 42px; }
.pointcloud-feature-copy .kicker { color: var(--orange); }
.pointcloud-feature-copy h2 { max-width: 620px; margin: 8px 0 14px; font-size: clamp(30px, 3.4vw, 45px); line-height: 1.02; letter-spacing: -.05em; }
.pointcloud-feature-copy > p:not(.kicker) { max-width: 640px; margin: 0; color: #aaa; font-size: 14px; line-height: 1.6; }
.pointcloud-feature-copy > span { display: inline-flex; align-items: center; gap: 12px; margin-top: 25px; color: white; font-size: 12px; font-weight: 780; }
.pointcloud-feature-copy > span b { color: var(--orange); font-size: 20px; transition: transform .2s ease; }
.pointcloud-feature:hover .pointcloud-feature-copy > span b { transform: translateX(4px); }
.pointcloud-feature-visual { position: relative; min-height: 285px; display: flex; align-items: center; justify-content: center; flex-direction: column; overflow: hidden; background: radial-gradient(circle at 50% 40%, #353940, #131519 64%, #0b0c0e); }
.cloud-grid { position: absolute; inset: 0; opacity: .42; background-image: linear-gradient(rgba(255,255,255,.07) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.07) 1px, transparent 1px); background-size: 26px 26px; transform: perspective(420px) rotateX(58deg) scale(1.5) translateY(25%); }
.cloud-route { position: absolute; width: 76%; height: 42%; transform: rotate(-8deg); }
.cloud-route::before { content: ""; position: absolute; top: 50%; right: 2%; left: 2%; height: 2px; background: linear-gradient(90deg, transparent, rgba(246,119,4,.3), var(--orange), rgba(246,119,4,.3), transparent); }
.cloud-route i { position: absolute; top: 50%; width: 8px; height: 8px; border: 2px solid var(--orange); border-radius: 50%; background: #15161a; box-shadow: 0 0 15px rgba(246,119,4,.75); transform: translate(-50%, -50%); }
.cloud-route i:nth-child(1) { left: 6%; }.cloud-route i:nth-child(2) { left: 23%; }.cloud-route i:nth-child(3) { left: 42%; }.cloud-route i:nth-child(4) { left: 60%; }.cloud-route i:nth-child(5) { left: 78%; }.cloud-route i:nth-child(6) { left: 95%; }
.pointcloud-feature-visual > b { position: relative; z-index: 2; font-size: 37px; letter-spacing: -.04em; }
.pointcloud-feature-visual > small { position: relative; z-index: 2; margin-top: 3px; color: #a7a8ac; font-size: 9px; font-weight: 760; letter-spacing: .08em; text-transform: uppercase; }
.evidence-strip { display: grid; grid-template-columns: repeat(4, 1fr); overflow: hidden; border: 1px solid var(--line); border-radius: 8px; background: white; }
.evidence-strip div { min-height: 112px; display: flex; align-items: flex-start; justify-content: center; flex-direction: column; gap: 7px; padding: 22px 25px; border-right: 1px solid var(--line); }
.evidence-strip div:last-child { border-right: 0; }
.evidence-strip strong { font-size: 25px; letter-spacing: -.035em; }
.evidence-strip span { color: var(--muted); font-size: 10px; font-weight: 730; letter-spacing: .05em; text-transform: uppercase; }
.content-panel { padding: 32px; border: 1px solid var(--line); border-radius: 8px; background: var(--white); box-shadow: 0 8px 30px rgba(4,5,8,.035); }
.section-heading.compact { align-items: center; margin-bottom: 24px; }
.section-heading.compact h2 { font-size: 25px; }
.total-size { color: var(--muted); font-size: 12px; font-weight: 700; }
.scan-list { border: 1px solid var(--line); border-radius: 4px; overflow: hidden; }
.scan-row { min-height: 78px; display: grid; grid-template-columns: 45px 1fr auto auto; gap: 16px; align-items: center; padding: 13px 16px; border-bottom: 1px solid var(--line); }
.scan-row:last-child { border-bottom: 0; }
.file-icon { width: 40px; height: 40px; display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; border-radius: 3px; color: #4a4744; background: #eeece9; font-size: 9px; font-weight: 850; letter-spacing: .04em; }
.file-icon.e57 { background: #ffe0c5; color: #a94800; }
.file-icon.pdf { background: #eee0d4; color: #6f4c32; }
.file-icon.dxf, .file-icon.dwg { background: #dfe3e4; color: #48565b; }
.file-copy { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.file-copy strong { font-size: 14px; }
.file-copy span { overflow: hidden; color: var(--muted); font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.file-size { color: var(--muted); font-size: 12px; white-space: nowrap; }
.button { min-height: 44px; display: inline-flex; align-items: center; justify-content: center; padding: 0 16px; border: 1px solid transparent; border-radius: 3px; font-size: 12px; font-weight: 760; text-decoration: none; cursor: pointer; }
.button.primary { color: white; background: var(--black); }
.button.primary:hover { background: #292929; }
.button.orange { color: var(--black); background: var(--orange); }
.button.orange:hover { background: var(--orange-dark); }
.button.secondary { border-color: var(--line); background: white; }
.button.secondary:hover { border-color: #bcb7ca; background: #f7f5fa; }
.button:disabled { opacity: .42; cursor: default; }
.format-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; }
.format-card { width: 100%; min-height: 78px; display: grid; grid-template-columns: 45px 1fr auto; gap: 15px; align-items: center; padding: 15px; border: 1px solid var(--line); border-radius: 4px; color: inherit; background: #fdfcfa; text-align: left; text-decoration: none; cursor: pointer; transition: border-color .2s, transform .2s, background .2s; }
.format-card:hover { transform: translateY(-2px); border-color: #bdb8ce; background: white; }
.format-card > span:nth-child(2) { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.format-card strong { font-size: 14px; }
.format-card small { color: var(--muted); font-size: 11px; }
.format-card b { font-size: 19px; font-weight: 500; }
.panel-actions { display: flex; align-items: center; gap: 16px; }
.section-intro { max-width: 680px; margin: -10px 0 24px; color: var(--muted); font-size: 13px; line-height: 1.6; }
.photo-floor-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; }
.photo-floor-card { min-width: 0; overflow: hidden; border: 1px solid var(--line); border-radius: 4px; background: #faf9f7; }
.photo-collage { position: relative; height: 208px; display: grid; grid-template-columns: 1.25fr .75fr; grid-template-rows: 1fr 1fr; gap: 3px; padding: 3px; overflow: hidden; color: white; background: var(--black); text-decoration: none; }
.photo-collage::after { content: ""; position: absolute; inset: 45% 0 0; background: linear-gradient(transparent, rgba(4,5,8,.75)); pointer-events: none; }
.photo-collage img { width: 100%; height: 100%; object-fit: cover; transition: transform .3s ease; }
.photo-collage img:first-child { grid-row: 1 / 3; }
.photo-collage:hover img { transform: scale(1.025); }
.photo-collage > span { position: absolute; right: 15px; bottom: 13px; z-index: 2; display: flex; gap: 10px; align-items: center; font-size: 11px; font-weight: 750; }
.photo-collage > span b { color: var(--orange); font-size: 17px; }
.photo-floor-copy { min-height: 66px; display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 12px 14px; }
.photo-floor-copy > div { min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.photo-floor-copy strong { font-size: 14px; }
.photo-floor-copy small { color: var(--muted); font-size: 10px; }

.gallery-hero { color: white; background: var(--black); }
.gallery-hero-inner { min-height: 350px; display: flex; justify-content: space-between; align-items: end; gap: 50px; padding-block: 62px; }
.gallery-hero h1 { margin: 7px 0 16px; font-size: clamp(52px, 7vw, 88px); line-height: .94; letter-spacing: -.065em; }
.gallery-hero .back-link { color: #aaa; }
.gallery-hero .back-link:hover { color: white; }
.gallery-hero .lede { color: #aaa; }
.gallery-hero .button { flex: 0 0 auto; margin-bottom: 4px; }
.gallery-content { padding: 54px 0 100px; }
.gallery-tools { display: flex; justify-content: space-between; align-items: end; gap: 30px; margin-bottom: 24px; }
.gallery-tools h2 { margin: 5px 0 0; font-size: 28px; letter-spacing: -.04em; }
.photo-filters { max-width: 65%; display: flex; justify-content: flex-end; gap: 7px; flex-wrap: wrap; }
.photo-filters button { min-height: 44px; padding: 0 12px; border: 1px solid #d1cdc8; border-radius: 2px; color: var(--muted); background: white; font-size: 10px; font-weight: 700; cursor: pointer; }
.photo-filters button:hover { border-color: #99938d; color: var(--ink); }
.photo-filters button.active { border-color: var(--orange); color: white; background: var(--orange); }
.photo-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 9px; }
.photo-tile { position: relative; aspect-ratio: 1; min-width: 0; padding: 0; overflow: hidden; border: 0; color: white; background: #1c1c1c; text-align: left; cursor: zoom-in; }
.photo-tile[hidden] { display: none; }
.photo-tile::after { content: ""; position: absolute; inset: 45% 0 0; background: linear-gradient(transparent, rgba(4,5,8,.76)); pointer-events: none; }
.photo-tile img { width: 100%; height: 100%; display: block; object-fit: cover; transition: transform .25s ease, opacity .25s ease; }
.photo-tile:hover img { transform: scale(1.035); opacity: .92; }
.photo-tile > span { position: absolute; left: 13px; right: 13px; bottom: 12px; z-index: 2; display: flex; justify-content: space-between; align-items: end; gap: 10px; }
.photo-tile b { overflow: hidden; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.photo-tile small { flex: 0 0 auto; color: #d8d8d8; font-size: 8px; text-transform: uppercase; letter-spacing: .06em; }
body.lightbox-open { overflow: hidden; }
.photo-lightbox { position: fixed; inset: 0; z-index: 100; display: grid; grid-template-columns: 70px minmax(0, 1fr) 70px; align-items: center; padding: 26px; color: white; background: rgba(4,5,8,.97); }
.photo-lightbox[hidden] { display: none; }
.photo-lightbox figure { width: 100%; height: 100%; min-width: 0; margin: 0; display: grid; grid-template-rows: minmax(0, 1fr) 58px; }
.lightbox-image-wrap { min-height: 0; position: relative; display: flex; align-items: center; justify-content: center; }
.lightbox-image-wrap img { max-width: 100%; max-height: 100%; opacity: 0; object-fit: contain; box-shadow: 0 20px 70px rgba(0,0,0,.42); transition: opacity .16s ease; }
.lightbox-image-wrap img.ready { opacity: 1; }
.lightbox-image-wrap i { position: absolute; width: 25px; height: 25px; border: 2px solid #555; border-top-color: var(--orange); border-radius: 50%; animation: photo-spin .8s linear infinite; }
.lightbox-image-wrap i[hidden] { display: none; }
@keyframes photo-spin { to { transform: rotate(360deg); } }
.photo-lightbox figcaption { display: flex; justify-content: space-between; align-items: end; gap: 20px; color: #ccc; font-size: 12px; }
.lightbox-close, .lightbox-nav { border: 0; color: white; background: transparent; cursor: pointer; }
.lightbox-close { position: absolute; top: 20px; right: 23px; z-index: 2; width: 43px; height: 43px; font-size: 33px; font-weight: 200; }
.lightbox-nav { height: 80px; font-size: 55px; font-weight: 200; opacity: .65; }
.lightbox-nav:hover, .lightbox-close:hover { color: var(--orange); opacity: 1; }

.drawing-heading { margin-bottom: 18px !important; }
.selection-actions { display: flex; align-items: center; gap: 14px; }
.selection-actions > span { color: var(--muted); font-size: 12px; }
.drawing-tools { display: grid; grid-template-columns: minmax(200px, 1fr) 170px 130px auto auto; gap: 10px; align-items: end; padding: 16px; border-radius: 4px; background: #f1efec; }
.drawing-tools label { display: flex; flex-direction: column; gap: 5px; color: var(--muted); font-size: 9px; font-weight: 750; letter-spacing: .06em; text-transform: uppercase; }
.drawing-tools input, .drawing-tools select { width: 100%; min-height: 44px; padding: 0 11px; border: 1px solid #d7d3df; border-radius: 8px; outline: none; color: var(--ink); background: white; font-size: 12px; text-transform: none; letter-spacing: 0; }
.drawing-tools input:focus, .drawing-tools select:focus { border-color: var(--orange); box-shadow: 0 0 0 3px rgba(246,119,4,.13); }
.text-button { min-height: 44px; padding: 0 7px; border: 0; color: var(--orange-ink); background: none; font-size: 11px; font-weight: 750; cursor: pointer; white-space: nowrap; }
.drawing-list { max-height: 660px; margin-top: 14px; border: 1px solid var(--line); border-radius: 15px; overflow: auto; }
.drawing-row { min-height: 67px; display: grid; grid-template-columns: 20px 42px minmax(0, 1fr) 75px 44px; gap: 13px; align-items: center; padding: 10px 15px; border-bottom: 1px solid var(--line); cursor: pointer; }
.drawing-row:last-child { border-bottom: 0; }
.drawing-row:hover { background: #faf9fc; }
.drawing-row[hidden] { display: none; }
.drawing-row > input { width: 16px; height: 16px; margin: 0; accent-color: var(--orange); }
.drawing-row > img { width: 42px; height: 42px; object-fit: cover; border: 1px solid #e3e0e8; border-radius: 7px; background: white; }
.drawing-copy { min-width: 0; display: flex; flex-direction: column; gap: 4px; }
.drawing-copy strong { overflow: hidden; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.drawing-copy small, .drawing-meta small { color: var(--muted); font-size: 10px; }
.drawing-meta { display: flex; flex-direction: column; gap: 4px; text-align: right; }
.drawing-meta b { font-size: 10px; }
.drawing-row > a { position: relative; z-index: 2; color: var(--orange-ink); font-size: 11px; font-weight: 750; text-decoration: none; }
.library-message { margin: 14px 0 0; padding: 12px; border-radius: 10px; color: #9b253e; background: #ffe2e9; font-size: 12px; }
.pending-panel, .error-panel { margin-top: 70px; margin-bottom: 100px; padding: 52px; border: 1px solid var(--line); border-radius: 8px; background: white; }
.pending-panel h2 { margin: 8px 0 16px; font-size: 35px; letter-spacing: -.04em; }
.pending-panel > p:last-child { max-width: 750px; color: var(--muted); line-height: 1.7; }
.error-panel h1 { max-width: 780px; margin: 10px 0 30px; font-size: clamp(38px, 6vw, 68px); }

.site-footer { min-height: 90px; padding: 0 max(24px, calc((100vw - 1180px) / 2)); display: flex; justify-content: space-between; align-items: center; border-top: 1px solid #262626; color: #aaa; background: var(--black); font-size: 11px; }
.site-footer .tiscan-wordmark { color: white; font-size: 11px; }
.site-footer .tiscan-wordmark b { color: var(--orange); }

@media (max-width: 900px) {
  .admin-hero { grid-template-columns: 1fr; gap: 36px; padding-top: 62px; }
  .hero-stat { width: 230px; }
  .project-grid { grid-template-columns: 1fr; }
  .job-hero-inner { grid-template-columns: 1fr; padding-block: 54px; }
  .job-preview-stack { display: none; }
  .viewer-feature { grid-template-columns: minmax(0, 1fr) minmax(290px, 39%); }
  .viewer-feature-copy { padding: 32px; }
  .viewer-feature-preview { padding: 22px; }
  .pointcloud-feature { grid-template-columns: minmax(290px, 39%) minmax(0, 1fr); }
  .pointcloud-feature-copy { padding: 32px; }
  .evidence-strip { grid-template-columns: repeat(2, 1fr); }
  .evidence-strip div:nth-child(2) { border-right: 0; }
  .evidence-strip div:nth-child(-n+2) { border-bottom: 1px solid var(--line); }
  .drawing-tools { grid-template-columns: 1fr 1fr 1fr; }
  .search-box { grid-column: 1 / 4; }
  .format-grid { grid-template-columns: 1fr; }
  .photo-grid { grid-template-columns: repeat(3, 1fr); }
  .gallery-hero-inner { align-items: flex-start; flex-direction: column; }
}

@media (max-width: 620px) {
  .shell { width: min(100% - 28px, 1180px); }
  .site-header { height: 67px; padding-inline: 14px; }
  .brand .tiscan-wordmark { font-size: 16px; }
  .signal { display: none; }
  .admin-hero { min-height: 0; padding: 54px 0 62px; }
  .admin-hero h1 { font-size: 51px; }
  .lede { font-size: 16px; }
  .hero-stat { width: 100%; display: grid; grid-template-columns: 70px 1fr; align-items: center; padding: 22px; }
  .hero-stat strong { grid-row: 1 / 3; font-size: 52px; }
  .hero-stat small { margin-top: 4px; }
  .projects { padding-bottom: 70px; }
  .card-visual { height: 210px; }
  .card-body { padding: 22px 20px; }
  .card-stats { grid-template-columns: repeat(3, 1fr); }
  .card-stats div:nth-child(n+4) { display: none; }
  .job-hero, .job-hero-inner { min-height: 350px; }
  .job-hero h1 { font-size: 58px; }
  .job-content { padding-top: 35px; }
  .viewer-feature { min-height: 0; grid-template-columns: 1fr; }
  .viewer-feature-copy { padding: 28px 24px 25px; }
  .viewer-feature-copy h2 { font-size: 31px; }
  .viewer-feature-copy > p:not(.kicker) { font-size: 13px; }
  .viewer-feature-preview { min-height: 190px; padding: 19px 22px; }
  .viewer-feature-window img { height: 142px; }
  .pointcloud-feature { min-height: 0; grid-template-columns: 1fr; }
  .pointcloud-feature-visual { min-height: 205px; grid-row: 2; }
  .pointcloud-feature-copy { padding: 28px 24px 25px; }
  .pointcloud-feature-copy h2 { font-size: 31px; }
  .pointcloud-feature-copy > p:not(.kicker) { font-size: 13px; }
  .evidence-strip div { min-height: 96px; padding: 17px; }
  .evidence-strip strong { font-size: 20px; }
  .content-panel { padding: 20px 14px; border-radius: 6px; }
  .scan-row { grid-template-columns: 41px 1fr auto; gap: 11px; padding: 12px; }
  .scan-row .file-size { display: none; }
  .scan-row .button { grid-column: 2 / 4; }
  .drawing-heading { align-items: flex-start !important; flex-direction: column; }
  .selection-actions { width: 100%; justify-content: space-between; }
  .drawing-tools { grid-template-columns: 1fr 1fr; padding: 12px; }
  .search-box { grid-column: 1 / 3; }
  .drawing-row { grid-template-columns: 19px 38px minmax(0, 1fr) 38px; gap: 9px; padding-inline: 10px; }
  .drawing-row > img, .drawing-row > .file-icon { width: 38px; height: 38px; }
  .drawing-meta { display: none; }
  .drawing-row > a { text-align: right; }
  .panel-actions { align-items: flex-end; flex-direction: column; gap: 9px; }
  .photo-floor-grid { grid-template-columns: 1fr; }
  .photo-collage { height: 190px; }
  .gallery-hero-inner { min-height: 330px; padding-block: 48px; }
  .gallery-hero h1 { font-size: 52px; }
  .gallery-content { padding-top: 36px; }
  .gallery-tools { align-items: flex-start; flex-direction: column; }
  .photo-filters { max-width: none; justify-content: flex-start; }
  .photo-grid { grid-template-columns: repeat(2, 1fr); gap: 5px; }
  .photo-tile > span { left: 9px; right: 9px; bottom: 8px; }
  .photo-tile small { display: none; }
  .photo-lightbox { grid-template-columns: 42px minmax(0, 1fr) 42px; padding: 12px 4px; }
  .photo-lightbox figure { grid-template-rows: minmax(0, 1fr) 70px; }
  .photo-lightbox figcaption { align-items: flex-start; flex-direction: column; gap: 8px; padding: 9px 4px 0; }
  .photo-lightbox .button { min-height: 34px; }
  .lightbox-close { top: 7px; right: 7px; }
  .site-footer { padding: 25px 14px; align-items: flex-start; flex-direction: column; gap: 10px; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; transition: none !important; }
}


/* ==========================================================================
   Appended for client spaces (S351). No rule above this line was edited
   except the contrast and touch-target fixes noted inline.
   ========================================================================== */

/* Focus visibility existed only on the landing page, scoped to .landing, so
   the portal and the admin console fell back to whatever ring the browser
   happened to draw. One rule, every page, keyboard users included. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
.button:focus-visible {
  outline: 3px solid var(--orange);
  outline-offset: 3px;
  border-radius: 3px;
}

/* Header and footer links were 15px and 12px tall — real text, untappable
   targets. Padding only; nothing moves on desktop. */
.header-link { display: inline-flex; align-items: center; min-height: 44px; }
.site-footer a { display: inline-flex; align-items: center; min-height: 44px; }

/* The per-row "View" link (38x12) and the card title link were real, distinct
   actions at under half the 44px minimum. The 16px checkboxes beside them are
   NOT fixed here and do not need to be: the whole .drawing-row label is the
   tap target, so the effective area is the full row. */
.drawing-row > a { min-height: 44px; display: inline-flex; align-items: center; padding: 0 6px; }
.card-title-row h3 a { min-height: 44px; display: inline-flex; align-items: center; }
