:root {
    --bg-color: #050505;
    --ui-color: #00ffcc;
    --ui-glow: rgba(0, 255, 204, 0.3);
    --ui-border: rgba(0, 255, 204, 0.2);
    --panel-bg: rgba(0, 20, 10, 0.8);
    --alert-dim: #330000;
    --alert-bright: #aa2222;
    --grid-size: 100px;
}

html {
    background-color: var(--bg-color);
    overflow-x: hidden;
}

body {
    background-color: var(--bg-color);
    color: var(--ui-color);
    font-family: 'Share Tech Mono', monospace;
    margin: 0;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    overflow-x: hidden;
    overflow-y: auto;
    user-select: none;
    opacity: 1;
    transform: none;
    filter: none;
    transition: opacity 0.28s ease;
}

body.page-entering {
    opacity: 0;
    transform: none;
    filter: none;
}

.private-body.page-entering,
.page-body--map.page-entering {
    opacity: 1;
}

body.page-ready {
    opacity: 1;
    transform: none;
    filter: none;
}

body.page-is-transitioning {
    pointer-events: none;
}

.private-body.page-is-transitioning {
    transform: none;
    filter: none;
}

.page-body--map {
    position: relative;
    isolation: isolate;
    height: 100vh;
    overflow: hidden;
}

.page-body--map::before {
    content: '';
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 0;
    background-image: url('../assets/images/fondPrivEcranOn.png');
    background-position: 75% 16%;
    background-repeat: no-repeat;
    background-size: 181%;
    opacity: 0.24;
    mix-blend-mode: screen;
}

.page-body--map > * {
    position: relative;
    z-index: 1;
}

.crt-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.15) 50%),
        linear-gradient(90deg, rgba(255, 0, 0, 0.03), rgba(0, 255, 0, 0.01), rgba(0, 255, 0, 0.03));
    background-size: 100% 3px, 2px 100%;
    pointer-events: none;
    z-index: 100;
}

.scanline {
    display: none;
    width: 100%;
    height: 100px;
    z-index: 101;
    background: linear-gradient(0deg, rgba(0, 255, 204, 0) 0%, rgba(0, 255, 204, 0.05) 50%, rgba(0, 255, 204, 0) 100%);
    opacity: 0.1;
    position: fixed;
    top: -120px;
    left: 0;
    pointer-events: none;
    animation: scanline 10s linear infinite;
}

.page-body--map .scanline {
    display: block;
}

@keyframes scanline {
    0% { transform: translateY(0); }
    100% { transform: translateY(calc(100vh + 140px)); }
}

@keyframes alertPulseRed {
    0%, 100% { opacity: 0.7; stroke: var(--alert-dim); stroke-width: 2; }
    50% { opacity: 0.85; stroke: var(--alert-bright); stroke-width: 2.5; }
}

@keyframes hazardFlicker {
    0%, 55%, 58%, 68%, 71%, 90%, 100% { opacity: 1; transform: scale(1) translate(0, 0); filter: blur(0px) brightness(1); }
    56% { opacity: 0.75; transform: translate(6px, -3px) rotate(0.8deg); filter: blur(0.5px) brightness(1.2); }
    59% { opacity: 0.9; transform: translate(-4px, 2px) rotate(-0.5deg); }
    69% { opacity: 0.7; transform: translate(5px, -4px) rotate(0.6deg); }
    72% { opacity: 0.95; transform: translate(-3px, 1px) rotate(-0.3deg); }
}

.hazard-flicker { animation: hazardFlicker 2.3s infinite; transform-origin: center; }

@keyframes ignisGlow {
    0%, 100% { opacity: 0.5; filter: brightness(1) blur(0px); }
    50% { opacity: 1; filter: brightness(1.5) blur(1px); }
}

.ignis-core { animation: ignisGlow 4s infinite ease-in-out; transform-origin: center; }

@keyframes beaconPulse {
    0%, 100% { opacity: 0.3; }
    50% { opacity: 0.8; }
}

.beacon { animation: beaconPulse 2s infinite ease-in-out; }
.b-delay-1 { animation-delay: 0.5s; }
.b-delay-2 { animation-delay: 1s; }

@keyframes revealPath {
    0% { stroke-dashoffset: 300; }
    100% { stroke-dashoffset: -100; }
}

.path-mask-anim { stroke-dasharray: 100 300; animation: revealPath 6s infinite linear; }
.nav-path-dotted { stroke-dasharray: 2 6; opacity: 0.8; pointer-events: none; }

@keyframes mysticFloat {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-10px); }
}

@keyframes flamePulse {
    0%, 100% { opacity: 0.6; filter: brightness(1) drop-shadow(0 0 0.5px var(--ui-color)); }
    50% { opacity: 0.75; filter: brightness(1) drop-shadow(0 0 1.5px var(--ui-color)); }
}

.eternal-flame-image { animation: flamePulse 4s infinite ease-in-out; }

@keyframes incenseRise {
    0% { transform: translate(0, 0); opacity: 0; }
    20% { opacity: 0.4; }
    80% { opacity: 0.1; }
    100% { transform: translate(var(--dx), -80px); opacity: 0; }
}

.smoke-particle { fill: var(--ui-color); opacity: 0; animation: incenseRise 5s infinite linear; }
.hazard-border { animation: alertPulseRed 4s infinite ease-in-out; stroke: var(--alert-dim); fill: none; }

@keyframes signalPulse {
    0%, 100% { opacity: 0.85; filter: drop-shadow(0 0 2px rgba(0, 255, 204, 0.25)); }
    50% { opacity: 0.95; filter: drop-shadow(0 0 6px rgba(0, 255, 204, 0.25)); }
}

.station-image { animation: signalPulse 5s infinite ease-in-out; mix-blend-mode: screen; }

@keyframes orbitRotate {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}

.tactical-overlay { transform-origin: 0 0; animation: orbitRotate 60s linear infinite; }
.cenotaph-structure { animation: mysticFloat 6s infinite ease-in-out; transform-origin: center; }

@keyframes psychicWaveUp {
    0% { transform: translateY(0px) scale(0); opacity: 0; }
    15% { opacity: 0.8; }
    100% { transform: translateY(-130px) scale(2.2); opacity: 0; }
}

.wave { transform-box: fill-box; transform-origin: center bottom; animation: psychicWaveUp 4s infinite cubic-bezier(0.4, 0, 0.2, 1); }
.wave-2 { animation-delay: 1.33s; }
.wave-3 { animation-delay: 2.66s; }

@keyframes heartPulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.6; }
}

.core-pulse { animation: heartPulse 2s infinite ease-in-out; }

.page-shell {
    flex: 1;
    min-height: 0;
    padding: 18px 20px;
    background: radial-gradient(circle at top, rgba(0, 255, 204, 0.05), transparent 35%), #000;
}

.public,
.public-body {
    --public-anchor-x: left;
    --public-anchor-y: top;
    --public-bg-pos-x: left;
    --public-bg-pos-y: top;
    --public-bg-width: 1600px;
    --public-stage-h: calc(100dvh - 132px);
    --public-stage-w: min(calc(100vw - 18px), var(--public-bg-width));
    --public-layout-width: var(--public-stage-w);
    --public-layout-cols: 52.5% 24.5%;
    --public-layout-gap: 8%;
    --public-layout-padding: clamp(4px, 0.5vw, 8px) 0;
    --public-stack-width: 86%;
    --public-stack-margin-left: 4.5%;
    --public-shell-padding: 8px 12px 6px 0;
    --public-panel-padding: 8% 6.5% 5% 6%;
    --public-frame-overflow: hidden;
    --public-scroll-height: 100%;
    --public-scroll-frame-height: 100%;
    --public-scroll-mask: linear-gradient(to bottom, #000 0, #000 100%);
    --public-scroll-overflow-y: auto;
    --public-scroll-overflow-x: hidden;
    --public-altar-padding: clamp(82px, 16vh, 150px) 12px 24px;
    --public-logo-offset-y: 0px;
    height: 100vh;
    overflow: hidden;
    background:
        linear-gradient(180deg, rgba(8, 6, 4, 0.12), rgba(6, 5, 4, 0.2)),
        radial-gradient(circle at 18% 18%, rgba(170, 126, 58, 0.06), transparent 22%),
        url('../assets/images/fondPublic.png');
    background-position: var(--public-bg-pos-x, var(--public-anchor-x)) var(--public-bg-pos-y, var(--public-anchor-y));
    background-repeat: no-repeat;
    background-size: var(--public-bg-width) auto;
    background-attachment: fixed;
}

.public-body .crt-overlay,
.public-body .scanline {
    display: none;
}

.public-body .ui-header,
.public-body .ui-footer {
    flex: 0 0 auto;
    z-index: 80;
    background: linear-gradient(180deg, rgba(18, 12, 8, 0.86), rgba(10, 7, 4, 0.72));
    backdrop-filter: blur(3px);
}

.public-body .ui-header {
    position: sticky;
    top: 0;
}

.public-body .ui-footer {
    position: sticky;
    bottom: 0;
    min-height: 42px;
    align-items: center;
}

.public-body .page-shell {
    min-height: 0;
    overflow: hidden;
    background: transparent;
    display: flex;
    justify-content: flex-start;
    align-items: stretch;
    padding: var(--public-shell-padding);
}

.private-body {
    --private-motion-scale: 2;
    --private-bg-width: 80%;
    --private-bg-pos-x: center;
    --private-bg-pos-y: top;
    --private-bg-attachment: fixed;
    --private-zone-left-x: 12%;
    --private-zone-left-y: 0%;
    --private-zone-left-w: 44%;
    --private-zone-left-h: 64%;
    --private-zone-right-x: 38%;
    --private-zone-right-y: 0%;
    --private-zone-right-w: 56%;
    --private-zone-right-h: 64%;
    --private-zone-bottom-x: 0%;
    --private-zone-bottom-y: 64%;
    --private-zone-bottom-w: 100%;
    --private-zone-bottom-h: 36%;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    position: relative;
    isolation: isolate;
    background-color: #000;
    background-image:
        linear-gradient(180deg, rgba(11, 8, 8, 0.18), rgba(8, 6, 6, 0.34)),
        url('../assets/images/fondPriv.png');
    background-position: var(--private-bg-pos-x) var(--private-bg-pos-y);
    background-repeat: no-repeat;
    background-size: var(--private-bg-width);
    background-attachment: var(--private-bg-attachment);
    transition:
        opacity calc(0.45s * var(--private-motion-scale)) ease,
        transform calc(0.55s * var(--private-motion-scale)) ease,
        filter calc(0.55s * var(--private-motion-scale)) ease,
        background-size calc(0.55s * var(--private-motion-scale)) ease,
        background-position calc(0.55s * var(--private-motion-scale)) ease;
}

.private-screen-page::before {
    content: '';
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 1;
    background-image: url('../assets/images/fondPrivEcranOn.png');
    background-position: var(--private-bg-pos-x) var(--private-bg-pos-y);
    background-repeat: no-repeat;
    background-size: var(--private-bg-width);
    background-attachment: var(--private-bg-attachment);
    opacity: 0.94;
    transition: opacity calc(1.55s * var(--private-motion-scale)) cubic-bezier(0.22, 0.8, 0.2, 1);
    will-change: opacity;
}

.private-screen-page.screen-power-overlay-active::before {
    opacity: 0.94;
}

.private-screen-page.page-entering::before {
    opacity: 0;
}

.private-view--hub {
    --private-bg-width: 100%;
    --private-bg-pos-x: 50%;
    --private-bg-pos-y: 0px;
}

.private-view--ecran {
    --private-bg-width: 181%;
    --private-bg-pos-x: 75%;
    --private-bg-pos-y: 16%;
    --ecran-zone-x: 64.4%;
    --ecran-zone-y: 11%;
    --ecran-zone-width: min(55vw, 905px);
    --ecran-zone-height: min(38vw, 675px);
    --ecran-controls-x: 27.8%;
    --ecran-controls-y: 27%;
    --ecran-controls-width: clamp(150px, 15vw, 190px);
    --ecran-controls-height: clamp(360px, 58vh, 450px);
    --ecran-controls-gap: 19px;
}

.private-view--vox {
    --private-bg-width: 181%;
    --private-bg-pos-x: 25%;
    --private-bg-pos-y: 16%;
}

.private-body .page-shell {
    flex: 1;
    min-height: 0;
    background: transparent;
    position: relative;
    z-index: 2;
}

.private-shell-empty {
    position: relative;
}

.private-hotspots {
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 2;
}

.private-light {
    position: absolute;
    inset: 0;
    pointer-events: none;
    opacity: 0;
    transition: opacity 0.18s ease;
    z-index: 1;
    mix-blend-mode: screen;
}

.private-hotspot {
    position: absolute;
    display: block;
    pointer-events: auto;
    background: transparent;
    transition: none;
    overflow: hidden;
}

.private-hotspot:hover {
    background: transparent;
}

.private-hotspot::after {
    content: attr(data-label);
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    padding: 8px 12px;
    border: 1px solid rgba(255, 242, 204, 0.16);
    background: rgba(8, 8, 6, 0.52);
    color: rgba(240, 245, 228, 0.92);
    font-size: 1rem;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    text-align: center;
    opacity: 0;
    transition: opacity 0.2s ease;
}

.private-hotspot:hover::after {
    opacity: 1;
}

.private-hotspot--left {
    left: var(--private-zone-left-x);
    top: var(--private-zone-left-y);
    width: var(--private-zone-left-w);
    height: var(--private-zone-left-h);
}

.private-hotspot--right {
    left: var(--private-zone-right-x);
    top: var(--private-zone-right-y);
    width: var(--private-zone-right-w);
    height: var(--private-zone-right-h);
}

.private-hotspot--bottom {
    left: var(--private-zone-bottom-x);
    top: var(--private-zone-bottom-y);
    width: var(--private-zone-bottom-w);
    height: var(--private-zone-bottom-h);
}

.private-light--left {
    background: radial-gradient(ellipse 18% 24% at 28% 34%, rgba(255, 242, 210, 0.34) 0%, rgba(255, 233, 186, 0.12) 34%, rgba(255, 233, 186, 0.03) 56%, transparent 68%);
}

.private-light--right {
    background: radial-gradient(ellipse 20% 18% at 65% 43%, rgba(236, 255, 232, 0.22) 0%, rgba(214, 240, 208, 0.10) 34%, rgba(214, 240, 208, 0.03) 54%, transparent 66%);
}

.private-light--bottom {
    background: radial-gradient(ellipse 22% 24% at 47% 84%, rgba(255, 238, 198, 0.24) 0%, rgba(255, 226, 176, 0.10) 34%, rgba(255, 226, 176, 0.03) 56%, transparent 70%);
}

.private-shell-empty:has(.private-hotspot--left:hover) .private-light--left,
.private-shell-empty:has(.private-hotspot--right:hover) .private-light--right,
.private-shell-empty:has(.private-hotspot--bottom:hover) .private-light--bottom {
    opacity: 1;
}

.private-body .ui-footer {
    margin-top: auto;
    background: linear-gradient(180deg, rgba(18, 12, 10, 0.84), rgba(8, 6, 6, 0.92));
    backdrop-filter: blur(3px);
    z-index: 80;
}

.ecran-shell {
    position: relative;
    display: flex;
    justify-content: flex-end;
    align-items: flex-start;
    padding: clamp(24px, 3vw, 46px);
}

.private-entry-boot {
    position: absolute;
    inset: 0;
    display: block;
    padding: 12px 14px;
    background: none;
    border-radius: 0;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    z-index: 4;
    transition: opacity calc(0.22s * var(--private-motion-scale)) ease, visibility 0s linear calc(0.22s * var(--private-motion-scale));
}

.private-entry-boot::before,
.private-entry-boot::after {
    content: none;
}

.private-entry-boot.active {
    opacity: 1;
    visibility: visible;
    transition-delay: 0s;
}

.private-entry-boot.boot-ready .private-entry-boot__kicker,
.private-entry-boot.boot-ready .private-entry-boot__title,
.private-entry-boot.boot-ready .private-entry-boot__progress-row,
.private-entry-boot.boot-ready .private-entry-boot__bar {
    display: none;
}

.private-entry-boot.boot-ready .private-entry-boot__stream {
    margin-top: 0;
    padding-top: 0;
}

.private-entry-boot.is-leaving {
    opacity: 0;
}

.private-entry-boot__panel {
    position: relative;
    z-index: 1;
    width: 100%;
    min-height: 100%;
    display: grid;
    grid-template-rows: auto auto auto auto 1fr;
    align-content: start;
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-variant-ligatures: none;
    background: none;
    border: none;
    box-shadow: none;
    padding: 0;
    color: rgba(170, 255, 176, 0.98);
    text-shadow: 0 0 4px rgba(124, 255, 138, 0.45), 0 0 10px rgba(124, 255, 138, 0.18);
    letter-spacing: 0.03em;
}

.private-entry-boot__kicker {
    margin: 0 0 3px;
    color: rgba(151, 255, 162, 0.88);
    font-size: 1.02rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.private-entry-boot__title {
    margin: 0 0 8px;
    color: rgba(190, 255, 196, 0.98);
    font-size: clamp(1.2rem, 1.8vw, 1.65rem);
    line-height: 1;
    letter-spacing: 0.05em;
    text-transform: uppercase;
}

.private-entry-boot__progress-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 4px;
    color: rgba(158, 255, 170, 0.94);
    font-size: 0.98rem;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

.private-entry-boot__bar {
    width: 100%;
    height: 4px;
    border: none;
    background: rgba(76, 255, 110, 0.14);
    overflow: hidden;
}

.private-entry-boot__bar span {
    display: block;
    width: 0;
    height: 100%;
    background: rgba(132, 255, 146, 0.98);
    box-shadow: 0 0 8px rgba(128, 255, 153, 0.42);
}

.private-entry-boot__stream {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    gap: 1px;
    min-height: 0;
    height: 100%;
    margin-top: 10px;
    padding-top: 4px;
    color: rgba(166, 255, 178, 0.96);
    font-size: clamp(1rem, 1.15vw, 1.12rem);
    line-height: 1;
    white-space: pre;
    overflow: hidden;
}

.private-entry-boot__stream p {
    margin: 0;
}

.private-entry-boot__stream p:last-child::after {
    content: ' _';
    animation: terminalCursorBlink 0.8s steps(1, end) infinite;
}

.ecran-controls-column {
    position: absolute;
    left: var(--ecran-controls-x, 27.8%);
    top: var(--ecran-controls-y, 27%);
    width: var(--ecran-controls-width, clamp(150px, 15vw, 190px));
    min-height: var(--ecran-controls-height, clamp(360px, 58vh, 450px));
    transform: translateX(-50%);
    display: grid;
    gap: var(--ecran-controls-gap, 19px);
    align-content: start;
    z-index: 2;
    opacity: 1;
    visibility: visible;
    transition: opacity 0.12s ease, transform 0.12s ease, visibility 0s linear 0.12s;
}

.private-body.page-is-transitioning .ecran-controls-column {
    opacity: 0;
    visibility: hidden;
    transform: translateX(-50%) scale(0.96);
    transition-delay: 0s;
}

.private-body.page-is-transitioning .private-hotspots {
    pointer-events: none;
}

.private-body.page-is-transitioning .private-hotspot::after,
.private-body.page-is-transitioning .private-light {
    opacity: 0 !important;
    transition: opacity 0.08s ease;
}

.ecran-content-zone {
    position: absolute;
    left: var(--ecran-zone-x, 64.4%);
    top: var(--ecran-zone-y, 11%);
    width: var(--ecran-zone-width, min(55vw, 905px));
    height: var(--ecran-zone-height, min(38vw, 675px));
    max-height: var(--ecran-zone-height, min(38vw, 675px));
    min-height: 0;
    transform: translateX(-50%);
    transform-origin: center center;
    overflow: hidden;
    opacity: 1;
    filter: brightness(1);
    border: none;
    background: none;
    box-shadow: none;
    padding: 0;
    pointer-events: auto;
    transition:
        transform calc(0.34s * var(--private-motion-scale)) cubic-bezier(0.2, 0.8, 0.2, 1),
        filter calc(0.2s * var(--private-motion-scale)) ease,
        border-color calc(0.2s * var(--private-motion-scale)) ease,
        box-shadow calc(0.2s * var(--private-motion-scale)) ease;
}

.ecran-content-zone:empty {
    padding: 0;
    pointer-events: none;
}

.ecran-content-zone::before,
.ecran-content-zone::after {
    content: '';
    position: absolute;
    pointer-events: none;
}

.ecran-content-zone::before {
    inset: 0;
    background: radial-gradient(circle at center, rgba(240, 251, 232, 0.5) 0%, rgba(205, 236, 221, 0.16) 22%, transparent 60%);
    opacity: 0;
    mix-blend-mode: screen;
}

.ecran-content-zone::after {
    left: 2%;
    right: 2%;
    top: 50%;
    height: 4px;
    background: linear-gradient(90deg, transparent, rgba(248, 252, 240, 1), transparent);
    box-shadow: 0 0 18px rgba(240, 248, 229, 0.58);
    opacity: 0;
    transform: translateY(-50%) scaleX(0.08) scaleY(0.3);
}

.page-transition--crt-shutdown.page-is-transitioning .ecran-content-zone {
    animation: ecranCrtScreenOff calc(0.32s * var(--private-motion-scale)) cubic-bezier(0.22, 0.8, 0.2, 1) forwards;
}

.page-transition--crt-shutdown.page-is-transitioning .ecran-content-zone::before {
    animation: ecranCrtBloom calc(0.16s * var(--private-motion-scale)) ease-out forwards;
}

.page-transition--crt-shutdown.page-is-transitioning .ecran-content-zone::after {
    animation: ecranCrtShutdown calc(0.32s * var(--private-motion-scale)) ease-out forwards;
}

.page-transition--crt-shutdown.page-is-transitioning.private-screen-page::before {
    animation: ecranOverlayShutdown calc(0.32s * var(--private-motion-scale)) ease-out forwards;
}

@keyframes ecranCrtScreenOff {
    0% {
        opacity: 1;
        filter: brightness(1);
        transform: translateX(-50%) scaleX(1) scaleY(1);
        border-color: rgba(236, 243, 225, 0.18);
        box-shadow: inset 0 0 0 1px rgba(9, 12, 10, 0.3);
    }
    58% {
        opacity: 1;
        filter: brightness(2.9) contrast(1.18) saturate(0.75);
        transform: translateX(-50%) scaleX(0.82) scaleY(0.018);
        border-color: rgba(246, 250, 235, 0.4);
        box-shadow:
            inset 0 0 0 1px rgba(232, 243, 227, 0.2),
            0 0 24px rgba(237, 245, 229, 0.12);
    }
    100% {
        opacity: 0;
        filter: brightness(0.2);
        transform: translateX(-50%) scaleX(0.04) scaleY(0.008);
        border-color: rgba(246, 250, 235, 0);
        box-shadow: none;
    }
}

@keyframes ecranCrtBloom {
    0% {
        opacity: 0.18;
    }
    35% {
        opacity: 0.72;
    }
    100% {
        opacity: 0;
    }
}

@keyframes ecranOverlayShutdown {
    0% {
        opacity: 0.94;
        filter: brightness(1);
    }
    55% {
        opacity: 0.78;
        filter: brightness(1.45);
    }
    100% {
        opacity: 0;
        filter: brightness(0.45);
    }
}

@keyframes terminalCursorBlink {
    0%, 49% {
        opacity: 1;
    }
    50%, 100% {
        opacity: 0;
    }
}

@keyframes ecranCrtShutdown {
    0% {
        opacity: 0;
        transform: translateY(-50%) scaleX(0.18) scaleY(0.7);
    }
    20% {
        opacity: 1;
        transform: translateY(-50%) scaleX(1.02) scaleY(2.2);
    }
    72% {
        opacity: 0.94;
        transform: translateY(-50%) scaleX(0.22) scaleY(0.16);
    }
    100% {
        opacity: 0;
        transform: translateY(-50%) scaleX(0.04) scaleY(0.04);
    }
}

.ecran-link-card {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 42px;
    padding: 6px 24px 6px 10px;
    border: 1px solid rgba(236, 243, 225, 0.18);
    border-radius: 4px;
    background: rgba(10, 12, 11, 0.08);
    box-shadow: inset 0 0 0 1px rgba(8, 10, 9, 0.38);
    backdrop-filter: blur(0.4px);
    color: rgba(243, 244, 233, 0.84);
    text-decoration: none;
    text-shadow: 0 0 4px rgba(241, 247, 234, 0.05);
    transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease, background 0.18s ease, color 0.18s ease;
}

.ecran-link-card:hover {
    transform: translateY(-1px);
    border-color: rgba(244, 247, 235, 0.3);
    box-shadow:
        inset 0 0 0 1px rgba(12, 16, 14, 0.44),
        0 0 10px rgba(236, 243, 225, 0.03);
    color: rgba(248, 248, 236, 0.92);
}

.ecran-link-card__title {
    display: block;
    width: 100%;
    text-align: center;
    font-size: clamp(0.54rem, 0.68vw, 0.66rem);
    font-weight: 700;
    letter-spacing: 0.11em;
    line-height: 1.16;
    text-transform: uppercase;
}

.ecran-link-card__led {
    position: absolute;
    top: 50%;
    right: 6px;
    width: 20px;
    height: 20px;
    transform: translateY(-50%);
}

.ecran-led {
    width: 100%;
    height: 100%;
    display: block;
}

.ecran-led__ring {
    fill: rgba(24, 28, 25, 0.72);
    stroke: rgba(229, 235, 220, 0.24);
    stroke-width: 1.15;
}

.ecran-led__core {
    fill: rgba(104, 115, 108, 0.3);
}

.ecran-link-card--ready {
    border-color: rgba(213, 238, 220, 0.34);
}

.ecran-link-card--ready .ecran-led {
    filter: drop-shadow(0 0 8px rgba(186, 255, 208, 0.42));
}

.ecran-link-card--ready .ecran-led__core {
    fill: rgba(181, 255, 206, 0.92);
}

.ecran-link-card--standby .ecran-led {
    filter: none;
}

.ecran-link-card--standby .ecran-led__core {
    fill: rgba(112, 121, 115, 0.28);
}

.ecran-link-card--shutdown {
    border-color: rgba(246, 216, 164, 0.22);
}

.ecran-link-card--shutdown .ecran-led {
    filter: drop-shadow(0 0 6px rgba(255, 208, 144, 0.26));
}

.ecran-link-card--shutdown .ecran-led__core {
    fill: rgba(255, 208, 142, 0.78);
}

.private-proto-card {
    grid-column: 1 / -1;
    border: 1px solid rgba(236, 243, 225, 0.26);
    background: linear-gradient(180deg, rgba(20, 24, 22, 0.2), rgba(6, 8, 7, 0.28));
    box-shadow: inset 0 0 0 1px rgba(10, 12, 11, 0.5), 0 0 20px rgba(236, 243, 225, 0.04);
    padding: 16px 18px;
    color: rgba(244, 247, 235, 0.92);
}

.private-proto-card__kicker {
    margin: 0 0 8px;
    color: rgba(222, 232, 216, 0.72);
    font-size: 0.7rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
}

.private-proto-card__title {
    margin: 0 0 8px;
    font-size: clamp(1.2rem, 1.8vw, 1.8rem);
    line-height: 1.1;
    text-transform: uppercase;
}

.private-proto-card__copy {
    margin: 0;
    color: rgba(224, 232, 219, 0.78);
    font-size: 0.9rem;
    line-height: 1.5;
}

.private-proto-card__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 14px;
}

.private-proto-card__link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 38px;
    padding: 8px 12px;
    border: 1px solid rgba(236, 243, 225, 0.24);
    color: rgba(248, 248, 236, 0.9);
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 0.12em;
    font-size: 0.74rem;
}

