/* Terra Perpetua — service diagrams. All selectors stay within the owned component. */
.tp-service-graphic{--tp-navy:#102D46;--tp-blue:#2766A4;--tp-mist:#DCEAF3;--tp-chalk:#F6F3ED;--tp-sand:#C4AE8F;--tp-slate:#516674;--tp-cycle:10s;position:relative;isolation:isolate;width:100%;max-width:100%;min-width:0;margin:0;color:var(--tp-mist);font-family:Manrope,Arial,sans-serif;line-height:1.5;overflow:hidden;border:1px solid #DCEAF32b;border-radius:12px;background:linear-gradient(140deg,#2766A411,transparent 55%),var(--tp-navy);padding:23px 24px 22px;box-sizing:border-box}
.inner-art:has(.tp-service-graphic){min-height:0;padding:0;border:0;background:transparent;overflow:visible}
.tp-service-graphic *{box-sizing:border-box}
.tp-graphic-heading{display:flex;align-items:center;justify-content:space-between;gap:15px;min-width:0;padding-bottom:14px;border-bottom:1px solid #DCEAF31f;font-size:10px;letter-spacing:.045em;line-height:1.65}
.tp-graphic-kicker{color:var(--tp-sand);text-transform:uppercase;font-weight:550;font-size:10px;letter-spacing:.09em}
.tp-graphic-status{display:flex;gap:8px;align-items:center;flex-shrink:0;color:var(--tp-mist)}
.tp-graphic-status i{display:block;width:5px;height:5px;border-radius:50%;background:var(--tp-sand)}
.tp-service-svg{display:block;width:100%;max-width:100%;height:auto;overflow:visible;margin:0 auto;aspect-ratio:56/43}
.tp-service-svg path,.tp-service-svg polyline{stroke-linecap:round;stroke-linejoin:round}
.tp-service-svg text{font-family:SourceSans3,'Source Sans 3',Arial,sans-serif;letter-spacing:.055em;fill:var(--tp-mist);font-size:12px;font-weight:500}
.tp-service-graphic figcaption{border-top:1px solid #DCEAF326;padding-top:19px;min-width:0}
.tp-graphic-title{display:block;font-family:Manrope,Arial,sans-serif;font-size:clamp(16px,1.45vw,22px);font-weight:500;line-height:1.45;letter-spacing:-.035em;color:var(--tp-chalk);text-wrap:balance}
.tp-graphic-steps{display:flex;align-items:center;flex-wrap:wrap;gap:8px 0;list-style:none;margin:15px 0 13px;padding:0;color:var(--tp-mist);font-size:12px;line-height:1.55}
.tp-graphic-steps li{display:inline-flex;align-items:center;min-width:0;overflow-wrap:anywhere}
.tp-graphic-steps li+li::before{content:'↗';font-family:Arial,sans-serif;color:var(--tp-sand);font-size:13px;line-height:1;margin:0 12px}
.tp-graphic-caption{display:block;font-size:10px;line-height:1.75;color:#DCEAF3b5;max-width:52ch}
.tp-graphic-sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.tp-diagram-grid{fill:none;stroke:var(--tp-mist);stroke-width:.7;opacity:.06}
.tp-registration{fill:none;stroke:var(--tp-mist);stroke-width:.8;opacity:.24}
.tp-diagram-annotation path{fill:none;stroke:var(--tp-sand);stroke-width:.7;opacity:.55}
.tp-diagram-annotation text{font-size:11px;fill:var(--tp-sand);letter-spacing:.09em}
.tp-route-track{fill:none;stroke:var(--tp-blue);stroke-opacity:.55;stroke-width:1}
.tp-route-particle{fill:none;stroke:var(--tp-mist);stroke-width:2;stroke-dasharray:7 93;stroke-dashoffset:0;animation:tp-route-travel 7s linear infinite}
.tp-land-assembly{transform-origin:50% 57%;animation:tp-land-float var(--tp-cycle) ease-in-out infinite}
.tp-parcel{fill:#51667460;stroke:var(--tp-mist);stroke-opacity:.25;stroke-width:.85}
.tp-parcel-selected{fill:var(--tp-blue);fill-opacity:.82;stroke:var(--tp-mist);stroke-width:1.3;transform-box:fill-box;transform-origin:center;animation:tp-parcel-lift var(--tp-cycle) ease-in-out infinite;animation-delay:calc(var(--tp-order,0)*.4s)}
.tp-land-connection{fill:none;stroke:var(--tp-sand);stroke-width:2;stroke-dasharray:100;stroke-dashoffset:0;animation:tp-trace var(--tp-cycle) ease-in-out infinite}
.tp-land-marker{transform-box:fill-box;transform-origin:center bottom;animation:tp-marker-rise var(--tp-cycle) ease-in-out infinite;animation-delay:calc(var(--tp-order,0)*.7s)}
.tp-land-marker path{stroke:var(--tp-sand);stroke-width:1.3;fill:none}
.tp-land-marker circle:first-of-type{fill:var(--tp-sand);stroke:var(--tp-chalk);stroke-width:1}
.tp-land-orbit{transform-origin:294px 216px;animation:tp-orbit-drift 16s ease-in-out infinite}
.tp-input-labels rect{fill:#102D46;stroke:#DCEAF340;stroke-width:.8}
.tp-input-labels text{text-anchor:middle;font-size:10px;fill:var(--tp-sand)}
.tp-model-connectors{stroke:#DCEAF36b;stroke-width:.9;fill:none;animation:tp-connection-pulse 5s ease-in-out infinite}
.tp-model-frame{stroke:#DCEAF347;stroke-width:.8}
.tp-model-guides{stroke:#DCEAF314;stroke-width:.75;fill:none}
.tp-model-area{opacity:.68;animation:tp-area-breathe var(--tp-cycle) ease-in-out infinite}
.tp-model-ghost{stroke:#DCEAF324;stroke-width:1;fill:none}
.tp-model-line{stroke:var(--tp-mist);stroke-width:2.7;fill:none;stroke-dasharray:100;stroke-dashoffset:0;animation:tp-model-draw var(--tp-cycle) ease-in-out infinite;animation-delay:calc(var(--tp-order,0)*.55s)}
.tp-model-line--sand{stroke:var(--tp-sand);stroke-width:2}
.tp-model-line--slate{stroke:#91A8B9;stroke-width:1.6}
.tp-model-point{transform-box:fill-box;transform-origin:center;animation:tp-point-breathe var(--tp-cycle) ease-in-out infinite;animation-delay:calc(var(--tp-order,0)*.55s)}
.tp-flow-track{stroke:#DCEAF339;stroke-width:1.2;fill:none}
.tp-funding-flow{fill:none;stroke:var(--tp-mist);stroke-width:2.3;stroke-dasharray:8 92;stroke-dashoffset:0;animation:tp-route-travel 4.7s linear infinite}
.tp-funding-node{animation:tp-funding-pulse 8s ease-in-out infinite;animation-delay:calc(var(--tp-order,0)*.7s)}
.tp-funding-node rect{fill:var(--tp-navy);stroke:#DCEAF380;stroke-width:.9}
.tp-funding-node text{font-size:10px;letter-spacing:.04em}
.tp-funding-node .tp-small-svg-label{font-size:9px;fill:var(--tp-sand)}
.tp-node-icon{fill:none;stroke:var(--tp-sand);stroke-width:1.3}
.tp-funding-core{transform-origin:286px 205px;animation:tp-funding-layers 8s ease-in-out infinite}
.tp-funding-halo{transform-origin:286px 205px;animation:tp-halo-rotate 28s linear infinite}
.tp-core-label{text-anchor:middle;font-size:10px!important;fill:var(--tp-sand)!important;letter-spacing:.14em!important}
.tp-gantt-board{stroke:#DCEAF342;stroke-width:.85}
.tp-gantt-column-label text{text-anchor:middle;font-size:9px;fill:var(--tp-sand);letter-spacing:.06em}
.tp-gantt-columns{stroke:#DCEAF31f;stroke-width:.8;fill:none}
.tp-gantt-row-label{font-size:15px!important;letter-spacing:0!important;fill:var(--tp-mist)!important}
.tp-gantt-track{fill:#51667455}
.tp-gantt-bar{fill:var(--tp-blue);animation:tp-gantt-fill var(--tp-cycle) cubic-bezier(.22,.75,.3,1) infinite;animation-delay:calc(var(--tp-order,0)*.72s)}
.tp-gantt-bar:nth-of-type(even){fill:#516674}
.tp-gantt-divider{stroke:#DCEAF31a;stroke-width:.65;fill:none}
.tp-gantt-dependency{opacity:.65;animation:tp-connection-pulse 6s ease-in-out infinite}
.tp-gantt-scan{animation:tp-gantt-scan var(--tp-cycle) ease-in-out infinite}
.tp-service-graphic .tp-animate{animation-play-state:paused}
.tp-service-graphic:not(.tp-graphic-ready) .tp-animate{animation:none}
.tp-service-graphic.tp-graphic-ready:not(.tp-graphic-has-played)[data-tp-playing="false"] .tp-animate{animation:none}
.tp-service-graphic[data-tp-playing="true"] .tp-animate{animation-play-state:running}
html.motion-paused .tp-service-graphic .tp-animate{animation-play-state:paused!important}
@keyframes tp-route-travel{from{stroke-dashoffset:0}to{stroke-dashoffset:-100}}
@keyframes tp-land-float{0%,100%{transform:translateY(0)}45%,65%{transform:translateY(-6px)}}
@keyframes tp-parcel-lift{0%,15%,100%{transform:translateY(0);fill-opacity:.65}36%,70%{transform:translateY(-9px);fill-opacity:1}87%{transform:translateY(0);fill-opacity:.85}}
@keyframes tp-trace{0%,6%{stroke-dashoffset:100;opacity:.3}44%,82%{stroke-dashoffset:0;opacity:1}96%,100%{stroke-dashoffset:0;opacity:.2}}
@keyframes tp-marker-rise{0%,12%,100%{transform:translateY(3px);opacity:.4}35%,78%{transform:translateY(-5px);opacity:1}}
@keyframes tp-orbit-drift{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
@keyframes tp-connection-pulse{0%,100%{opacity:.4}45%,62%{opacity:.95}}
@keyframes tp-area-breathe{0%,100%{opacity:.23}42%,73%{opacity:.82}}
@keyframes tp-model-draw{0%,8%{stroke-dashoffset:100;opacity:.4}48%,82%{stroke-dashoffset:0;opacity:1}96%,100%{stroke-dashoffset:0;opacity:.18}}
@keyframes tp-point-breathe{0%,24%,100%{transform:scale(.7);opacity:.25}52%,80%{transform:scale(1);opacity:1}66%{transform:scale(1.15)}}
@keyframes tp-funding-pulse{0%,100%{opacity:.64}36%,70%{opacity:1}}
@keyframes tp-funding-layers{0%,100%{transform:translateY(2px)}50%{transform:translateY(-9px)}}
@keyframes tp-halo-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}
@keyframes tp-gantt-fill{0%,9%{transform:scaleX(.035);opacity:.35}43%,80%{transform:scaleX(1);opacity:1}95%,100%{transform:scaleX(1);opacity:.28}}
@keyframes tp-gantt-scan{0%,8%{transform:translateX(0);opacity:0}14%{opacity:.78}80%{transform:translateX(322px);opacity:.78}91%,100%{transform:translateX(322px);opacity:0}}
@media(min-width:1450px){.tp-service-graphic{padding:27px 29px 25px}.tp-graphic-title{font-size:23px}.tp-graphic-steps{font-size:13px}}
@media(max-width:1000px) and (min-width:701px){.tp-service-graphic{padding:18px}.tp-graphic-heading{font-size:9px;gap:9px}.tp-graphic-kicker{font-size:9px}.tp-graphic-status{font-size:9px;gap:5px}.tp-graphic-title{font-size:17px}.tp-graphic-steps{font-size:11px}.tp-graphic-steps li+li::before{margin:0 9px}}
@media(max-width:700px){.tp-service-graphic{padding:19px 17px 19px;border-radius:9px}.tp-graphic-heading{font-size:10px;gap:12px;padding-bottom:12px}.tp-graphic-kicker{font-size:9px}.tp-graphic-status{font-size:9px}.tp-service-graphic figcaption{padding-top:17px}.tp-graphic-title{font-size:19px;line-height:1.45}.tp-graphic-steps{font-size:12px;gap:8px 0;margin:13px 0}.tp-graphic-steps li+li::before{margin:0 10px}.tp-graphic-caption{font-size:11px;line-height:1.65}}
@media(max-width:360px){.tp-service-graphic{padding:15px 12px}.tp-graphic-heading{gap:9px}.tp-graphic-kicker{font-size:8px;letter-spacing:.065em}.tp-graphic-status{font-size:8px;gap:5px}.tp-graphic-title{font-size:17px}.tp-graphic-steps{font-size:11px}.tp-graphic-steps li+li::before{margin:0 7px}.tp-graphic-caption{font-size:10px}.tp-graphic--pm .tp-graphic-steps{column-gap:0}}
@media(prefers-reduced-motion:reduce){html:not(.motion-enabled) .tp-service-graphic .tp-animate{animation:none!important;opacity:1;transform:none;stroke-dashoffset:0}}
@media print{.tp-service-graphic{break-inside:avoid;box-shadow:none}.tp-service-graphic .tp-animate{animation:none!important;opacity:1;transform:none;stroke-dashoffset:0}}
