/* ------------------------------------------------------------------
   landing.css — styles for /grouppage only, the business-card QR page.

   Kept out of site.css deliberately: that file already exists on the server,
   and cPanel's Extract skips existing files by default, so a change to it can
   be silently dropped during a zip deploy. Everything /grouppage needs that
   site.css does not already provide lives here, in a file that is new.
   ------------------------------------------------------------------ */

/* ------------------------------------------------------------------
   /grouppage — the landing page behind the business-card QR code.
   Standalone: no site nav, a single centred column, big tap targets.
   Assume a phone held at arm's length, not a desktop browser.
   ------------------------------------------------------------------ */

.landing {
    min-height: 100vh;
    display: flex; flex-direction: column;
    padding: clamp(2.5rem, 8vw, 4.5rem) var(--gutter) 2.5rem;
    position: relative; overflow: hidden;
}
.landing::before {
    content: ""; position: absolute; inset: 0; pointer-events: none;
    background:
        radial-gradient(90% 55% at 50% 0%, rgba(74,163,220,.16), transparent 62%),
        radial-gradient(70% 45% at 50% 100%, rgba(201,160,74,.12), transparent 60%);
}
.landing > * { position: relative; z-index: 1; }

.landing__inner { width: min(560px, 100%); margin-inline: auto; }

/* Held at 210px deliberately. The only logo artwork that exists is a 400x120
   PNG (no vector original survives anywhere in the estate), and logo.svg is a
   trace of it. At 210px CSS a 2x screen renders 420 device px -- essentially
   1:1 with the source -- so the trace looks clean. At 300px it renders 600
   device px, 1.5x the source, and the source's own soft, slightly irregular
   edges start to show. Re-tracing at higher precision makes this WORSE, not
   better: it reproduces the PNG's antialiasing jitter faithfully instead of
   smoothing it. Only genuine vector artwork would allow a larger logo. */
.landing__logo {
    display: block;
    width: 210px;
    margin: 0 auto clamp(2rem, 6vw, 3rem);
}

.landing__intro { text-align: center; }
.landing__intro h1 {
    font-size: clamp(1.6rem, 1.3rem + 1.6vw, 2.25rem);
    margin-bottom: 0.75rem;
}
.landing__intro p { margin-inline: auto; color: var(--fg-muted); }

.landing__rule {
    border: 0; height: 1px; background: var(--rule-strong);
    margin: clamp(2rem, 6vw, 2.75rem) 0;
}

.landing h2 {
    font: 600 0.72rem/1 var(--sans);
    letter-spacing: 0.16em; text-transform: uppercase;
    color: var(--gold); margin-bottom: 1.5rem;
}

/* activities */
.acts { list-style: none; margin: 0; padding: 0; display: grid; gap: 0; }
.acts li { border-top: 1px solid var(--rule); padding: 0.95rem 0 0.95rem 1.5rem; position: relative; }
.acts li:last-child { border-bottom: 1px solid var(--rule); }
.acts li::before {
    content: ""; position: absolute; left: 0; top: 1.45em;
    width: 8px; height: 1px; background: var(--gold);
}
.acts strong { display: block; font-family: var(--serif); font-weight: 400; font-size: 1.15rem; }
.acts span { display: block; color: var(--fg-muted); font-size: 0.9rem; margin-top: 0.2rem; }

/* ---------- the 2x2 mark grid ---------- */
/* Reveal is CSS-only, on :hover AND :focus. The page carries no JavaScript and
   this keeps it that way: a mouse gets hover, a touch gets focus from the tap,
   and tapping elsewhere blurs it away. The descriptor covers the card rather
   than floating beside it — a floating tooltip would clip at the grid edge and
   would have nowhere to go on a phone. */
.marks {
    list-style: none; margin: 0; padding: 0;
    display: grid; grid-template-columns: 1fr 1fr;
    gap: clamp(0.75rem, 2.5vw, 1.1rem);
}
.mark {
    position: relative;
    list-style: none;
    width: 100%; min-height: clamp(175px, 46vw, 220px);
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 0.75rem;
    padding: 1.1rem 0.9rem;
    background: var(--ink-card);
    border: 1px solid var(--rule);
    border-radius: 0;
    cursor: pointer;
    font: inherit; color: inherit; text-align: center;
    -webkit-tap-highlight-color: transparent;
    transition: border-color .18s ease;
}
.mark:hover, .mark:focus-within { border-color: var(--gold); }
/* Display width is capped at 150px: the assets are 320px square, so 150px
   still has 2x device pixels behind it. Pushing past 160 would start
   upscaling pearl-river, whose master is only 400px. */