.private-proto-card__link:hover {
    border-color: rgba(244, 247, 235, 0.4);
    background: rgba(236, 243, 225, 0.05);
}

.private-sample-grid {
    display: grid;
    grid-template-columns: minmax(0, 1.3fr) minmax(220px, 0.9fr);
    gap: 12px;
    margin-top: 14px;
}

.private-sample-block {
    border: 1px solid rgba(236, 243, 225, 0.18);
    background: linear-gradient(180deg, rgba(15, 18, 17, 0.26), rgba(6, 8, 7, 0.24));
    padding: 12px 13px;
}

.private-sample-heading {
    margin: 0 0 8px;
    color: rgba(246, 247, 236, 0.92);
    font-size: 0.78rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
}

.private-sample-text {
    margin: 0;
    color: rgba(222, 231, 217, 0.78);
    font-size: 0.84rem;
    line-height: 1.5;
}

.private-sample-list {
    margin: 10px 0 0;
    padding-left: 16px;
    color: rgba(222, 231, 217, 0.78);
    font-size: 0.82rem;
    line-height: 1.45;
}

.private-sample-list li + li {
    margin-top: 4px;
}

.private-sample-chip-row {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-bottom: 10px;
}

.private-sample-chip {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 24px;
    padding: 4px 8px;
    border: 1px solid rgba(236, 243, 225, 0.16);
    background: rgba(236, 243, 225, 0.04);
    color: rgba(240, 244, 233, 0.86);
    font-size: 0.68rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.private-sample-note {
    margin-top: 12px;
    border-left: 2px solid rgba(170, 230, 189, 0.34);
    padding: 8px 0 8px 10px;
    color: rgba(228, 235, 223, 0.8);
    font-size: 0.8rem;
    line-height: 1.45;
}

.private-sample-linkbar {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 12px;
}

.private-sample-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 34px;
    padding: 7px 10px;
    border: 1px solid rgba(236, 243, 225, 0.22);
    color: rgba(246, 247, 236, 0.9);
    text-decoration: none;
    font-size: 0.74rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
}

.private-sample-link:hover {
    border-color: rgba(244, 247, 235, 0.38);
    background: rgba(236, 243, 225, 0.05);
}

.requisition-terminal {
    height: 100%;
    display: grid;
    grid-template-rows: auto auto minmax(0, 1fr) auto;
    gap: 10px;
    padding: 10px 12px;
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    color: rgba(170, 255, 176, 0.96);
    text-shadow: 0 0 4px rgba(124, 255, 138, 0.32), 0 0 10px rgba(124, 255, 138, 0.1);
}

.requisition-terminal__header {
    display: grid;
    gap: 3px;
}

.requisition-terminal__path,
.requisition-terminal__status,
.requisition-terminal__prompt {
    margin: 0;
    font-size: 0.95rem;
    letter-spacing: 0.045em;
}

.requisition-terminal__title {
    margin: 0;
    color: rgba(194, 255, 198, 0.98);
    font-size: clamp(1.2rem, 1.7vw, 1.52rem);
    line-height: 0.98;
    letter-spacing: 0.06em;
}

.requisition-terminal__topbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    flex-wrap: wrap;
    padding: 7px 9px;
    border: 1px solid rgba(124, 255, 138, 0.18);
    background: rgba(10, 25, 9, 0.16);
}

.requisition-terminal__points {
    margin: 0;
    color: rgba(198, 255, 205, 0.98);
    font-size: 1.02rem;
    letter-spacing: 0.04em;
}

.requisition-terminal__points strong {
    font-weight: 400;
    color: rgba(211, 255, 216, 1);
}

.requisition-terminal__pr-value {
    font-weight: 400;
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: clamp(1.1rem, 1.5vw, 1.45rem);
    letter-spacing: 0.07em;
    color: rgba(211, 255, 216, 1);
    text-shadow: 0 0 6px rgba(124, 255, 138, 0.38);
}

.requisition-terminal__tags {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.requisition-terminal__tag {
    display: inline-flex;
    align-items: center;
    min-height: 22px;
    padding: 2px 7px;
    border: 1px solid rgba(124, 255, 138, 0.24);
    background: rgba(10, 22, 10, 0.26);
    color: rgba(191, 255, 198, 0.92);
    font-size: 0.82rem;
    letter-spacing: 0.04em;
}

.requisition-terminal__main {
    min-height: 0;
    display: grid;
    grid-template-columns: minmax(0, 1.45fr) minmax(140px, 0.68fr);
    gap: 10px;
}

.requisition-terminal__offers {
    min-height: 0;
    display: grid;
    grid-auto-rows: max-content;
    align-content: start;
    overflow-y: auto;
    gap: 6px;
    border: 1px solid rgba(124, 255, 138, 0.16);
    background: rgba(8, 19, 8, 0.12);
    padding: 8px 6px 8px 8px;
    scrollbar-width: thin;
    scrollbar-color: rgba(154, 255, 170, 0.45) rgba(10, 22, 11, 0.28);
}

.requisition-terminal__offers::-webkit-scrollbar {
    width: 10px;
}

.requisition-terminal__offers::-webkit-scrollbar-track {
    background: rgba(10, 22, 11, 0.28);
    border-left: 1px solid rgba(124, 255, 138, 0.12);
}

.requisition-terminal__offers::-webkit-scrollbar-thumb {
    background: linear-gradient(180deg, rgba(116, 255, 139, 0.28), rgba(181, 255, 194, 0.5));
    border: 1px solid rgba(167, 255, 180, 0.24);
    box-shadow: inset 0 0 0 1px rgba(13, 26, 13, 0.32);
}

.requisition-terminal__offers::-webkit-scrollbar-thumb:hover {
    background: linear-gradient(180deg, rgba(134, 255, 154, 0.38), rgba(197, 255, 207, 0.64));
}

.requisition-terminal__queue {
    min-height: 0;
    display: grid;
    grid-auto-rows: max-content;
    align-content: start;
    gap: 5px;
    border: 1px solid rgba(124, 255, 138, 0.16);
    background: rgba(8, 19, 8, 0.12);
    padding: 5px 7px;
}

.req-catalogue-tabs {
    display: flex;
    gap: 0;
    border-bottom: 1px solid rgba(124, 255, 138, 0.2);
    margin-bottom: 2px;
}

.req-tab {
    display: inline-flex;
    align-items: center;
    min-height: 26px;
    padding: 3px 11px;
    border: none;
    border-bottom: 2px solid transparent;
    background: none;
    color: rgba(151, 255, 165, 0.62);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.92rem;
    letter-spacing: 0.07em;
    text-transform: uppercase;
    cursor: pointer;
    transition: color 0.1s ease, border-color 0.12s ease;
}

.req-tab:hover {
    color: rgba(196, 255, 207, 0.88);
}

.req-tab--active {
    color: rgba(207, 255, 214, 0.98);
    border-bottom-color: rgba(124, 255, 138, 0.7);
}

.req-catalogue-panel {
    display: grid;
    gap: 6px;
}

.requisition-terminal__section-title {
    margin: 0;
    color: rgba(149, 255, 164, 0.86);
    font-size: 0.98rem;
    letter-spacing: 0.07em;
}

.requisition-offer-card {
    display: grid;
    gap: 4px;
    border: 1px solid rgba(124, 255, 138, 0.15);
    background: rgba(12, 26, 12, 0.14);
    padding: 7px;
    transition: border-color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;
    cursor: pointer;
    border-radius: 0;
}

.requisition-offer-card:focus,
.requisition-offer-card:focus-visible {
    outline: none;
}

.requisition-offer-card--focused {
    border: 1px dashed rgba(170, 255, 182, 0.82);
    border-radius: 0;
    background: rgba(16, 34, 16, 0.38);
    box-shadow: 0 0 10px rgba(124, 255, 138, 0.24), inset 0 0 0 1px rgba(124, 255, 138, 0.2);
}

.requisition-offer-card__name {
    margin: 0;
    color: rgba(201, 255, 207, 0.98);
    font-size: 1rem;
    letter-spacing: 0.045em;
}

.requisition-offer-card__desc {
    margin: 0;
    color: rgba(170, 244, 179, 0.8);
    font-size: 0.86rem;
    line-height: 1.18;
}

.requisition-offer-card__meta {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.requisition-offer-card__meta span {
    display: inline-flex;
    align-items: center;
    min-height: 20px;
    padding: 1px 6px;
    border: 1px solid rgba(124, 255, 138, 0.22);
    background: rgba(9, 20, 9, 0.28);
    color: rgba(193, 255, 200, 0.88);
    font-size: 0.74rem;
    letter-spacing: 0.04em;
}

.mission-deployment {
    display: grid;
    gap: 4px;
    margin-top: 2px;
}

.mission-deployment__svg {
    width: min(100%, 360px);
    height: auto;
    border: 1px solid rgba(124, 255, 138, 0.2);
    background: rgba(6, 14, 6, 0.36);
}

.mission-deployment__board {
    fill: rgba(10, 23, 10, 0.72);
    stroke: rgba(154, 255, 170, 0.35);
    stroke-width: 1;
}

.mission-deployment__zone {
    fill: rgba(124, 255, 138, 0.2);
    stroke: rgba(191, 255, 199, 0.5);
    stroke-width: 1;
}

.mission-deployment__line {
    stroke: rgba(187, 255, 197, 0.55);
    stroke-width: 1;
    stroke-dasharray: 4 3;
}

.mission-deployment__objective {
    fill: rgba(206, 255, 213, 0.88);
    stroke: rgba(10, 22, 11, 0.92);
    stroke-width: 1;
}

.mission-deployment__caption {
    margin: 0;
    color: rgba(170, 244, 179, 0.72);
    font-size: 0.8rem;
    letter-spacing: 0.03em;
}

/* --- MISSION CARD (portrait, style militaire) --- */

.mission-pool-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 8px;
    padding: 1px 1px 5px;
    border-bottom: 1px dashed rgba(124, 255, 138, 0.2);
    margin-bottom: 2px;
}

.mission-pool-header .requisition-terminal__section-title {
    font-size: 1.02rem;
    letter-spacing: 0.06em;
}

.mission-pool-header .odb-force-header__subtitle {
    font-size: 0.82rem;
}

.mission-card {
    display: flex;
    gap: 8px;
    border: 1px dashed rgba(124, 255, 138, 0.28);
    background: rgba(11, 22, 11, 0.11);
    box-shadow: inset 0 0 0 1px rgba(10, 20, 10, 0.24);
    padding: 8px 9px;
}

.mission-card__info {
    flex: 1;
    min-width: 0;
    display: grid;
    gap: 5px;
    align-content: start;
}

.mission-card__id {
    margin: 0;
    color: rgba(140, 255, 155, 0.68);
    font-size: 0.74rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
}

.mission-card__name {
    margin: 0;
    color: rgba(212, 255, 218, 0.98);
    font-size: 1.03rem;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    line-height: 1;
}

.mission-card__desc {
    margin: 0;
    color: rgba(170, 244, 179, 0.78);
    font-size: 0.81rem;
    line-height: 1.22;
}

.mission-card__data {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 2px 8px;
    margin: 0;
    padding: 5px 6px;
    border: 1px dashed rgba(124, 255, 138, 0.16);
    background: rgba(9, 18, 9, 0.22);
    align-items: baseline;
}

.mission-card__data dt {
    color: rgba(134, 255, 150, 0.58);
    font-size: 0.72rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    white-space: nowrap;
}

.mission-card__data dt::after {
    content: " :";
}

.mission-card__data dd {
    margin: 0;
    color: rgba(202, 255, 209, 0.9);
    font-size: 0.8rem;
    letter-spacing: 0.04em;
}

.mission-card__map {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0;
    width: 104px;
    padding: 2px;
    border: 1px dashed rgba(124, 255, 138, 0.2);
    background: rgba(9, 18, 9, 0.22);
}

.mission-card__svg {
    width: 104px;
    height: auto;
    border: 1px solid rgba(124, 255, 138, 0.22);
    background: rgba(6, 14, 6, 0.4);
    cursor: pointer;
}

.mission-card {
    position: relative;
    cursor: pointer;
    transition: background 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease;
}

.mission-card:hover,
.mission-card:focus,
.mission-card:focus-visible {
    outline: none;
    background: rgba(11, 22, 11, 0.11);
    box-shadow: none;
}

.mission-card:focus-visible {
    border-color: rgba(138, 255, 154, 0.32);
}

.mission-card--selected {
    border-color: rgba(176, 255, 186, 0.72);
    background: rgba(20, 36, 20, 0.34);
    box-shadow:
        inset 0 0 0 1px rgba(196, 255, 205, 0.62),
        0 0 0 1px rgba(124, 255, 138, 0.28),
        0 0 16px rgba(124, 255, 138, 0.22);
}

.mission-card--selected::before {
    content: '';
    position: absolute;
    top: 7px;
    bottom: 7px;
    left: -6px;
    width: 3px;
    background: linear-gradient(180deg, rgba(196, 255, 205, 0.95), rgba(124, 255, 138, 0.8));
    box-shadow: 0 0 8px rgba(124, 255, 138, 0.45);
}

.mission-card--selected .mission-card__name,
.mission-card:focus-visible .mission-card__name {
    color: rgba(228, 255, 232, 1);
}

.mission-card--selected .mission-card__id,
.mission-card:focus-visible .mission-card__id {
    color: rgba(182, 255, 193, 0.9);
}

.mission-card--selected .mission-card__map,
.mission-card:focus-visible .mission-card__map {
    border-color: rgba(174, 255, 185, 0.55);
}

.mission-card:not(.mission-card--selected):focus-visible .mission-card__name {
    color: rgba(212, 255, 218, 0.98);
}

.mission-card:not(.mission-card--selected):focus-visible .mission-card__id {
    color: rgba(140, 255, 155, 0.68);
}

.mission-card:not(.mission-card--selected):focus-visible .mission-card__map {
    border-color: rgba(124, 255, 138, 0.2);
}

.mission-terminal {
    position: relative;
}

/* --- MODAL MISSIONS --- */

.missions-modal {
    position: absolute;
    inset: 0;
    z-index: 25;
    display: grid;
    place-items: center;
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
}

.missions-modal__overlay {
    position: absolute;
    inset: 0;
    background: transparent;
}

.missions-modal__content {
    position: relative;
    z-index: 1;
    display: grid;
    grid-template-rows: auto minmax(0, 1fr) auto;
    width: min(94%, 860px);
    height: min(92%, 560px);
    border: 1px dashed rgba(124, 255, 138, 0.28);
    background: rgba(7, 14, 8, 0.97);
    box-shadow: 0 0 18px rgba(124, 255, 138, 0.16), inset 0 0 0 1px rgba(124, 255, 138, 0.12);
    color: rgba(170, 255, 176, 0.96);
    padding: 12px;
    gap: 10px;
}

.missions-modal__path {
    margin: 0;
    color: rgba(143, 255, 159, 0.74);
    font-size: 0.82rem;
    letter-spacing: 0.05em;
}

.missions-modal__header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    border-bottom: 1px solid rgba(124, 255, 138, 0.16);
    padding-bottom: 8px;
}

