:root {
    --font-family-base: "Manrope", "Inter", "Segoe UI", sans-serif;
    --panel-bg: rgba(20, 20, 20, 0.75);
    --panel-border: rgba(140, 153, 168, 0.28);
    --text: #e6ebf2;
    --text-muted: #9da9b7;
    --btn-bg: rgba(42, 50, 60, 0.6);
    --btn-bg-active: rgba(90, 106, 124, 0.56);
    --btn-border: rgba(136, 150, 166, 0.34);
    --focus: 0 0 0 3px rgba(123, 143, 165, 0.3);
    --color-bg-canvas: #0a1016;
    --color-bg-panel: var(--panel-bg);
    --color-bg-panel-solid: #161d25;
    --color-bg-input: rgba(13, 18, 24, 0.9);
    --color-border-panel: var(--panel-border);
    --color-border-strong: rgba(165, 177, 192, 0.4);
    --color-border-input: rgba(148, 162, 178, 0.28);
    --color-text-primary: var(--text);
    --color-text-muted: var(--text-muted);
    --color-accent: #b8c5d5;
    --color-accent-strong: #c6d2e0;
    --color-accent-soft: #d5dfea;
    --color-category-residential: #7f93a5;
    --color-category-commercial: #6f8397;
    --color-category-infrastructure: #5f788f;
    --color-success: #b6d7a8;
    --color-danger: #ff8e8e;
    --shadow-panel: 0 10px 28px rgba(4, 8, 14, 0.35);
    --shadow-panel-hover: 0 14px 34px rgba(4, 8, 14, 0.4);
    --shadow-focus: var(--focus);
    --radius-panel: 12px;
    --radius-control: 8px;
    --ease-standard: cubic-bezier(0.22, 1, 0.36, 1);
    --duration-fast: 160ms;
    --duration-medium: 260ms;
    --duration-slow: 420ms;
}

html,
body {
    font-family: var(--font-family-base);
    background: var(--color-bg-canvas);
    color: var(--color-text-primary);
}

a {
    color: var(--color-accent-strong);
    text-decoration: none;
    transition: color var(--duration-fast) var(--ease-standard);
}

a:hover {
    color: var(--color-accent-soft);
}

button,
input,
select,
textarea {
    font-family: inherit;
}

button,
input[type="file"]::file-selector-button {
    border: 1px solid var(--btn-border);
    border-radius: var(--radius-control);
    background: var(--btn-bg);
    color: var(--text);
    font-weight: 600;
    cursor: pointer;
    transition: transform var(--duration-fast) var(--ease-standard),
        background-color var(--duration-fast) var(--ease-standard),
        border-color var(--duration-fast) var(--ease-standard),
        color var(--duration-fast) var(--ease-standard),
        box-shadow var(--duration-fast) var(--ease-standard);
}

button:hover,
input[type="file"]::file-selector-button:hover {
    background: rgba(64, 74, 87, 0.72);
    box-shadow: 0 4px 14px rgba(8, 14, 24, 0.24);
}

button:active,
input[type="file"]::file-selector-button:active {
    transform: translateY(1px);
}

button.secondary {
    background: var(--btn-bg);
    border-color: var(--btn-border);
    color: var(--text);
}

button.secondary:hover {
    background: rgba(64, 74, 87, 0.72);
    border-color: var(--color-border-strong);
}

button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
a:focus-visible {
    outline: none;
    box-shadow: var(--shadow-focus);
}

input,
select,
textarea {
    background: var(--color-bg-input);
    border: 1px solid var(--color-border-input);
    color: var(--color-text-primary);
    border-radius: var(--radius-control);
    transition: border-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);
}

.panel-surface {
    background: var(--color-bg-panel);
    border: 1px solid var(--color-border-panel);
    border-radius: var(--radius-panel);
    box-shadow: var(--shadow-panel);
    backdrop-filter: blur(7px);
    transition: transform var(--duration-medium) var(--ease-standard),
        box-shadow var(--duration-medium) var(--ease-standard),
        border-color var(--duration-medium) var(--ease-standard);
}

.panel-surface:hover {
    transform: translateY(-0.5px);
    box-shadow: var(--shadow-panel-hover);
    border-color: var(--color-border-strong);
}

.panel-title {
    margin: 0;
    font-size: 14px;
    letter-spacing: 0.08em;
    color: var(--color-accent);
    font-weight: 700;
}

.muted {
    color: var(--color-text-muted);
}

.status-success {
    color: var(--color-success);
}

.status-error {
    color: var(--color-danger);
}

.section-divider {
    border: 0;
    border-top: 1px solid rgba(148, 162, 178, 0.2);
    margin: 12px 0;
}

.community-popup .mapboxgl-popup-content {
    background: rgba(7, 9, 12, 0.95) !important;
    color: var(--color-text-primary) !important;
    border: 1px solid var(--btn-border) !important;
    padding: 6px 10px !important;
    border-radius: 8px !important;
    font-size: 12px !important;
    pointer-events: none !important;
    box-shadow: 0 8px 18px rgba(9, 14, 22, 0.35);
}

.community-popup .mapboxgl-popup-tip {
    border-top-color: rgba(7, 9, 12, 0.95) !important;
    border-bottom-color: rgba(7, 9, 12, 0.95) !important;
}

.switch {
    position: relative;
    display: inline-block;
    width: 44px;
    height: 20px;
}

.switch input {
    opacity: 0;
    width: 0;
    height: 0;
}

.slider {
    position: absolute;
    cursor: pointer;
    inset: 0;
    background-color: #2e3440;
    transition: background-color var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard);
    border-radius: 20px;
}

.slider:before {
    position: absolute;
    content: "";
    height: 14px;
    width: 14px;
    left: 3px;
    bottom: 3px;
    background-color: #f8f8f8;
    transition: transform var(--duration-fast) var(--ease-standard);
    border-radius: 50%;
}

input:checked + .slider {
    background-color: var(--btn-bg-active);
    box-shadow: 0 0 0 4px rgba(123, 143, 165, 0.16);
}

input:checked + .slider:before {
    transform: translateX(24px);
}

.mapboxgl-ctrl-group {
    border-radius: 8px !important;
    overflow: hidden;
    box-shadow: 0 4px 18px rgba(0, 0, 0, 0.35) !important;
}

.mapboxgl-ctrl-group button {
    border-radius: 0 !important;
}

@keyframes fade-up {
    from {
        opacity: 0;
        transform: translateY(12px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.motion-fade-up {
    opacity: 0;
    animation: fade-up var(--duration-slow) var(--ease-standard) forwards;
}

.motion-delay-1 {
    animation-delay: 70ms;
}

.motion-delay-2 {
    animation-delay: 140ms;
}

.motion-delay-3 {
    animation-delay: 210ms;
}

@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}
