|
|
|
|
|
.fontmap-container { |
|
|
position: relative; |
|
|
width: 100vw; |
|
|
height: 100vh; |
|
|
overflow: hidden; |
|
|
cursor: default; |
|
|
margin: 0; |
|
|
padding: 0; |
|
|
user-select: none; |
|
|
-webkit-user-select: none; |
|
|
-moz-user-select: none; |
|
|
-ms-user-select: none; |
|
|
background: var(--color-bg-primary); |
|
|
transition: background-color var(--transition-quick); |
|
|
display: flex; |
|
|
flex-direction: row; |
|
|
|
|
|
will-change: transform; |
|
|
} |
|
|
|
|
|
.fontmap-container.dark-mode { |
|
|
background: var(--color-bg-primary-dark); |
|
|
} |
|
|
|
|
|
.fontmap-container:active { |
|
|
cursor: grabbing; |
|
|
} |
|
|
|
|
|
.fontmap-container.zooming { |
|
|
cursor: zoom-in; |
|
|
} |
|
|
|
|
|
|
|
|
.sidebar { |
|
|
width: 400px; |
|
|
min-width: 400px; |
|
|
height: 100vh; |
|
|
max-height: 100vh; |
|
|
background: var(--color-bg-secondary); |
|
|
border-right: 1px solid var(--color-border-primary); |
|
|
display: flex; |
|
|
flex-direction: column; |
|
|
overflow: hidden; |
|
|
position: relative; |
|
|
} |
|
|
|
|
|
.dark-mode .sidebar { |
|
|
background: var(--color-bg-secondary-dark); |
|
|
border-right-color: var(--color-border-primary-dark); |
|
|
} |
|
|
|
|
|
.sidebar-header { |
|
|
padding: var(--spacing-lg); |
|
|
display: flex; |
|
|
flex-direction: column; |
|
|
gap: var(--spacing-md); |
|
|
flex-shrink: 0; |
|
|
min-height: fit-content; |
|
|
border-bottom: 1px solid var(--color-border-primary); |
|
|
} |
|
|
|
|
|
.dark-mode .sidebar-header { |
|
|
border-bottom-color: var(--color-border-primary-dark); |
|
|
} |
|
|
|
|
|
|
|
|
.map-container { |
|
|
position: relative; |
|
|
width: 100%; |
|
|
height: 100%; |
|
|
} |
|
|
|
|
|
|
|
|
.map-loading-overlay { |
|
|
position: absolute; |
|
|
top: 0; |
|
|
left: 0; |
|
|
right: 0; |
|
|
bottom: 0; |
|
|
background: rgba(255, 255, 255, var(--overlay-opacity-light)); |
|
|
display: flex; |
|
|
align-items: center; |
|
|
justify-content: center; |
|
|
z-index: 50; |
|
|
backdrop-filter: blur(2px); |
|
|
} |
|
|
|
|
|
.dark-mode .map-loading-overlay { |
|
|
background: rgba(0, 0, 0, var(--overlay-opacity-dark)); |
|
|
} |
|
|
|
|
|
.map-loading-spinner { |
|
|
display: flex; |
|
|
flex-direction: column; |
|
|
align-items: center; |
|
|
gap: var(--spacing-md); |
|
|
} |
|
|
|
|
|
.spinner-large { |
|
|
width: 32px; |
|
|
height: 32px; |
|
|
border: 3px solid transparent; |
|
|
border-top: 3px solid var(--color-text-primary); |
|
|
border-radius: 50%; |
|
|
animation: spin 1s linear infinite; |
|
|
} |
|
|
|
|
|
.dark-mode .spinner-large { |
|
|
border-top-color: var(--color-text-primary-dark); |
|
|
} |
|
|
|
|
|
.loading-text { |
|
|
font-size: 14px; |
|
|
color: var(--color-text-secondary); |
|
|
font-weight: 500; |
|
|
} |
|
|
|
|
|
.dark-mode .loading-text { |
|
|
color: var(--color-text-secondary-dark); |
|
|
} |
|
|
|
|
|
|
|
|
.map-title { |
|
|
position: absolute; |
|
|
top: 20px; |
|
|
left: 20px; |
|
|
z-index: 100; |
|
|
margin: 0; |
|
|
font-size: 32px; |
|
|
font-weight: 700; |
|
|
color: var(--color-text-primary); |
|
|
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); |
|
|
letter-spacing: -0.02em; |
|
|
font-family: var(--font-logo); |
|
|
pointer-events: none; |
|
|
|
|
|
-webkit-text-stroke: 16px var(--color-bg-primary); |
|
|
text-stroke: 16px var(--color-bg-primary); |
|
|
paint-order: stroke fill; |
|
|
position: relative; |
|
|
} |
|
|
|
|
|
.map-title::before { |
|
|
content: attr(data-text); |
|
|
position: absolute; |
|
|
top: 0; |
|
|
left: 0; |
|
|
z-index: -1; |
|
|
color: transparent; |
|
|
-webkit-text-stroke: 17px var(--color-border-primary); |
|
|
text-stroke: 17px var(--color-border-primary); |
|
|
} |
|
|
|
|
|
.dark-mode .map-title { |
|
|
color: var(--color-text-primary-dark); |
|
|
text-shadow: 0 2px 4px rgba(255, 255, 255, 0.1); |
|
|
|
|
|
-webkit-text-stroke: 16px var(--color-bg-primary-dark); |
|
|
text-stroke: 16px var(--color-bg-primary-dark); |
|
|
} |
|
|
|
|
|
.dark-mode .map-title::before { |
|
|
-webkit-text-stroke: 17px var(--color-border-primary-dark); |
|
|
text-stroke: 17px var(--color-border-primary-dark); |
|
|
} |
|
|
|
|
|
.sidebar-content { |
|
|
flex: 1; |
|
|
overflow-y: auto; |
|
|
overflow-x: hidden; |
|
|
padding: var(--spacing-lg); |
|
|
display: flex; |
|
|
flex-direction: column; |
|
|
gap: var(--spacing-lg); |
|
|
min-height: 0; |
|
|
max-height: calc(100vh - 200px); |
|
|
} |
|
|
|
|
|
|
|
|
.sidebar-footer { |
|
|
padding: var(--spacing-lg); |
|
|
border-top: 1px solid var(--color-border-primary); |
|
|
background: var(--color-bg-secondary); |
|
|
display: flex; |
|
|
justify-content: space-between; |
|
|
align-items: center; |
|
|
flex-shrink: 0; |
|
|
min-height: fit-content; |
|
|
} |
|
|
|
|
|
.dark-mode .sidebar-footer { |
|
|
background: var(--color-bg-secondary-dark); |
|
|
border-top-color: var(--color-border-primary-dark); |
|
|
} |
|
|
|
|
|
.about-link, .source-link { |
|
|
display: flex; |
|
|
align-items: center; |
|
|
gap: var(--spacing-sm); |
|
|
background: none; |
|
|
border: none; |
|
|
color: var(--color-text-secondary); |
|
|
font-size: 14px; |
|
|
font-weight: 500; |
|
|
cursor: pointer; |
|
|
padding: var(--spacing-sm) var(--spacing-md); |
|
|
border-radius: var(--border-radius-md); |
|
|
transition: all var(--transition-normal); |
|
|
text-decoration: none; |
|
|
} |
|
|
|
|
|
.about-link:hover, .source-link:hover { |
|
|
background: var(--color-bg-primary); |
|
|
color: var(--color-text-primary); |
|
|
transform: translateY(-1px); |
|
|
} |
|
|
|
|
|
.dark-mode .about-link, .dark-mode .source-link { |
|
|
color: var(--color-text-secondary-dark); |
|
|
} |
|
|
|
|
|
.dark-mode .about-link:hover, .dark-mode .source-link:hover { |
|
|
background: var(--color-bg-primary-dark); |
|
|
color: var(--color-text-primary-dark); |
|
|
} |
|
|
|
|
|
|
|
|
.main-area { |
|
|
flex: 1; |
|
|
position: relative; |
|
|
overflow: hidden; |
|
|
display: flex; |
|
|
flex-direction: column; |
|
|
background: var(--color-bg-secondary); |
|
|
} |
|
|
|
|
|
.dark-mode .main-area { |
|
|
background: var(--color-bg-secondary-dark); |
|
|
} |
|
|
|
|
|
.fontmap-svg { |
|
|
width: 100%; |
|
|
height: 100%; |
|
|
display: block; |
|
|
cursor: grab; |
|
|
|
|
|
shape-rendering: geometricPrecision; |
|
|
text-rendering: geometricPrecision; |
|
|
image-rendering: crisp-edges; |
|
|
|
|
|
vector-effect: non-scaling-stroke; |
|
|
|
|
|
will-change: transform; |
|
|
|
|
|
max-width: 100%; |
|
|
max-height: 100%; |
|
|
|
|
|
touch-action: none; |
|
|
-webkit-touch-callout: none; |
|
|
-webkit-user-select: none; |
|
|
-khtml-user-select: none; |
|
|
-moz-user-select: none; |
|
|
-ms-user-select: none; |
|
|
user-select: none; |
|
|
|
|
|
-webkit-font-smoothing: antialiased; |
|
|
-moz-osx-font-smoothing: grayscale; |
|
|
} |
|
|
|
|
|
.fontmap-svg:active { |
|
|
cursor: grabbing; |
|
|
} |
|
|
|
|
|
|
|
|
.font-glyph-group { |
|
|
cursor: pointer; |
|
|
|
|
|
will-change: transform; |
|
|
} |
|
|
|
|
|
.font-hit-area { |
|
|
cursor: pointer; |
|
|
} |
|
|
|
|
|
.font-glyph { |
|
|
pointer-events: none; |
|
|
|
|
|
shape-rendering: geometricPrecision; |
|
|
text-rendering: geometricPrecision; |
|
|
image-rendering: crisp-edges; |
|
|
vector-effect: non-scaling-stroke; |
|
|
|
|
|
will-change: transform; |
|
|
} |
|
|
|
|
|
|
|
|
.font-glyph use { |
|
|
shape-rendering: geometricPrecision !important; |
|
|
text-rendering: geometricPrecision !important; |
|
|
image-rendering: crisp-edges !important; |
|
|
vector-effect: non-scaling-stroke !important; |
|
|
} |
|
|
|
|
|
|
|
|
.fontmap-svg use { |
|
|
shape-rendering: geometricPrecision !important; |
|
|
text-rendering: geometricPrecision !important; |
|
|
image-rendering: crisp-edges !important; |
|
|
} |
|
|
|
|
|
|
|
|
.viewport-group { |
|
|
will-change: transform; |
|
|
|
|
|
shape-rendering: geometricPrecision; |
|
|
text-rendering: geometricPrecision; |
|
|
image-rendering: crisp-edges; |
|
|
|
|
|
transform-origin: 0 0; |
|
|
} |
|
|
|
|
|
|
|
|
.fontmap-svg.zooming { |
|
|
cursor: grab; |
|
|
} |
|
|
|
|
|
.fontmap-svg.zooming:active { |
|
|
cursor: grabbing; |
|
|
} |
|
|
|
|
|
|
|
|
.fontmap-svg.zooming .viewport-group { |
|
|
|
|
|
shape-rendering: geometricPrecision !important; |
|
|
text-rendering: geometricPrecision !important; |
|
|
image-rendering: crisp-edges !important; |
|
|
} |
|
|
|
|
|
|
|
|
.fontmap-svg.zooming .font-glyph { |
|
|
shape-rendering: geometricPrecision !important; |
|
|
text-rendering: geometricPrecision !important; |
|
|
image-rendering: crisp-edges !important; |
|
|
vector-effect: non-scaling-stroke !important; |
|
|
} |
|
|
|
|
|
|
|
|
.dark-mode .font-glyph { |
|
|
fill: #ffffff !important; |
|
|
color: #ffffff !important; |
|
|
} |
|
|
|
|
|
.dark-mode .font-glyph use { |
|
|
fill: #ffffff !important; |
|
|
color: #ffffff !important; |
|
|
} |
|
|
|
|
|
|
|
|
.ui-group { |
|
|
pointer-events: none; |
|
|
z-index: 100; |
|
|
} |
|
|
|
|
|
|
|
|
.loading { |
|
|
position: absolute; |
|
|
top: 50%; |
|
|
left: 50%; |
|
|
transform: translate(-50%, -50%); |
|
|
font-size: 16px; |
|
|
color: var(--color-text-secondary); |
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', |
|
|
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', |
|
|
sans-serif; |
|
|
font-weight: 300; |
|
|
text-transform: uppercase; |
|
|
letter-spacing: 1px; |
|
|
} |
|
|
|
|
|
.dark-mode .loading { |
|
|
color: var(--color-text-secondary-dark); |
|
|
} |
|
|
|
|
|
|
|
|
.sidebar-separator { |
|
|
height: 1px; |
|
|
background: var(--color-border-primary); |
|
|
margin: var(--spacing-lg) 0; |
|
|
} |
|
|
|
|
|
.dark-mode .sidebar-separator { |
|
|
background: var(--color-border-primary-dark); |
|
|
} |
|
|
|