.missions-modal__title {
    margin: 0;
    color: rgba(212, 255, 218, 0.98);
    font-size: 1.1rem;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    flex: 1;
}

.missions-modal__close {
    background: none;
    border: 1px solid rgba(124, 255, 138, 0.28);
    color: rgba(191, 255, 198, 0.88);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: 1.2rem;
    padding: 4px 9px;
    cursor: pointer;
    transition: all 0.12s ease;
}

.missions-modal__close:hover,
.missions-modal__close:focus {
    outline: none;
    border-color: rgba(186, 255, 194, 0.46);
    background: rgba(95, 255, 119, 0.12);
    color: rgba(206, 255, 210, 0.98);
}

.missions-modal__body {
    min-height: 0;
    display: grid;
    grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);
    gap: 12px;
    overflow: auto;
    scrollbar-width: thin;
    scrollbar-color: rgba(154, 255, 170, 0.45) rgba(10, 22, 11, 0.28);
}

.missions-modal__body::-webkit-scrollbar {
    width: 10px;
}

.missions-modal__body::-webkit-scrollbar-track {
    background: rgba(10, 22, 11, 0.28);
}

.missions-modal__body::-webkit-scrollbar-thumb {
    background: linear-gradient(180deg, rgba(116, 255, 139, 0.28), rgba(181, 255, 194, 0.5));
    border: 1px solid rgba(167, 255, 180, 0.24);
}

.missions-modal__briefing {
    display: grid;
    gap: 10px;
    padding: 8px;
}

.missions-modal__desc {
    margin: 0;
    color: rgba(170, 244, 179, 0.82);
    font-size: 0.92rem;
    line-height: 1.4;
}

.missions-modal__data {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 4px 10px;
    margin: 0;
    padding: 8px;
    border: 1px dashed rgba(124, 255, 138, 0.2);
    background: rgba(9, 18, 9, 0.22);
}

.missions-modal__data dt {
    color: rgba(134, 255, 150, 0.68);
    font-size: 0.9rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    white-space: nowrap;
}

.missions-modal__data dt::after {
    content: " :";
}

.missions-modal__data dd {
    margin: 0;
    color: rgba(202, 255, 209, 0.92);
    font-size: 0.9rem;
}

.missions-modal__map {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 8px;
    border: 1px dashed rgba(124, 255, 138, 0.2);
    background: rgba(9, 18, 9, 0.22);
}

.missions-modal__svg {
    width: 100%;
    height: auto;
    max-width: 220px;
}

.missions-modal__footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    border-top: 1px solid rgba(124, 255, 138, 0.16);
    padding-top: 8px;
    font-size: 0.82rem;
    color: rgba(148, 255, 164, 0.68);
    letter-spacing: 0.03em;
}

.missions-modal__nav {
    margin: 0;
}

.missions-modal__pagination {
    margin: 0;
    text-align: right;
}

.requisition-terminal__log {
    margin: 0;
    min-height: 0;
    overflow: auto;
    padding: 8px 6px 8px 8px;
    border: 1px solid rgba(124, 255, 138, 0.15);
    background: rgba(7, 16, 7, 0.22);
    color: rgba(184, 255, 191, 0.94);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: clamp(0.84rem, 1vw, 0.95rem);
    line-height: 1.02;
    white-space: pre-wrap;
    scrollbar-width: thin;
    scrollbar-color: rgba(154, 255, 170, 0.45) rgba(10, 22, 11, 0.28);
}

.requisition-terminal__log::-webkit-scrollbar {
    width: 10px;
}

.requisition-terminal__log::-webkit-scrollbar-track {
    background: rgba(10, 22, 11, 0.28);
    border-left: 1px solid rgba(124, 255, 138, 0.12);
}

.requisition-terminal__log::-webkit-scrollbar-thumb {
    background: linear-gradient(180deg, rgba(116, 255, 139, 0.28), rgba(181, 255, 194, 0.5));
    border: 1px solid rgba(167, 255, 180, 0.24);
    box-shadow: inset 0 0 0 1px rgba(13, 26, 13, 0.32);
}

.requisition-terminal__log::-webkit-scrollbar-thumb:hover {
    background: linear-gradient(180deg, rgba(134, 255, 154, 0.38), rgba(197, 255, 207, 0.64));
}

.report-focus-block {
    min-height: 136px;
    border-style: dashed;
    border-color: rgba(124, 255, 138, 0.24);
    background: rgba(7, 15, 7, 0.3);
    box-shadow: inset 0 0 0 1px rgba(124, 255, 138, 0.1);
}

.report-focus-hint {
    margin: 0;
    color: rgba(156, 245, 168, 0.62);
    font-size: 0.76rem;
    letter-spacing: 0.05em;
    text-transform: uppercase;
}

.requisition-terminal__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.requisition-terminal__link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 30px;
    padding: 4px 10px;
    border: 1px solid rgba(124, 255, 138, 0.24);
    color: rgba(201, 255, 207, 0.94);
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    font-size: 0.78rem;
}

.requisition-terminal__link:hover {
    border-color: rgba(185, 255, 196, 0.45);
    background: rgba(124, 255, 138, 0.08);
}

.requisition-terminal__link--focused {
    border-color: rgba(170, 255, 182, 0.82);
    border-style: dashed;
    background: rgba(16, 34, 16, 0.38);
    box-shadow: 0 0 10px rgba(124, 255, 138, 0.24);
    outline: none;
}

.requisition-terminal__link--focused:focus,
.requisition-terminal__link--focused:focus-visible {
    outline: none;
}

.requisition-terminal__prompt {
    color: rgba(191, 255, 198, 0.96);
}

.dossier-terminal {
    box-sizing: border-box;
    height: 100%;
    min-height: 0;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    gap: 14px;
    padding: 14px 16px;
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    color: rgba(170, 255, 176, 0.96);
    text-shadow: 0 0 4px rgba(124, 255, 138, 0.42), 0 0 10px rgba(124, 255, 138, 0.14);
}

.dossier-terminal__body {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    display: grid;
    gap: 14px;
    scrollbar-width: thin;
    scrollbar-color: rgba(154, 255, 170, 0.45) rgba(10, 22, 11, 0.28);
}

.dossier-terminal__body::-webkit-scrollbar {
    width: 10px;
}

.dossier-terminal__body::-webkit-scrollbar-track {
    background: rgba(10, 22, 11, 0.28);
    border-left: 1px solid rgba(124, 255, 138, 0.12);
}

.dossier-terminal__body::-webkit-scrollbar-thumb {
    background: linear-gradient(180deg, rgba(116, 255, 139, 0.28), rgba(181, 255, 194, 0.5));
    border: 1px solid rgba(167, 255, 180, 0.24);
    box-shadow: inset 0 0 0 1px rgba(13, 26, 13, 0.32);
}

.dossier-terminal__body::-webkit-scrollbar-thumb:hover {
    background: linear-gradient(180deg, rgba(134, 255, 154, 0.38), rgba(197, 255, 207, 0.64));
}

.dossier-terminal__header {
    display: grid;
    gap: 4px;
}

.dossier-terminal__path,
.dossier-terminal__status,
.dossier-terminal__prompt {
    margin: 0;
    font-size: 1rem;
    letter-spacing: 0.05em;
}

.dossier-terminal__title {
    margin: 0;
    color: rgba(194, 255, 198, 0.98);
    font-size: clamp(1.25rem, 1.8vw, 1.7rem);
    line-height: 1;
    letter-spacing: 0.06em;
}

.dossier-terminal__identity {
    display: grid;
    gap: 6px;
    padding: 10px 0;
    border-top: 1px solid rgba(124, 255, 138, 0.18);
    border-bottom: 1px solid rgba(124, 255, 138, 0.18);
}

.dossier-terminal__line {
    display: grid;
    grid-template-columns: 170px minmax(0, 1fr) auto;
    gap: 10px;
    margin: 0;
    align-items: baseline;
    font-size: 1.05rem;
}

.dossier-terminal__label {
    color: rgba(145, 255, 161, 0.84);
}

.dossier-terminal__value {
    color: rgba(197, 255, 204, 0.98);
    font-weight: 400;
}

.dossier-terminal__meta {
    color: rgba(139, 233, 152, 0.66);
    font-style: normal;
}

.dossier-terminal__stats {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 10px;
}

.dossier-terminal__stat {
    display: grid;
    gap: 3px;
    padding: 8px 10px;
    border: 1px solid rgba(124, 255, 138, 0.16);
    background: rgba(17, 36, 16, 0.12);
}

.dossier-terminal__stat-label {
    color: rgba(144, 255, 161, 0.82);
    font-size: 0.96rem;
    letter-spacing: 0.05em;
}

.dossier-terminal__stat-value {
    color: rgba(205, 255, 210, 0.98);
    font-size: clamp(1.25rem, 1.8vw, 1.8rem);
    line-height: 1;
    font-weight: 400;
}

.dossier-terminal__history-block {
    display: grid;
    gap: 8px;
}

.dossier-terminal__history-title {
    margin: 0;
    font-size: 1rem;
    color: rgba(149, 255, 164, 0.88);
    letter-spacing: 0.06em;
}

.dossier-terminal__history {
    margin: 0;
    overflow-x: auto;
    padding: 10px 12px;
    border: 1px solid rgba(124, 255, 138, 0.14);
    background: rgba(12, 22, 11, 0.12);
    color: rgba(182, 255, 188, 0.95);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
}

/* ── Dossier : cartouches ────────────────────────────────────────────────── */
.dossier-cartouche {
    display: grid;
    gap: 6px;
    padding: 10px 0;
    border-top: 1px solid rgba(124, 255, 138, 0.18);
    border-bottom: 1px solid rgba(124, 255, 138, 0.18);
}

.dossier-cartouche__titre {
    margin: 0 0 4px;
    font-size: 0.88rem;
    letter-spacing: 0.12em;
    color: rgba(124, 255, 138, 0.55);
}

.dossier-terminal__line--bio {
    align-items: flex-start;
}

/* ── Dossier : champs éditables inline ──────────────────────────────────── */
.dossier-editable {
    color: rgba(197, 255, 204, 0.98);
    cursor: text;
    border-bottom: 1px dashed rgba(124, 255, 138, 0.28);
    min-width: 60px;
    outline: none;
    transition: border-color 0.15s;
}

.dossier-editable:hover,
.dossier-editable:focus {
    border-bottom-color: rgba(124, 255, 138, 0.72);
}

.dossier-editable--empty {
    color: rgba(124, 255, 138, 0.38);
    font-style: italic;
}

.dossier-editable--active {
    border-bottom-color: var(--ui-color);
}

.dossier-input {
    background: transparent;
    border: none;
    border-bottom: 1px solid rgba(0, 255, 204, 0.6);
    color: rgba(197, 255, 204, 0.98);
    font-family: 'VT323', 'Share Tech Mono', monospace;
    font-size: inherit;
    outline: none;
    width: 100%;
    padding: 0 2px;
}

.dossier-input--textarea {
    resize: vertical;
    line-height: 1.4;
}


.dossier-terminal__prompt {
    color: rgba(187, 255, 193, 0.96);
}

.page-body--map.private-body {
    --ui-color: #7dff8d;
    --ui-border: rgba(124, 255, 138, 0.24);
    --panel-bg: rgba(3, 16, 7, 0.84);
}

.map-monitor-shell {
    position: relative;
    box-sizing: border-box;
    height: 100%;
    min-height: 0;
    display: grid;
    grid-template-rows: auto minmax(0, 1fr);
    gap: 6px;
    padding: 1px 4px 0;
    color: rgba(170, 255, 176, 0.96);
    text-shadow: 0 0 4px rgba(124, 255, 138, 0.14);
    overflow: hidden;
    border: none;
    background: transparent;
    box-shadow: none;
}

.map-monitor-shell::before {
    content: none;
}

.map-monitor-header {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 6px 10px;
    flex-wrap: wrap;
}

.map-monitor-header__path,
.map-monitor-header__subtitle {
    margin: 0;
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.82rem;
    line-height: 0.94;
    letter-spacing: 0.035em;
    opacity: 0.88;
}

.map-monitor-header__title {
    margin: 0;
    color: rgba(194, 255, 198, 0.98);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: clamp(1.08rem, 1.45vw, 1.32rem);
    line-height: 0.96;
    letter-spacing: 0.045em;
}

.map-monitor-header__status {
    display: inline-flex;
    align-items: center;
    min-height: 22px;
    padding: 2px 7px;
    border: 1px solid rgba(124, 255, 138, 0.18);
    background: rgba(9, 20, 9, 0.22);
    box-shadow: none;
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.82rem;
    line-height: 1;
}

.map-monitor-main {
    min-height: 0;
    display: block;
    position: relative;
    overflow: hidden;
}

.map-monitor-main .map-container {
    min-width: 0;
    min-height: 0;
    height: 100%;
    border: 1px solid rgba(124, 255, 138, 0.08);
    border-radius: 0;
    background: rgba(0, 7, 3, 0.82);
    box-shadow: inset 0 0 0 1px rgba(90, 180, 104, 0.03);
}

.map-monitor-overlay {
    position: absolute;
    left: 10px;
    bottom: 8px;
    padding: 4px 6px;
    border: 1px solid rgba(124, 255, 138, 0.1);
    background: rgba(1, 4, 2, 0.38);
    box-shadow: none;
    color: rgba(188, 255, 194, 0.8);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.72rem;
    line-height: 0.95;
    pointer-events: none;
    z-index: 10;
}

.map-selection-card {
    position: absolute;
    top: 10px;
    right: 10px;
    width: 82px;
    max-height: 34px;
    min-height: 34px;
    display: grid;
    grid-template-rows: auto minmax(0, 1fr) auto;
    gap: 0;
    padding: 6px 8px;
    border: 1px solid rgba(124, 255, 138, 0.08);
    background:
        linear-gradient(180deg, rgba(5, 14, 7, 0.22), rgba(2, 8, 4, 0.3)),
        repeating-linear-gradient(180deg, rgba(123, 255, 146, 0.01) 0 1px, transparent 1px 4px);
    box-shadow: inset 0 0 0 1px rgba(104, 212, 121, 0.02);
    backdrop-filter: blur(1.5px);
    overflow: hidden;
    pointer-events: none;
    z-index: 25;
    transition:
        width 0.42s cubic-bezier(0.2, 0.8, 0.2, 1),
        max-height 0.42s cubic-bezier(0.2, 0.8, 0.2, 1),
        min-height 0.42s cubic-bezier(0.2, 0.8, 0.2, 1),
        padding 0.42s cubic-bezier(0.2, 0.8, 0.2, 1),
        border-color 0.28s ease,
        background 0.28s ease;
}

.map-selection-card::before {
    content: '';
    position: absolute;
    inset: 0;
    background:
        linear-gradient(90deg, rgba(124, 255, 138, 0.12), transparent 18px) top left / 24px 1px no-repeat,
        linear-gradient(180deg, rgba(124, 255, 138, 0.12), transparent 18px) top left / 1px 24px no-repeat,
        linear-gradient(270deg, rgba(124, 255, 138, 0.12), transparent 18px) top right / 24px 1px no-repeat,
        linear-gradient(180deg, rgba(124, 255, 138, 0.12), transparent 18px) top right / 1px 24px no-repeat;
    pointer-events: none;
    opacity: 0.56;
}

.map-selection-card--opening,
.map-selection-card--active {
    width: min(248px, 34%);
    max-height: calc(100% - 20px);
    min-height: 96px;
    gap: 8px;
    padding: 8px 9px 6px;
}

.map-selection-card--opening {
    border-color: rgba(124, 255, 138, 0.12);
    background:
        linear-gradient(180deg, rgba(7, 18, 9, 0.5), rgba(2, 10, 4, 0.62)),
        repeating-linear-gradient(180deg, rgba(123, 255, 146, 0.014) 0 1px, transparent 1px 4px);
}

