.ptech-signoff { height: 150svh; }
.ptech-signoff-stage { height: 85svh; }
.has-depth-wordmark .ptech-signoff-name { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
.has-depth-wordmark .ptech-signoff-brand { top: auto; bottom: 13%; width: 100%; text-align: center; transform: translateX(-50%); }
.has-depth-wordmark .ptech-signoff-tagline { margin: 0; }
#contact.has-contact-sheet { display: block; min-height: 0; padding: 2rem 2rem 6rem; }
#contact.has-contact-sheet > :not(.contact-sheet) { display: none !important; }
.contact-sheet { max-width: 1120px; margin: 0 auto; padding-top: 3rem; border-top: 1px solid #303233; }
.contact-sheet-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 2rem; margin-bottom: 2.5rem; }
.contact-sheet-header h2 { font-size: 36px; line-height: 1.15; letter-spacing: 0; max-width: 22ch; margin: 1rem 0 0; }
.contact-sheet-header > a { font-size: 16px; color: #bdbdbd; text-decoration-thickness: 1px; text-underline-offset: 5px; }
.contact-sheet-form { display: grid; grid-template-columns: 1fr 1fr; gap: 1.75rem 2.5rem; }
.contact-sheet-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; }
.contact-sheet-wide { grid-column: 1 / -1; }
.contact-sheet label { display: flex; flex-direction: column; gap: .65rem; font-size: 14px; font-weight: 400; margin: 0; }
.contact-sheet label > span { color: #999; display: contents; }
.contact-sheet input, .contact-sheet textarea { width: 100%; min-width: 0; border: 1px solid #393b3c; background: #111213; color: #ecece8; padding: .9rem 1rem; border-radius: 4px; font: inherit; font-size: 16px; box-sizing: border-box; }
.contact-sheet input { height: 50px; }
.contact-sheet textarea { min-height: 194px; height: 100%; resize: vertical; }
.contact-sheet input:focus-visible, .contact-sheet textarea:focus-visible, .contact-sheet button:focus-visible { outline: 2px solid #b8b8b8; outline-offset: 3px; }
.contact-sheet-actions { grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between; gap: 1.5rem; padding-top: .25rem; }
.contact-sheet-actions p { margin: 0; color: #a0a0a0; font-size: 14px; }
.contact-sheet-actions button { display: flex; align-items: center; gap: 2rem; padding: .9rem 1.3rem; min-height: 50px; border: 1px solid #ecece8; border-radius: 4px; background: #ecece8; color: #08090a; font: inherit; font-size: 16px; cursor: pointer; }
.contact-sheet-actions button:hover { background: #cececa; }
.contact-sheet-actions button { line-height: 1.3; }
.contact-sheet-actions button:disabled { opacity: .5; cursor: wait; }
.contact-sheet-status, .contact-sheet-fallback { grid-column: 1 / -1; font-size: 15px; margin: 0; }
.contact-sheet-status:empty { display: none; }
.contact-sheet-fallback { color: #ecece8; text-decoration: underline; }
.contact-sheet-trap { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }
@media (max-width: 767px) {
  .ptech-signoff { height: 140svh; }
  .ptech-signoff-stage { height: 76svh; }
  .contact-sheet-header { align-items: flex-start; flex-direction: column; gap: 1.5rem; }
  .contact-sheet-header h2 { font-size: 28px; }
  #contact.has-contact-sheet { padding: 1rem 1.5rem 4rem; }
  .contact-sheet-form { grid-template-columns: 1fr; gap: 1.5rem; }
  .contact-sheet-fields { grid-template-columns: 1fr; }
  .contact-sheet-actions { align-items: stretch; flex-direction: column; }
  .contact-sheet-actions button { justify-content: space-between; }
}
@media (prefers-reduced-motion: reduce) {
  .ptech-signoff { height: 76svh; }
  .ptech-signoff-stage { height: 100%; }
}

/* Send button: wide and one line tall, not a block. */
.contact-sheet-actions button { display: inline-flex; justify-content: center; gap: 0; height: 54px; min-height: 0; min-width: 260px; padding: 0 2.75rem; white-space: nowrap; line-height: 1; letter-spacing: .01em; }
@media (max-width: 767px) { .contact-sheet-actions button { width: 100%; min-width: 0; } }

/* ---- 2026-09-09 pass 4 ---- */
/* Signoff: flat, clean type. The star field forms the P where the wordmark's P lands (ptech-stars.js). */
.ptech-signoff-brand { text-align: center; }
.ptech-signoff-name { font-size: clamp(44px, 7.2vw, 104px); letter-spacing: -.02em; text-align: center; }
.ptech-signoff-tagline { margin: 1.5rem 0 0; font-size: clamp(16px, 1.5vw, 21px); color: #c4c4c0; }
/* Owned by you: the second line lands a beat after the first. */
.ptech-owned-line { margin-top: .6em; color: #c4c4c0; }
/* Spiral replaces the bench photo when WebGL is up. */
.perspective__item-bg { position: relative; }
.ptech-spiral { display: none; position: absolute; inset: 0; width: 100%; height: 100%; }
.has-spiral .ptech-spiral { display: block; }
.has-spiral .perspective__img { opacity: 0; }
/* Who we build for → statement: shorter runway, so the line arrives sooner. */
.horizontal-words_height { height: 190svh; }
@media (max-width: 767px) { .horizontal-words_height { height: 170svh; } }
/* Services → process: no hard seam. */
.process-section::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 42svh; background: linear-gradient(#08090a, #000); pointer-events: none; z-index: 0; }
.process-section > .container { position: relative; z-index: 1; }
.service-marquee { -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); }
/* Process: the stage fills the screen, stage names sit on it, the ball lands dead centre. */
@media (min-width: 768px) {
  .process-content_wrapper { display: block; position: relative; }
  .process-svg_wrapper { width: min(88vw, 74svh); aspect-ratio: 1; margin: 0 auto; }
  .process-list_left, .process-list_right { position: absolute; top: 50%; transform: translateY(-50%); width: 34%; height: auto; min-height: 8em; z-index: 2; }
  .process-list_item.is--left, .process-list_item.is--right { position: relative; }
  .process-list_left { left: 0; }
  .process-list_right { right: 0; }
  #process .process-list__heading, #process .process-list_item h3 { font-size: clamp(40px, 5.2vw, 84px) !important; line-height: .95; letter-spacing: -.02em; }
  .process-list_item.is--right p { font-size: clamp(15px, 1.15vw, 18px); max-width: 24ch; }
}
.clients-section .padding-section { padding-bottom: 4rem; }
.has-spiral .perspective__img { width: min(46vw, 640px); max-width: none; height: auto; }
@media (max-width: 767px) { .has-spiral .perspective__img { width: 86vw; } }
.ptech-spiral { -webkit-mask-image: radial-gradient(ellipse 52% 50% at 50% 50%, #000 55%, transparent 100%); mask-image: radial-gradient(ellipse 52% 50% at 50% 50%, #000 55%, transparent 100%); }

/* ---- 2026-09-09 pass 5 ---- */
/* Signoff letters carry their own reveal clock (ptech-topdown.js sets --l per letter). */
.ptech-signoff-name .signoff-rest { opacity: 1; }
.ptech-signoff-name { perspective: 900px; }
/* Same build-in as the hero mark: each letter arrives from the right, turned,
   and settles. --l is the per-letter clock ptech-topdown.js writes. */
.ptech-signoff-name .signoff-letter { display: inline-block; opacity: var(--l, 0);
  transform: translate3d(calc((1 - var(--l, 0)) * .6em), 0, calc((1 - var(--l, 0)) * -90px)) rotateY(calc((1 - var(--l, 0)) * -38deg));
  transform-origin: 50% 50%; }
.ptech-signoff-name .signoff-letter.signoff-initial { opacity: var(--l, 0); }
/* Hero mark: no box. The canvas owns the whole first screen. */
#hero .hero_inner.ptech-hero-inner { position: static; }
.ptech-hero-mark { position: fixed; inset: 0; width: 100vw; height: 100svh; z-index: 2; pointer-events: none; }
@media (max-width: 767px) { .ptech-hero-mark { height: 100svh; } }
