/* ═══════════════════════════════════════════════════════════════════════════
   urs-2035.css — the shared look-and-feel layer for URS Network.
   Version 1 · created alongside the rebuilt explore.html.

   HOW TO LOAD IT
   --------------
   LAST in <head>, after the page's own <style> block and after core.css, so
   these rules win the cascade at equal specificity:

       <style> ...page styles... </style>
       <link rel="stylesheet" href="core.css?v=8" />
       <link rel="stylesheet" href="urs-2035.css?v=1" />   <!-- last -->

   Bump the ?v= query whenever this file changes.

   TWO TIERS
   ---------
   TIER A — applies to EVERY page that loads this file, including the live app
   pages (map, seek, projects, inbox, profile, coordinator …). Frosted sticky
   nav, refined shadows and radii, better focus rings, smoother buttons. It is
   deliberately restrained: no ambient light, no scroll animation, nothing that
   could fight Leaflet, a dialog, or a dense list.

   TIER B — the full explore.html treatment. OPT IN by putting `urs-rich` on
   <body>, and load urs-2035.js. Adds the ambient light field, film grain,
   scroll-progress bar, glass section cards, the collapsible accordion + sticky
   rail, scroll-reveal, and the screenshot lightbox. Static/marketing pages only.

   Everything here is presentation. No page's markup or behaviour depends on it;
   remove the <link> and every page still works, just plainer.
   ═══════════════════════════════════════════════════════════════════════════ */


/* ════════════════════════════ TOKENS ════════════════════════════ */
:root{
  /* Refined elevation ramp. --shadow is intentionally overridden: every page
   * already uses it, so redefining it here lifts all of them at once. */
  --shadow:       0 14px 40px -26px rgba(80,55,30,.5);
  --u-shadow-sm:  0 6px 18px -12px rgba(80,55,30,.45);
  --u-shadow:     0 14px 40px -26px rgba(80,55,30,.5);
  --u-shadow-lift:0 30px 70px -34px rgba(80,55,30,.62);
  --u-shadow-deep:0 44px 90px -40px rgba(60,40,20,.55);

  --u-ease: cubic-bezier(.22,.61,.36,1);
  --u-fast: .18s;
  --u-med:  .32s;

  --u-ink-soft:#5a4a3a;
  --u-glass:   rgba(255,253,248,.72);
  --u-glass-up:rgba(255,253,248,.86);
}


/* ═══════════════════════════════════════════════════════════════════════════
   TIER A — every page, including the app
   ═══════════════════════════════════════════════════════════════════════════ */

/* ---- frosted sticky top bar -------------------------------------------------
 * Every page builds its bar as .top or .topbar with the same children. Making
 * it translucent + blurred is the single biggest "this is current software"
 * signal, and it costs no layout change. */
.top, .topbar{
  background: var(--u-glass);
  -webkit-backdrop-filter: saturate(1.5) blur(16px);
  backdrop-filter: saturate(1.5) blur(16px);
  border-bottom: 1px solid rgba(231,220,201,.85);
  transition: box-shadow var(--u-med) var(--u-ease), background var(--u-med);
}
/* A hairline shadow appears only once the page has scrolled, so the bar reads
 * as a layer above the content rather than a permanent band. urs-2035.js sets
 * the attribute; without the JS the bar simply stays flat. */
[data-urs-scrolled="true"] .top,
[data-urs-scrolled="true"] .topbar{
  background: var(--u-glass-up);
  box-shadow: 0 10px 30px -22px rgba(80,55,30,.55);
}

/* ---- the canonical public top bar ------------------------------------------
 * Every public page used to build its own header: some put the nav in a <nav>
 * after the logo, some put two links in the right-hand group, some printed
 * "URS Network" in text next to a logo that already says URS NETWORK, and the
 * link sets differed page to page. Moving between them, the menu jumped.
 *
 * This is the one definition. It is scoped to .top.urs-bar so the app tabs —
 * which have their own pill-group nav and their own spacing — are untouched. */