.map-selection-card--active {
    border-color: rgba(124, 255, 138, 0.16);
    background:
        linear-gradient(180deg, rgba(7, 18, 9, 0.62), rgba(2, 10, 4, 0.72)),
        repeating-linear-gradient(180deg, rgba(123, 255, 146, 0.014) 0 1px, transparent 1px 4px);
}

.map-selection-card__header {
    display: grid;
    gap: 2px;
    min-height: 18px;
}

.map-selection-card__header-row {
    display: flex;
    align-items: center;
    gap: 6px;
    min-width: 0;
}

.map-selection-card__sigil {
    position: relative;
    display: inline-grid;
    place-items: center;
    width: 10px;
    height: 10px;
    flex: 0 0 10px;
    border: 1px solid rgba(124, 255, 138, 0.32);
    transform: rotate(45deg);
    box-shadow: 0 0 6px rgba(124, 255, 138, 0.12);
    will-change: transform, opacity, filter;
}

.map-selection-card__sigil-mark {
    position: absolute;
    top: 50%;
    left: 50%;
    color: rgba(214, 255, 218, 0.96);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.72rem;
    line-height: 1;
    transform: translate(-50%, -54%) rotate(-45deg);
    text-shadow: 0 0 2px rgba(170, 255, 176, 0.24);
    will-change: transform, opacity, filter;
}

.map-selection-card--buzz .map-selection-card__sigil {
    animation: auspexSigilBuzz 0.12s steps(2, end) 8;
}

.map-selection-card--buzz .map-selection-card__sigil-mark {
    animation: auspexMarkBuzz 0.12s steps(2, end) 8;
}

.map-selection-card__kicker {
    margin: 0;
    color: rgba(165, 255, 176, 0.72);
    font-size: 0.58rem;
    line-height: 1;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    white-space: nowrap;
    overflow: hidden;
}

.map-selection-card:not(.map-selection-card--opening):not(.map-selection-card--active) .map-monitor-sidebar__title,
.map-selection-card:not(.map-selection-card--opening):not(.map-selection-card--active) .map-monitor-sidebar__empty,
.map-selection-card:not(.map-selection-card--opening):not(.map-selection-card--active) .map-monitor-sidebar__content,
.map-selection-card:not(.map-selection-card--opening):not(.map-selection-card--active) .map-monitor-sidebar__warning {
    opacity: 0;
    max-height: 0;
    overflow: hidden;
}

.map-selection-card--opening .map-monitor-sidebar__empty,
.map-selection-card--active .map-monitor-sidebar__warning {
    opacity: 1;
}

.map-monitor-sidebar__title {
    margin: 0;
    padding-bottom: 4px;
    border-bottom: 1px solid rgba(124, 255, 138, 0.1);
    color: rgba(194, 255, 198, 0.94);
    font-size: 0.82rem;
    text-transform: uppercase;
    letter-spacing: 0.12em;
}

.map-monitor-sidebar__content {
    min-height: 0;
    display: grid;
    grid-template-rows: auto auto auto auto;
    gap: 8px;
    overflow-y: auto;
    padding-right: 2px;
}

.map-monitor-sidebar__content--reveal > * {
    opacity: 0;
    clip-path: inset(0 0 100% 0);
    animation: terminalLineIn 0.26s steps(8, end) forwards;
}

.map-monitor-sidebar__content--reveal > *:nth-child(1) { animation-delay: 0.08s; }
.map-monitor-sidebar__content--reveal > *:nth-child(2) { animation-delay: 0.20s; }
.map-monitor-sidebar__content--reveal > *:nth-child(3) { animation-delay: 0.32s; }
.map-monitor-sidebar__content--reveal > *:nth-child(4) { animation-delay: 0.44s; }

.map-monitor-sidebar__content.hidden {
    display: none;
}