.mark img { width: clamp(100px, 27vw, 150px); height: auto; }
.mark__name {
    font: 600 0.68rem/1.3 var(--sans);
    letter-spacing: 0.1em; text-transform: uppercase;
    color: var(--fg-muted);
}
.mark__pop {
    position: absolute; inset: 0;
    display: flex; flex-direction: column;
    align-items: center; justify-content: center; gap: 0.9rem;
    padding: clamp(0.8rem, 3vw, 1.25rem);
    background: var(--ink-card);
    color: var(--fg);
    font-size: clamp(0.76rem, 2.6vw, 0.875rem); line-height: 1.5;
    opacity: 0; visibility: hidden;
    transition: opacity .18s ease, visibility .18s;
}
.mark:hover .mark__pop,
.mark:focus .mark__pop,
.mark:focus-within .mark__pop { opacity: 1; visibility: visible; }

.mark__more {
    flex: none;
    display: inline-block;
    padding: 0.45rem 1.2rem;
    border: 1px solid var(--gold);
    color: var(--gold);
    font: 600 0.68rem/1 var(--sans);
    letter-spacing: 0.1em; text-transform: uppercase;
    text-decoration: none;
    transition: background-color .18s ease, color .18s ease;
}
.mark__more:hover,
.mark__more:focus-visible { background: var(--gold); color: var(--ink); }

/* offices */
.landing__offices { display: grid; gap: 1.5rem; }
@media (min-width: 620px) { .landing__offices { grid-template-columns: 1fr 1fr; } }
.landing__offices h3 { font-size: 1.1rem; margin: 0 0 0.15rem; }
.landing__offices .role {
    font: 600 0.65rem/1.3 var(--sans); letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--gold); margin-bottom: 0.5rem;
}
.landing__offices address { font-style: normal; color: var(--fg-muted); font-size: 0.9rem; }

/* tap targets — a phone is the expected device */
.landing__actions { display: grid; gap: 0.75rem; }
.tap {
    display: flex; align-items: center; gap: 0.9rem;
    padding: 1rem 1.25rem;
    border: 1px solid var(--rule-strong); background: var(--ink-card);
    color: var(--fg); text-decoration: none;
    transition: border-color .18s ease, background .18s ease;
}
.tap:hover, .tap:focus-visible { border-color: var(--gold); color: var(--fg); }
.tap__label {
    font: 600 0.65rem/1 var(--sans); letter-spacing: 0.14em; text-transform: uppercase;
    color: var(--gold-bright); display: block; margin-bottom: 0.3rem;
}
.tap__value { font-size: 1rem; word-break: break-word; }

.landing__foot {
    margin-top: auto; padding-top: clamp(2rem, 6vw, 3rem);
    text-align: center; color: var(--fg-dim); font-size: 0.8rem;
}
/* The global `p` rule caps paragraphs at --measure, which inside this
   full-width footer leaves the text centred within a narrower left-hung box.
   Let these two span the footer so text-align:center actually centres them. */
.landing__foot p { max-width: none; margin-inline: auto; }
.landing__foot a { color: var(--fg-muted); text-decoration: none; }
.landing__foot a:hover { color: var(--gold-bright); }
.landing__foot .sep { opacity: .45; padding: 0 .5rem; }

/* ---------- the people grid ---------- */
/* Same reveal mechanics as .mark: CSS-only, :hover for a mouse and :focus for
   a tap, the summary covering the card rather than floating beside it. Two
   columns by up to five rows. Two columns at every width, like the companies
   grid above it -- the page is a narrow centred column, so a third would make
   the faces too small to read. */
.people {
    list-style: none; margin: 0; padding: 0;
    display: grid; grid-template-columns: 1fr 1fr;
    gap: clamp(0.75rem, 2.5vw, 1.1rem);
}
.person {
    position: relative;
    list-style: none;
    width: 100%;
    display: flex; flex-direction: column; align-items: center;
    gap: 0.6rem;
    padding: 1.1rem 0.9rem 1.2rem;
    background: var(--ink-card);
    border: 1px solid var(--rule);
    cursor: pointer;
    text-align: center;
    -webkit-tap-highlight-color: transparent;
    transition: border-color .18s ease;
}
.person:hover, .person:focus-within { border-color: var(--gold); }
.person picture { display: block; width: clamp(96px, 26vw, 132px); }
.person img {
    display: block; width: 100%; height: auto;
    border-radius: 50%;
    /* The source photographs carry a warm house grade that sits hot against
       this navy. A touch of desaturation settles them without flattening the
       faces or making them look like a different set from OCF's own site. */
    filter: saturate(0.82);
}
.person__name {
    font: 600 0.84rem/1.25 var(--sans);
    color: var(--fg);
}
.person__role {
    font: 400 0.68rem/1.35 var(--sans);
    letter-spacing: 0.02em;
    color: var(--fg-dim);
}
.person__pop {
    position: absolute; inset: 0;
    display: flex; align-items: center; justify-content: center;
    padding: clamp(0.8rem, 3vw, 1.1rem);
    background: var(--ink-card);
    color: var(--fg);
    font-size: clamp(0.72rem, 2.4vw, 0.83rem); line-height: 1.45;
    opacity: 0; visibility: hidden;
    transition: opacity .18s ease, visibility .18s;
}
.person:hover .person__pop,
.person:focus .person__pop,
.person:focus-within .person__pop { opacity: 1; visibility: visible; }
