: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); } * { 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; } .app { position: fixed; inset: 0; } .map { width: 100%; height: 100%; background: var(--bg); } .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(320px, 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 { 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 { background: #3a414a; border-color: var(--border-strong); outline: none; } .country-list-flag { width: 1.3rem; text-align: center; } .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; } .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; } svg { width: 100%; height: 100%; display: block; touch-action: none; cursor: grab; } svg:active { cursor: grabbing; } .country-shadow-layer { box-shadow: var(--shadow); filter: drop-shadow(0 6px 16px rgba(0, 0, 0, 0.38)); } .country-shadow { fill: rgba(0, 0, 0, 0.31); filter: blur(2.5px); stroke: none; pointer-events: none; } .country { stroke: rgba(21, 24, 28, 0.95); stroke-width: 0.85; vector-effect: non-scaling-stroke; stroke-linejoin: round; filter: none; outline: none !important; -webkit-tap-highlight-color: transparent; cursor: pointer; transition: opacity 0.15s ease; } .country:hover, .country:focus, .country:focus-visible { opacity: 0.75; outline: none !important; } svg [tabindex]:focus { outline: none !important; } .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(360px, 95vw); 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; } .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); } .legend { position: fixed; right: 1rem; background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 0.7rem 0.8rem; width: min(330px, calc(100vw - 2rem)); box-shadow: var(--shadow); backdrop-filter: blur(6px); } .legend { top: 1rem; } .legend h3 { margin: 0 0 0.45rem; font-size: 0.95rem; } .legend ul { margin: 0; padding: 0; list-style: none; display: grid; gap: 0.32rem; } .legend li { display: flex; align-items: center; gap: 0.45rem; font-size: 0.86rem; } .legend-swatch { width: 12px; height: 12px; border-radius: 2px; border: 1px solid rgba(226, 232, 240, 0.24); flex: 0 0 12px; } .country-category { margin-top: 0.45rem; margin-bottom: 0.2rem; font-weight: 600; color: var(--text); } .country-data { margin-top: 0.45rem; max-height: min(48vh, 360px); 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); white-space: pre-line; } @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: 5.1rem; } .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: 8.5rem; 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; } .country-data-row { grid-template-columns: 1fr; gap: 0.15rem; } }