.map-monitor-sidebar__name {
    margin: 0;
    color: rgba(208, 255, 212, 0.98);
    font-size: 1.02rem;
    line-height: 0.98;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

.map-monitor-sidebar__class {
    margin: 1px 0 0;
    color: rgba(160, 255, 172, 0.68);
    font-size: 0.68rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.map-monitor-sidebar__facts {
    display: grid;
    gap: 2px;
}

.map-monitor-sidebar__row {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 8px;
    padding: 3px 0;
    border-bottom: 1px solid rgba(124, 255, 138, 0.06);
    font-size: 0.69rem;
}

.map-monitor-sidebar__row span:first-child {
    color: rgba(158, 255, 171, 0.68);
    letter-spacing: 0.08em;
}

.map-monitor-sidebar__value {
    color: rgba(201, 255, 208, 0.98);
    text-align: right;
    letter-spacing: 0.04em;
}

.map-monitor-sidebar__log {
    padding: 6px 7px;
    border: 1px solid rgba(124, 255, 138, 0.08);
    border-left: 2px solid rgba(124, 255, 138, 0.14);
    background: rgba(0, 0, 0, 0.14);
}

.map-monitor-sidebar__log h4 {
    margin: 0 0 4px;
    color: rgba(160, 255, 172, 0.66);
    font-size: 0.64rem;
    text-transform: uppercase;
    letter-spacing: 0.12em;
}

.map-monitor-sidebar__log p {
    margin: 0;
    color: rgba(197, 255, 204, 0.9);
    font-size: 0.72rem;
    line-height: 1.2;
    font-style: italic;
}

.map-monitor-sidebar__meter {
    display: grid;
    gap: 4px;
}

.map-monitor-sidebar__meter p {
    margin: 0;
    color: rgba(160, 255, 172, 0.7);
    font-size: 0.64rem;
    text-transform: uppercase;
    letter-spacing: 0.12em;
}

.map-monitor-sidebar__meter-bar {
    width: 100%;
    height: 5px;
    border: 1px solid rgba(124, 255, 138, 0.08);
    background:
        repeating-linear-gradient(90deg, rgba(124, 255, 138, 0.08) 0 6px, rgba(4, 14, 6, 0.7) 6px 8px);
    overflow: hidden;
}

.map-monitor-sidebar__meter-fill {
    height: 100%;
    background: linear-gradient(90deg, rgba(78, 152, 83, 0.34), rgba(137, 255, 150, 0.88));
    box-shadow: 0 0 6px rgba(124, 255, 138, 0.18);
}

.map-monitor-sidebar__meter-fill--danger {
    background: linear-gradient(90deg, rgba(124, 44, 44, 0.42), rgba(255, 122, 122, 0.92));
    box-shadow: 0 0 6px rgba(255, 120, 120, 0.2);
}

.map-monitor-sidebar__empty {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    opacity: 0.36;
    text-align: center;
    font-size: 0.72rem;
    font-style: italic;
}

.map-monitor-sidebar__warning {
    font-size: 0.56rem;
    line-height: 1.2;
    color: rgba(214, 226, 170, 0.62);
    opacity: 0.8;
    border-top: 1px solid rgba(124, 255, 138, 0.08);
    padding-top: 6px;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.odb-terminal {
    position: relative;
    box-sizing: border-box;
    height: 100%;
    min-height: 0;
    display: grid;
    grid-template-rows: auto auto minmax(0, 1fr) auto;
    gap: 6px;
    padding: 2px 6px 0;
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    color: rgba(170, 255, 176, 0.96);
    text-shadow: 0 0 4px rgba(124, 255, 138, 0.42), 0 0 10px rgba(124, 255, 138, 0.14);
    overflow: hidden;
}

.odb-terminal__header {
    display: grid;
    gap: 2px;
}

.odb-terminal__meta,
.odb-terminal__lore,
.odb-terminal__footer,
.odb-terminal__supply {
    margin: 0;
    font-size: 0.88rem;
    letter-spacing: 0.03em;
}

.odb-terminal__meta--key {
    font-size: 1.5rem;
    color: rgba(210, 255, 214, 0.98);
    letter-spacing: 0.05em;
    margin-top: 2px;
    line-height: 1.2;
}

.odb-terminal__lore {
    margin-top: 3px;
    color: rgba(194, 255, 198, 0.94);
}

.odb-terminal__topbar {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: nowrap;
}

.odb-terminal__supply {
    flex: 1 1 auto;
    min-width: 180px;
}

.odb-terminal__counters {
    --odb-diamond-size: 39px;
    --odb-diamond-value-size: 2rem;
    --odb-diamond-label-size: 1rem;
    display: flex;
    align-items: flex-start;
    gap: 64px;
    padding: 6px 24px 18px 10px;
    overflow: visible;
}

.odb-diamond {
    width: var(--odb-diamond-size);
    height: var(--odb-diamond-size);
    flex: 0 0 var(--odb-diamond-size);
    position: relative;
    transform: rotate(45deg);
    border: 1px solid rgba(124, 255, 138, 0.42);
    background: rgba(10, 20, 10, 0.12);
    display: grid;
    place-items: center;
    overflow: visible;
}

.odb-diamond__inner {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) rotate(-45deg);
    display: grid;
    justify-items: center;
    align-items: center;
    gap: 0;
    width: max-content;
    min-width: 122px;
    padding-inline: 8px;
    overflow: visible;
}

.odb-diamond__value {
    color: rgba(196, 255, 202, 0.98);
    font-size: var(--odb-diamond-value-size);
    line-height: 0.88;
    letter-spacing: 0.01em;
    text-align: center;
}

.odb-diamond__label {
    color: rgba(151, 255, 162, 0.82);
    font-size: var(--odb-diamond-label-size);
    line-height: 0.9;
    text-transform: none;
    text-align: center;
    max-width: none;
    white-space: nowrap;
    margin-top: -2px;
    padding-inline: 6px;
}

.odb-terminal__main {
    min-height: 0;
    display: grid;
    grid-template-columns: minmax(0, 1.45fr) minmax(180px, 0.78fr);
    gap: 8px;
    overflow: hidden;
}

.odb-terminal__left {
    min-height: 0;
    display: grid;
    grid-template-rows: auto minmax(0, 1fr);
    gap: 8px;
    overflow: auto;
    padding-right: 4px;
    scrollbar-width: thin;
    scrollbar-color: rgba(154, 255, 170, 0.55) rgba(10, 22, 11, 0.28);
}

.odb-terminal__left::-webkit-scrollbar {
    width: 9px;
}

.odb-terminal__left::-webkit-scrollbar-track {
    background: rgba(10, 22, 11, 0.28);
}

.odb-terminal__left::-webkit-scrollbar-thumb {
    background: rgba(154, 255, 170, 0.45);
    border-radius: 999px;
    border: 1px solid rgba(124, 255, 138, 0.14);
}

.odb-terminal__left::-webkit-scrollbar-thumb:hover {
    background: rgba(154, 255, 170, 0.7);
}

.odb-force-header {
    display: grid;
    gap: 6px;
}

.odb-force-header__titles {
    display: grid;
    gap: 2px;
}

.odb-force-header__subtitle {
    margin: 0;
    color: rgba(145, 255, 161, 0.76);
    font-size: 0.86rem;
    letter-spacing: 0.03em;
}

.odb-dos-menu {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
}

.odb-dos-menu__pagination {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 26px;
    padding: 2px 8px;
    border: 1px dashed rgba(124, 255, 138, 0.24);
    color: rgba(174, 255, 183, 0.88);
    font-size: 0.92rem;
    line-height: 1;
}

.odb-dos-menu__item {
    border: 1px solid rgba(124, 255, 138, 0.28);
    background: rgba(12, 22, 11, 0.08);
    color: rgba(176, 255, 184, 0.92);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.96rem;
    line-height: 1;
    padding: 4px 10px;
    cursor: pointer;
}

.odb-dos-menu__item:hover,
.odb-dos-menu__item:focus-visible,
.odb-dos-menu__item.is-selected {
    outline: none;
    border-color: rgba(186, 255, 194, 0.46);
    background: rgba(95, 255, 119, 0.12);
    color: rgba(206, 255, 210, 0.98);
    box-shadow: inset 0 0 0 1px rgba(124, 255, 138, 0.14);
}

.odb-dos-menu__item--danger {
    border-color: rgba(255, 80, 80, 0.3);
    color: rgba(255, 160, 160, 0.85);
}
.odb-dos-menu__item--danger:hover {
    border-color: rgba(255, 80, 80, 0.7);
    background: rgba(255, 60, 60, 0.1);
    color: rgba(255, 180, 180, 0.98);
}

.odb-unite-libre {
    display: grid;
    gap: 6px;
    margin-bottom: 14px;
    padding: 0 10px 10px;
    background: rgba(8, 16, 6, 0.12);
}

.odb-unite-libre--collapsed .odb-unite-libre_liste {
    display: none;
}

.odb-unite-libre_liste {
    display: block;
    max-height: 260px;
    overflow-y: auto;
    padding-right: 4px;
    border-top: 1px dashed rgba(124, 255, 138, 0.18);
    scrollbar-width: thin;
    scrollbar-color: rgba(154, 255, 170, 0.55) rgba(10, 22, 11, 0.28);
}

.odb-unite-libre_liste::-webkit-scrollbar {
    width: 9px;
}

.odb-unite-libre_liste::-webkit-scrollbar-track {
    background: rgba(10, 22, 11, 0.28);
}

.odb-unite-libre_liste::-webkit-scrollbar-thumb {
    background: rgba(154, 255, 170, 0.45);
    border-radius: 999px;
    border: 1px solid rgba(124, 255, 138, 0.14);
}

.odb-unite-libre_liste::-webkit-scrollbar-thumb:hover {
    background: rgba(154, 255, 170, 0.7);
}

.odb-unite-libre_liste_elmt {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 8px;
    padding: 8px 0;
    border-bottom: 1px dotted rgba(124, 255, 138, 0.16);
    background: transparent;
    color: rgba(184, 255, 178, 0.92);
    cursor: pointer;
    font-family: 'Share Tech Mono', monospace;
    line-height: 1.3;
}

.odb-unite-libre_liste_elmt:nth-child(odd) {
    background: rgba(14, 24, 12, 0.14);
}

.odb-unite-libre_liste_elmt:nth-child(even) {
    background: rgba(10, 20, 9, 0.08);
}

.odb-unite-libre_liste_elmt:hover,
.odb-unite-libre_liste_elmt:focus-visible {
    outline: none;
    background: rgba(22, 42, 22, 0.16);
}

.odb-unite-libre_liste_elmt__content {
    display: grid;
    gap: 2px;
    min-width: 0;
}

.odb-unite-libre_liste_elmt__nom {
    font-family: 'VT323', 'Share Tech Mono', monospace;
    color: rgba(206, 255, 210, 0.96);
    font-size: 0.98rem;
    white-space: pre;
}

.odb-unite-libre_liste_elmt__nom::before {
    content: '> ';
    color: rgba(154, 255, 170, 0.85);
}

.odb-unite-libre_liste_elmt__info {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    color: rgba(156, 255, 161, 0.88);
    font-size: 0.88rem;
}

.odb-unite-libre_liste_elmt__info span:not(:last-child)::after {
    content: ' |';
    color: rgba(156, 255, 161, 0.6);
    margin-left: 8px;
}

.odb-unite-libre_liste_elmt__type,
.odb-unite-libre_liste_elmt__effectif,
.odb-unite-libre_liste_elmt__val {
    display: inline-flex;
    align-items: center;
}

.odb-unite-libre_liste_elmt__val {
    margin-left: auto;
    font-weight: 600;
    color: rgba(206, 255, 210, 0.96);
}

.odb-unite-libre_liste_elmt__actions {
    display: grid;
    gap: 4px;
    justify-items: end;
}

.odb-unite-libre_liste_elmt__action {
    position: relative;
    width: 26px;
    height: 24px;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 0.92rem;
    line-height: 1;
    border: none;
    background: transparent;
    color: rgba(190, 255, 188, 0.95);
}

.odb-unite-libre_liste_elmt__action:hover,
.odb-unite-libre_liste_elmt__action:focus-visible {
    color: rgba(255, 255, 255, 0.95);
}

.odb-unite-libre_liste_elmt__action::after {
    content: attr(data-tooltip);
    position: absolute;
    top: -1.8rem;
    right: 0;
    padding: 2px 6px;
    border: 1px solid rgba(124, 255, 138, 0.24);
    background: rgba(0, 0, 0, 0.85);
    color: rgba(206, 255, 210, 0.92);
    font-size: 0.75rem;
    white-space: nowrap;
    opacity: 0;
    transform: translateY(4px);
    transition: opacity 120ms ease, transform 120ms ease;
    pointer-events: none;
}

.odb-unite-libre_liste_elmt__action:hover::after,
.odb-unite-libre_liste_elmt__action:focus-visible::after {
    opacity: 1;
    transform: translateY(0);
}

.odb-unite-libre__loading,
.odb-unite-libre__empty {
    color: rgba(174, 255, 183, 0.9);
    font-size: 0.92rem;
}

.odb-force-stack {
    min-height: 0;
    overflow: auto;
    padding-right: 4px;
    scrollbar-width: thin;
    scrollbar-color: rgba(154, 255, 170, 0.45) rgba(10, 22, 11, 0.28);
}

.odb-force-stack::-webkit-scrollbar {
    width: 10px;
}

.odb-force-stack::-webkit-scrollbar-track {
    background: rgba(10, 22, 11, 0.28);
    border-left: 1px solid rgba(124, 255, 138, 0.12);
}

.odb-force-stack::-webkit-scrollbar-thumb {
    background: linear-gradient(180deg, rgba(116, 255, 139, 0.28), rgba(181, 255, 194, 0.5));
    border: 1px solid rgba(167, 255, 180, 0.24);
    box-shadow: inset 0 0 0 1px rgba(13, 26, 13, 0.32);
}

.odb-force-stack::-webkit-scrollbar-thumb:hover {
    background: linear-gradient(180deg, rgba(134, 255, 154, 0.38), rgba(197, 255, 207, 0.64));
}

.odb-force-card {
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-height: 100%;
    padding: 8px 10px;
    border: 1px dashed rgba(124, 255, 138, 0.28);
    background: rgba(11, 22, 11, 0.1);
}

/* ── Effet "réécriture moniteur" sur le stack de forces ────────────── */
@keyframes crt-rewrite {
    0%   { opacity: 0; clip-path: inset(100% 0 0 0); }
    18%  { opacity: 0.55; clip-path: inset(60% 0 0 0); }
    42%  { opacity: 0.8;  clip-path: inset(20% 0 0 0); }
    70%  { opacity: 0.92; clip-path: inset(4%  0 0 0); }
    100% { opacity: 1;    clip-path: inset(0   0 0 0); }
}
.odb-force-stack--rewriting > * {
    animation: crt-rewrite 160ms steps(6, end) forwards;
}
.odb-force-stack--no-data {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 80px;
    color: rgba(124, 255, 138, 0.45);
    font-family: 'Share Tech Mono', 'Courier New', monospace;
    font-size: clamp(0.82rem, 0.9vw, 0.9rem);
    letter-spacing: 0.08em;
    border: 1px dashed rgba(124, 255, 138, 0.18);
    background: rgba(11, 22, 11, 0.1);
    padding: 16px;
}

.odb-force-card p,
.odb-force-card pre {
    margin: 0;
}

.odb-force-card__header {
    display: flex;
    flex-direction: column;
    gap: 1px;
}

.odb-force-card .odb-terminal__section-title {
    margin: 0;
    line-height: 1.2;
}

.odb-force-card__meta {
    display: flex;
    align-items: center;
    gap: 6px;
    margin: 0;
    color: rgba(150, 255, 165, 0.78);
    font-size: 0.92rem;
    letter-spacing: 0.03em;
}

.odb-force-card__block {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.odb-force-card__block--units {
    min-height: 0;
}

.odb-force-card__label {
    margin: 0;
    line-height: 1.2;
    color: rgba(191, 255, 197, 0.96);
    font-size: 0.96rem;
    letter-spacing: 0.05em;
}

.odb-force-card .odb-terminal__data,
.odb-force-card .odb-terminal__roster {
    margin: 0;
    padding: 4px 8px;
    line-height: 1.4;
    border: 1px dashed rgba(124, 255, 138, 0.18);
    background: rgba(12, 22, 11, 0.1);
    overflow: visible;
}

.odb-terminal__roster-list {
    display: grid;
    gap: 8px;
    padding-top: 2px;
}

.odb-roster-unit {
    position: relative;
    display: block;
    padding: 4px;
    border: 1px dashed rgba(124, 255, 138, 0.12);
    background: rgba(11, 22, 11, 0.08);
}

.odb-roster-unit .odb-terminal__roster {
    padding-right: 88px;
}

.odb-unit-btn {
    border: 1px solid rgba(124, 255, 138, 0.28);
    background: rgba(12, 22, 11, 0.08);
    color: rgba(176, 255, 184, 0.92);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.96rem;
    line-height: 1;
    letter-spacing: 0.03em;
    min-height: 26px;
    padding: 4px 9px;
    cursor: pointer;
}

.odb-unit-btn:hover,
.odb-unit-btn:focus-visible {
    border-color: rgba(186, 255, 194, 0.46);
    background: rgba(95, 255, 119, 0.12);
    color: rgba(206, 255, 210, 0.98);
    box-shadow: inset 0 0 0 1px rgba(124, 255, 138, 0.14);
    outline: none;
}

.odb-unit-btn--delete {
    position: absolute;
    top: 12px;
    right: 12px;
    min-width: 56px;
    text-align: center;
}

.odb-unit-btn--add {
    justify-self: start;
    min-width: 168px;
    margin-top: 2px;
}

@media (max-width: 980px) {
    .odb-unit-btn--delete {
        top: 10px;
        right: 10px;
    }
}

.odb-terminal__focus,
.odb-terminal__roster-wrap,
.odb-terminal__right {
    border: 1px dashed rgba(124, 255, 138, 0.28);
    background: rgba(11, 22, 11, 0.1);
    padding: 8px 10px;
}

/* Colonne droite : flex column pour les sections narratives éditables */
.odb-terminal__right {
    display: flex;
    flex-direction: column;
    gap: 12px;
    overflow-y: auto;
    scrollbar-width: thin;
    scrollbar-color: rgba(124, 255, 138, 0.4) rgba(0, 20, 10, 0.3);
}
.odb-terminal__right::-webkit-scrollbar { width: 4px; }
.odb-terminal__right::-webkit-scrollbar-track { background: rgba(0, 20, 10, 0.3); }
.odb-terminal__right::-webkit-scrollbar-thumb { background: rgba(124, 255, 138, 0.4); }
.odb-terminal__right::-webkit-scrollbar-thumb:hover { background: rgba(124, 255, 138, 0.7); }

.odb-right-section {
    display: flex;
    flex-direction: column;
    gap: 5px;
}

.odb-editable-inline {
    display: inline;
    color: rgba(198, 255, 202, 0.99);
    border-bottom: 1px solid rgba(124, 255, 138, 0.4);
    padding: 0 2px;
    cursor: text;
    outline: none;
    min-width: 60px;
}
.odb-editable-inline:focus {
    border-bottom-color: rgba(124, 255, 138, 0.9);
    background: rgba(124, 255, 138, 0.06);
}

[data-force-action="add-unit"] {
    align-self: flex-start;
    margin-top: 2px;
}

/* Select format de force */
.odb-force-format {
    background: transparent;
    border: none;
    border-bottom: 1px solid rgba(124, 255, 138, 0.35);
    color: rgba(182, 255, 188, 0.9);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: inherit;
    cursor: pointer;
    outline: none;
    padding: 0 2px;
    vertical-align: middle;
    line-height: 1;
}
.odb-force-format:focus { border-bottom-color: rgba(124, 255, 138, 0.8); }
.odb-force-format option { background: #0b160b; color: rgba(182, 255, 188, 0.9); }
.odb-force-card__maxval,
.odb-force-card__btfight { color: rgba(124, 255, 138, 0.7); font-size: 0.85em; margin-left: 6px; }

/* Lignes pt* masquables */
.odb-force-pt-line {
    font-family: 'Share Tech Mono', 'Courier New', monospace;
    font-size: clamp(0.78rem, 0.88vw, 0.88rem);
    color: rgba(182, 255, 188, 0.85);
    margin: 0;
    white-space: pre;
}
.odb-force-pt-line[hidden] { display: none; }

.odb-terminal__editable {
    width: 100%;
    background: transparent;
    border: none;
    border-bottom: 1px solid rgba(124, 255, 138, 0.28);
    color: rgba(182, 255, 188, 0.95);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: clamp(0.9rem, 0.98vw, 0.98rem);
    line-height: 1.4;
    resize: vertical;
    padding: 4px 2px;
    outline: none;
    box-sizing: border-box;
    field-sizing: content;
    min-height: 2.8em;
}
.odb-terminal__editable:focus {
    border-bottom-color: rgba(124, 255, 138, 0.8);
    background: rgba(124, 255, 138, 0.04);
}
.odb-terminal__editable::placeholder {
    color: rgba(124, 255, 138, 0.35);
    font-style: italic;
}

.odb-terminal__editable {
    width: 100%;
    background: transparent;
    border: none;
    border-bottom: 1px solid rgba(124, 255, 138, 0.28);
    color: rgba(182, 255, 188, 0.95);
    font-family: 'VT323', 'Share Tech Mono', 'Courier New', monospace;
    font-size: clamp(0.9rem, 0.98vw, 0.98rem);
    line-height: 1.4;
    resize: vertical;
    padding: 4px 2px;
    outline: none;
    box-sizing: border-box;
    field-sizing: content;
    min-height: 2.8em;
}
.odb-terminal__editable:focus {
    border-bottom-color: rgba(124, 255, 138, 0.8);
    background: rgba(124, 255, 138, 0.04);
}
.odb-terminal__editable::placeholder {
    color: rgba(124, 255, 138, 0.35);
    font-style: italic;
}

/* ══ Popup sélection / création d'unité ═══════════════════════════════════ */
@keyframes crt-scan-in {
    0%   { clip-path: inset(0 0 100% 0); opacity: 0.2; }
    40%  { clip-path: inset(0 0 55% 0);  opacity: 0.7; }
    75%  { clip-path: inset(0 0 12% 0);  opacity: 0.9; }
    100% { clip-path: inset(0 0 0% 0);   opacity: 1;   }
}

.odb-unit-popup {
    position: absolute;
    inset: 0;
    z-index: 60;
    display: flex;
    align-items: center;
    justify-content: center;
    background: rgba(4, 10, 4, 0.78);
}
.odb-unit-popup[hidden] { display: none; }

.odb-unit-popup__overlay {
    position: absolute;
    inset: 0;
    cursor: default;
}

.odb-unit-popup__panel {
    position: relative;
    width: 90%;
    max-height: 85%;
    display: flex;
    flex-direction: column;
    border: 1px solid rgba(124, 255, 138, 0.55);
    background: rgba(6, 14, 6, 0.98);
    padding: 10px 12px;
    gap: 6px;
}
.odb-unit-popup__panel.crt-scan-in {
    animation: crt-scan-in 200ms steps(6, end) forwards;
}

.odb-unit-popup__header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding-bottom: 5px;
    border-bottom: 1px dashed rgba(124, 255, 138, 0.3);
    flex-shrink: 0;
}

.odb-unit-popup__title {
    margin: 0;
    font-size: 0.82rem;
    letter-spacing: 0.07em;
    color: rgba(191, 255, 197, 0.88);
    line-height: 1;
}

.odb-unit-popup__close {
    background: none;
    border: none;
    color: rgba(124, 255, 138, 0.65);
    font-family: 'VT323', monospace;
    font-size: 1.3rem;
    cursor: pointer;
    padding: 0 2px;
    line-height: 1;
    flex-shrink: 0;
}
.odb-unit-popup__close:hover { color: rgba(210, 255, 214, 0.98); }

.odb-unit-popup__body {
    overflow-y: auto;
    display: grid;
    gap: 10px;
    padding: 8px 0;
    scrollbar-width: thin;
    scrollbar-color: rgba(124, 255, 138, 0.35) transparent;
}

.odb-unit-popup__section {
    display: grid;
    gap: 8px;
}

.odb-unit-popup__row {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 10px;
    align-items: center;
    padding: 10px 12px;
    background: rgba(12, 20, 12, 0.24);
    border: 1px solid rgba(124, 255, 138, 0.12);
    border-radius: 4px;
}

.odb-unit-popup__item {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 10px;
    align-items: center;
    width: 100%;
    text-align: left;
    background: rgba(12, 20, 12, 0.18);
    border: 1px solid rgba(124, 255, 138, 0.1);
    color: rgba(182, 255, 188, 0.85);
    font-family: 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.88rem;
    letter-spacing: 0.02em;
    padding: 10px 12px;
    cursor: pointer;
    line-height: 1.2;
    justify-content: space-between;
}
.odb-unit-popup__item:hover,
.odb-unit-popup__item:focus-visible {
    background: rgba(124, 255, 138, 0.1);
    color: rgba(210, 255, 214, 0.98);
    outline: none;
}

.odb-unit-popup__item-label {
    display: inline-flex;
    flex-wrap: wrap;
    gap: 8px;
    min-width: 0;
    color: rgba(210, 255, 214, 0.94);
}

.odb-unit-popup__item-val {
    font-family: 'VT323', monospace;
    color: rgba(152, 255, 170, 0.92);
    white-space: nowrap;
}

.odb-unit-popup__item-type {
    color: rgba(124, 255, 138, 0.55);
    font-size: 0.82rem;
}

.odb-unit-popup__item--new {
    color: rgba(124, 255, 138, 0.6);
    letter-spacing: 0.07em;
    border-top: 1px dashed rgba(124, 255, 138, 0.25);
    border-bottom: none;
    margin-top: 5px;
    padding-top: 7px;
}

.odb-unit-popup__detail-summary {
    display: grid;
    gap: 8px;
    padding: 4px 0;
}

.odb-unit-popup__row {
    display: grid;
    grid-template-columns: minmax(120px, 1fr) minmax(100px, auto);
    gap: 10px;
    align-items: center;
    padding: 8px 10px;
    background: rgba(10, 18, 12, 0.2);
    border: 1px solid rgba(124, 255, 138, 0.12);
    border-radius: 4px;
}

.odb-unit-popup__detail-label {
    color: rgba(124, 255, 138, 0.75);
    font-size: 0.72rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.odb-unit-popup__detail-value {
    color: rgba(206, 255, 210, 0.95);
    font-family: 'VT323', monospace;
    font-size: 0.92rem;
    text-align: right;
    word-break: break-word;
}

.odb-unit-popup__detail-meta {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 8px;
}

.odb-unit-popup__detail-meta-item {
    display: grid;
    gap: 4px;
    padding: 8px;
    background: rgba(12, 24, 12, 0.3);
    border: 1px solid rgba(124, 255, 138, 0.12);
    border-radius: 4px;
}

.odb-unit-popup__detail-meta-title {
    color: rgba(124, 255, 138, 0.65);
    font-size: 0.75rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.odb-unit-popup__detail-meta-value {
    color: rgba(206, 255, 210, 0.96);
    font-family: 'VT323', monospace;
    font-size: 1rem;
}

.odb-unit-popup__detail-grid {
    display: grid;
    grid-template-columns: minmax(0, 3fr) minmax(220px, 1fr);
    gap: 10px;
    align-items: start;
}

.odb-unit-popup__detail-left,
.odb-unit-popup__detail-right {
    display: grid;
    gap: 10px;
}

.odb-unit-popup__detail-card,
.odb-unit-popup__detail-bottom-card,
.odb-unit-popup__detail-crusade {
    padding: 10px 12px;
    background: rgba(10, 18, 12, 0.24);
    border: 1px solid rgba(124, 255, 138, 0.12);
    border-radius: 4px;
}

.odb-unit-popup__detail-section-title {
    color: rgba(124, 255, 138, 0.75);
    font-size: 0.78rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    margin-bottom: 6px;
}

.odb-unit-popup__detail-row {
    display: grid;
    grid-template-columns: minmax(120px, 1fr) minmax(100px, auto);
    gap: 10px;
    align-items: center;
}

.odb-unit-popup__detail-tags,
.odb-unit-popup__detail-empty {
    margin: 0;
    color: rgba(124, 255, 138, 0.65);
    font-size: 0.82rem;
    letter-spacing: 0.05em;
    line-height: 1.3;
    word-break: break-word;
}

.odb-unit-popup__detail-crusade {
    display: grid;
    gap: 6px;
}

.odb-unit-popup__detail-counter {
    display: grid;
    gap: 6px;
}

.odb-unit-popup__detail-counter-row {
    display: grid;
    grid-template-columns: minmax(100px, 1fr) minmax(80px, auto);
    gap: 10px;
    align-items: center;
    padding: 8px 10px;
    background: rgba(12, 24, 12, 0.3);
    border: 1px solid rgba(124, 255, 138, 0.12);
    border-radius: 4px;
}

.odb-unit-popup__detail-bottom {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    margin-top: 10px;
}

.odb-unit-popup__detail-bottom-card {
    min-height: 120px;
}

.odb-unit-popup__detail-stats-grid {
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 8px;
    padding: 10px 0;
    background: rgba(12, 24, 12, 0.16);
    border: 1px solid rgba(124, 255, 138, 0.08);
    border-radius: 4px;
}

.odb-unit-popup__detail-stats-grid > div {
    padding: 8px 6px;
    text-align: center;
    font-size: 0.85rem;
    color: rgba(206, 255, 210, 0.94);
}

.odb-unit-popup__detail-stats-grid > div:nth-child(-n+6) {
    color: rgba(124, 255, 138, 0.75);
    text-transform: uppercase;
    letter-spacing: 0.08em;
}

.odb-unit-popup__detail-input {
    width: 100%;
    background: transparent;
    border: 1px solid rgba(124, 255, 138, 0.18);
    padding: 4px 8px;
    color: rgba(206, 255, 210, 0.96);
    font-family: 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.92rem;
    outline: none;
}

.odb-unit-popup__detail-input:focus {
    border-color: rgba(124, 255, 138, 0.55);
    background: rgba(124, 255, 138, 0.04);
}

.odb-unit-popup__tag-group {
    display: grid;
    gap: 6px;
    margin-top: 10px;
}

.odb-unit-popup__footer {
    margin-top: 8px;
    padding: 10px 12px;
    border-top: 1px solid rgba(124, 255, 138, 0.12);
    background: rgba(10, 18, 12, 0.24);
}

.odb-unit-popup__footer-actions {
    display: flex;
    gap: 8px;
    justify-content: flex-end;
    align-items: center;
    flex-wrap: wrap;
}

.odb-unit-popup__footer .odb-unit-popup__empty {
    margin: 0;
}


.odb-unit-popup__arme-table {
    display: grid;
    gap: 6px;
}

.odb-unit-popup__arme-row {
    display: grid;
    grid-template-columns: auto 1fr auto;
    gap: 10px;
    align-items: center;
    padding: 8px 10px;
    background: rgba(10, 18, 12, 0.18);
    border: 1px solid rgba(124, 255, 138, 0.08);
    border-radius: 4px;
}

.odb-unit-popup__arme-type {
    color: rgba(124, 255, 138, 0.75);
    font-size: 0.75rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    white-space: nowrap;
}

.odb-unit-popup__arme-nom {
    color: rgba(206, 255, 210, 0.96);
    font-family: 'VT323', monospace;
    font-size: 0.92rem;
}

.odb-unit-popup__arme-stats {
    color: rgba(183, 255, 179, 0.85);
    font-size: 0.75rem;
    text-align: right;
}

.odb-unit-popup__detail-actions {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}

.odb-unit-popup__detail-actions .odb-unit-popup__empty {
    margin: 0;
}

.odb-unit-popup__empty,
.odb-unit-popup__loading {
    margin: 0;
    color: rgba(124, 255, 138, 0.45);
    font-size: 0.84rem;
    letter-spacing: 0.05em;
    padding: 6px 4px;
    line-height: 1.2;
}

.odb-unit-popup__form {
    display: flex;
    flex-direction: column;
    gap: 8px;
    animation: crt-scan-in 160ms steps(5, end) forwards;
}

.odb-unit-popup__field {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.odb-unit-popup__field label {
    font-size: 0.75rem;
    letter-spacing: 0.07em;
    color: rgba(124, 255, 138, 0.65);
    line-height: 1;
}

.odb-unit-popup__field input {
    background: transparent;
    border: none;
    border-bottom: 1px solid rgba(124, 255, 138, 0.38);
    color: rgba(198, 255, 202, 0.99);
    font-family: 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.9rem;
    padding: 3px 2px;
    outline: none;
    width: 100%;
    caret-color: rgba(124, 255, 138, 0.9);
}
.odb-unit-popup__field input:focus {
    border-bottom-color: rgba(124, 255, 138, 0.9);
    background: rgba(124, 255, 138, 0.03);
}

.odb-unit-popup__actions {
    display: flex;
    gap: 6px;
    margin-top: 2px;
    flex-wrap: wrap;
}

/* Tags (mots clefs) */
.odb-unit-popup__tags {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    min-height: 20px;
}
.odb-unit-popup__tag {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: rgba(124, 255, 138, 0.1);
    border: 1px solid rgba(124, 255, 138, 0.35);
    color: rgba(198, 255, 202, 0.95);
    font-family: 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.75rem;
    padding: 1px 6px;
    letter-spacing: 0.04em;
}
.odb-unit-popup__tag-remove {
    background: none;
    border: none;
    color: rgba(124, 255, 138, 0.6);
    cursor: pointer;
    font-size: 0.85rem;
    padding: 0;
    line-height: 1;
}
.odb-unit-popup__tag-remove:hover { color: rgba(255, 100, 100, 0.9); }
.odb-unit-popup__tag-row {
    display: flex;
    gap: 6px;
    margin-top: 4px;
    align-items: center;
}
.odb-unit-popup__tag-row input {
    flex: 1;
    background: rgba(0, 0, 0, 0.55);
    border: 1px solid rgba(124, 255, 138, 0.35);
    color: rgba(198, 255, 202, 0.95);
    font-family: 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.85rem;
    padding: 6px 8px;
    outline: none;
    border-radius: 4px;
    min-width: 0;
    box-sizing: border-box;
}
.odb-unit-popup__tag-row input:focus {
    border-color: rgba(124, 255, 138, 0.9);
    background: rgba(124, 255, 138, 0.08);
}
.odb-unit-popup__tag-row .odb-dos-menu__item {
    min-height: 30px;
    padding: 6px 10px;
    font-size: 0.88rem;
}
.odb-unit-popup__tag-row .odb-dos-menu__item:hover,
.odb-unit-popup__tag-row .odb-dos-menu__item:focus-visible {
    background: rgba(95, 255, 119, 0.12);
}

#detail-unit-tags-input,
#detail-unit-faction-tags-input {
    min-width: 0;
}

/* Select arme */
.odb-unit-popup__select {
    flex: 1;
    background: rgba(0,0,0,0.55);
    border: 1px solid rgba(124, 255, 138, 0.38);
    color: rgba(198, 255, 202, 0.95);
    font-family: 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.82rem;
    padding: 3px 4px;
    outline: none;
}
.odb-unit-popup__select:focus { border-color: rgba(124, 255, 138, 0.9); }

/* Lignes armes sélectionnées */
.odb-unit-popup__arme-row {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 0.82rem;
    color: rgba(198, 255, 202, 0.9);
    padding: 2px 0;
    border-bottom: 1px solid rgba(124, 255, 138, 0.1);
}
.odb-unit-popup__arme-type {
    font-size: 0.7rem;
    color: rgba(124, 255, 138, 0.55);
    letter-spacing: 0.05em;
    white-space: nowrap;
}
.odb-unit-popup__arme-nom { flex: 1; }

/* Grille stats profil (M / E / SV / PV / CD / CO) */
.odb-unit-popup__stats {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: 6px;
    margin-top: 4px;
}
.odb-unit-popup__stat {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 2px;
}
.odb-unit-popup__stat label {
    font-size: 0.68rem;
    letter-spacing: 0.06em;
    color: rgba(124, 255, 138, 0.6);
    text-align: center;
}
.odb-unit-popup__stat input {
    width: 100%;
    text-align: center;
    background: transparent;
    border: 1px solid rgba(124, 255, 138, 0.35);
    color: rgba(198, 255, 202, 0.95);
    font-family: 'Share Tech Mono', 'Courier New', monospace;
    font-size: 0.88rem;
    padding: 3px 2px;
    outline: none;
    caret-color: rgba(124, 255, 138, 0.9);
}
.odb-unit-popup__stat input:focus {
    border-color: rgba(124, 255, 138, 0.9);
    background: rgba(124, 255, 138, 0.04);
}

/* Force card roster (liste des unités) */
.odb-force-card__roster {
    display: flex;
    flex-direction: column;
    gap: 2px;
    margin-bottom: 4px;
}
.odb-force-card__roster-empty {
    font-size: 0.75rem;
    color: rgba(124, 255, 138, 0.35);
    margin: 0;
    line-height: 1.4;
}
.odb-force-card__roster-row {
    display: flex;
    align-items: baseline;
    gap: 8px;
    font-size: 0.82rem;
    color: rgba(198, 255, 202, 0.9);
    padding: 2px 0;
    border-bottom: 1px solid rgba(124, 255, 138, 0.08);
}
.odb-force-card__roster-nom {
    flex: 1;
}
.odb-force-card__roster-type {
    font-size: 0.72rem;
    color: rgba(124, 255, 138, 0.5);
    letter-spacing: 0.04em;
}
.odb-force-card__roster-val {
    font-size: 0.72rem;
    color: rgba(124, 255, 138, 0.55);
    white-space: nowrap;
}
/* Keyword badge seigneur */
.odb-force-card__keyword {
    font-size: 0.68rem;
    color: rgba(255, 200, 80, 0.8);
    letter-spacing: 0.06em;
    border: 1px solid rgba(255, 200, 80, 0.3);
    padding: 0 4px;
    vertical-align: middle;
}
/* Hint popup */
.odb-unit-popup__hint {
    font-size: 0.72rem;
    color: rgba(124, 255, 138, 0.45);
    margin: 0 0 6px;
    letter-spacing: 0.05em;
}

.odb-terminal__roster-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    flex-wrap: wrap;
}

.odb-terminal__mini-actions {
    display: flex;
    gap: 6px;
}

.odb-terminal__mini-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 24px;
    padding: 2px 7px;
    border: 1px solid rgba(124, 255, 138, 0.38);
    color: rgba(192, 255, 198, 0.94);
    font-size: 0.78rem;
}

.odb-terminal__roster,
.odb-terminal__log {
    overflow: auto;
}


.odb-terminal__footer {
    color: rgba(145, 255, 161, 0.78);
    font-size: 0.82rem;
    line-height: 1;
}

/* SPA view wrappers — transparents au layout flex/grid parent */
[data-view]:not([hidden]) { display: contents; }

.monitor-page-content > * {
    opacity: 0;
    clip-path: inset(0 0 100% 0);
}

body.page-ready .monitor-page-content > * {
    animation: terminalLineIn calc(0.18s * var(--private-motion-scale)) steps(8, end) forwards;
}

body.page-ready .monitor-page-content > *:nth-child(1) { animation-delay: calc(0.06s * var(--private-motion-scale)); }
body.page-ready .monitor-page-content > *:nth-child(2) { animation-delay: calc(0.16s * var(--private-motion-scale)); }
body.page-ready .monitor-page-content > *:nth-child(3) { animation-delay: calc(0.26s * var(--private-motion-scale)); }
body.page-ready .monitor-page-content > *:nth-child(4) { animation-delay: calc(0.36s * var(--private-motion-scale)); }
body.page-ready .monitor-page-content > *:nth-child(5) { animation-delay: calc(0.46s * var(--private-motion-scale)); }
body.page-ready .monitor-page-content > *:nth-child(6) { animation-delay: calc(0.56s * var(--private-motion-scale)); }

body.page-ready .monitor-page-content .private-sample-grid > * {
    opacity: 0;
    clip-path: inset(0 0 100% 0);
    animation: terminalLineIn calc(0.16s * var(--private-motion-scale)) steps(8, end) forwards;
}

body.page-ready .monitor-page-content .private-sample-grid > *:nth-child(1) { animation-delay: calc(0.42s * var(--private-motion-scale)); }
body.page-ready .monitor-page-content .private-sample-grid > *:nth-child(2) { animation-delay: calc(0.52s * var(--private-motion-scale)); }

.private-body.page-is-transitioning .private-hotspots {
    animation: terminalScrollAway calc(0.30s * var(--private-motion-scale)) steps(10, end) forwards;
}

.private-body.page-is-transitioning .monitor-page-content > * {
    animation: terminalLineAway calc(0.18s * var(--private-motion-scale)) steps(8, end) forwards !important;
}

.private-body.page-is-transitioning .monitor-page-content > *:nth-child(1) { animation-delay: calc(0.00s * var(--private-motion-scale)) !important; }
.private-body.page-is-transitioning .monitor-page-content > *:nth-child(2) { animation-delay: calc(0.06s * var(--private-motion-scale)) !important; }
.private-body.page-is-transitioning .monitor-page-content > *:nth-child(3) { animation-delay: calc(0.12s * var(--private-motion-scale)) !important; }
.private-body.page-is-transitioning .monitor-page-content > *:nth-child(4) { animation-delay: calc(0.18s * var(--private-motion-scale)) !important; }
.private-body.page-is-transitioning .monitor-page-content > *:nth-child(5) { animation-delay: calc(0.24s * var(--private-motion-scale)) !important; }
.private-body.page-is-transitioning .monitor-page-content > *:nth-child(6) { animation-delay: calc(0.30s * var(--private-motion-scale)) !important; }
.private-body.page-is-transitioning .monitor-page-content .private-sample-grid > *:nth-child(1) { animation-delay: calc(0.18s * var(--private-motion-scale)) !important; }
.private-body.page-is-transitioning .monitor-page-content .private-sample-grid > *:nth-child(2) { animation-delay: calc(0.26s * var(--private-motion-scale)) !important; }

@keyframes terminalLineIn {
    0% {
        opacity: 0;
        clip-path: inset(0 0 100% 0);
    }
    100% {
        opacity: 1;
        clip-path: inset(0 0 0 0);
    }
}

@keyframes auspexSigilBuzz {
    0%, 100% {
        opacity: 0.7;
        filter: brightness(1) drop-shadow(0 0 1px rgba(124, 255, 138, 0.18));
        transform: rotate(45deg) translate(0, 0) scale(1);
    }
    15% {
        opacity: 1;
        filter: brightness(1.6) drop-shadow(0 0 3px rgba(170, 255, 176, 0.42));
        transform: rotate(45deg) translate(1px, -1px) scale(1.08);
    }
    32% {
        opacity: 0.62;
        filter: brightness(0.85) drop-shadow(0 0 0 rgba(124, 255, 138, 0));
        transform: rotate(45deg) translate(-1px, 1px) scale(0.94);
    }
    48% {
        opacity: 1;
        filter: brightness(1.8) drop-shadow(0 0 4px rgba(170, 255, 176, 0.5));
        transform: rotate(45deg) translate(1px, 0) scale(1.05);
    }
    66% {
        opacity: 0.7;
        filter: brightness(0.92) drop-shadow(0 0 1px rgba(124, 255, 138, 0.1));
        transform: rotate(45deg) translate(-1px, 0) scale(0.97);
    }
    82% {
        opacity: 0.96;
        filter: brightness(1.3) drop-shadow(0 0 2px rgba(170, 255, 176, 0.3));
        transform: rotate(45deg) translate(0, -1px) scale(1.02);
    }
}

@keyframes auspexMarkBuzz {
    0%, 100% {
        opacity: 0.72;
        filter: brightness(1);
        transform: translate(-50%, -54%) rotate(-45deg) scale(1);
        text-shadow: 0 0 2px rgba(170, 255, 176, 0.2);
    }
    18% {
        opacity: 1;
        filter: brightness(1.8);
        transform: translate(calc(-50% + 0.5px), calc(-54% - 0.5px)) rotate(-45deg) scale(1.12);
        text-shadow: 0 0 5px rgba(170, 255, 176, 0.48);
    }
    36% {
        opacity: 0.4;
        filter: brightness(0.8);
        transform: translate(calc(-50% - 0.5px), calc(-54% + 0.5px)) rotate(-45deg) scale(0.92);
        text-shadow: 0 0 1px rgba(170, 255, 176, 0.12);
    }
    56% {
        opacity: 1;
        filter: brightness(2);
        transform: translate(calc(-50% + 0.5px), -54%) rotate(-45deg) scale(1.08);
        text-shadow: 0 0 6px rgba(170, 255, 176, 0.52);
    }
    78% {
        opacity: 0.64;
        filter: brightness(0.9);
        transform: translate(-50%, calc(-54% + 0.5px)) rotate(-45deg) scale(0.96);
        text-shadow: 0 0 2px rgba(170, 255, 176, 0.18);
    }
}

@keyframes terminalScrollAway {
    0% {
        transform: translateY(0);
        opacity: 1;
    }
    100% {
        transform: translateY(-16px);
        opacity: 0;
    }
}

@keyframes terminalLineAway {
    0% {
        opacity: 1;
        transform: translateY(0);
        clip-path: inset(0 0 0 0);
    }
    100% {
        opacity: 0;
        transform: translateY(-18px);
        clip-path: inset(100% 0 0 0);
    }
}

@media (max-width: 860px) {
    .private-sample-grid {
        grid-template-columns: 1fr;
    }

    .requisition-terminal__main {
        grid-template-columns: 1fr;
    }

    .requisition-terminal__offers,
    .requisition-terminal__queue {
        padding: 7px;
    }

    .requisition-terminal__log {
        max-height: 130px;
    }

    .ecran-controls-column {
        left: clamp(92px, 18vw, 138px);
        width: clamp(132px, 23vw, 176px);
    }

    .ecran-content-zone {
        left: 63%;
        width: min(58vw, 520px);
    }

    .dossier-terminal__line {
        grid-template-columns: 1fr;
        gap: 2px;
    }

    .dossier-terminal__stats {
        grid-template-columns: 1fr;
    }

    .map-monitor-main {
        display: block;
    }

    .map-selection-card {
        width: 72px;
        max-height: 30px;
        min-height: 30px;
    }

    .map-selection-card--opening,
    .map-selection-card--active {
        width: min(230px, 54vw);
        max-height: 46%;
        min-height: 96px;
    }

    .odb-terminal__topbar {
        flex-wrap: wrap;
    }

    .odb-terminal__counters {
        --odb-diamond-size: 34px;
        --odb-diamond-value-size: 1.25rem;
        --odb-diamond-label-size: 0.72rem;
        gap: 26px;
    }

    .odb-terminal__main {
        grid-template-columns: 1fr;
    }
}


.public-body,
.public-body.page-entering,
.public-body.page-ready {
    opacity: 1;
    transform: none;
    filter: none;
}

.public-header {
    min-height: 82px;
    display: grid;
    grid-template-columns: minmax(220px, 0.85fr) minmax(0, 1.2fr) auto;
    align-items: center;
    gap: 16px;
}

.public-header-brand {
    min-width: 0;
    min-height: 42px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.public-header-brand > div:last-child {
    white-space: nowrap;
}

.public-header-status {
    justify-self: end;
    min-width: 0;
}

.public-header-status .status-chip {
    max-width: 28ch;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.public-access-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 6px 10px;
    border: 1px solid rgba(0, 255, 204, 0.22);
    background: rgba(0, 255, 204, 0.03);
    color: rgba(180, 255, 244, 0.9);
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    text-decoration: none;
}

.public-access-link:hover {
    background: rgba(0, 255, 204, 0.1);
}

.public-page-title {
    margin: 0 0 12px;
    max-width: 18ch;
    font-size: 1.5rem;
    line-height: 1.08;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.02em;
    color: #ffffff;
}

.public-page-lead {
    max-width: 58rem;
    color: rgba(219, 255, 249, 0.82);
    line-height: 1.72;
    font-size: 0.95rem;
}

.public-layout {
    height: var(--public-stage-h);
    min-height: var(--public-stage-h);
    width: 100%;
    display: grid;
    grid-template-columns: var(--public-layout-cols);
    gap: var(--public-layout-gap);
    align-items: stretch;
    justify-content: space-between;
}

.public-body .public-layout {
    min-height: var(--public-stage-h);
    width: var(--public-layout-width);
    max-width: var(--public-layout-width);
    padding: var(--public-layout-padding);
}

.public-page-stack {
    width: var(--public-stack-width);
    max-width: none;
    margin: 0 0 0 var(--public-stack-margin-left);
    display: grid;
    gap: 18px;
}

.public-scroll-frame {
    position: relative;
    min-height: 0;
    height: var(--public-scroll-frame-height);
    max-height: 100%;
    overflow: var(--public-frame-overflow);
    justify-self: start;
    width: 100%;
    max-width: 760px;
    border: none;
    background: transparent;
    box-shadow: none;
}

.public-scroll-frame::before {
    content: '';
    position: absolute;
    inset: clamp(10px, 1.4vw, 18px) clamp(14px, 1.8vw, 22px) clamp(12px, 1.5vw, 18px) clamp(12px, 1.6vw, 20px);
    background:
        linear-gradient(180deg, rgba(255, 248, 236, 0.09), transparent 14%, transparent 86%, rgba(96, 67, 33, 0.06)),
        radial-gradient(circle at 42% 12%, rgba(255, 239, 210, 0.11), transparent 40%);
    pointer-events: none;
    z-index: 0;
    opacity: 0.28;
    mix-blend-mode: screen;
}

.public-scroll-frame::after {
    content: '';
    position: absolute;
    inset: 0;
    background:
        linear-gradient(180deg, rgba(231, 214, 178, 0.08), transparent 18%, rgba(231, 214, 178, 0.03) 50%, transparent 82%, rgba(231, 214, 178, 0.08)),
        linear-gradient(90deg, transparent, rgba(173, 132, 74, 0.12), transparent);
    opacity: 0;
    transform: translateY(-18%);
    pointer-events: none;
    z-index: 1;
}

.public-scroll-frame.is-repositioning::after {
    opacity: 0.4;
    animation: parchmentScan 0.52s ease-out forwards;
}

.public-scroll-panel {
    position: relative;
    z-index: 2;
    height: var(--public-scroll-height);
    overflow-y: var(--public-scroll-overflow-y);
    overflow-x: var(--public-scroll-overflow-x);
    padding: var(--public-panel-padding);
    background: transparent;
    scroll-behavior: smooth;
    scrollbar-width: none;
    -ms-overflow-style: none;
    isolation: isolate;
    -webkit-mask-image: var(--public-scroll-mask);
    mask-image: var(--public-scroll-mask);
    transform-origin: center top;
    transition: opacity 0.35s ease, transform 0.35s ease, filter 0.35s ease;
}

.public-scroll-panel::-webkit-scrollbar {
    display: none;
}

.public-body.page-entering .public-scroll-panel {
    opacity: 0;
    transform: translateY(14px);
    filter: blur(1.8px);
}

.public-body.page-ready .public-scroll-panel {
    opacity: 1;
    transform: translateY(0);
    filter: blur(0px);
}

.public-scroll-panel.is-fast-scrolling {
    animation: parchmentRush 0.62s cubic-bezier(0.16, 0.72, 0.18, 1) forwards;
}

.transition-scroll-filler {
    position: relative;
    height: clamp(420px, 95vh, 900px);
    margin-top: 18px;
    border-top: 1px solid rgba(173, 132, 74, 0.22);
    background:
        linear-gradient(180deg, rgba(231, 214, 178, 0.11), rgba(231, 214, 178, 0.03) 58%, transparent),
        repeating-linear-gradient(180deg, transparent 0 10px, rgba(84, 58, 28, 0.16) 10px 12px, transparent 12px 19px);
    opacity: 0;
    transform: translateY(-36px) scaleY(0.94);
    transition: opacity 0.2s ease, transform 0.2s ease;
    pointer-events: none;
}

.transition-scroll-filler::after {
    content: '';
    position: absolute;
    inset: 8% 10% auto 10%;
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(110, 76, 37, 0.24), transparent);
    box-shadow:
        0 18px 0 rgba(110, 76, 37, 0.18),
        0 36px 0 rgba(110, 76, 37, 0.14),
        0 54px 0 rgba(110, 76, 37, 0.12),
        0 72px 0 rgba(110, 76, 37, 0.1);
}

.public-scroll-panel.is-fast-scrolling .transition-scroll-filler {
    opacity: 0.8;
    transform: translateY(0) scaleY(1.05);
}

.public-side-altar {
    position: sticky;
    top: 0;
    min-height: 0;
    overflow: hidden;
    display: var(--public-altar-display, block);
    border: none;
    background: transparent;
    box-shadow: none;
}

.public-altar-window {
    position: relative;
    z-index: 2;
    height: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
    gap: 16px;
    padding: var(--public-altar-padding);
}

.public-logo-diamond {
    width: clamp(110px, 12vw, 152px);
    aspect-ratio: 1 / 1;
    display: grid;
    place-items: center;
    transform: translateY(var(--public-logo-offset-y)) rotate(45deg);
    border: 2px solid rgba(0, 255, 204, 0.3);
    background: linear-gradient(180deg, rgba(0, 255, 204, 0.14), rgba(0, 0, 0, 0.5));
    box-shadow: 0 0 24px rgba(0, 255, 204, 0.12);
}

.public-logo-diamond span {
    transform: rotate(-45deg);
    color: rgba(255, 98, 98, 0.96);
    font-size: clamp(1rem, 1.8vw, 1.35rem);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.08em;
}

.ambient-machine-layer {
    position: absolute;
    inset: 0;
    background:
        radial-gradient(circle at 50% 35%, rgba(0, 255, 204, 0.05), transparent 18%),
        linear-gradient(180deg, rgba(255, 255, 255, 0.02), transparent 22%, transparent 78%, rgba(255, 255, 255, 0.01)),
        repeating-linear-gradient(180deg, rgba(0, 255, 204, 0.015) 0, rgba(0, 255, 204, 0.015) 1px, transparent 1px, transparent 9px);
    opacity: 0.16;
    pointer-events: none;
}

.public-nav-cluster {
    position: relative;
}

@keyframes parchmentRush {
    0% {
        transform: translateY(0) scaleY(1) scaleX(1);
        filter: blur(0px);
        opacity: 1;
    }
    30% {
        transform: translateY(-10%) scaleY(1.04) scaleX(0.996);
        filter: blur(0.12px);
        opacity: 0.988;
    }
    68% {
        transform: translateY(-22%) scaleY(1.09) scaleX(0.992);
        filter: blur(0.22px);
        opacity: 0.965;
    }
    100% {
        transform: translateY(-36%) scaleY(1.14) scaleX(0.988);
        filter: blur(0.3px);
        opacity: 0.935;
    }
}

@keyframes parchmentScan {
    0% {
        opacity: 0;
        transform: translateY(-42%) scaleY(0.92);
    }
    30% {
        opacity: 0.3;
    }
    100% {
        opacity: 0;
        transform: translateY(55%) scaleY(1.08);
    }
}

.page-grid {
    display: grid;
    gap: 20px;
}

.page-grid-two {
    grid-template-columns: minmax(0, 1.3fr) minmax(300px, 0.9fr);
}

.page-panel {
    border: 1px solid var(--ui-border);
    background: rgba(0, 20, 10, 0.68);
    padding: 20px;
    box-shadow: 0 18px 40px rgba(0, 0, 0, 0.35);
}

.public-body .page-panel {
    position: relative;
    border-color: rgba(113, 84, 45, 0.16);
    background: linear-gradient(180deg, rgba(58, 41, 22, 0.12), rgba(24, 17, 10, 0.04));
    box-shadow: inset 0 1px 0 rgba(255, 243, 218, 0.04);
    backdrop-filter: blur(0.6px);
}

.public-body .page-panel::before {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg, rgba(255, 244, 220, 0.03), transparent 28%, transparent 78%, rgba(107, 78, 41, 0.03));
    pointer-events: none;
}

.public-body .page-panel .border,
.public-body .page-panel a[class*='border'],
.public-body .archive-tag,
.public-body .status-chip {
    border-color: rgba(118, 89, 47, 0.22) !important;
    background: linear-gradient(180deg, rgba(76, 54, 30, 0.16), rgba(32, 23, 13, 0.05)) !important;
    box-shadow: inset 0 1px 0 rgba(255, 242, 216, 0.05);
}

.page-kicker {
    font-size: 10px;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: rgba(0, 255, 204, 0.7);
    margin-bottom: 10px;
}

.page-nav {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.nav-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 6px 10px;
    border: 1px solid rgba(0, 255, 204, 0.2);
    background: rgba(0, 255, 204, 0.03);
    color: rgba(180, 255, 244, 0.9);
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    text-decoration: none;
}

.nav-link:hover {
    background: rgba(0, 255, 204, 0.1);
}

.nav-link.active {
    border-color: rgba(0, 255, 204, 0.8);
    background: rgba(0, 255, 204, 0.14);
    color: #ffffff;
}

.status-chip {
    padding: 6px 10px;
    border: 1px solid rgba(0, 255, 204, 0.25);
    background: rgba(0, 255, 204, 0.06);
    color: rgba(200, 255, 248, 0.85);
    font-size: 10px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.citation {
    font-family: 'Cormorant Garamond', 'Times New Roman', serif;
    font-size: 1.15rem;
    line-height: 1.5;
    letter-spacing: 0.01em;
    color: rgba(224, 255, 249, 0.92);
}

.citation footer {
    font-family: 'Cormorant Garamond', 'Times New Roman', serif;
    font-size: 0.95rem;
    font-weight: 600;
    letter-spacing: 0.03em;
    color: rgba(180, 231, 223, 0.78);
    text-transform: none;
}

.archive-entry {
    border: 1px solid rgba(0, 255, 204, 0.16);
    background: rgba(0, 10, 6, 0.46);
}

.archive-meta {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 12px;
}

.archive-tag {
    display: inline-flex;
    align-items: center;
    padding: 4px 8px;
    border: 1px solid rgba(0, 255, 204, 0.22);
    background: rgba(0, 255, 204, 0.07);
    color: rgba(205, 255, 249, 0.88);
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.08em;
}

.archive-excerpt {
    margin-top: 14px;
    padding: 12px 14px;
    border-left: 2px solid rgba(0, 255, 204, 0.28);
    background: rgba(0, 0, 0, 0.34);
}

.archive-list {
    margin: 0;
    padding-left: 18px;
    color: rgba(220, 255, 248, 0.8);
}

.archive-list li + li {
    margin-top: 6px;
}

.archive-ledger {
    display: grid;
    gap: 12px;
}

.faction-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 16px;
}

.faction-card {
    border: 1px solid rgba(0, 255, 204, 0.16);
    background: linear-gradient(180deg, rgba(0, 255, 204, 0.05), rgba(0, 0, 0, 0.22));
    padding: 16px;
    position: relative;
    overflow: hidden;
}

.faction-card::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 2px;
    background: linear-gradient(90deg, rgba(0, 255, 204, 0.55), transparent);
}

.faction-status {
    display: inline-flex;
    align-items: center;
    padding: 4px 8px;
    margin-bottom: 10px;
    border: 1px solid rgba(0, 255, 204, 0.22);
    background: rgba(0, 255, 204, 0.06);
    color: rgba(205, 255, 249, 0.88);
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.08em;
}

.faction-note {
    padding: 12px 14px;
    border-left: 2px solid rgba(0, 255, 204, 0.28);
    background: rgba(0, 0, 0, 0.34);
}

.character-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 16px;
}

