/* Service pages share the editorial rhythm of Security Research. */
.service-editorial{padding:36px 0 0;background:radial-gradient(ellipse at 15% 35%,#153c5d20,transparent 65%)}
.service-editorial .breadcrumb{margin-bottom:40px}
.service-introduction{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.08fr);gap:75px;align-items:center;padding:10px 0 55px}
.service-introduction-copy .eyebrow{text-transform:uppercase;font-size:10px;margin-bottom:18px}
.service-introduction h1{font-size:clamp(35px,3.6vw,52px);font-weight:600;line-height:1.15;letter-spacing:-.045em;margin-bottom:20px}
.service-subtitle{font-size:21px;color:#d5e2f1;line-height:1.55;margin-bottom:22px}
.service-introduction-copy>p:not(.eyebrow):not(.service-subtitle){font-size:16px;line-height:1.85}
.service-introduction-copy .button{margin-top:7px;font-size:13px}
.service-jump-links{display:flex;gap:28px;flex-wrap:wrap;border-top:1px solid var(--line);padding:20px 0;font-size:12px;color:#a9bcd1}
.service-jump-links a{display:inline-flex;align-items:center;min-height:44px}
.service-jump-links a:hover{color:var(--blue)}
.service-depth-section{padding:80px 0;border-top:1px solid var(--line)}
.service-explanation{display:grid;grid-template-columns:1fr 1.25fr;gap:100px;align-items:start}
.service-section-heading .eyebrow{font:10px/1.8 'Ubuntu Mono',monospace;letter-spacing:.12em;margin-bottom:18px}
.service-section-heading h2{font-size:31px;line-height:1.25;letter-spacing:-.035em;font-weight:500;margin-bottom:30px}
.service-prose{font-size:16px;line-height:1.9;color:#aab8cb}
.service-prose p{color:inherit;margin-bottom:23px}
.service-prose p:last-child{margin-bottom:0}
.service-prose strong{font-weight:700;color:#d5e0ef}
.service-prose ul{list-style:none;padding:0;margin:0}
.service-prose li{position:relative;padding:15px 0 15px 25px;border-bottom:1px solid #ffffff0c;line-height:1.8}
.service-prose li:before{content:'';position:absolute;left:0;top:27px;width:5px;height:5px;border:1px solid var(--blue);border-radius:50%}
.service-ai-section{padding:75px 0;background:#0b1017;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.service-ai-layout{display:grid;grid-template-columns:1fr 1.25fr;gap:100px;align-items:start}
.service-ai-layout h2{font-size:32px;font-weight:500;line-height:1.3}
.service-ai-layout .eyebrow{font-size:9px;margin-bottom:20px}
.service-ai-symbols{display:flex;align-items:center;gap:15px;color:var(--blue);margin-bottom:30px}
.service-ai-symbols>.icon{width:28px;height:28px}
.service-ai-symbols>span{width:60px;height:1px;background:linear-gradient(90deg,#72b6ef33,#72b6efaa,#72b6ef33)}
.service-ai-note{font-size:13px;color:#8ba5c1;max-width:290px}
.service-ai-section .service-prose>ul{margin:20px 0}
.coverage-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 32px}
.coverage-card{border-top:1px solid #ffffff20;padding:27px 0 30px}
.coverage-index{display:block;font:10px 'Ubuntu Mono',monospace;color:#7898b9;margin-bottom:17px}
.coverage-card h3{font-size:18px;font-weight:500;letter-spacing:-.025em;line-height:1.4;margin-bottom:13px}
.coverage-card p{font-size:15px;line-height:1.8;margin:0;color:#a7b6c8}
.coverage-card p>strong{font-weight:500}
.service-outcomes{padding:75px 0;background:radial-gradient(ellipse at 20% 50%,#20486a18,transparent 65%),#0a0e14;border-block:1px solid var(--line)}
.outcomes-layout{display:grid;grid-template-columns:1fr 1.25fr;gap:100px;align-items:start}
.outcomes-symbol{display:grid;place-items:center;width:95px;height:95px;border:1px solid #79b9f52d;background:#79b9f508;color:#9ccaf0;border-radius:50%;margin-top:20px}
.outcomes-symbol>.icon{width:39px;height:39px}
.service-supplement{padding:60px 0;border-bottom:1px solid var(--line)}
.supplement-layout{display:grid;grid-template-columns:1fr 1.25fr;gap:100px}
.supplement-layout>h2{font-size:27px;font-weight:500;line-height:1.3}
.fit-layout{display:grid;grid-template-columns:1.2fr 1fr;gap:95px;align-items:center}
.engagement-card{background:#0e1620;border:1px solid #73afe52b;padding:35px;border-radius:4px}
.engagement-card>.icon{width:29px;height:29px;color:var(--blue);margin-bottom:25px}
.engagement-card h2{font-size:25px;font-weight:500;line-height:1.3;margin-bottom:18px}
.engagement-card p{font-size:15px}
.engagement-card .button{font-size:12px;width:100%;gap:15px;padding:15px}
.service-faq{padding:70px 0 90px;background:#0b0f15;border-top:1px solid var(--line)}
.faq-open-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px 65px}
.faq-open-list article{border-top:1px solid #ffffff20;padding-top:25px}
.faq-open-list h3{font-size:18px;font-weight:500;line-height:1.5;letter-spacing:-.025em;margin-bottom:16px}
.faq-open-list .service-prose{font-size:15px}
.service-illustration{margin:0;position:relative;border:1px solid #6390ba3b;border-radius:4px;background:radial-gradient(ellipse at 50% 40%,#18466a26,transparent 70%),#0b111a;box-shadow:0 18px 60px #0003;overflow:hidden;min-width:0}
.service-visual-top{display:flex;align-items:center;gap:9px;padding:17px;border-bottom:1px solid #ffffff12;font:10px/1.5 'Ubuntu Mono',monospace;letter-spacing:.07em;color:#9fb5ce}
.visual-top-mark{font-size:8px;letter-spacing:.05em;margin-left:auto;color:#6e94b8}
.service-diagram{padding:15px 0 0;overflow:hidden}
.service-diagram>svg{display:block;width:100%;height:auto;aspect-ratio:520/310;overflow:visible}
.service-diagram text{font:12px 'Ubuntu Mono',monospace;fill:#b9cce2;stroke:none}
.service-diagram text.centered{text-anchor:middle}
.service-diagram text.overline{font-size:10px;fill:#83a3c2;letter-spacing:.07em}
.service-diagram text.visual-row{font-size:11px}
.service-illustration figcaption{font-size:12px;line-height:1.7;color:#9cb0c7;padding:17px 20px;border-top:1px solid #ffffff12;background:#080d1480}
.visual-box rect,.visual-node>circle:first-child,.endpoint-screen>rect{fill:#101e2d;stroke:#6da8dc6b;stroke-width:1}
.node-core,.tuning-knob circle,.soc-center{fill:#9cd3ff;stroke:#85c3fa;stroke-width:1}
.focus-node>circle:first-child{stroke:#84c7ff;fill:#18334c}
.visual-link{fill:none;stroke:#6895bf52;stroke-width:1}
.visual-tick{stroke:#8acdb3;stroke-width:1.6;fill:none;stroke-linecap:round;stroke-linejoin:round}
.result-box rect{stroke:#8dc2f059}
.visual-scan{stroke:#87d5ff;stroke-width:1.5;opacity:.7;animation:service-scan 4s ease-in-out infinite paused}
.visual-signal{stroke:#84c5fa;stroke-dasharray:7 160;stroke-dashoffset:170;animation:service-signal 4s linear infinite paused}
.focus-node .node-core{transform-box:fill-box;transform-origin:center;animation:service-node 3s ease-in-out infinite paused}
.ai-boundary{stroke:#80b9ed78;stroke-width:1;stroke-dasharray:4 5;fill:#5095d40a;animation:boundary-flow 12s linear infinite paused}
.bar-track{stroke:#ffffff12;stroke-width:5;stroke-linecap:round}
.bar-review{stroke:#78b8ef;stroke-width:5;stroke-linecap:round;transform-box:fill-box;transform-origin:left;animation:control-review 6s ease-in-out infinite paused}
.row-1 .bar-review{animation-delay:-1.2s}.row-2 .bar-review{animation-delay:-2.4s}
.review-check .visual-tick{stroke-dasharray:30;animation:review-check 6s ease-in-out infinite paused}
.review-check.row-1 .visual-tick{animation-delay:-1s}.review-check.row-2 .visual-tick{animation-delay:-2s}
.cloud-outline{fill:#17324a3d;stroke:#77b7ee7a;stroke-width:1.2}
.cloud-shield{fill:#17354f;stroke:#90c8fa;stroke-width:1.2}
.adversary-path{stroke:#b8947860;stroke-dasharray:4 5}
.adversary-signal{stroke:#dcb68a;stroke-width:2;stroke-dasharray:14 450;animation:adversary-route 7s linear infinite paused}
.adversary-node>circle:first-child{stroke:#bd997566}
.defense-boundary{stroke:#64a9e977;stroke-width:1;stroke-dasharray:3 5}
.endpoint-screen>path:not(.visual-tick){stroke:#6e9bc4;stroke-width:1}
.endpoint-alert{fill:#bd876f15;stroke:#d3a784!important;animation:endpoint-alert 5s ease-in-out infinite paused}
.tuning-knob{animation:control-tuning 7s ease-in-out infinite alternate paused}
.knob-1{animation-delay:-2s}.knob-2{animation-delay:-4s}
.soc-rings{stroke:#639dd041;stroke-width:1}
.soc-sweep{fill:#78bafa20;stroke:#8bc5f15c;stroke-width:1;transform-origin:140px 156px;animation:soc-rotation 6s linear infinite paused}
.soc-blip{fill:#a8d8ff;animation:soc-detection 6s ease-out infinite paused}
.soc-blip.blip-two{animation-delay:-3s}
.service-motion-active .visual-scan,.service-motion-active .visual-signal,.service-motion-active .node-core,.service-motion-active .ai-boundary,.service-motion-active .bar-review,.service-motion-active .review-check .visual-tick,.service-motion-active .adversary-signal,.service-motion-active .endpoint-alert,.service-motion-active .tuning-knob,.service-motion-active .soc-sweep,.service-motion-active .soc-blip{animation-play-state:running}
@keyframes service-scan{0%,100%{transform:translateX(-28px);opacity:.1}50%{transform:translateX(28px);opacity:.8}}
@keyframes service-signal{to{stroke-dashoffset:0}}
@keyframes service-node{0%,100%{transform:scale(.8);opacity:.4}50%{transform:scale(1.25);opacity:1}}
@keyframes boundary-flow{to{stroke-dashoffset:-108}}
@keyframes control-review{0%,100%{transform:scaleX(.75);opacity:.5}50%{transform:scaleX(1);opacity:1}}
@keyframes review-check{0%,15%{stroke-dashoffset:30;opacity:.2}35%,85%{stroke-dashoffset:0;opacity:1}100%{stroke-dashoffset:0;opacity:.3}}
@keyframes adversary-route{to{stroke-dashoffset:-464}}
@keyframes endpoint-alert{0%,100%{opacity:.35}50%{opacity:1}}
@keyframes control-tuning{from{transform:translateX(-16px)}to{transform:translateX(16px)}}
@keyframes soc-rotation{to{transform:rotate(360deg)}}
@keyframes soc-detection{0%{opacity:1}45%,100%{opacity:.1}}
@media(max-width:1100px){.service-introduction{gap:40px}.service-explanation,.service-ai-layout,.outcomes-layout,.supplement-layout{gap:55px}.fit-layout{gap:45px}.service-subtitle{font-size:19px}.service-introduction h1{font-size:40px}}
@media(max-width:760px){.service-editorial{padding-top:25px}.service-editorial .breadcrumb{margin-bottom:30px}.service-introduction{grid-template-columns:1fr;gap:35px;padding-bottom:35px}.service-introduction-copy{grid-row:1}.service-introduction h1{font-size:35px}.service-subtitle{font-size:19px}.service-introduction-copy>p:not(.eyebrow):not(.service-subtitle){font-size:15px}.service-jump-links{gap:4px 22px;font-size:11px;padding:15px 0}.service-visual-top{font-size:9px;padding:14px}.visual-top-mark{font-size:7px}.service-illustration figcaption{font-size:12px;padding:15px}.service-depth-section{padding:55px 0}.service-explanation,.service-ai-layout,.outcomes-layout,.supplement-layout,.fit-layout{grid-template-columns:1fr;gap:25px}.service-section-heading h2{font-size:27px;margin-bottom:15px}.service-prose{font-size:15px}.service-ai-section,.service-outcomes{padding:55px 0}.service-ai-layout h2{font-size:28px}.service-ai-symbols{margin-bottom:22px}.service-ai-note{margin-bottom:0}.coverage-grid{grid-template-columns:1fr;gap:0}.coverage-card{padding:22px 0}.coverage-card h3{font-size:18px}.outcomes-symbol{display:none}.service-supplement{padding:45px 0}.supplement-layout>h2{font-size:25px;margin-bottom:0}.engagement-card{padding:28px}.service-faq{padding:55px 0 65px}.faq-open-list{grid-template-columns:1fr;gap:25px}.faq-open-list h3{font-size:17px}.service-diagram text.overline{font-size:11px;letter-spacing:0}}
@media(prefers-reduced-motion:reduce){.service-illustration *{animation:none!important;transition:none!important}.review-check .visual-tick{stroke-dashoffset:0}.visual-signal,.adversary-signal{stroke-dasharray:none;opacity:.6}}

/* Pentest: interactive architecture and an illustrative authorization attack path. */
.attack-map-toolbar{display:flex;align-items:center;justify-content:space-between;gap:15px;padding:18px 20px 0;font-size:11px;color:#8da5bf}
.attack-map-toolbar>span:last-child{font:8px 'Ubuntu Mono',monospace;letter-spacing:.08em;color:#8bb4d7}
.attack-canvas{position:relative;aspect-ratio:520/330;min-height:270px;background-image:radial-gradient(#7292b020 .7px,transparent .7px);background-size:22px 22px;margin:5px 0 0;isolation:isolate}
.attack-connections{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.map-connection{stroke:#6d94bb30;stroke-width:1;stroke-dasharray:3 6}
.map-scan-segment{stroke:#6faee24d;stroke-width:1.2;transition:stroke .4s}
.attack-map[data-attack-phase="0"] [data-scan-segment="0"],.attack-map[data-attack-phase="1"] [data-scan-segment="1"],.attack-map[data-attack-phase="2"] [data-scan-segment="2"]{stroke:#83c9ff;stroke-width:1.8}
.map-signal{opacity:0;pointer-events:none}.map-signal.is-visible{opacity:1}
.map-signal-core{fill:#c5ebff}.map-signal-halo{fill:#63b6ff;opacity:.7}
.map-exploit-path{stroke:#dbac77;stroke-width:2;stroke-dasharray:1;stroke-dashoffset:1;opacity:0;transition:stroke-dashoffset 2.3s ease-in-out,opacity .4s}
.attack-map[data-attack-phase="4"] .map-exploit-path,.attack-map[data-attack-phase="5"] .map-exploit-path{stroke-dashoffset:0;opacity:.9}
.map-vulnerability{opacity:0;transition:opacity .4s;pointer-events:none}
.map-vulnerability>circle{fill:none;stroke:#d8aa78;stroke-width:1;stroke-dasharray:2 5;opacity:.45}
.map-vulnerability>circle:first-child{transform-box:fill-box;transform-origin:center;animation:attack-discovery 2.5s ease-out infinite paused;stroke-dasharray:none}
.attack-map[data-attack-phase="3"] .map-vulnerability,.attack-map[data-attack-phase="4"] .map-vulnerability,.attack-map[data-attack-phase="5"] .map-vulnerability{opacity:1}
.attack-map.is-playing .map-vulnerability>circle:first-child{animation-play-state:running}
.attack-node{position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;width:25%;min-height:85px;padding:7px 2px;border:0;background:none;color:#b9cbdf;transform:translate(-50%,-29px);border-radius:5px;z-index:1}
.attack-node-application{left:16.346%;top:38.788%}.attack-node-api{left:50%;top:38.788%}.attack-node-database{left:83.654%;top:38.788%}.attack-node-servers{left:50%;top:68.182%}
.attack-node-symbol{position:relative;display:grid;place-items:center;width:47px;height:43px;background:#101d2b;border:1px solid #6e9ac94a;border-radius:8px;color:#91bce4;box-shadow:0 6px 16px #0003;transition:border-color .3s,background .3s,color .3s,box-shadow .3s}
.attack-node-symbol>.icon{width:23px;height:23px}
.attack-node>strong{font-family:Montserrat,sans-serif;font-size:12px;line-height:1.4;font-weight:500;letter-spacing:-.02em;color:inherit}
.attack-node>small{font-size:10px;line-height:1.3;color:#8298b1}
.attack-node:hover .attack-node-symbol,.attack-node.is-selected .attack-node-symbol,.attack-node.is-current .attack-node-symbol{border-color:#91c8f8;background:#18344c;color:#cfebff;box-shadow:0 0 20px #6ebaff20}
.attack-node.is-vulnerable .attack-node-symbol{border-color:#d3a16f;background:#30251c;color:#eac89f}
.attack-node.is-vulnerable .attack-node-symbol:after{content:'!';position:absolute;right:-5px;top:-6px;display:grid;place-items:center;width:15px;height:15px;background:#d7ae7d;color:#1b130c;border-radius:50%;font:700 11px/1 'Ubuntu Mono',monospace}
.attack-node.is-route>strong{color:#d9b58d}.attack-node.is-selected>strong{color:#eef5ff}
.attack-map-legend{display:flex;gap:20px;flex-wrap:wrap;padding:0 20px 16px;font-size:10px;color:#91a7c0}
.attack-map-legend>span{display:inline-flex;gap:7px;align-items:center}.attack-map-legend i{width:12px;height:2px;border-radius:1px}.map-legend-blue{background:#80c6ff}.map-legend-amber{background:#d7ad7b}
.attack-map-detail{border-block:1px solid var(--line);padding:19px 20px;background:#0b1420;min-height:175px}
.attack-stage-number{display:block;font:9px 'Ubuntu Mono',monospace;letter-spacing:.08em;color:#719bc0;margin-bottom:9px}
.attack-map-detail h2{font-size:15px;font-weight:500;line-height:1.5;letter-spacing:-.02em;margin-bottom:10px}
.attack-map-detail>p{font-size:12px;line-height:1.75;color:#a4b8d0;margin-bottom:0}
.attack-map-detail .attack-map-route{font:10px/1.8 'Ubuntu Mono',monospace;color:#d4b18a;margin-top:10px}
.attack-map-controls{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:9px 14px 9px 20px}
.attack-map-controls>span{font-size:10px;color:#8aa1bc}.attack-map-controls>div{display:flex;gap:5px}
.attack-map-controls button{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:44px;padding:9px 8px;font-size:11px;background:none;color:#a9bed5;border:1px solid transparent;border-radius:4px}
.attack-map-controls button:hover{border-color:var(--line);color:#d8eafd}.attack-map-controls button:disabled{opacity:.45;cursor:default}.attack-map-controls button>.icon,.attack-map-controls [data-toggle-symbol]>.icon{width:14px;height:14px;display:block}
.attack-map-controls [hidden]{display:none!important}.attack-map-controls [data-toggle-symbol]>.icon-play{display:none}.attack-map-controls [data-toggle-symbol].shows-play>.icon-pause{display:none}.attack-map-controls [data-toggle-symbol].shows-play>.icon-play{display:block}
@keyframes attack-discovery{0%{transform:scale(.8);opacity:.6}100%{transform:scale(1.22);opacity:0}}
@media(max-width:1100px){.attack-node>small{font-size:9px}.attack-node>strong{font-size:11px}.attack-map-toolbar{gap:8px;padding-inline:15px}.attack-map-toolbar>span:first-child{font-size:10px}.attack-map-toolbar>span:last-child{font-size:7px}}
@media(max-width:760px){.attack-canvas{aspect-ratio:520/330;min-height:240px}.attack-node{gap:5px;min-height:72px;transform:translate(-50%,-25px)}.attack-node-symbol{width:40px;height:37px;border-radius:6px}.attack-node-symbol>.icon{width:21px;height:21px}.attack-node>strong{font-size:10px}.attack-node>small{font-size:8px}.attack-map-detail{min-height:190px;padding:17px}.attack-map-detail h2{font-size:14px}.attack-map-legend{padding-inline:17px;gap:15px;font-size:9px}.attack-map-controls{padding-inline:12px}.attack-map-controls>span{font-size:9px}.attack-map-toolbar{padding-top:15px}.attack-map .service-visual-top{padding:14px}.attack-node-servers{top:68.182%}}
@media(prefers-reduced-motion:reduce){.attack-map .map-signal{display:none}.attack-map .map-exploit-path,.attack-map .map-vulnerability,.attack-map .attack-node-symbol{transition:none}.attack-map .map-vulnerability>circle:first-child{animation:none;opacity:.3}}

/* Compact spacing within the Pentest map only. */
.attack-map .service-visual-top{padding:11px 14px}
.attack-map .attack-map-toolbar{padding:11px 14px 0}
.attack-map .attack-map-legend{padding:0 14px 10px}
.attack-map .attack-map-detail{padding:12px 14px;min-height:160px}
.attack-map .attack-map-controls{padding:5px 10px 5px 14px}
.attack-map figcaption{padding:11px 14px}
@media(max-width:760px){.attack-map .attack-map-detail{min-height:175px}}

/* Remove the unused upper canvas space without changing map coordinates. */
.attack-map .attack-canvas{margin-top:-34px}
.attack-map .attack-map-toolbar{position:relative;z-index:2;padding-top:8px}
@media(max-width:760px){.attack-map .attack-canvas{margin-top:-26px}}
@media(max-width:760px){
 :is(#pentest-modalities,#ai-security-modalities,#assessment-modalities,#appsec-modalities,#cloud-modalities,#red-team-modalities,#mxdr-modalities,#mdr-modalities,#mss-modalities,#soc-modalities){display:flex;gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;padding:4px 0 8px}
 :is(#pentest-modalities,#ai-security-modalities,#assessment-modalities,#appsec-modalities,#cloud-modalities,#red-team-modalities,#mxdr-modalities,#mdr-modalities,#mss-modalities,#soc-modalities)::-webkit-scrollbar{display:none}
 :is(#pentest-modalities,#ai-security-modalities,#assessment-modalities,#appsec-modalities,#cloud-modalities,#red-team-modalities,#mxdr-modalities,#mdr-modalities,#mss-modalities,#soc-modalities)>.coverage-card{flex:0 0 calc(100% - 24px);min-width:0;padding:24px;border:1px solid var(--line);border-radius:8px;background:var(--panel);scroll-snap-align:start}
}
