:root { color-scheme: dark; --bg: #1f2328; --text: #ecf0f4; --muted-text: #bcc3cc; --panel: rgba(39, 44, 51, 0.9); --panel-strong: #323841; --card: #2d333b; --border: rgba(236, 240, 244, 0.18); --border-strong: rgba(236, 240, 244, 0.32); --focus: #d7dde5; --shadow: 0 14px 34px rgba(0, 0, 0, 0.5); --commune-fill: #56606b; --commune-stroke: rgba(21, 24, 28, 0.95); --commune-hover: #94a3b8; --commune-selected: #f8fafc; --unit-marker-fill: #404853; --unit-marker-stroke: rgba(7, 9, 11, 0.98); --unit-marker-hover: #5d6976; --mobile-controls-top: 5.1rem; --mobile-legend-top: 8.5rem; } * { box-sizing: border-box; } html, body { height: 100%; } body { margin: 0; font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; background: var(--bg); color: var(--text); overflow: hidden; } button, input { font: inherit; } .app { position: fixed; inset: 0; } .map { position: absolute; inset: 0; width: 100%; height: 100%; background: radial-gradient(circle at top left, rgba(255, 255, 255, 0.08), transparent 28%), radial-gradient(circle at bottom right, rgba(255, 255, 255, 0.04), transparent 24%), var(--bg); } .map-canvas { width: 100%; height: 100%; display: block; } .map-canvas { cursor: grab; touch-action: none; } .map-canvas:active { cursor: grabbing; } .map-header { position: fixed; top: 1rem; left: 1rem; z-index: 3; padding: 0.75rem 0.9rem; border-radius: 12px; border: 1px solid var(--border); background: var(--panel); box-shadow: var(--shadow); backdrop-filter: blur(6px); } .map-header h1 { margin: 0; font-size: clamp(1rem, 1.9vw, 1.35rem); line-height: 1.15; } .map-header p { margin: 0.22rem 0 0; font-size: clamp(0.76rem, 1.2vw, 0.9rem); color: var(--muted-text); } .mobile-country-button, .mobile-legend-button { display: none; align-items: center; justify-content: center; position: fixed; z-index: 4; border: 1px solid var(--border); background: var(--panel); color: var(--text); border-radius: 999px; box-shadow: var(--shadow); backdrop-filter: blur(6px); cursor: pointer; } .mobile-country-button { width: 2.7rem; height: 2.7rem; font-size: 1.25rem; } .mobile-legend-button { height: 2.7rem; padding: 0 0.9rem; font-size: 0.92rem; font-weight: 600; } .country-sidebar { position: fixed; top: 6.35rem; left: 1rem; height: min(58vh, 520px); width: min(340px, calc(100vw - 2rem)); display: flex; flex-direction: column; gap: 0.55rem; padding: 0.8rem; background: var(--panel); border: 1px solid var(--border); border-radius: 14px; box-shadow: var(--shadow); backdrop-filter: blur(6px); z-index: 2; } .country-sidebar h3 { margin: 0; font-size: 1rem; } .country-search { border: 1px solid var(--border); border-radius: 9px; padding: 0.52rem 0.62rem; font-size: 0.9rem; color: var(--text); background: var(--panel-strong); outline: none; } .country-search:focus { border-color: var(--focus); box-shadow: 0 0 0 3px rgba(236, 240, 244, 0.2); } .country-search::placeholder { color: var(--muted-text); } .country-list-count { margin: 0; font-size: 0.78rem; color: var(--muted-text); } .country-list { margin: 0; padding: 0; list-style: none; overflow: auto; min-height: 0; flex: 1; display: grid; gap: 0.28rem; align-content: start; } .country-list-item, .territory-list-item { width: 100%; border: 1px solid var(--border); background: var(--card); border-radius: 8px; padding: 0.38rem 0.5rem; display: flex; align-items: center; gap: 0.45rem; font-size: 0.86rem; color: var(--text); cursor: pointer; text-align: left; } .country-list-item:hover, .country-list-item:focus-visible, .territory-list-item:hover, .territory-list-item:focus-visible { background: #3a414a; border-color: var(--border-strong); outline: none; } .territory-list-item.active { background: #3a414a; border-color: var(--focus); } .country-list-item.active { background: #3a414a; border-color: var(--focus); } .country-list-flag, .territory-list-marker { width: 1.55rem; text-align: center; flex: 0 0 1.55rem; color: #d7dde5; } .territory-badge { width: 1.9rem; height: 1.9rem; flex: 0 0 1.9rem; display: inline-flex; align-items: center; justify-content: center; } .territory-badge-image { width: 100%; height: 100%; display: block; object-fit: contain; filter: drop-shadow(0 3px 6px rgba(0, 0, 0, 0.35)); } .territory-badge-flag { font-size: 1.15rem; line-height: 1; filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.35)); } .territory-badge-flag .territory-badge-image { height: 72%; border-radius: 0.16rem; } .country-list-body, .territory-list-body { min-width: 0; flex: 1; } .country-list-title, .territory-list-title { display: block; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .country-list-meta, .territory-list-meta { display: block; margin-top: 0.08rem; font-size: 0.74rem; color: var(--muted-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .country-list-item { align-items: flex-start; } .country-list-title, .country-list-meta { white-space: normal; overflow: visible; text-overflow: clip; overflow-wrap: anywhere; word-break: break-word; } .country-list-empty { margin: 0.4rem 0; font-size: 0.84rem; color: var(--muted-text); } .country-list-modal { position: fixed; inset: 0; display: none; align-items: center; justify-content: center; padding: 0.8rem; background: rgba(0, 0, 0, 0.64); z-index: 11; } .country-list-modal.open { display: flex; } .country-list-modal-content { width: min(700px, 96vw); height: min(88vh, 800px); background: var(--card); border: 1px solid var(--border); color: var(--text); border-radius: 14px; padding: 0.85rem; box-shadow: var(--shadow); display: flex; flex-direction: column; gap: 0.55rem; } .country-list-modal-head { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; } .country-list-modal-head h2 { margin: 0; font-size: 1.04rem; } .country-list-modal-head .close { position: static; font-size: 1.35rem; line-height: 1; } .country-list-modal .country-list { flex: 1; } .map-footer { position: fixed; left: 50%; bottom: 0.55rem; transform: translateX(-50%); margin: 0; z-index: 2; font-size: 0.78rem; color: var(--muted-text); background: var(--panel); border: 1px solid var(--border); border-radius: 999px; padding: 0.34rem 0.75rem; backdrop-filter: blur(6px); white-space: nowrap; } .map-footer a { color: #e8ecf2; } .masking-disclaimer { position: fixed; left: 50%; bottom: 2.65rem; transform: translateX(-50%); z-index: 2; display: inline-flex; align-items: center; gap: 0.65rem; max-width: min(760px, calc(100vw - 2rem)); padding: 0.45rem 0.65rem; border-radius: 10px; border: 1px solid var(--border); background: var(--panel); color: var(--muted-text); font-size: 0.77rem; line-height: 1.25; box-shadow: var(--shadow); backdrop-filter: blur(6px); } .masking-disclaimer[hidden] { display: none !important; } .masking-disclaimer-action { border: 1px solid var(--border); background: var(--panel-strong); color: var(--text); border-radius: 8px; padding: 0.28rem 0.52rem; font-size: 0.76rem; font-weight: 600; cursor: pointer; white-space: nowrap; } .masking-disclaimer-action:hover, .masking-disclaimer-action:focus-visible { background: #3a414a; border-color: var(--focus); outline: none; } .map-tooltip { position: fixed; left: 0; top: 0; z-index: 40; pointer-events: none; opacity: 0; transform: translate(8px, 8px); transition: none; background: rgba(17, 20, 24, 0.96); color: #f8fafc; border-radius: 8px; padding: 0.3rem 0.5rem; font-size: 0.8rem; line-height: 1.2; white-space: nowrap; box-shadow: 0 10px 20px rgba(0, 0, 0, 0.55); } .map-tooltip.visible { opacity: 1; } .legend { position: fixed; top: 1rem; right: 1rem; background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 0.7rem 0.8rem; width: min(360px, calc(100vw - 2rem)); max-height: min(74vh, 760px); overflow: auto; box-shadow: var(--shadow); backdrop-filter: blur(6px); } .legend h3 { margin: 0 0 0.45rem; font-size: 0.95rem; } .legend-copy { margin: 0 0 0.65rem; font-size: 0.8rem; color: var(--muted-text); line-height: 1.35; } .territory-list { margin: 0; padding: 0; list-style: none; display: grid; gap: 0.32rem; } .map-status { position: absolute; inset: 50% auto auto 50%; transform: translate(-50%, -50%); min-width: 220px; max-width: min(340px, calc(100vw - 2rem)); padding: 0.9rem 1rem; border-radius: 12px; border: 1px solid var(--border); background: var(--panel); box-shadow: var(--shadow); color: var(--text); text-align: center; backdrop-filter: blur(6px); } .modal { position: fixed; inset: 0; display: none; align-items: center; justify-content: center; padding: 1rem; background: rgba(0, 0, 0, 0.66); } .modal.open { display: flex; } .modal-content { width: min(440px, 95vw); max-height: min(82vh, 760px); background: var(--card); border: 1px solid var(--border); color: var(--text); border-radius: 14px; padding: 1.2rem 1.2rem 1rem; box-shadow: var(--shadow); position: relative; display: flex; flex-direction: column; } .modal-content h2 { margin: 0; font-size: 1.15rem; } .modal-content p { margin: 0.8rem 0 0; font-size: 1.05rem; } .close { position: absolute; top: 0.55rem; right: 0.55rem; border: none; background: transparent; font-size: 1.45rem; line-height: 1; cursor: pointer; color: var(--muted-text); } .close:hover, .close:focus-visible { color: var(--text); } .country-category { margin-top: 0.45rem; margin-bottom: 0.2rem; font-weight: 600; color: var(--text); } .modal-badge-label { display: inline-flex; align-items: center; gap: 0.48rem; min-width: 0; vertical-align: middle; } .modal-badge-heading { width: 3.75rem; height: 3.75rem; flex: 0 0 3.75rem; } .modal-badge-inline { width: 1.28rem; height: 1.28rem; flex: 0 0 1.28rem; } .country-data { margin-top: 0.45rem; max-height: min(56vh, 460px); overflow: auto; padding-right: 0.25rem; } .country-data-row { display: grid; grid-template-columns: 132px 1fr; gap: 0.5rem; margin-bottom: 0.42rem; font-size: 0.92rem; line-height: 1.3; } .country-data-row strong { color: #c8ced6; } .country-data-row span { color: var(--text); } .unit-communes-section { margin-top: 0.85rem; padding-top: 0.7rem; border-top: 1px solid var(--border); } .unit-communes-section strong { display: block; color: #c8ced6; font-size: 0.92rem; } .unit-communes-list { margin: 0.55rem 0 0; padding-left: 1rem; max-height: min(22vh, 190px); overflow: auto; color: var(--text); } .unit-communes-list li + li { margin-top: 0.18rem; } .unit-link-button { border: none; padding: 0; background: transparent; color: #d9e5f2; text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 0.12rem; cursor: pointer; font: inherit; } .unit-link-button:hover, .unit-link-button:focus-visible { color: #ffffff; outline: none; } .unit-link-separator { color: var(--muted-text); } .modal-action { margin-top: 0.9rem; width: 100%; border: 1px solid var(--border); background: var(--panel-strong); color: var(--text); border-radius: 10px; padding: 0.72rem 0.9rem; font-size: 0.92rem; font-weight: 600; cursor: pointer; } .modal-action:hover, .modal-action:focus-visible { background: #3a414a; border-color: var(--focus); outline: none; } .masking-modal-content { width: min(760px, 96vw); max-height: min(84vh, 820px); } .masking-modal-data { margin-top: 0.75rem; display: grid; gap: 0.75rem; overflow: auto; max-height: min(56vh, 520px); padding-right: 0.24rem; } .masking-modal-block { border: 1px solid var(--border); border-radius: 10px; background: rgba(255, 255, 255, 0.03); padding: 0.55rem 0.65rem; } .masking-modal-block h3 { margin: 0 0 0.46rem; font-size: 0.9rem; } .masking-modal-list { margin: 0; padding-left: 1rem; display: grid; gap: 0.2rem; font-size: 0.84rem; } .country-list-item.masked { border-style: dashed; } @media (max-width: 760px) { .country-search { font-size: 16px; } .map-header { top: 0.6rem; left: 0.6rem; right: 0.6rem; } .mobile-country-button, .mobile-legend-button { display: inline-flex; top: var(--mobile-controls-top); } .mobile-country-button { left: 0.6rem; } .mobile-legend-button { right: 0.6rem; } .country-sidebar { display: none; } .legend { right: 0.6rem; width: min(290px, calc(100vw - 1.2rem)); top: var(--mobile-legend-top); max-height: min(58vh, 430px); overflow: auto; display: none; } .legend.mobile-open { display: block; } .country-list-modal { padding: 0.6rem; } .country-list-modal-content { width: 100%; height: min(90vh, 820px); } .map-footer { max-width: calc(100vw - 1.2rem); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.72rem; } .masking-disclaimer { bottom: 2.35rem; max-width: calc(100vw - 1.2rem); padding: 0.4rem 0.5rem; gap: 0.5rem; } .country-data-row { grid-template-columns: 1fr; } }