.character-card {
    border: 1px solid rgba(0, 255, 204, 0.16);
    background: linear-gradient(180deg, rgba(0, 255, 204, 0.04), rgba(0, 0, 0, 0.24));
    padding: 16px;
    box-shadow: inset 0 1px 0 rgba(0, 255, 204, 0.05);
}

.character-head {
    display: flex;
    align-items: center;
    gap: 12px;
}

.character-sigil {
    width: 50px;
    height: 50px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border: 1px solid rgba(0, 255, 204, 0.25);
    background: rgba(0, 0, 0, 0.42);
    color: rgba(220, 255, 248, 0.92);
    font-family: 'Cormorant Garamond', 'Times New Roman', serif;
    font-size: 1.1rem;
    font-weight: 600;
    letter-spacing: 0.04em;
}

.character-rank {
    color: rgba(165, 233, 223, 0.76);
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 0.08em;
}

.ui-footer {
    display: flex;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
    padding: 10px 20px;
    border-top: 1px solid var(--ui-border);
    background: rgba(0, 20, 10, 0.88);
    font-size: 10px;
    text-transform: uppercase;
    opacity: 0.75;
}

.ui-header {
    min-height: 60px;
    border-bottom: 2px solid var(--ui-border);
    background: var(--panel-bg);
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 10px 20px;
    z-index: 50;
    flex-wrap: wrap;
}