.top.urs-bar{ display:flex; align-items:center; gap:10px; padding:12px 22px; }
.top.urs-bar .logo{ display:flex; align-items:center; gap:10px; flex:0 0 auto; }
.top.urs-bar .logo .wordmark, .top.urs-bar .logo .mark{ height:32px; width:auto; display:block; }
.top.urs-bar .nav{ display:flex; gap:2px; margin-left:16px; flex:1 1 auto; min-width:0; }
.top.urs-bar .nav a{
  font-size:13.5px; font-weight:600; color:var(--taupe,#9a8a78); text-decoration:none;
  padding:8px 12px; border-radius:10px; white-space:nowrap; line-height:1.2;
  transition:color var(--u-fast), background var(--u-fast);
}
.top.urs-bar .nav a:hover{ color:var(--clay,#c75d3a); background:rgba(199,93,58,.08); }
.top.urs-bar .nav a.on{ color:var(--clay-deep,#a84a2c); background:rgba(199,93,58,.10); }
.top.urs-bar .right{ margin-left:auto; display:flex; gap:6px; align-items:center; flex:0 0 auto; }
.top.urs-bar .right a{
  font-size:13.5px; font-weight:600; color:var(--taupe,#9a8a78); text-decoration:none;
  padding:8px 13px; border-radius:10px; white-space:nowrap;
}
.top.urs-bar .right a:hover{ color:var(--clay,#c75d3a); background:rgba(199,93,58,.07); }
.top.urs-bar .right a.cta{ color:#fff; background:var(--clay,#c75d3a); }
.top.urs-bar .right a.cta:hover{ background:var(--clay-deep,#a84a2c); }

/* The bar only breaks into two rows on a phone, at the same 760px boundary
 * core.css uses for the app. Between 761px and full width it stays one row and
 * scrolls, which is the behaviour a narrowed desktop window wants. */
@media(max-width:760px){
  .top.urs-bar{ flex-wrap:wrap; gap:9px; padding:10px 14px; }
  .top.urs-bar .logo{ order:1; }
  .top.urs-bar .right{ order:2; }
  .top.urs-bar .nav{
    order:3; flex:1 1 100%; margin-left:0; flex-wrap:nowrap;
    overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none;
    scroll-snap-type:x proximity;
  }
  .top.urs-bar .nav::-webkit-scrollbar{ display:none; }
  .top.urs-bar .nav a{ flex:0 0 auto; scroll-snap-align:start; padding:8px 11px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   SCROLLING BARS — a long nav slides sideways, it never wraps
   ═══════════════════════════════════════════════════════════════════════════
   A top bar that wraps onto a second row changes the height of the page
   furniture and pushes everything below it down, which reads as broken rather
   than responsive. These bars now overflow horizontally instead: the row keeps
   its height at every width, and the extra destinations are a swipe or a wheel
   away. urs-app.js / urs-2035.js add the affordances (edge fade, wheel-to-pan).

   Applies to navigation and tab bars only. Filter-chip clouds — .catchips,
   .pchips, .pfilters and friends — are meant to wrap: they are a set you scan
   all of at once, not a row you travel along, and hiding half of them behind a
   scroll would cost more than the tidier edge is worth. */

.top .nav, .topbar .nav, .top.urs-bar .nav, .topnav,
nav.tabs, .vtabs, .pfseg{
  flex-wrap: nowrap;
  overflow-x: auto;
  overflow-y: hidden;
  min-width: 0;
  /* No visible track — the fade and the cursor do the telling. */
  scrollbar-width: none;
  -ms-overflow-style: none;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior-x: contain;
}
.top .nav::-webkit-scrollbar, .topbar .nav::-webkit-scrollbar,
.top.urs-bar .nav::-webkit-scrollbar, .topnav::-webkit-scrollbar,
nav.tabs::-webkit-scrollbar, .vtabs::-webkit-scrollbar,
.pfseg::-webkit-scrollbar{ display: none; width: 0; height: 0; }

/* Nothing inside a scrolling bar may shrink or wrap — otherwise the browser
 * squeezes the items instead of letting the row overflow. */
.top .nav > *, .topbar .nav > *, .top.urs-bar .nav > *, .topnav > *,
nav.tabs > *, .vtabs > *, .pfseg > *{ flex: 0 0 auto; }
.top .navgrp, .topbar .navgrp{ flex: 0 0 auto; flex-wrap: nowrap; }
.top .nav a, .topbar .nav a, .top.urs-bar .nav a, .topnav a, nav.tabs a{
  white-space: nowrap;
}

/* The logo and the right-hand actions are anchors: they hold their size while
 * the nav between them takes the squeeze. Scoped above the mobile breakpoints
 * so core.css keeps control of the two-row phone layout it defines. */
@media (min-width: 761px){
  .top .logo, .topbar .logo, .top .right, .topbar .right{ flex: 0 0 auto; }
  .top .nav, .topbar .nav, .top.urs-bar .nav{ flex: 1 1 auto; }
}

/* The edge fade. Painted only while the bar actually overflows — urs-app.js
 * and urs-2035.js set data-ovf to left / right / both — so a bar that fits
 * carries no mask at all and its text renders exactly as it always did. */
[data-ovf="right"]{
  -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 30px), transparent 100%);
          mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 30px), transparent 100%);
}
[data-ovf="left"]{
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 30px, #000 100%);
          mask-image: linear-gradient(90deg, transparent 0, #000 30px, #000 100%);
}
[data-ovf="both"]{
  -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 30px, #000 calc(100% - 30px), transparent 100%);
          mask-image: linear-gradient(90deg, transparent 0, #000 30px, #000 calc(100% - 30px), transparent 100%);
}

/* Nav links get a real hover surface instead of a bare colour swap. */
.top .nav a, .topbar .nav a, .top .right a, .topbar .right a{
  transition: color var(--u-fast), background var(--u-fast), transform var(--u-fast);
}
.top .nav a:hover, .topbar .nav a:hover{
  background: rgba(199,93,58,.08);
}
.top .right a.cta{
  box-shadow: 0 8px 20px -10px rgba(199,93,58,.8);
}
.top .right a.cta:hover{ transform: translateY(-1px); }

/* ---- elevation + radius pass -----------------------------------------------
 * The pages already put content in cards; they were just flat. Softer corners
 * and a deeper, warmer shadow, plus a hover lift on the ones that are
 * genuinely interactive. Nothing here changes size or spacing. */
.card, .fact, .stepc, .domc, .appwin, .panel, .postwrap, .shot,
.close .panel, .sc-item, .pcard, .pcard2, .listing, .tile, .stat, .rules,
.callout, .rrow, .irow, .dcard, .ecard, .gcard, .rcard, .statcard,
.agitem, .trrow, .trbatch, .buy{
  border-radius: 16px;
  box-shadow: var(--u-shadow);
  transition: transform var(--u-med) var(--u-ease),
              box-shadow var(--u-med) var(--u-ease),
              border-color var(--u-med);
}
.card:hover, .fact:hover, .stepc:hover, .domc:hover, .stat:hover{
  transform: translateY(-3px);
  box-shadow: var(--u-shadow-lift);
}
.appwin{ border-radius: 18px; }

/* ---- focus, for people who drive with a keyboard ---- */
a:focus-visible, button:focus-visible,
input:focus-visible, select:focus-visible, textarea:focus-visible,
[tabindex]:focus-visible{
  outline: 2px solid var(--clay, #c75d3a);
  outline-offset: 3px;
  border-radius: 8px;
}

/* ---- buttons: motion only, so core.css keeps its bevel ---- */
.btn, .cbtn, .sc-btn, .deploy, .addbtn, .btnclay{
  transition: transform var(--u-fast) var(--u-ease),
              background var(--u-fast), border-color var(--u-fast),
              box-shadow var(--u-fast);
}
.btn:hover, .cbtn:hover, .sc-btn:hover{ transform: translateY(-1px); }
.btn:active, .cbtn:active, .sc-btn:active{ transform: translateY(0); }

/* ---- headline typography: tighter tracking reads more modern at large sizes ---- */
h1, .hero h1, .sc-h1, .prose h1{ letter-spacing: -.018em; }
h2, .lead h2, .prose h2{ letter-spacing: -.01em; }

/* ---- images inside app windows sit flush with the rounded frame ---- */
.appwin > img:last-child, .appwin > svg:last-child{ border-radius: 0 0 17px 17px; }

/* Leaflet must never inherit any of this. */
.leaflet-container, .leaflet-container *{
  box-shadow: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}
.leaflet-container .leaflet-popup-content-wrapper{ box-shadow: var(--u-shadow) !important; }

/* ═══════════════════════════════════════════════════════════════════════════
   TIER A+ — the live-response layer for the app tabs. Needs urs-app.js.

   Everything below is driven by classes and custom properties that urs-app.js
   adds at runtime, so a page without the script is unaffected and a page with
   it comes alive: surfaces catch the light, freshly rendered rows rise into
   place, controls answer a press, and a card that opens something says so.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ---- pointer sheen ----------------------------------------------------------
 * Deliberately done with background-image and an animatable custom property
 * rather than a ::before overlay. Two reasons, both about not breaking a live
 * app: it adds no positioning context (so nothing absolutely positioned inside
 * a card can be re-anchored), and it cannot collide with a ::before a page
 * already defines on one of these classes.
 *
 * --mx/--my are written by urs-app.js on hover. Until then the highlight is
 * centred and fully transparent, so there is no first-paint flash. Browsers
 * without @property snap instead of fading — same look, no transition. */
@property --urs-sheen{ syntax:"<number>"; inherits:false; initial-value:0; }

.card, .rrow, .irow, .pcard, .pcard2, .postwrap, .panel, .stat, .dcard,
.ecard, .gcard, .rcard, .statcard, .agitem, .trrow, .trbatch, .buy,
.fact, .stepc, .domc, .sc-item, .appwin, .listing, .tile{
  background-image: radial-gradient(
    240px circle at var(--mx,50%) var(--my,50%),
    rgba(255,255,255,calc(.66 * var(--urs-sheen))),
    rgba(220,162,60,calc(.14 * var(--urs-sheen))) 44%,
    transparent 68%);
  background-repeat: no-repeat;
  transition: transform var(--u-med) var(--u-ease),
              box-shadow var(--u-med) var(--u-ease),
              border-color var(--u-med),
              --urs-sheen .35s var(--u-ease);
}
.card:hover, .rrow:hover, .irow:hover, .pcard:hover, .pcard2:hover,
.postwrap:hover, .panel:hover, .stat:hover, .dcard:hover, .ecard:hover,
.gcard:hover, .rcard:hover, .statcard:hover, .agitem:hover, .trrow:hover,
.trbatch:hover, .buy:hover, .fact:hover, .stepc:hover, .domc:hover,
.sc-item:hover, .appwin:hover, .listing:hover, .tile:hover{ --urs-sheen: 1; }

/* Map overlays are not cards: the legend and the frozen-view note sit on the
 * Leaflet surface and must stay put. */
.leaflet-container, .leaflet-container *,
.legend, .frozen-note, .restricted{ background-image: none; }

/* ---- rows that open something ----------------------------------------------
 * urs-app.js adds .urs-openable to any card with exactly one detail-opener in
 * it. The affordance is an inset accent bar rather than a positioned chevron —
 * again, no new stacking or positioning context on live app markup. */
.urs-openable{ cursor: pointer; }
.urs-openable:hover{
  transform: translateY(-2px);
  box-shadow: var(--u-shadow-lift), inset 3px 0 0 var(--clay, #c75d3a);
  border-color: color-mix(in srgb, var(--clay, #c75d3a) 45%, var(--line, #e7dcc9));
}
.urs-openable:active{ transform: translateY(0); transition-duration: .06s; }
.urs-openable:focus-visible{ outline: 2px solid var(--clay, #c75d3a); outline-offset: 2px; }

/* ---- staggered entrance for JS-rendered content ---- */
.urs-anim{
  opacity: 0;
  transform: translateY(14px) scale(.995);
  transition: opacity .55s var(--u-ease), transform .55s var(--u-ease);
  will-change: opacity, transform;
}
.urs-anim.urs-in{ opacity: 1; transform: none; will-change: auto; }

/* ---- press ---- */
.urs-press{ transform: translateY(1px) scale(.985) !important; transition-duration: .07s !important; }

/* ---- the active tab reads as lit, not just tinted ---- */
.nav a.on, .navgrp a.on, .tabs a.on{
  position: relative;
  box-shadow: 0 6px 18px -10px rgba(199,93,58,.75), inset 0 0 0 1px rgba(199,93,58,.16);
}
.nav a.on::after, .navgrp a.on::after, .tabs a.on::after{
  content: "";
  position: absolute; left: 26%; right: 26%; bottom: 1px; height: 2px;
  border-radius: 2px;
  background: linear-gradient(90deg, transparent, var(--clay, #c75d3a), transparent);
}

/* ---- ambient light on the app tabs: dialled down ----
 * The map page opts out entirely with <body data-urs-aura="off">, since a
 * blurred light field behind an opaque basemap is pure GPU cost. */
.urs-aura-app b{ opacity: .3; }
.urs-aura-app b.c{ opacity: .2; }

/* Tier A / A+ honour reduced motion. */
@media (prefers-reduced-motion: reduce){
  .card, .fact, .stepc, .domc, .btn, .cbtn, .sc-btn,
  .top, .topbar, .top .right a.cta{ transition: none !important; }
  .card:hover, .fact:hover, .stepc:hover, .domc:hover,
  .btn:hover, .cbtn:hover, .top .right a.cta:hover,
  .urs-openable:hover{ transform: none !important; }
  .urs-anim{ opacity: 1 !important; transform: none !important; transition: none !important; }
  .urs-press{ transform: none !important; }
  .urs-aura-app{ display: none; }
}


/* ═══════════════════════════════════════════════════════════════════════════
   TIER B — <body class="urs-rich"> + urs-2035.js
   ═══════════════════════════════════════════════════════════════════════════ */

.urs-rich{ background: var(--sand, #faf5ec); }

/* ---- ambient field: slow-drifting warm light behind everything --------------
 * z-index:-1 is load-bearing, not cosmetic. A fixed layer at z-index:0 is a
 * positioned element, and positioned elements paint ABOVE the in-flow content
 * of their parent — so the blurred blobs landed on top of the page and clouded
 * every row of text. At -1 the layer paints after the canvas background and
 * before all content, which is what "ambient" was always supposed to mean.
 *
 * The earlier fix for this raised every child of <body> to z-index:2 with
 * position:relative. That worked, but it also overrode position:sticky on the
 * top bar, so the header scrolled away on every static page. Pushing the light
 * down instead of pushing the content up fixes both at once and touches
 * nothing else. */
.urs-aura{ position:fixed; inset:0; z-index:-1; pointer-events:none; overflow:hidden; }
.urs-aura b{ position:absolute; display:block; border-radius:50%; filter:blur(80px); opacity:.5; }
.urs-aura b.a{ width:56vw; height:56vw; left:-14vw; top:-18vw;
  background:radial-gradient(circle,#f7c9a4,transparent 66%); animation:urs-drift1 34s var(--u-ease) infinite alternate; }
.urs-aura b.b{ width:46vw; height:46vw; right:-12vw; top:8vh;
  background:radial-gradient(circle,#e7d6a8,transparent 66%); animation:urs-drift2 41s var(--u-ease) infinite alternate; }
.urs-aura b.c{ width:52vw; height:52vw; left:22vw; top:52vh; opacity:.34;
  background:radial-gradient(circle,#cfe0c4,transparent 68%); animation:urs-drift3 47s var(--u-ease) infinite alternate; }
@keyframes urs-drift1{ to{ transform:translate3d(9vw,7vh,0) scale(1.15); } }
@keyframes urs-drift2{ to{ transform:translate3d(-8vw,11vh,0) scale(1.1); } }
@keyframes urs-drift3{ to{ transform:translate3d(6vw,-9vh,0) scale(1.18); } }

/* Grain sits with the light, behind the content, for the same reason. */
.urs-grain{ position:fixed; inset:0; z-index:-1; pointer-events:none; opacity:.05; mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/></filter><rect width='160' height='160' filter='url(%23n)'/></svg>"); }

/* The top bar is already position:sticky on every page; it only needs to sit
 * above the content it scrolls over. No position is set here on purpose —
 * setting one would cancel the stickiness. */
.urs-rich .top, .urs-rich .topbar{ z-index:50; }

/* ---- scroll progress ---- */
.urs-prog{ position:fixed; left:0; top:0; height:2px; width:100%; z-index:60; background:transparent; pointer-events:none; }
.urs-prog i{ display:block; height:100%; width:0;
  background:linear-gradient(90deg, var(--gold,#dca23c), var(--clay,#c75d3a), var(--clay-deep,#a84a2c));
  box-shadow:0 0 14px rgba(199,93,58,.55); transition:width .09s linear; }

/* ---- hero polish on the pages that have one ---- */
.urs-rich .hero .eyebrow, .urs-rich .prose > .eyebrow,
.urs-rich .wrap > .eyebrow, .urs-rich .urs-lead > .eyebrow{
  display:inline-flex; align-items:center; gap:9px;
  font-size:11.5px; font-weight:700; letter-spacing:.16em; text-transform:uppercase;
  color:var(--clay-deep,#a84a2c); background:rgba(255,253,248,.8);
  border:1px solid var(--line,#e7dcc9); border-radius:100px; padding:7px 16px;
  margin-bottom:18px; box-shadow:var(--u-shadow-sm);
}
.urs-rich .hero .eyebrow::before, .urs-rich .prose > .eyebrow::before,
.urs-rich .wrap > .eyebrow::before, .urs-rich .urs-lead > .eyebrow::before{
  content:""; width:7px; height:7px; border-radius:50%; background:var(--olive,#6f8b4f);
  box-shadow:0 0 0 0 rgba(111,139,79,.6); animation:urs-pulse 2.4s infinite;
}
@keyframes urs-pulse{ 70%{ box-shadow:0 0 0 9px rgba(111,139,79,0);} 100%{ box-shadow:0 0 0 0 rgba(111,139,79,0);} }

.urs-rich .hero img.emblem, .urs-rich .hero img.emblem_v2{
  filter:drop-shadow(0 16px 30px rgba(120,80,45,.28)); animation:urs-float 7s var(--u-ease) infinite alternate;
}
@keyframes urs-float{ to{ transform:translateY(-9px); } }

/* The signature gradient headline word. Wrap any run of words in
 * <span class="urs-grad">…</span> to use it. */
.urs-grad{
  background:linear-gradient(100deg, var(--clay,#c75d3a) 8%, var(--gold,#dca23c) 52%, var(--olive,#6f8b4f) 96%);
  -webkit-background-clip:text; background-clip:text; color:transparent;
}

.urs-rich .btn.primary{ box-shadow:0 16px 34px -18px rgba(199,93,58,.95); }
.urs-rich .btn.primary:hover{ transform:translateY(-2px); box-shadow:0 22px 44px -18px rgba(199,93,58,1); }
.urs-rich .btn.ghost:hover{ transform:translateY(-2px); }


/* ════════════ the accordion: sticky rail + collapsible sections ════════════
 * urs-2035.js builds this out of the page's existing <h2> headings. The markup
 * it produces is the same shape explore.html uses, so the two pages stay
 * visually identical without sharing any content. */

/* Once converted, the page's own prose container is just a passthrough — the
 * .urs-lead and .urs-shell inside it own the width and rhythm now. */
.urs-converted{ max-width:none !important; padding:0 !important; margin:0 !important; }

.urs-shell{ max-width:1220px; margin:8px auto 0; padding:0 22px 40px; }
.urs-grid{ display:grid; grid-template-columns:236px 1fr; gap:44px; align-items:start; }

.urs-rail{ position:sticky; top:82px; align-self:start; }
.urs-rail h4{ font-size:11px; font-weight:700; letter-spacing:.12em; text-transform:uppercase;
  color:var(--taupe,#9a8a78); margin:0 0 12px; }
.urs-rail ol{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:1px; }
.urs-rail a{ display:flex; gap:10px; align-items:baseline; font-size:13.5px; font-weight:600;
  color:var(--bark,#2f2620); padding:8px 11px; border-radius:10px; line-height:1.3;
  text-decoration:none; position:relative;
  transition:background var(--u-fast), color var(--u-fast), transform var(--u-fast); }
.urs-rail a .n{ color:var(--taupe,#9a8a78); font-variant-numeric:tabular-nums; font-size:11.5px; min-width:16px; }
.urs-rail a:hover{ background:rgba(199,93,58,.08); color:var(--clay-deep,#a84a2c); transform:translateX(2px); }
.urs-rail a.on{ background:rgba(199,93,58,.1); color:var(--clay-deep,#a84a2c); }
.urs-rail a.on::before{ content:""; position:absolute; left:-9px; top:9px; bottom:9px; width:3px; border-radius:3px;
  background:linear-gradient(var(--gold,#dca23c), var(--clay,#c75d3a)); }
.urs-rail .urs-railfoot{ margin-top:18px; padding-top:16px; border-top:1px solid var(--line,#e7dcc9); }
.urs-rail .urs-railfoot .btn{ width:100%; justify-content:center; text-align:center; display:block; font-size:13.5px; padding:11px 14px; }
.urs-toggleall{ margin-top:10px; width:100%; background:none; border:1px solid var(--line,#e7dcc9);
  border-radius:10px; padding:8px 10px; font-family:inherit; font-size:12.5px; font-weight:600;
  color:var(--taupe,#9a8a78); cursor:pointer; transition:border-color var(--u-fast), color var(--u-fast); }
.urs-toggleall:hover{ border-color:var(--clay,#c75d3a); color:var(--clay,#c75d3a); }

.urs-secs{ display:flex; flex-direction:column; gap:16px; min-width:0; }

.urs-sec{ scroll-margin-top:82px; background:var(--u-glass);
  -webkit-backdrop-filter:blur(14px); backdrop-filter:blur(14px);
  border:1px solid var(--line,#e7dcc9); border-radius:20px; box-shadow:var(--u-shadow);
  overflow:hidden; transition:box-shadow var(--u-med) var(--u-ease), border-color var(--u-med), background var(--u-med); }
.urs-sec:hover{ border-color:#dccdb4; }
.urs-sec[data-open="true"]{ background:var(--u-glass-up); box-shadow:var(--u-shadow-lift); }

/* The section heading is still a real <h2> (so the outline survives) with the
 * toggle button inside it — the WAI-ARIA accordion pattern. Strip the page's
 * own h2 styling from the wrapper; the button carries the look now. */
.urs-sec-h{ margin:0 !important; padding:0 !important; border:none !important;
  font:inherit !important; color:inherit !important; background:none !important; }
.urs-sec-h::before, .urs-sec-h::after{ content:none !important; }

.urs-sec-head{ display:flex; align-items:center; gap:15px; width:100%; background:none; border:none;
  padding:22px 24px; text-align:left; cursor:pointer; position:relative; font-family:inherit; color:inherit; }
.urs-sec-head::after{ content:""; position:absolute; left:24px; right:24px; bottom:0; height:1px;
  background:var(--line,#e7dcc9); opacity:0; transition:opacity var(--u-med); }
.urs-sec[data-open="true"] .urs-sec-head::after{ opacity:1; }

.urs-badge{ width:42px; height:42px; flex:none; border-radius:13px; display:grid; place-items:center;
  font-family:var(--fdisplay,'Fraunces',Georgia,serif); font-weight:600; font-size:15px; color:#fff;
  background:linear-gradient(140deg, var(--clay,#c75d3a), var(--clay-deep,#a84a2c));
  box-shadow:0 10px 22px -12px rgba(168,74,44,.95); }
.urs-sec:nth-of-type(3n+2) .urs-badge{ background:linear-gradient(140deg, var(--gold,#dca23c), #c2872b);
  box-shadow:0 10px 22px -12px rgba(194,135,43,.95); }
.urs-sec:nth-of-type(3n+3) .urs-badge{ background:linear-gradient(140deg, var(--olive,#6f8b4f), var(--olive-deep,#56713c));
  box-shadow:0 10px 22px -12px rgba(86,113,60,.95); }

.urs-sec-title{ flex:1; min-width:0; display:block;
  font-family:var(--fdisplay,'Fraunces',Georgia,serif); font-weight:600;
  font-size:clamp(19px,2.2vw,25px); line-height:1.16; letter-spacing:-.01em; color:var(--bark,#2f2620); }
.urs-caret{ width:22px; height:22px; flex:none; color:var(--taupe,#9a8a78);
  transition:transform var(--u-med) var(--u-ease), color var(--u-fast); }
.urs-sec[data-open="false"] .urs-caret{ transform:rotate(-90deg); }
.urs-sec-head:hover .urs-caret{ color:var(--clay,#c75d3a); }

/* grid-template-rows 0fr→1fr animates height without a hard-coded max-height */
.urs-sec-body{ display:grid; grid-template-rows:0fr; transition:grid-template-rows .42s var(--u-ease); }
.urs-sec[data-open="true"] .urs-sec-body{ grid-template-rows:1fr; }
.urs-sec-inner{ overflow:hidden; min-height:0; }
.urs-sec-pad{ padding:4px 24px 26px; }

/* The page's own prose, now inside a section card. Left as the page styled it,
 * only re-spaced so the first element doesn't collide with the header rule. */
.urs-sec-pad > :first-child{ margin-top:0; }
.urs-sec-pad > :last-child{ margin-bottom:0; }

/* ---- the lead block above the accordion --------------------------------------
 * Centred, so every page in the estate opens the way explore.html does: the
 * eyebrow pill, one large headline, one paragraph of lede, then the numbered
 * sections. Previously this was left-aligned and full width, which is why
 * moving between Explore and Mission felt like moving between two sites. */
.urs-lead{ max-width:880px; margin:0 auto; padding:64px 22px 30px; text-align:center; }
.urs-lead h1{ font-family:var(--fdisplay,'Fraunces',Georgia,serif); font-weight:600;
  font-size:clamp(34px,5.6vw,56px); line-height:1.04; margin:0 0 18px; letter-spacing:-.018em; }
.urs-lead > p{ font-size:clamp(16px,2.1vw,19px); line-height:1.62; color:var(--u-ink-soft);
  max-width:62ch; margin-left:auto; margin-right:auto; }
/* The first paragraph is the lede and reads well centred. Anything after it is
 * body copy — a wall of centred prose is hard to track, so it goes flush left
 * inside the same centred column. */
.urs-lead > p ~ p{ text-align:left; }
.urs-lead .updated{ font-size:13px; color:var(--taupe,#9a8a78); }
.urs-lead .quote{ text-align:center; max-width:60ch; margin-left:auto; margin-right:auto; }
/* Buttons and link rows in a lead centre with it. */
.urs-lead .actions, .urs-lead .btnrow{ justify-content:center; }
.urs-lead > div:has(> .btn){ display:flex; gap:12px; justify-content:center; flex-wrap:wrap; }

/* ---- scroll reveal ---- */
.urs-rv{ opacity:0; transform:translateY(20px);
  transition:opacity .7s var(--u-ease), transform .7s var(--u-ease); }
.urs-rv.in{ opacity:1; transform:none; }

/* ---- click-to-enlarge frames ---- */
.urs-zoom{ cursor:zoom-in; position:relative; }
.urs-zoom::after{ content:""; position:absolute; inset:0; border-radius:inherit; pointer-events:none;
  background:linear-gradient(115deg, rgba(255,255,255,.34), transparent 34%, transparent 66%, rgba(199,93,58,.1));
  opacity:0; transition:opacity var(--u-med); }
.urs-zoom:hover, .urs-zoom:focus-visible{ transform:translateY(-5px) scale(1.008);
  box-shadow:var(--u-shadow-deep); border-color:#e0c9ae; outline:none; }
.urs-zoom:hover::after, .urs-zoom:focus-visible::after{ opacity:1; }
.urs-zoom:focus-visible{ box-shadow:var(--u-shadow-deep), 0 0 0 3px rgba(199,93,58,.4); }
.urs-zoomtag{ position:absolute; right:12px; bottom:12px; display:inline-flex; align-items:center; gap:7px;
  font-size:12px; font-weight:600; color:#fff; background:rgba(47,38,32,.74);
  -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px);
  border-radius:100px; padding:7px 13px; opacity:0; transform:translateY(6px);
  transition:opacity var(--u-med), transform var(--u-med); pointer-events:none; }
.urs-zoom:hover .urs-zoomtag, .urs-zoom:focus-visible .urs-zoomtag{ opacity:1; transform:none; }

/* ---- the lightbox ---- */
.urs-lb{ position:fixed; inset:0; z-index:200; display:none; place-items:center; padding:clamp(12px,3vw,40px); }
.urs-lb.on{ display:grid; }
.urs-lb-scrim{ position:absolute; inset:0; background:rgba(38,30,24,.86);
  -webkit-backdrop-filter:blur(14px); backdrop-filter:blur(14px); animation:urs-fadein .26s var(--u-ease); }
@keyframes urs-fadein{ from{ opacity:0; } }
.urs-lb-stage{ position:relative; z-index:1; max-width:min(1500px,96vw); width:100%; animation:urs-pop .32s var(--u-ease); }
@keyframes urs-pop{ from{ opacity:0; transform:scale(.965) translateY(12px); } }
.urs-lb-frame{ border-radius:14px; overflow:hidden; border:1px solid rgba(255,255,255,.14);
  box-shadow:0 50px 110px -34px rgba(0,0,0,.85); background:#1d1712; cursor:zoom-in; }
.urs-lb-frame img{ display:block; width:100%; height:auto; max-height:78vh; object-fit:contain; background:#1d1712;
  transition:transform var(--u-med) var(--u-ease); transform-origin:var(--ox,50%) var(--oy,50%); }
.urs-lb-frame.zoomed{ cursor:zoom-out; }
.urs-lb-frame.zoomed img{ transform:scale(2.1); }
.urs-lb-meta{ display:flex; align-items:flex-start; gap:16px; margin-top:14px; color:#f4ece1; }
.urs-lb-meta p{ margin:0; font-size:13.5px; line-height:1.55; color:#cfc0ae; max-width:82ch; flex:1; }
.urs-lb-meta .idx{ font-size:12px; font-weight:600; color:#a89684; white-space:nowrap; font-variant-numeric:tabular-nums; }
.urs-lb-btn{ position:absolute; top:50%; transform:translateY(-50%); width:46px; height:46px; border-radius:50%;
  background:rgba(255,255,255,.1); border:1px solid rgba(255,255,255,.2); color:#fff; display:grid; place-items:center;
  -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px); cursor:pointer; z-index:2;
  transition:background var(--u-fast), transform var(--u-fast); }
.urs-lb-btn:hover{ background:rgba(255,255,255,.22); transform:translateY(-50%) scale(1.07); }
.urs-lb-prev{ left:10px; } .urs-lb-next{ right:10px; }
@media(min-width:1660px){ .urs-lb-prev{ left:-64px; } .urs-lb-next{ right:-64px; } }
.urs-lb-close{ position:absolute; top:16px; right:18px; z-index:3; width:42px; height:42px; border-radius:50%;
  background:rgba(255,255,255,.1); border:1px solid rgba(255,255,255,.2); color:#fff; display:grid; place-items:center;
  -webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px); font-size:19px; line-height:1; cursor:pointer;
  transition:background var(--u-fast), transform var(--u-fast); }
.urs-lb-close:hover{ background:rgba(255,255,255,.22); transform:rotate(90deg); }
.urs-lb-hint{ text-align:center; margin-top:12px; font-size:11.5px; color:#9c8b79; letter-spacing:.04em; }
body.urs-lb-open{ overflow:hidden; }

/* ---- closing CTA panel gets the warm halo explore.html uses ---- */
.urs-rich .close .panel{ position:relative; overflow:hidden; border-radius:24px;
  background:rgba(255,253,248,.82); -webkit-backdrop-filter:blur(14px); backdrop-filter:blur(14px);
  box-shadow:var(--u-shadow-lift); }
.urs-rich .close .panel::before{ content:""; position:absolute; inset:-40% -10% auto -10%; height:200px;
  background:radial-gradient(60% 100% at 50% 0%, rgba(220,162,60,.28), transparent 70%); pointer-events:none; }
.urs-rich .close .panel > *{ position:relative; }


/* ════════════════════════════ RESPONSIVE ════════════════════════════ */
@media(max-width:900px){
  .urs-grid{ grid-template-columns:1fr; gap:14px; }
  .urs-rail{ position:static; background:rgba(255,253,248,.8); border:1px solid var(--line,#e7dcc9);
    border-radius:16px; padding:14px 16px; box-shadow:var(--u-shadow); }
  .urs-rail ol{ flex-direction:row; flex-wrap:wrap; gap:6px; }
  .urs-rail a{ padding:7px 11px; background:var(--sand,#faf5ec); }
  .urs-rail a.on::before{ display:none; }
  .urs-rail .urs-railfoot{ display:none; }
}
/* ---- phone top bar on the static pages -------------------------------------
 * The app pages get this from core.css; the static/marketing pages never
 * loaded it, so their bar used to squeeze the wordmark into the actions and
 * hide the nav outright below 860px. Same two-row treatment here, scoped to
 * .urs-rich so core.css keeps full control everywhere else. */
@media(max-width:760px){
  .urs-rich .top{ flex-wrap:wrap; gap:9px; padding:10px 14px; }
  .urs-rich .top .logo{ order:1; flex:1 1 auto; min-width:0; }
  .urs-rich .top .logo b{ font-size:15px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .urs-rich .top .right{ order:2; margin-left:auto; gap:4px; }
  .urs-rich .top .right a{ white-space:nowrap; padding:8px 11px; font-size:13px; }
  /* the nav comes back as its own swipeable row instead of vanishing */
  .urs-rich .top .nav{ display:flex; order:3; flex:1 1 100%; flex-wrap:nowrap; margin-left:0; gap:2px;
    overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none; scroll-snap-type:x proximity; }
  .urs-rich .top .nav::-webkit-scrollbar{ display:none; }
  .urs-rich .top .nav a{ flex:0 0 auto; white-space:nowrap; padding:8px 11px; scroll-snap-align:start; }
}

@media(max-width:640px){
  .urs-lead{ padding:36px 18px 18px; }
  .urs-shell{ padding:0 18px 30px; }
  .urs-sec-head{ padding:17px 16px; gap:12px; }
  .urs-sec-pad{ padding:4px 16px 22px; }
  .urs-badge{ width:36px; height:36px; border-radius:11px; font-size:13px; }
  .urs-lb-btn{ width:40px; height:40px; } .urs-lb-prev{ left:2px; } .urs-lb-next{ right:2px; }
  .urs-lb-meta{ flex-direction:column; gap:6px; }
}

@media(prefers-reduced-motion:reduce){
  .urs-aura b{ animation:none !important; }
  .urs-rich .hero img.emblem, .urs-rich .hero img.emblem_v2{ animation:none !important; }
  .urs-rich .prose > .eyebrow::before, .urs-rich .wrap > .eyebrow::before,
  .urs-rich .urs-lead > .eyebrow::before,
  .urs-rich .hero .eyebrow::before{ animation:none !important; }
  .urs-rv{ opacity:1 !important; transform:none !important; transition:none !important; }
  .urs-sec-body{ transition:none !important; }
  .urs-caret{ transition:none !important; }
  .urs-lb-scrim, .urs-lb-stage{ animation:none !important; }
}

/* Printing a policy page should give clean paper, not glass. */
@media print{
  .urs-aura, .urs-grain, .urs-prog, .urs-rail, .urs-lb, .urs-caret, .urs-toggleall{ display:none !important; }
  .urs-grid{ display:block !important; }
  .urs-sec{ background:none !important; box-shadow:none !important; border:none !important;
    border-top:1px solid #ccc !important; border-radius:0 !important; page-break-inside:avoid; }
  .urs-sec-body{ display:block !important; }
  .urs-sec-inner{ overflow:visible !important; }
  .top, .topbar{ position:static !important; backdrop-filter:none !important; }
}
