.location-map-page { height: calc(100dvh - 56px); min-height: 0; background: #07111d; color: #f8fafc; display: flex; flex-direction: column; overflow: hidden; } .location-map-topbar { position: relative; z-index: 25; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 0.75rem; padding: 0.75rem clamp(0.75rem, 2vw, 1.25rem); border-bottom: 1px solid var(--color-border-light); background: rgba(17, 28, 42, 0.94); backdrop-filter: blur(14px); } .location-map-back, .location-map-topbar button { min-height: 40px; border: 1px solid var(--color-border-light); border-radius: 8px; background: #15283b; color: #f8fafc; font-weight: 700; cursor: pointer; } .location-map-back { width: 40px; padding: 0; font-size: 1.15rem; line-height: 1; } .location-map-title { min-width: 0; } .location-map-title h1 { font-size: clamp(1rem, 3vw, 1.35rem); color: #f8fafc; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .location-map-title span { display: block; margin-top: 0.15rem; color: #9fb3c8; font-size: 0.86rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .location-map-status { min-width: 78px; padding: 0.35rem 0.6rem; border: 1px solid var(--color-border-light); border-radius: 999px; color: #f8fafc; font-size: 0.78rem; font-weight: 800; text-align: center; } .location-map-status-no-map { background: rgba(148, 163, 184, 0.16); } .location-map-status-loading { background: rgba(148, 163, 184, 0.16); } .location-map-status-draft { background: rgba(245, 158, 11, 0.2); border-color: rgba(245, 158, 11, 0.36); } .location-map-status-draft-preview { background: rgba(14, 165, 233, 0.2); border-color: rgba(56, 189, 248, 0.4); } .location-map-status-unsaved-draft { background: rgba(244, 114, 182, 0.2); border-color: rgba(244, 114, 182, 0.42); } .location-map-status-load-error { background: rgba(248, 113, 113, 0.2); border-color: rgba(248, 113, 113, 0.42); } .location-map-status-published { background: rgba(20, 184, 166, 0.18); border-color: rgba(20, 184, 166, 0.34); } .location-map-workspace { flex: 1; min-height: 0; min-width: 0; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; overflow: hidden; } .location-map-toolbar { display: flex; align-items: flex-start; flex-wrap: wrap; gap: 0.75rem; padding: 0.75rem clamp(0.75rem, 2vw, 1.25rem); border-bottom: 1px solid var(--color-border-light); background: rgba(11, 19, 31, 0.98); } .location-map-mode-group { display: flex; align-items: center; min-width: 0; } .location-map-mode-buttons, .location-map-tool-buttons, .location-map-zoom-controls, .location-map-history-buttons, .location-map-editor-actions { display: flex; align-items: center; gap: 0.45rem; } .location-map-mode-buttons button, .location-map-tool-buttons button, .location-map-zoom-controls button, .location-map-history-buttons button, .location-map-editor-actions button, .location-map-setup-actions button { min-height: 40px; padding: 0.55rem 0.8rem; border: 1px solid var(--color-border-light); border-radius: 8px; background: #15283b; color: #f8fafc; font-weight: 700; cursor: pointer; } .location-map-mode-buttons { gap: 0.25rem; padding: 0.25rem; border: 1px solid var(--color-border-light); border-radius: 999px; background: rgba(15, 23, 34, 0.68); } .location-map-mode-buttons button { min-height: 36px; border-color: transparent; border-radius: 999px; background: transparent; } .location-map-mode-buttons button.active, .location-map-tool-buttons button.active, .location-map-editor-actions button.primary, .location-map-setup-actions .btn-primary { border-color: var(--color-primary); background: var(--color-primary); color: #06111f; } .location-map-history-buttons { gap: 0.3rem; } .location-map-history-buttons button { min-width: 40px; padding-inline: 0.55rem; font-size: 1.12rem; line-height: 1; } .location-map-tool-buttons button.is-pan.active { border-color: rgba(245, 158, 11, 0.78); background: rgba(245, 158, 11, 0.22); color: #f8fafc; } .location-map-tool-buttons button.is-edit.active { border-color: rgb(45, 212, 191); background: rgba(20, 184, 166, 0.24); color: #f8fafc; } .location-map-editor-actions button.danger { border-color: rgba(248, 113, 113, 0.5); background: rgba(248, 113, 113, 0.24); } .location-map-mode-buttons button:disabled, .location-map-tool-buttons button:disabled, .location-map-zoom-controls button:disabled, .location-map-history-buttons button:disabled, .location-map-editor-actions button:disabled, .location-map-hidden-areas button:disabled, .location-map-setup-actions button:disabled { opacity: 0.55; cursor: not-allowed; } .location-map-zoom-controls span { min-width: 54px; color: #cbd5e1; font-size: 0.9rem; font-weight: 700; text-align: center; } .location-map-zoom-controls { margin-left: auto; } .location-map-label-short { display: none; } .location-map-canvas-shell { min-height: 0; min-width: 0; max-width: 100vw; overflow: hidden; padding: 0.75rem; } .location-map-scroll { position: relative; width: 100%; max-width: 100%; height: 100%; min-height: 0; overflow: auto; border: 1px solid var(--color-border-light); border-radius: 8px; background: linear-gradient(135deg, rgba(20, 184, 166, 0.08), transparent 40%), linear-gradient(180deg, rgba(15, 23, 42, 0.2), rgba(15, 23, 42, 0.04)); background-color: #101b2a; touch-action: pan-x pan-y; } .location-map-canvas-shell.is-pan-tool .location-map-scroll { cursor: grab; } .location-map-canvas-shell.is-panning .location-map-scroll { cursor: grabbing; user-select: none; } .location-map-svg { min-width: 320px; min-height: 260px; display: block; } .location-map-svg.is-editable { touch-action: none; } .location-map-background { fill: rgba(15, 23, 34, 0.92); stroke: rgba(148, 163, 184, 0.28); stroke-width: 2; } .location-map-grid { fill: url("#location-map-grid"); stroke: rgba(148, 163, 184, 0.18); stroke-width: 1; } .location-map-object rect:first-child { fill: rgba(30, 83, 124, 0.78); stroke: rgba(96, 165, 250, 0.72); stroke-width: 2; cursor: pointer; transition: fill 120ms ease, stroke 120ms ease, stroke-width 120ms ease; } .location-map-object.is-editable rect:first-child { cursor: grab; } .location-map-object.is-editable rect:first-child:active { cursor: grabbing; } .location-map-object:not(.is-selected):hover rect:first-child { fill: rgba(37, 99, 141, 0.88); stroke: rgba(147, 197, 253, 0.9); stroke-width: 3; } .location-map-object rect:first-child:focus-visible { outline: none; stroke: #bfdbfe; stroke-width: 4; } .location-map-object.is-selected rect:first-child { fill: rgba(20, 184, 166, 0.34); stroke: rgb(45, 212, 191); stroke-width: 4; } .location-map-object.is-selected rect:first-child:focus-visible { stroke: rgb(45, 212, 191); } .location-map-label { fill: #f8fafc; font-size: 24px; font-weight: 800; pointer-events: none; } .location-map-count { fill: rgba(226, 232, 240, 0.82); font-size: 18px; font-weight: 700; pointer-events: none; } .location-map-pin { fill: rgb(245, 158, 11); stroke: rgba(15, 23, 42, 0.9); stroke-width: 2; pointer-events: none; } .location-map-resize-handle { fill: rgb(245, 158, 11); stroke: rgba(15, 23, 42, 0.9); stroke-width: 2; cursor: nwse-resize; touch-action: none; } .location-map-empty-canvas { position: sticky; left: 50%; bottom: 1rem; width: fit-content; max-width: calc(100% - 2rem); transform: translateX(-50%); padding: 0.55rem 0.75rem; border: 1px solid var(--color-border-light); border-radius: 999px; background: rgba(17, 28, 42, 0.9); color: #cbd5e1; font-weight: 800; pointer-events: none; } .location-map-empty-canvas.has-action { display: inline-flex; align-items: center; gap: 0.55rem; padding: 0.4rem 0.45rem 0.4rem 0.7rem; pointer-events: auto; } .location-map-empty-canvas button { min-height: 40px; padding: 0 0.75rem; border: 1px solid rgba(96, 165, 250, 0.52); border-radius: 999px; background: rgba(59, 130, 246, 0.24); color: #f8fafc; font-weight: 900; cursor: pointer; } .location-map-empty-canvas button:disabled { cursor: not-allowed; opacity: 0.55; } .location-map-bottom-sheet { position: relative; max-height: 43vh; overflow-y: auto; padding: 0.8rem clamp(0.75rem, 2vw, 1.25rem) 1rem; border-top: 1px solid var(--color-border-light); background: rgba(17, 28, 42, 0.96); box-shadow: 0 -18px 40px rgba(0, 0, 0, 0.28); } .location-map-bottom-sheet-handle { display: none; } .location-map-sheet-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 0.75rem; margin-bottom: 0.65rem; } .location-map-sheet-header > div { min-width: 0; } .location-map-sheet-heading { display: flex; align-items: center; gap: 0.5rem; min-width: 0; } .location-map-sheet-header strong { display: block; min-width: 0; color: #f8fafc; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .location-map-sheet-header > div span { display: block; margin-top: 0.2rem; color: #9fb3c8; font-size: 0.82rem; } .location-map-sheet-header span, .location-map-muted { color: #9fb3c8; } .location-map-sheet-header .location-map-sheet-count { flex: 0 0 auto; min-width: 58px; margin-top: 0; padding: 0.2rem 0.45rem; border-radius: 999px; background: rgba(96, 165, 250, 0.18); color: #f8fafc; font-size: 0.82rem; font-weight: 900; text-align: center; } .location-map-layer-actions { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 0.4rem; } .location-map-sheet-close { width: 40px; min-width: 40px; height: 40px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--color-border-light); border-radius: 999px; background: rgba(15, 23, 34, 0.72); color: #f8fafc; font-size: 1.25rem; font-weight: 900; line-height: 1; cursor: pointer; } .location-map-sheet-close:hover, .location-map-sheet-close:focus-visible { border-color: rgba(96, 165, 250, 0.76); background: rgba(59, 130, 246, 0.22); } .location-map-layer-toggle { min-height: 40px; display: inline-flex; align-items: center; gap: 0.35rem; padding: 0.45rem 0.7rem; border: 1px solid var(--color-border-light); border-radius: 999px; background: rgba(15, 23, 34, 0.72); color: #f8fafc; font-weight: 800; cursor: pointer; } .location-map-layer-count { min-width: 1.35rem; height: 1.35rem; display: inline-flex; align-items: center; justify-content: center; border-radius: 999px; background: var(--color-primary); color: #06111f; font-size: 0.72rem; font-weight: 900; } .location-map-layer-toggle.active { border-color: var(--color-primary); background: rgba(59, 130, 246, 0.22); } .location-map-display-panel { display: grid; gap: 0.45rem; margin-bottom: 0.7rem; } .location-map-layer-reset { min-height: 40px; padding: 0.35rem 0.65rem; border: 1px solid var(--color-border-light); border-radius: 999px; background: rgba(15, 23, 34, 0.72); color: #dbeafe; font-weight: 800; cursor: pointer; } .location-map-display-controls { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.4rem; } .location-map-display-controls button { min-height: 40px; display: flex; align-items: center; justify-content: center; gap: 0.35rem; padding: 0.35rem 0.45rem; border: 1px solid var(--color-border-light); border-radius: 999px; background: rgba(15, 23, 34, 0.58); color: #f8fafc; font-size: 0.82rem; font-weight: 700; cursor: pointer; } .location-map-display-controls button.active { border-color: rgba(96, 165, 250, 0.76); background: rgba(59, 130, 246, 0.32); color: #f8fafc; box-shadow: inset 0 0 0 1px rgba(96, 165, 250, 0.18); } .location-map-editor-actions { flex-wrap: wrap; } .location-map-editor-action-stack { display: grid; gap: 0.45rem; margin-bottom: 0.75rem; } .location-map-selected-primary-actions { margin-bottom: 0.55rem; } .location-map-selected-secondary-actions { margin-top: 0.55rem; margin-bottom: 0; } .location-map-primary-actions button { flex: 1 1 140px; } .location-map-secondary-actions button { flex: 1 1 82px; min-height: 40px; padding: 0.45rem 0.58rem; background: rgba(21, 40, 59, 0.78); color: #dbeafe; font-size: 0.86rem; } .location-map-hidden-areas { margin-bottom: 0.75rem; } .location-map-hidden-areas button { min-height: 40px; width: 100%; padding: 0.5rem 0.7rem; border: 1px dashed rgba(96, 165, 250, 0.5); border-radius: 8px; background: rgba(59, 130, 246, 0.14); color: #dbeafe; font-weight: 900; cursor: pointer; } .location-map-overview { display: grid; gap: 0.35rem; } .location-map-overview-row { min-height: 38px; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 0.75rem; padding: 0.35rem 0.55rem; border: 1px solid var(--color-border-light); border-radius: 8px; background: rgba(15, 23, 34, 0.56); } .location-map-overview-row span { color: #9fb3c8; font-size: 0.82rem; font-weight: 800; } .location-map-overview-row strong { color: #f8fafc; font-weight: 900; white-space: nowrap; } .location-map-object-form { display: grid; gap: 0.45rem; } .location-map-field-row { min-height: 42px; display: grid; grid-template-columns: minmax(56px, 0.35fr) minmax(0, 1fr); align-items: center; gap: 0.55rem; padding: 0.1rem 0.4rem; border: 1px solid var(--color-border-light); border-radius: 8px; background: rgba(15, 23, 34, 0.58); } .location-map-field-row > span { color: #9fb3c8; font-size: 0.78rem; font-weight: 800; } .location-map-object-form input, .location-map-object-form select { width: 100%; min-width: 0; min-height: 40px; padding: 0.4rem 0.6rem; border: 1px solid var(--color-border-light); border-radius: 8px; background: #15283b; color: #f8fafc; } .location-map-object-flags { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.45rem; } .location-map-object-flags button { min-height: 40px; display: flex; align-items: center; justify-content: center; padding: 0.35rem 0.5rem; border: 1px solid var(--color-border-light); border-radius: 999px; background: rgba(15, 23, 34, 0.58); color: #f8fafc; font-weight: 800; cursor: pointer; } .location-map-object-flags button.active { border-color: rgba(96, 165, 250, 0.76); background: rgba(59, 130, 246, 0.32); box-shadow: inset 0 0 0 1px rgba(96, 165, 250, 0.18); } .location-map-object-flags button:disabled { opacity: 0.55; cursor: not-allowed; } .location-map-zone-empty { display: grid; gap: 0.35rem; } .location-map-zone-hidden-note { margin-top: 0.55rem; } .location-map-inline-state { min-height: 42px; display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 0.5rem; padding: 0.25rem 0.35rem 0.25rem 0.55rem; border: 1px solid var(--color-border-light); border-radius: 8px; background: rgba(15, 23, 34, 0.56); color: #f8fafc; } .location-map-inline-state span { min-width: 0; color: #9fb3c8; font-size: 0.82rem; font-weight: 800; } .location-map-inline-state strong { color: #f8fafc; font-weight: 900; white-space: nowrap; } .location-map-inline-state button { min-height: 34px; min-width: 64px; padding: 0.35rem 0.6rem; border: 1px solid var(--color-border-light); border-radius: 999px; background: #15283b; color: #f8fafc; font-weight: 800; cursor: pointer; } .location-map-zone-items ul, .location-map-unmapped-list ul { display: grid; gap: 0.35rem; } .location-map-zone-items li, .location-map-unmapped-list li { min-height: 34px; display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.35rem 0.55rem; border: 1px solid var(--color-border-light); border-radius: 8px; background: rgba(15, 23, 34, 0.56); color: #f8fafc; } .location-map-zone-items li.location-map-item-row, .location-map-unmapped-list li.location-map-item-row { padding: 0; overflow: hidden; } .location-map-item-button { width: 100%; min-height: 34px; display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.35rem 0.55rem; border: 0; background: transparent; color: #f8fafc; font: inherit; font-weight: 800; text-align: left; cursor: pointer; } .location-map-item-button span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .location-map-item-button:hover, .location-map-item-button:focus-visible { outline: none; background: rgba(96, 165, 250, 0.16); } .location-map-zone-items li.is-bought, .location-map-unmapped-list li.is-bought { background: rgba(20, 184, 166, 0.12); border-color: rgba(20, 184, 166, 0.3); } .location-map-zone-items li.is-bought .location-map-item-button, .location-map-unmapped-list li.is-bought .location-map-item-button { color: #cbd5e1; cursor: default; } .location-map-zone-items li.is-bought .location-map-item-button span, .location-map-unmapped-list li.is-bought .location-map-item-button span { text-decoration: line-through; text-decoration-thickness: 2px; text-decoration-color: rgba(20, 184, 166, 0.85); } .location-map-item-button:disabled { opacity: 1; } .location-map-zone-items small, .location-map-unmapped-list small { color: #cbd5e1; font-weight: 800; white-space: nowrap; } .location-map-unmapped-list { margin-top: 0.75rem; } .location-map-unmapped-list strong { display: block; margin-bottom: 0.45rem; } .location-map-list-more { padding: 0; overflow: hidden; border-style: dashed; color: #bfdbfe; font-weight: 800; } .location-map-list-more-button { width: 100%; min-height: 34px; padding: 0.35rem 0.55rem; border: 0; background: transparent; color: #bfdbfe; font: inherit; font-weight: 900; cursor: pointer; } .location-map-list-more-button:hover, .location-map-list-more-button:focus-visible { outline: none; background: rgba(96, 165, 250, 0.14); } .location-map-setup { align-self: center; width: min(100% - 1.5rem, 560px); margin: 3rem auto; padding: 1.15rem; border: 1px solid var(--color-border-light); border-radius: 8px; background: #111c2a; } .location-map-setup h2 { margin-bottom: 0.45rem; font-size: 1.35rem; } .location-map-setup-rows { display: grid; gap: 0.4rem; margin-bottom: 0.9rem; } .location-map-setup-row { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; min-height: 40px; padding: 0.5rem 0.7rem; border: 1px solid rgba(148, 163, 184, 0.18); border-radius: 8px; background: rgba(8, 15, 25, 0.42); } .location-map-setup-row span { color: #9fb3c8; font-size: 0.86rem; font-weight: 700; } .location-map-setup-row strong { min-width: 0; color: #f8fafc; font-weight: 900; text-align: right; overflow-wrap: anywhere; } .location-map-setup-actions { display: grid; gap: 0.6rem; } .location-map-loading { margin: 3rem auto; color: #9fb3c8; } .location-map-message-workspace { display: flex; align-items: center; justify-content: center; } @media (min-width: 840px) { .location-map-workspace { grid-template-columns: minmax(0, 1fr) 360px; grid-template-rows: auto minmax(0, 1fr); } .location-map-toolbar { grid-column: 1 / -1; } .location-map-bottom-sheet { max-height: none; border-top: none; border-left: 1px solid var(--color-border-light); } } @media (max-width: 520px) { .location-map-canvas-shell { padding: 0.5rem; } .location-map-bottom-sheet { max-height: 34dvh; padding-top: 0.55rem; } .location-map-bottom-sheet-handle { display: block; width: 42px; height: 4px; margin: 0 auto 0.55rem; border-radius: 999px; background: rgba(148, 163, 184, 0.5); } .location-map-topbar { grid-template-columns: auto minmax(0, 1fr) auto; gap: 0.5rem; padding: 0.55rem 0.65rem; } .location-map-back { width: 40px; } .location-map-status { min-width: 0; max-width: 104px; justify-self: end; padding: 0.28rem 0.45rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .location-map-toolbar { --location-map-mode-slot: 136px; --location-map-history-slot: 76px; display: grid; grid-template-columns: var(--location-map-mode-slot) minmax(0, 1fr); align-items: center; justify-content: stretch; column-gap: 0.15rem; row-gap: 0.35rem; padding: 0.35rem 0.25rem; } .location-map-toolbar.has-history-slot { grid-template-columns: var(--location-map-mode-slot) var(--location-map-history-slot) minmax(0, 1fr); } .location-map-mode-group { grid-column: 1; width: var(--location-map-mode-slot); max-width: var(--location-map-mode-slot); min-width: 0; } .location-map-mode-buttons { width: var(--location-map-mode-slot); max-width: var(--location-map-mode-slot); min-width: 0; padding: 0.18rem; box-sizing: border-box; } .location-map-mode-buttons button { flex: 1 1 0; min-width: 0; min-height: 40px; padding: 0.35rem 0.42rem; } .location-map-label-full { display: none; } .location-map-label-short { display: inline; } .location-map-history-buttons { grid-column: 2; gap: 0; width: var(--location-map-history-slot); justify-self: center; } .location-map-history-buttons button { min-width: 40px; min-height: 40px; padding-inline: 0.35rem; } .location-map-zoom-controls { grid-column: 2; gap: 0.05rem; margin-left: 0; justify-self: end; } .location-map-toolbar.has-history-slot .location-map-zoom-controls { grid-column: 3; } .location-map-zoom-controls button { min-width: 40px; min-height: 40px; padding: 0.3rem; } .location-map-zoom-controls span { min-width: 28px; font-size: 0.82rem; } .location-map-tool-buttons { display: none; } .location-map-display-controls { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 380px) { .location-map-toolbar { grid-template-columns: var(--location-map-mode-slot, 136px) var(--location-map-history-slot, 76px); } .location-map-toolbar.has-history-slot { grid-template-columns: var(--location-map-mode-slot, 136px) var(--location-map-history-slot, 76px); } .location-map-history-buttons { width: var(--location-map-history-slot, 76px); } .location-map-history-buttons button, .location-map-zoom-controls button { min-width: 40px; min-height: 40px; padding: 0.3rem; } .location-map-zoom-controls, .location-map-toolbar.has-history-slot .location-map-zoom-controls { grid-column: 1 / -1; width: 100%; justify-self: stretch; justify-content: space-between; } .location-map-zoom-controls span { min-width: 34px; font-size: 0.78rem; } }