.ui-main { flex: 1; display: flex; position: relative; overflow: hidden; }
.sidebar { width: 340px; border-left: 1px solid var(--ui-border); background: var(--panel-bg); padding: 20px; display: flex; flex-direction: column; gap: 20px; z-index: 50; box-shadow: -10px 0 20px rgba(0,0,0,0.5); }

.map-container { flex: 1; background-color: #000; position: relative; margin: 0; overflow: hidden; cursor: grab; }
.map-container:active { cursor: grabbing; }

.page-body--map.private-body .map-monitor-main {
    display: block;
}

.page-body--map.private-body .map-monitor-main .map-container {
    border: 1px solid rgba(124, 255, 138, 0.1);
    background: rgba(0, 7, 3, 0.82);
    box-shadow: inset 0 0 0 1px rgba(90, 180, 104, 0.03);
}

.page-body--map.private-body .map-grid {
    background-image:
        linear-gradient(rgba(124, 255, 138, 0.05) 1px, transparent 1px),
        linear-gradient(90deg, rgba(124, 255, 138, 0.05) 1px, transparent 1px);
}

.page-body--map.private-body .map-grid::after {
    content: none;
}


.page-body--map.private-body .system-label {
    border-color: rgba(124, 255, 138, 0.18);
    color: rgba(191, 255, 198, 0.95);
}

.page-body--map.private-body .data-value {
    color: rgba(201, 255, 208, 0.96);
}

.page-body--map.private-body .map-selection-card {
    border-color: rgba(124, 255, 138, 0.1);
    background:
        linear-gradient(180deg, rgba(4, 18, 8, 0.42), rgba(2, 10, 4, 0.56)),
        repeating-linear-gradient(180deg, rgba(123, 255, 146, 0.012) 0 1px, transparent 1px 4px);
}

.page-body--map.private-body .map-selection-card.map-selection-card--active {
    border-color: rgba(124, 255, 138, 0.16);
    background:
        linear-gradient(180deg, rgba(5, 20, 9, 0.58), rgba(2, 10, 4, 0.68)),
        repeating-linear-gradient(180deg, rgba(123, 255, 146, 0.014) 0 1px, transparent 1px 4px);
}

.page-body--map.private-body .map-monitor-overlay {
    left: 25px;
    bottom: 25px;
    padding: 4px 6px;
    border: 1px solid rgba(124, 255, 138, 0.1);
    background: rgba(1, 4, 2, 0.38);
    color: rgba(188, 255, 194, 0.8);
    font-size: 0.72rem;
    line-height: 0.95;
}

.map-grid {
    position: absolute;
    width: 2000px;
    height: 1500px;
    background-image: linear-gradient(rgba(0, 255, 204, 0.08) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 255, 204, 0.08) 1px, transparent 1px);
    background-size: var(--grid-size) var(--grid-size);
    transform-origin: 0 0;
    transition: none;
}

.axis-wrapper-x {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 20px;
    background: none;
    border-top: none;
    box-shadow: none;
    z-index: 20;
    overflow: hidden;
    pointer-events: none;
}

.axis-wrapper-y {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 20px;
    background: none;
    border-right: none;
    box-shadow: none;
    z-index: 20;
    overflow: hidden;
    pointer-events: none;
}

#axisX, #axisY { position: absolute; transition: none; transform-origin: 0 0; }
.axis-label {
    position: absolute;
    font-size: 11px;
    color: rgba(210, 255, 224, 0.95);
    opacity: 1;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-shadow: 0 0 8px rgba(124, 255, 138, 0.45);
}


.warp-routes { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; }

.system-node { position: absolute; width: 110px; height: 110px; transform: translate(-50%, -50%); cursor: pointer; transition: filter 0.2s; }
.system-node.small { width: 90px; height: 90px; }
.system-node.large { width: 180px; height: 180px; }
.system-node svg { width: 100%; height: 100%; }
.system-node:hover { filter: drop-shadow(0 0 10px var(--ui-color)); }
.system-node.selected { filter: drop-shadow(0 0 15px var(--ui-color)) brightness(1.2); }

.system-label {
    position: absolute;
    bottom: 0px;
    left: 50%;
    transform: translateX(-50%);
    font-size: 10px;
    background: rgba(0, 0, 0, 0.9);
    padding: 2px 8px;
    border: 1px solid var(--ui-border);
    white-space: nowrap;
    letter-spacing: 1px;
    pointer-events: none;
}

.system-label.k44-label { bottom: -38px; width: 140px; max-width: 140px; white-space: normal; text-align: center; line-height: 1.1; padding: 4px 6px; }
.system-label.above { bottom: auto; top: -0px; width: auto; max-width: 140px; white-space: normal; text-align: center; line-height: 1.1; padding: 3px 6px; }
.data-value { color: #fff; }

.modal-backdrop {
    position: fixed;
    inset: 0;
    display: flex;
    align-items: flex-start;
    justify-content: center;
    padding: 18px;
    background: rgba(0, 0, 0, 0.78);
    backdrop-filter: blur(3px);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.25s ease;
    z-index: 200;
}

.modal-backdrop.open {
    opacity: 1;
    pointer-events: auto;
}

.modal-panel {
    width: min(560px, 100%);
    border: 1px solid var(--ui-border);
    background: rgba(0, 20, 10, 0.96);
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.45), 0 0 24px var(--ui-glow);
    transform: translateY(-55px);
    opacity: 0;
    transition: transform 0.28s ease, opacity 0.28s ease;
}

.modal-backdrop.open .modal-panel {
    transform: translateY(0);
    opacity: 1;
}

body.page-is-transitioning .modal-backdrop {
    opacity: 0;
    pointer-events: none;
}

body.page-is-transitioning .modal-backdrop .modal-panel {
    transform: translateY(-72px);
    opacity: 0;
}

.page-transition-overlay {
    position: fixed;
    inset: 0;
    display: grid;
    place-items: center;
    background: linear-gradient(180deg, rgba(34, 22, 12, 0.12), rgba(10, 7, 4, 0.28));
    opacity: 0;
    pointer-events: none;
    z-index: 350;
    overflow: hidden;
    transition: opacity 0.2s ease;
}

.public-scroll-frame > .page-transition-overlay {
    position: absolute;
}

.page-transition-overlay.active {
    opacity: 1;
}

.private-body .page-transition-overlay,
.page-body--map .page-transition-overlay {
    background: transparent;
}

.private-body .page-transition-overlay.active,
.page-body--map .page-transition-overlay.active {
    opacity: 0;
}

.private-body .page-transition-noise,
.page-body--map .page-transition-noise {
    opacity: 0;
}

.page-transition-noise {
    position: absolute;
    inset: 0;
    background:
        linear-gradient(180deg, rgba(231, 214, 178, 0.05), transparent 24%, transparent 76%, rgba(231, 214, 178, 0.05)),
        radial-gradient(circle at 20% 24%, rgba(255, 246, 227, 0.05), transparent 18%),
        radial-gradient(circle at 80% 72%, rgba(179, 136, 78, 0.05), transparent 16%);
    opacity: 0.18;
}

.modal-header-bar {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    padding: 16px 20px;
    border-bottom: 1px solid var(--ui-border);
    background: rgba(0, 255, 204, 0.04);
}

.modal-close-button {
    border: 1px solid var(--ui-border);
    background: transparent;
    color: var(--ui-color);
    width: 32px;
    height: 32px;
    cursor: pointer;
}

.modal-close-button:hover {
    background: rgba(0, 255, 204, 0.08);
}

/* ── Modal : onglets Connexion / Inscription ─────────────────────────── */
.modal-tab-bar {
    display: flex;
    gap: 0;
    border-bottom: 1px solid var(--ui-border);
    margin-bottom: 0;
}

.modal-tab {
    flex: 1;
    padding: 8px 12px;
    background: transparent;
    border: none;
    border-bottom: 2px solid transparent;
    color: rgba(0, 255, 204, 0.45);
    font-family: 'Share Tech Mono', monospace;
    font-size: 11px;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    cursor: pointer;
    transition: color 0.18s, border-color 0.18s;
}

.modal-tab:hover {
    color: rgba(0, 255, 204, 0.8);
}

.modal-tab.active {
    color: var(--ui-color);
    border-bottom-color: var(--ui-color);
}

.modal-error {
    margin-top: 12px;
    padding: 8px 12px;
    border: 1px solid rgba(255, 80, 80, 0.5);
    background: rgba(255, 0, 0, 0.07);
    color: #ff8080;
    font-size: 11px;
    font-family: 'Share Tech Mono', monospace;
    letter-spacing: 0.05em;
}

.tactical-input {
    width: 100%;
    padding: 10px 12px;
    border: 1px solid var(--ui-border);
    background: rgba(0, 0, 0, 0.45);
    color: #d9fff8;
    outline: none;
}

.tactical-input:focus {
    border-color: var(--ui-color);
    box-shadow: 0 0 0 1px rgba(0, 255, 204, 0.2);
}

@media (max-width: 1536px) {
    .public-body {
        --public-bg-width: 1536px;
    }
}

@media (max-width: 1366px) {
    .public-body {
        --public-bg-width: 1366px;
        --public-stage-h: calc(100dvh - 126px);
    }
}

@media (max-width: 1160px) {
    .public-body {
        --public-bg-width: 1160px;
        --public-stage-h: calc(100dvh - 124px);
        --public-layout-cols: 55% 22%;
        --public-layout-gap: 6.5%;
        --public-stack-width: 90%;
        --public-stack-margin-left: 3.2%;
        --public-panel-padding: 7.2% 5.5% 4.6% 5.2%;
    }

    .public-page-title {
        font-size: 1.4rem;
    }
}

@media (max-width: 1024px) {
    .public-body {
        --public-bg-width: 1275px;
        --public-bg-pos-x: 0px;
        --public-bg-pos-y: 0px;
        --public-layout-cols: 58% 22%;
        --public-layout-gap: 5.5%;
        --public-stack-width: 88%;
        --public-stack-margin-left: 1.6%;
        --public-panel-padding: 6.4% 4.6% 4.2% 3.4%;
        --public-altar-padding: clamp(40px, 8vh, 72px) 10px 18px;
        --public-logo-offset-y: -18px;
        background-size: var(--public-bg-width) auto;
        background-attachment: fixed;
    }
}

@media (max-width: 980px) {
    .page-grid-two {
        grid-template-columns: 1fr;
    }

    .public-body {
        --public-bg-width: 980px;
        --public-bg-pos-x: 0px;
        --public-bg-pos-y: 0px;
        --public-stage-w: min(calc(100vw - 12px), var(--public-bg-width));
        height: auto;
        min-height: 100dvh;
        overflow-y: auto;
        background-size: var(--public-bg-width) auto;
        background-attachment: scroll;
    }

    .public-body .ui-header,
    .public-body .ui-footer {
        position: relative;
    }

    .public-body .page-shell {
        overflow: visible;
    }

    .public-header {
        grid-template-columns: 1fr;
        align-items: start;
        gap: 10px;
    }

    .public-header-brand > div:first-child {
        font-size: clamp(1.05rem, 3.2vw, 1.25rem);
    }

    .public-header-brand > div:last-child {
        max-width: none;
        white-space: normal;
    }

    .public-header-status {
        justify-self: stretch;
        justify-content: space-between;
        gap: 10px;
    }

    .public-header-status .status-chip {
        max-width: none;
    }

    .public-layout {
        height: auto;
        grid-template-columns: 1fr;
        gap: 0;
    }

    .public-body .public-layout {
        max-width: min(760px, calc(100vw - 12px));
        padding: 8px 4px 0;
    }

    .public-scroll-frame {
        max-width: min(680px, 100%);
        margin: 0;
        overflow: visible;
    }

    .public-page-stack {
        max-width: none;
        margin: 0;
    }

    .public-scroll-panel {
        height: auto;
        overflow: visible;
        padding: clamp(30px, 5vw, 42px) clamp(20px, 4vw, 30px) 24px;
    }

    .public-side-altar {
        display: none;
    }

    .sidebar {
        width: 320px;
    }
}

@media (max-width: 768px) {
    .public-body {
        --public-bg-width: 1802px;
        --public-bg-pos-x: -192px;
        --public-bg-pos-y: -101px;
        --public-stage-w: min(calc(100vw - 8px), var(--public-bg-width));
        --public-mobile-header-h: 142px;
        --public-mobile-footer-h: 42px;
        --public-mobile-bottom-gap: 48px;
        height: 100dvh;
        min-height: 100dvh;
        overflow: hidden;
        background-size: var(--public-bg-width) auto;
        background-attachment: fixed;
    }

    .public-body .ui-header {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        z-index: 120;
    }

    .public-body .ui-footer {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 115;
        padding: 8px 12px;
        gap: 8px;
        font-size: 9px;
    }

    .public-body .page-shell {
        height: 100dvh;
        box-sizing: border-box;
        overflow: hidden;
        padding: calc(var(--public-mobile-header-h) + 77px) 56px calc(var(--public-mobile-footer-h) + var(--public-mobile-bottom-gap)) 67px;
    }

    .public-layout {
        height: 100%;
        grid-template-columns: 1fr;
        gap: 0;
    }

    .public-body .public-layout {
        height: 100%;
        max-width: min(760px, calc(100vw - 12px));
        padding: 8px 4px 0;
    }

    .public-scroll-frame {
        max-width: min(680px, 100%);
        height: 100%;
        margin: 0;
        overflow: hidden;
    }

    .public-page-stack {
        width: 100%;
        max-width: none;
        margin: 0;
    }

    .public-scroll-panel {
        height: 585px;
        overflow-y: auto;
        overflow-x: hidden;
        overscroll-behavior: contain;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
        -ms-overflow-style: none;
        padding: 24px 14px 18px;
    }

    .public-scroll-panel::-webkit-scrollbar {
        display: none;
    }

    .ui-header {
        padding: 10px 12px;
    }

    .public-header {
        gap: 8px;
    }

    .page-nav {
        gap: 6px;
        row-gap: 8px;
    }

    .nav-link,
    .public-access-link,
    .status-chip {
        font-size: 9px;
        padding: 6px 8px;
    }

    .public-page-title {
        max-width: none;
        font-size: 1.35rem;
        line-height: 1.05;
    }

    .public-page-lead {
        max-width: none;
        font-size: 0.88rem;
        line-height: 1.58;
    }

    .page-panel {
        padding: 14px;
    }

    .public-body .page-panel {
        background: linear-gradient(180deg, rgba(22, 14, 8, 0.2), rgba(22, 14, 8, 0.1));
    }

    .ui-main {
        flex-direction: column;
    }

    .sidebar {
        width: auto;
        border-left: none;
        border-top: 1px solid var(--ui-border);
        box-shadow: 0 -10px 20px rgba(0, 0, 0, 0.35);
    }
}

