Files
2026-06-10 18:16:46 +07:00

789 lines
16 KiB
CSS

@import url('https://api.fontshare.com/v2/css?f[]=general-sans@600,700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');
:root {
--genesis-primary: #6366f1;
--genesis-primary-hover: #4f46e5;
--genesis-secondary: #20970b;
--genesis-neutral: #9c9c9c;
--genesis-bg: #fafafa;
--genesis-surface: #ffffff;
--genesis-text: #0a0a0a;
--genesis-text-secondary: #6b6b6b;
--genesis-border: #e8e8ec;
--genesis-success: #10b981;
--genesis-warning: #f59e0b;
--genesis-error: #ef4444;
--app-sidebar-width: 280px;
--app-mobile-bar-height: 58px;
}
html,
body {
background: var(--genesis-bg) !important;
color: var(--genesis-text);
font-family: 'DM Sans', ui-sans-serif, system-ui, sans-serif !important;
font-size: 15px;
font-weight: 400 !important;
}
* {
letter-spacing: 0 !important;
}
h1,
h2,
h3,
h4,
h5,
h6,
.card-title,
.stat-value {
color: var(--genesis-text);
font-family: 'General Sans', 'DM Sans', ui-sans-serif, system-ui, sans-serif !important;
font-weight: 700 !important;
}
code,
kbd,
pre,
.font-mono {
font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace !important;
}
.text-primary,
.btn-ghost.text-primary,
.menu a.text-primary {
color: var(--genesis-primary) !important;
}
main h1 i.text-primary,
main h2 i.text-primary,
main h3 i.text-primary,
.card h3 i.text-primary,
.modal-box h3 i.text-primary,
.stat-figure.text-success,
.stat-figure.text-warning,
.stat-figure.text-error,
.stat-figure.text-info {
color: var(--genesis-text) !important;
}
.text-secondary,
.text-info {
color: var(--genesis-text-secondary) !important;
}
.text-success {
color: var(--genesis-success) !important;
}
.text-warning {
color: var(--genesis-warning) !important;
}
.text-error {
color: var(--genesis-error) !important;
}
.bg-primary,
.badge-primary {
background-color: var(--genesis-primary) !important;
border-color: var(--genesis-primary) !important;
color: #fff !important;
}
.bg-base-100,
.bg-white {
background-color: var(--genesis-surface) !important;
}
.bg-base-200,
.bg-base-200\/50 {
background-color: var(--genesis-bg) !important;
}
.border-base-200,
.border-base-300,
.border-base-content\/10 {
border-color: var(--genesis-border) !important;
}
.text-base-content\/50,
.text-base-content\/60,
.opacity-50 {
color: var(--genesis-text-secondary) !important;
}
.shadow,
.shadow-sm,
.shadow-lg,
.shadow-xl,
.shadow-2xl {
box-shadow: none !important;
}
.rounded-box,
.rounded-lg,
.rounded-xl,
.rounded-2xl,
.rounded-3xl,
.modal-box,
.card,
.stat,
.tab-content {
border-radius: 8px !important;
}
.app-sidebar-toggle {
position: fixed;
opacity: 0;
pointer-events: none;
}
.app-mobile-bar {
display: none;
}
.app-sidebar {
position: fixed;
inset: 0 auto 0 0;
z-index: 1200;
width: var(--app-sidebar-width);
display: flex;
flex-direction: column;
gap: 18px;
padding: 18px;
background: rgba(255, 255, 255, 0.94);
border-right: 1px solid var(--genesis-border);
backdrop-filter: blur(16px);
}
.app-sidebar-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.app-sidebar-brand,
.app-mobile-brand {
display: inline-flex;
align-items: center;
min-width: 0;
gap: 10px;
color: var(--genesis-text) !important;
text-decoration: none;
}
.app-brand-icon {
display: grid;
width: 38px;
height: 38px;
flex: 0 0 auto;
place-items: center;
border: 1px solid var(--genesis-border);
border-radius: 8px;
background: var(--genesis-surface);
color: var(--genesis-text);
}
.app-brand-copy,
.app-user-copy {
min-width: 0;
}
.app-brand-title,
.app-user-name {
display: block;
overflow: hidden;
color: var(--genesis-text);
font-size: 14px;
font-weight: 700;
line-height: 1.2;
text-overflow: ellipsis;
white-space: nowrap;
}
.app-brand-subtitle,
.app-user-role {
display: block;
overflow: hidden;
color: var(--genesis-text-secondary);
font-size: 12px;
font-weight: 500;
line-height: 1.4;
text-overflow: ellipsis;
text-transform: capitalize;
white-space: nowrap;
}
.app-sidebar-close {
display: none !important;
}
.app-sidebar-nav {
display: flex;
min-height: 0;
flex: 1 1 auto;
flex-direction: column;
gap: 20px;
overflow-y: auto;
padding-right: 2px;
}
.app-nav-section {
display: flex;
flex-direction: column;
gap: 6px;
}
.app-nav-section-title {
padding: 0 10px 4px;
color: var(--genesis-neutral);
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
}
.app-nav-link {
display: flex;
align-items: center;
gap: 10px;
min-height: 42px;
padding: 0 11px;
border: 1px solid transparent;
border-radius: 8px;
color: var(--genesis-text-secondary);
font-size: 14px;
font-weight: 600;
text-decoration: none;
transition: background-color 160ms ease, border-color 160ms ease, color 160ms ease;
}
.app-nav-link i {
width: 18px;
flex: 0 0 18px;
text-align: center;
}
.app-nav-link span:not(.badge) {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.app-nav-link:hover {
background: #f3f3f5;
color: var(--genesis-text);
}
.app-nav-link.is-active {
background: rgba(99, 102, 241, 0.1);
border-color: rgba(99, 102, 241, 0.2);
color: var(--genesis-primary);
}
.app-nav-badge {
margin-left: auto;
}
.app-sidebar-footer {
display: flex;
flex-direction: column;
gap: 10px;
border-top: 1px solid var(--genesis-border);
padding-top: 14px;
}
.app-user-card {
display: flex;
align-items: center;
min-width: 0;
gap: 10px;
}
.app-logout-button {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
min-height: 38px;
gap: 8px;
border: 1px solid var(--genesis-border);
border-radius: 8px;
background: var(--genesis-surface);
color: var(--genesis-error);
font-size: 14px;
font-weight: 700;
cursor: pointer;
}
.app-logout-button:hover {
background: rgba(239, 68, 68, 0.08);
border-color: rgba(239, 68, 68, 0.22);
}
.app-main {
min-height: 100vh;
margin-left: var(--app-sidebar-width);
}
.app-map-body {
height: 100vh !important;
display: block !important;
overflow: hidden !important;
}
.map-wrapper.app-map-main {
height: 100vh;
min-height: 100vh;
margin-left: var(--app-sidebar-width);
}
.app-sidebar-backdrop {
display: none;
}
.menu.menu-horizontal {
gap: 4px !important;
min-width: 0;
width: 100%;
display: flex !important;
flex-wrap: nowrap !important;
justify-content: center;
overflow-x: auto;
overflow-y: hidden;
scrollbar-width: none;
}
.menu.menu-horizontal::-webkit-scrollbar {
display: none;
}
.menu a,
.dropdown-content .menu a {
border-radius: 6px !important;
color: var(--genesis-text-secondary);
font-size: 14px;
font-weight: 500 !important;
white-space: nowrap;
flex-wrap: nowrap !important;
}
.menu a:hover,
.btn-ghost:hover {
background: #f3f3f5 !important;
color: var(--genesis-text) !important;
}
.menu a.bg-primary\/10,
.menu a.font-semibold {
background: rgba(99, 102, 241, 0.1) !important;
color: var(--genesis-primary) !important;
}
.btn {
min-height: 38px;
border-radius: 6px !important;
font-family: 'DM Sans', ui-sans-serif, system-ui, sans-serif !important;
font-size: 14px;
font-weight: 600 !important;
text-transform: none !important;
transition: transform 160ms ease, box-shadow 160ms ease, background-color 160ms ease, border-color 160ms ease, color 160ms ease;
}
.btn:hover {
transform: translateY(-1px);
}
.btn-primary {
background: var(--genesis-primary) !important;
border-color: var(--genesis-primary) !important;
color: #fff !important;
}
.btn-primary:hover {
background: var(--genesis-primary-hover) !important;
border-color: var(--genesis-primary-hover) !important;
box-shadow: 0 4px 12px rgba(99, 102, 241, 0.35) !important;
}
.btn-outline {
background: transparent !important;
border-color: var(--genesis-border) !important;
color: var(--genesis-text) !important;
}
.btn-outline:hover,
.btn-active {
background: #f3f3f5 !important;
border-color: var(--genesis-primary) !important;
color: var(--genesis-primary) !important;
}
.btn-success {
background: var(--genesis-success) !important;
border-color: var(--genesis-success) !important;
color: #fff !important;
}
.btn-warning,
.btn-info {
background: transparent !important;
border-color: var(--genesis-border) !important;
color: var(--genesis-text) !important;
}
.btn-warning:hover,
.btn-info:hover {
background: rgba(99, 102, 241, 0.1) !important;
border-color: rgba(99, 102, 241, 0.2) !important;
color: var(--genesis-primary) !important;
}
.btn-error {
background: var(--genesis-error) !important;
border-color: var(--genesis-error) !important;
color: #fff !important;
}
.card,
.stat,
.modal-box,
.tab-content,
.dropdown-content,
.table-shell,
.glass-card,
.map-panel {
background: var(--genesis-surface) !important;
border: 1px solid var(--genesis-border) !important;
}
.card,
.stat,
.tab-content,
.table-shell,
.glass-card,
.map-panel {
box-shadow: none !important;
}
.card:hover,
.stat:hover,
.table-shell:hover {
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.08) !important;
transform: translateY(-2px);
}
.card,
.stat,
.table-shell {
transition: transform 200ms ease, box-shadow 200ms ease;
}
.stat {
padding: 20px !important;
}
.stat-figure {
color: var(--genesis-text-secondary) !important;
opacity: 0.82;
}
.stat-title {
color: var(--genesis-neutral) !important;
font-size: 11px !important;
font-weight: 700 !important;
letter-spacing: 0 !important;
text-transform: uppercase;
}
.stat-value {
font-size: 32px !important;
line-height: 1.1 !important;
color: var(--genesis-text) !important;
}
.input,
.select,
.textarea {
min-height: 38px;
border-radius: 6px !important;
border-color: var(--genesis-border) !important;
background: var(--genesis-surface) !important;
color: var(--genesis-text) !important;
font-size: 14px !important;
}
.input:focus,
.select:focus,
.textarea:focus {
border-color: var(--genesis-primary) !important;
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12) !important;
outline: none !important;
}
.label-text {
color: var(--genesis-text);
font-size: 13px !important;
font-weight: 600 !important;
}
.badge {
border-radius: 9999px !important;
font-size: 12px !important;
font-weight: 600 !important;
}
.badge-success {
background: rgba(16, 185, 129, 0.12) !important;
border-color: rgba(16, 185, 129, 0.25) !important;
color: #047857 !important;
}
.badge-warning {
background: rgba(245, 158, 11, 0.14) !important;
border-color: rgba(245, 158, 11, 0.28) !important;
color: #92400e !important;
}
.badge-error {
background: rgba(239, 68, 68, 0.12) !important;
border-color: rgba(239, 68, 68, 0.25) !important;
color: #b91c1c !important;
}
.table {
color: var(--genesis-text);
font-size: 13px;
}
.table thead tr {
border-color: var(--genesis-border);
}
.table th {
color: var(--genesis-neutral);
font-size: 11px;
font-weight: 700 !important;
text-transform: uppercase;
}
.table td,
.table th {
border-color: var(--genesis-border) !important;
padding-block: 12px !important;
}
.table-zebra tbody tr:nth-child(even) {
background: #f7f7f8 !important;
}
.tabs {
gap: 6px;
}
.tab {
border-radius: 6px !important;
color: var(--genesis-text-secondary) !important;
font-size: 14px !important;
font-weight: 600 !important;
}
.tab:is(:checked),
.tab-active {
color: var(--genesis-primary) !important;
}
.genesis-tabs {
display: flex;
flex-direction: column;
gap: 12px;
margin-bottom: 24px;
}
.genesis-tab-list {
display: inline-flex;
width: fit-content;
max-width: 100%;
gap: 8px;
padding: 4px;
border: 1px solid var(--genesis-border);
border-radius: 8px;
background: var(--genesis-surface);
overflow-x: auto;
}
.genesis-tab-button {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 148px;
height: 38px;
padding: 0 16px;
border: 1px solid transparent;
border-radius: 6px;
color: var(--genesis-text-secondary);
background: transparent;
font-size: 14px;
font-weight: 600;
white-space: nowrap;
transition: background-color 160ms ease, border-color 160ms ease, color 160ms ease;
}
.genesis-tab-button:hover {
background: #f3f3f5;
color: var(--genesis-text);
}
.genesis-tab-button.is-active {
background: rgba(99, 102, 241, 0.1);
border-color: rgba(99, 102, 241, 0.2);
color: var(--genesis-primary);
}
.genesis-tab-panel {
border: 1px solid var(--genesis-border);
border-radius: 8px;
background: var(--genesis-surface);
overflow: hidden;
}
.modal-box {
box-shadow: 0 18px 55px rgba(0, 0, 0, 0.14) !important;
}
.modal-box .text-5xl {
font-size: 32px !important;
line-height: 1.1 !important;
}
.alert {
border-radius: 8px !important;
border: 1px solid var(--genesis-border) !important;
box-shadow: none !important;
}
.toast .alert {
background: var(--genesis-surface) !important;
color: var(--genesis-text) !important;
}
.checkbox {
border-radius: 9999px !important;
border-color: #d4d4d8 !important;
}
.checkbox:checked {
background-color: var(--genesis-primary) !important;
border-color: var(--genesis-primary) !important;
}
.leaflet-control-layers,
.leaflet-control-zoom a {
border-color: var(--genesis-border) !important;
box-shadow: none !important;
font-family: 'DM Sans', ui-sans-serif, system-ui, sans-serif !important;
}
.leaflet-popup-content-wrapper,
.leaflet-popup-tip {
border-radius: 8px !important;
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.08) !important;
}
.genesis-overline {
color: var(--genesis-neutral);
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
}
.genesis-section-title {
color: var(--genesis-text);
font-family: 'General Sans', 'DM Sans', ui-sans-serif, system-ui, sans-serif;
font-size: 32px;
font-weight: 700;
}
@media (max-width: 1024px) {
.app-mobile-bar {
position: fixed;
inset: 0 0 auto 0;
z-index: 1150;
display: flex;
align-items: center;
justify-content: space-between;
height: var(--app-mobile-bar-height);
padding: 0 14px;
background: rgba(255, 255, 255, 0.94);
border-bottom: 1px solid var(--genesis-border);
backdrop-filter: blur(16px);
}
.app-mobile-brand {
font-size: 15px;
font-weight: 700;
}
.app-sidebar {
width: min(82vw, var(--app-sidebar-width));
transform: translateX(-100%);
transition: transform 200ms ease;
}
.app-sidebar-close {
display: inline-flex !important;
}
.app-sidebar-toggle:checked ~ .app-sidebar {
transform: translateX(0);
}
.app-sidebar-toggle:checked ~ .app-sidebar-backdrop {
position: fixed;
inset: 0;
z-index: 1190;
display: block;
background: rgba(10, 10, 10, 0.36);
}
.app-main {
margin-left: 0;
padding-top: var(--app-mobile-bar-height);
}
.map-wrapper.app-map-main {
height: 100vh;
min-height: 100vh;
margin-left: 0;
}
.floating-panel {
top: calc(var(--app-mobile-bar-height) + 14px);
left: 12px;
width: min(316px, calc(100vw - 24px));
max-height: calc(100vh - var(--app-mobile-bar-height) - 32px);
}
.app-map-body .leaflet-top {
top: var(--app-mobile-bar-height);
}
}
@media (max-width: 768px) {
.stat-value {
font-size: 26px !important;
}
.genesis-tabs {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.genesis-tabs > .tab {
min-width: 0;
}
}