/* TODO responsive UX:
   Sous petite résolution (à caler pendant la passe responsive),
   vérifier l'orientation utilisateur et, si l'écran est en portrait,
   afficher un message discret : rotation conseillée en paysage.
   Idée d'implémentation: JS via matchMedia('(orientation: portrait)').
*/

@media (max-width: 520px) {
    .public-body {
        --public-bg-width: 520px;
        --public-bg-pos-x: 0px;
        --public-bg-pos-y: 0px;
        --public-stage-w: min(calc(100vw - 8px), var(--public-bg-width));
        background-size: var(--public-bg-width) auto;
    }

    .public-header-status {
        gap: 8px;
    }

    .public-header-status .status-chip {
        display: none;
    }

    .page-nav {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        width: 100%;
    }

    .page-nav .nav-link {
        width: 100%;
    }

    .public-scroll-panel {
        padding: 20px 12px 16px;
    }
}

@media (max-width: 485px) {
    .public-body {
        --public-bg-width: 1500px;
        --public-bg-pos-x: -234px;
        --public-bg-pos-y: -43px;
        --public-stage-w: min(calc(100vw - 8px), var(--public-bg-width));
        --public-mobile-header-h: 142px;
        --public-mobile-footer-h: 42px;
        --public-mobile-bottom-gap: 48px;
        height: 100dvh;
        min-height: 100dvh;
        overflow: hidden;
        background-size: var(--public-bg-width) auto;
        background-attachment: fixed;
    }

    .public-body .ui-header {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        z-index: 120;
    }

    .public-body .ui-footer {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 115;
    }

    .public-body .page-shell {
        height: 100dvh;
        box-sizing: border-box;
        overflow: hidden;
        padding: calc(var(--public-mobile-header-h) + 82px) 4px calc(var(--public-mobile-footer-h) + var(--public-mobile-bottom-gap)) 0px;
    }

    .public-page-stack {
        width: 100%;
    }

    .public-layout,
    .public-body .public-layout,
    .public-scroll-frame,
    .public-scroll-panel {
        min-height: 0;
    }

    .public-layout,
    .public-body .public-layout,
    .public-scroll-frame {
        height: 100%;
    }

    .public-scroll-panel {
        height: 100%;
        overflow-y: auto;
        overflow-x: hidden;
        overscroll-behavior: contain;
    }
}

@media (max-width: 430px) {
    .public-body {
        --public-bg-width: 1671px;
        --public-bg-pos-x: -280px;
        --public-bg-pos-y: -89px;
        --public-stage-w: min(calc(100vw - 6px), var(--public-bg-width));
        --public-mobile-header-h: 142px;
        --public-mobile-footer-h: 42px;
        --public-mobile-bottom-gap: 48px;
        height: 100dvh;
        min-height: 100dvh;
        overflow: hidden;
        background-size: var(--public-bg-width) auto;
        background-attachment: fixed;
    }

    .public-body .ui-header {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        z-index: 120;
        background: linear-gradient(180deg, rgba(18, 12, 8, 0.86), rgba(10, 7, 4, 0.72));
        box-shadow: none;
    }

    .public-body .ui-footer {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        z-index: 115;
    }

    .public-body .page-shell {
        height: 100dvh;
        box-sizing: border-box;
        overflow: hidden;
        padding: calc(var(--public-mobile-header-h) + 70px) 4px calc(var(--public-mobile-footer-h) + var(--public-mobile-bottom-gap)) 4px;
    }

    .public-layout,
    .public-body .public-layout,
    .public-scroll-frame,
    .public-scroll-panel {
        min-height: 0;
    }

    .public-layout,
    .public-body .public-layout,
    .public-scroll-frame {
        height: 100%;
    }

    .public-page-stack {
        width: 100%;
    }

    .public-scroll-panel {
        height: 100%;
        overflow-y: auto;
        overflow-x: hidden;
        overscroll-behavior: contain;
        padding: 16px 10px 14px;
    }

    .public-page-title {
        font-size: 1.25rem;
        line-height: 1.05;
    }

    .public-page-lead {
        font-size: 0.82rem;
        line-height: 1.5;
    }
}

/* Clean public presets -------------------------------------------------- */
.public.public--desktop {
    --public-bg-width: 2048px;
    --public-bg-pos-x: -99px;
    --public-bg-pos-y: -41px;
    --public-stack-width: 580px;
    --public-stack-margin-left: 90px;
    --public-panel-padding: 165px 0px 96px 57px;
    --public-scroll-frame-height: 722px;
    --public-scroll-height: 722px;
    --public-scroll-mask: linear-gradient(
        to bottom,
        transparent 0px,
        transparent 152px,
        #000 152px,
        #000 612px,
        transparent 720px,
        transparent 100%
    );
}

.public.public--r1366 {
    --public-bg-width: 2048px;
    --public-bg-pos-x: -99px;
    --public-bg-pos-y: -41px;
    --public-stage-h: calc(100dvh - 126px);
    --public-stack-width: 580px;
    --public-stack-margin-left: 90px;
    --public-panel-padding: 165px 0px 96px 57px;
    --public-scroll-frame-height: 722px;
    --public-scroll-height: 722px;
    --public-scroll-mask: linear-gradient(
        to bottom,
        transparent 0px,
        transparent 152px,
        #000 152px,
        #000 612px,
        transparent 720px,
        transparent 100%
    );
}

.public.public--r1024 {
    --public-bg-width: 1425px;
    --public-bg-pos-x: -100px;
    --public-bg-pos-y: 0px;
    --public-layout-cols: 57% 23%;
    --public-layout-gap: 5.2%;
    --public-stack-width: 440px;
    --public-stack-margin-left: 33px;
    --public-panel-padding: 88px 12px 64px 22px;
    --public-scroll-frame-height: 632px;
    --public-scroll-height: 632px;
    --public-scroll-mask: linear-gradient(to bottom, transparent 70px, transparent 70px, #000 108px, #000 371px, transparent 451px, transparent 100%);
    --public-altar-padding: clamp(40px, 8vh, 72px) 10px 18px;
    --public-logo-offset-y: -18px;
}

.public.public--stacked {
    --public-layout-cols: 1fr;
    --public-layout-gap: 0;
    --public-layout-width: min(calc(100vw - 12px), 760px);
    --public-layout-padding: 8px 4px 0;
    --public-stack-width: 100%;
    --public-stack-margin-left: 0;
    --public-frame-overflow: hidden;
    --public-scroll-overflow-y: auto;
    --public-scroll-overflow-x: hidden;
    --public-altar-display: none;
    --public-mobile-header-h: 142px;
    --public-mobile-footer-h: 42px;
    --public-mobile-bottom-gap: 48px;
    height: 100dvh;
    min-height: 100dvh;
    overflow: hidden;
}

.public.public--stacked .ui-header {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 120;
}

.public.public--stacked .ui-footer {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 115;
}

.public.public--stacked .page-shell {
    height: 100dvh;
    box-sizing: border-box;
    overflow: hidden;
}

.public.public--stacked .public-layout,
.public.public--stacked .public-scroll-frame,
.public.public--stacked .public-scroll-panel {
    min-height: 0;
}

.public.public--stacked .public-layout,
.public.public--stacked .public-scroll-frame {
    height: 100%;
}

.public.public--stacked .public-scroll-frame {
    max-width: min(680px, 100%);
    margin: 0;
}

.public.public--stacked .public-scroll-panel {
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
}

.public.public--stacked .public-scroll-panel::-webkit-scrollbar {
    display: none;
}

.public.public--r768 {
    --public-bg-width: 1802px;
    --public-bg-pos-x: -192px;
    --public-bg-pos-y: -101px;
    --public-shell-padding: calc(var(--public-mobile-header-h) + 77px) 56px calc(var(--public-mobile-footer-h) + var(--public-mobile-bottom-gap)) 67px;
    --public-scroll-height: 585px;
    --public-panel-padding: 24px 14px 18px;
    background-attachment: fixed;
}

.public.public--r485 {
    --public-bg-width: 1500px;
    --public-bg-pos-x: -234px;
    --public-bg-pos-y: -43px;
    --public-shell-padding: calc(var(--public-mobile-header-h) + 82px) 4px calc(var(--public-mobile-footer-h) + var(--public-mobile-bottom-gap)) 0px;
    background-attachment: fixed;
}

.public.public--r430 {
    --public-bg-width: 1671px;
    --public-layout-width: min(calc(100vw - 6px), var(--public-bg-width));
    --public-bg-pos-x: -280px;
    --public-bg-pos-y: -89px;
    --public-shell-padding: calc(var(--public-mobile-header-h) + 70px) 4px calc(var(--public-mobile-footer-h) + var(--public-mobile-bottom-gap)) 4px;
    --public-panel-padding: 16px 10px 14px;
    background-attachment: fixed;
}

.public.public--r768 .public-page-stack,
.public.public--r485 .public-page-stack,
.public.public--r430 .public-page-stack {
    width: 100%;
}

/* ── Parchment fold — séparateur inter-vues ─────────────────────────────── */
.parchment-fold {
    position: relative;
    padding: 40px 12px;
    display: flex;
    flex-direction: column;
    gap: 0;
    opacity: 0.68;
    pointer-events: none;
    user-select: none;
}

.parchment-fold::before,
.parchment-fold::after {
    content: '';
    display: block;
    height: 1px;
    background: linear-gradient(90deg, transparent 0%, rgba(110, 78, 26, 0.35) 20%, rgba(110, 78, 26, 0.35) 80%, transparent 100%);
}

.parchment-fold::before { margin-bottom: 14px; }
.parchment-fold::after  { margin-top: 14px; }

/* Ligne de texte générique */
.pf-row {
    font-family: 'Share Tech Mono', monospace;
    font-size: 9px;
    letter-spacing: 0.10em;
    color: rgba(62, 38, 10, 0.82);
    text-transform: uppercase;
    line-height: 1.9;
    white-space: nowrap;
    overflow: hidden;
    text-shadow: 0 0 0.4px rgba(62, 38, 10, 0.40);
}

/* Référence / titre — Garamond italique, légèrement rubrique */
.pf-ref,
.pf-title {
    font-family: 'Cormorant Garamond', 'Times New Roman', serif;
    font-size: 10px;
    font-style: italic;
    letter-spacing: 0.06em;
    color: rgba(110, 52, 12, 0.78);
    text-shadow: none;
    line-height: 2;
}
.pf-title {
    font-weight: 600;
    color: rgba(90, 42, 8, 0.85);
}

/* Ligne caviardée — encre sépia, pas de vert */
.pf-blocked {
    color: rgba(55, 32, 8, 0.78);
    letter-spacing: 0.08em;
}

/* Séparateur de colonne — trait horizontal très discret */
.pf-separator {
    color: rgba(100, 68, 20, 0.38);
    letter-spacing: 0.05em;
    line-height: 2.2;
}

/* Note de bas — italic Garamond */
.pf-note {
    font-family: 'Cormorant Garamond', serif;
    font-size: 9px;
    font-style: italic;
    color: rgba(80, 48, 12, 0.62);
    letter-spacing: 0.04em;
    text-shadow: none;
    opacity: 1;
}

/* Deux colonnes style page de scriptorium */
.pf-columns {
    display: grid;
    grid-template-columns: 1fr 1px 1fr;
    gap: 0 14px;
    margin: 6px 0;
}
.pf-col {
    display: flex;
    flex-direction: column;
    overflow: hidden;
}
/* Ligne de gouttière centrale */
.pf-gutter {
    background: rgba(100, 68, 20, 0.18);
    margin: 0;
}

/* ═══ PARCHMENT SKIN — encre et parchemin pour pages publiques ═══════════ */

/* Scroll panel — animation contrôlée en JS */
.public-body .public-scroll-panel {
    scroll-behavior: auto;
}

/* Gap entre sections et séparateurs */
.public-body #app.public-page-stack {
    gap: 0;
}

/* ── Nav links — codex plutôt que terminal ───────────────── */


/* ── Status chip public ──────────────────────────────── */
.public-body .status-chip {
    font-family: 'Cormorant Garamond', serif;
    font-size: 12px;
    font-weight: 600;
    text-transform: none;
    letter-spacing: 0.04em;
    color: rgba(60, 38, 10, 0.70);
    border-color: rgba(100, 72, 22, 0.22);
    background: rgba(210, 178, 108, 0.06);
}

/* ── Typographie ────────────────────────────────────────── */
.public-body .page-kicker {
    font-family: 'Cormorant Garamond', serif;
    font-style: italic;
    color: rgba(100, 65, 15, 0.72);
    letter-spacing: 0.03em;
}

.public-body .public-page-title {
    font-family: 'Cormorant Garamond', 'Times New Roman', serif;
    font-weight: 700;
    color: rgba(18, 8, 2, 0.95);
    text-transform: none;
    letter-spacing: 0.01em;
}

.public-body .public-page-lead {
    font-family: 'Cormorant Garamond', 'Times New Roman', serif;
    color: rgba(22, 12, 4, 0.84);
    font-size: 1.08rem;
    line-height: 1.85;
}

/* ── Overrides Tailwind dans la zone de défilement ───────────── */
.public-body .public-scroll-panel .text-white,
.public-body .public-scroll-panel [class*="text-white"] {
    color: rgba(22, 12, 4, 0.90);
}

.public-body .public-scroll-panel [class*="text-cyan"] {
    color: rgba(55, 33, 8, 0.88);
}

.public-body .public-scroll-panel [class*="border-cyan"] {
    border-color: rgba(110, 78, 26, 0.22);
}

.public-body .public-scroll-panel [class*="bg-black"] {
    background-color: rgba(215, 190, 138, 0.06);
}

.public-body .public-scroll-panel [class*="bg-cyan"] {
    background-color: rgba(175, 138, 62, 0.06);
}

/* ── Composants manuscrit (ms-) ─────────────────────────── */
.ms-feature-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
    gap: 1px;
    margin-top: 1.5rem;
    border: 1px solid rgba(100, 72, 22, 0.18);
    background: rgba(100, 72, 22, 0.18);
}
.ms-feature-card {
    padding: 0.9rem 1rem;
    background: rgba(230, 208, 148, 0.06);
    display: flex;
    flex-direction: column;
    gap: 0.3rem;
}
.ms-feature-title {
    font-family: 'Cormorant Garamond', serif;
    font-size: 1.05rem;
    font-weight: 700;
    color: rgba(90, 52, 8, 0.92);
    margin: 0;
}
.ms-feature-desc {
    font-family: 'Cormorant Garamond', serif;
    font-size: 0.92rem;
    color: rgba(30, 18, 4, 0.78);
    margin: 0;
    line-height: 1.5;
}
.ms-chapter-header {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.2rem;
    padding-bottom: 0.5rem;
    border-bottom: 1px solid rgba(100, 72, 22, 0.22);
}
.ms-section-heading {
    font-family: 'Cormorant Garamond', serif;
    font-size: 1.1rem;
    font-weight: 600;
    font-style: italic;
    color: rgba(80, 48, 10, 0.82);
    margin: 0;
    letter-spacing: 0.02em;
}
.ms-seal {
    font-family: 'Cormorant Garamond', serif;
    font-size: 0.78rem;
    font-style: italic;
    color: rgba(80, 52, 14, 0.56);
    white-space: nowrap;
}
.ms-chapter-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 0;
    border: 1px solid rgba(100, 72, 22, 0.18);
    background: rgba(100, 72, 22, 0.12);
}
.ms-chapter-link {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    padding: 1rem 1.1rem;
    background: rgba(228, 206, 148, 0.05);
    text-decoration: none;
    border-right: 1px solid rgba(100, 72, 22, 0.12);
    border-bottom: 1px solid rgba(100, 72, 22, 0.12);
    transition: background 0.18s;
}
.ms-chapter-link:hover {
    background: rgba(200, 168, 100, 0.12);
}
.ms-chapter-title {
    font-family: 'Cormorant Garamond', serif;
    font-size: 1rem;
    font-weight: 700;
    color: rgba(22, 10, 2, 0.90);
    letter-spacing: 0.01em;
}
.ms-chapter-desc {
    font-family: 'Cormorant Garamond', serif;
    font-size: 0.85rem;
    font-style: italic;
    color: rgba(50, 30, 8, 0.68);
}

/* ── Archive ──────────────────────────────────────────────── */
.public-body .archive-entry {
    border-color: rgba(118, 84, 30, 0.14);
    background: rgba(230, 205, 152, 0.03);
}

.public-body .archive-tag {
    border-color: rgba(118, 84, 30, 0.20);
    background: rgba(168, 122, 46, 0.07);
    color: rgba(80, 53, 14, 0.82);
}

.public-body .archive-excerpt {
    border-left-color: rgba(135, 98, 40, 0.28);
    background: rgba(210, 185, 128, 0.04);
    color: rgba(52, 35, 10, 0.78);
}

.public-body .archive-list {
    color: rgba(50, 33, 10, 0.78);
}

/* ── Citations ────────────────────────────────────────────── */
.public-body .citation,
.public-body .citation p {
    font-family: 'Cormorant Garamond', 'Times New Roman', serif;
    color: rgba(36, 22, 6, 0.88);
}

.public-body .citation footer {
    color: rgba(82, 56, 16, 0.68);
}

/* ── Factions ─────────────────────────────────────────────── */
.public-body .faction-card {
    border-color: rgba(118, 84, 30, 0.14);
    background: linear-gradient(180deg, rgba(232, 208, 155, 0.04), rgba(200, 170, 115, 0.02));
}

.public-body .faction-card::before {
    background: linear-gradient(90deg, rgba(135, 98, 38, 0.28), transparent);
}

.public-body .faction-status {
    border-color: rgba(118, 84, 30, 0.20);
    background: rgba(168, 122, 46, 0.07);
    color: rgba(80, 53, 14, 0.80);
}

/* ── Personnages ──────────────────────────────────────────── */
.public-body .character-card {
    border-color: rgba(118, 84, 30, 0.14);
    background: linear-gradient(180deg, rgba(232, 208, 155, 0.04), rgba(200, 170, 115, 0.02));
    box-shadow: none;
}

.public-body .character-sigil {
    border-color: rgba(118, 84, 30, 0.26);
    background: rgba(240, 220, 172, 0.07);
    color: rgba(45, 28, 8, 0.88);
    font-family: 'Cormorant Garamond', serif;
    font-size: 0.95rem;
}

.public-body .character-rank {
    color: rgba(95, 65, 20, 0.68);
}


