| @import "tailwindcss";
|
| @plugin "@tailwindcss/typography";
|
|
|
| @source "../doomsun/solarium/dashboard/**/*.cljs";
|
|
|
| @theme {
|
|
|
| --color-ds-black: #0a0a0f;
|
| --color-ds-surface: #111118;
|
| --color-ds-card: rgba(255, 255, 255, 0.025);
|
| --color-ds-card-hover: rgba(255, 255, 255, 0.045);
|
| --color-ds-border: rgba(255, 255, 255, 0.06);
|
| --color-ds-border-hover: rgba(255, 255, 255, 0.12);
|
| --color-ds-text: #e8e4e0;
|
| --color-ds-text-secondary: rgba(232, 228, 224, 0.5);
|
| --color-ds-text-muted: rgba(232, 228, 224, 0.3);
|
| --color-ds-red: #f68777;
|
| --color-ds-red-dim: rgba(246, 135, 119, 0.15);
|
| --color-ds-cyan: #74a9ee;
|
| --color-ds-cyan-dim: rgba(116, 169, 238, 0.12);
|
| --color-ds-yellow: #e8c55a;
|
| --color-ds-yellow-dim: rgba(232, 197, 90, 0.12);
|
| --color-ds-green: #6ec89b;
|
| --color-ds-green-dim: rgba(110, 200, 155, 0.12);
|
| --color-ds-sidebar: #08080d;
|
|
|
| --font-display: 'Playfair Display', Georgia, 'Times New Roman', serif;
|
| --font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace;
|
| --font-body: 'Inter', -apple-system, system-ui, sans-serif;
|
| }
|
|
|
|
|
| * { margin: 0; padding: 0; box-sizing: border-box; }
|
|
|
| html {
|
| background: var(--color-ds-black);
|
| color: var(--color-ds-text);
|
| }
|
|
|
| body {
|
| font-family: var(--font-body);
|
| background: var(--color-ds-black);
|
| min-height: 100vh;
|
| display: flex;
|
|
|
| background-image:
|
| linear-gradient(rgba(255, 255, 255, 0.015) 1px, transparent 1px),
|
| linear-gradient(90deg, rgba(255, 255, 255, 0.015) 1px, transparent 1px);
|
| background-size: 40px 40px;
|
| }
|
|
|
| a { color: var(--color-ds-red); text-decoration: none; transition: color 0.2s; }
|
| a:hover { color: #faa99e; }
|
|
|
| h1, h2, h3, h4 {
|
| font-family: var(--font-display);
|
| font-weight: 600;
|
| letter-spacing: -0.01em;
|
| color: var(--color-ds-text);
|
| }
|
|
|
|
|
| .sidebar {
|
| width: 220px;
|
| background: var(--color-ds-sidebar);
|
| border-right: 1px solid var(--color-ds-border);
|
| padding: 0;
|
| position: fixed;
|
| top: 0;
|
| left: 0;
|
| bottom: 0;
|
| display: flex;
|
| flex-direction: column;
|
| z-index: 50;
|
| }
|
|
|
| .sidebar-header {
|
| padding: 28px 24px 24px;
|
| border-bottom: 1px solid var(--color-ds-border);
|
| }
|
|
|
| .sidebar-logo {
|
| width: 44px;
|
| height: auto;
|
| margin-bottom: 16px;
|
| opacity: 0.85;
|
| transition: opacity 0.2s;
|
| }
|
|
|
| .sidebar-logo:hover {
|
| opacity: 1;
|
| }
|
|
|
| .sidebar-header h1 {
|
| font-family: var(--font-display);
|
| font-size: 20px;
|
| font-weight: 700;
|
| color: var(--color-ds-text);
|
| letter-spacing: 0.15em;
|
| }
|
|
|
| .sidebar-header .subtitle {
|
| font-family: var(--font-mono);
|
| font-size: 9px;
|
| text-transform: uppercase;
|
| letter-spacing: 0.2em;
|
| color: var(--color-ds-text-muted);
|
| margin-top: 6px;
|
| }
|
|
|
| .sidebar nav,
|
| .sidebar {
|
|
|
| }
|
|
|
| .sidebar-meta {
|
| margin-top: 14px;
|
| padding-top: 12px;
|
| border-top: 1px solid var(--color-ds-border);
|
| }
|
|
|
| .sidebar-meta-item {
|
| display: flex;
|
| flex-direction: column;
|
| margin-bottom: 8px;
|
| }
|
|
|
| .sidebar-meta-label {
|
| font-family: var(--font-mono);
|
| font-size: 8px;
|
| text-transform: uppercase;
|
| letter-spacing: 0.2em;
|
| color: var(--color-ds-text-muted);
|
| margin-bottom: 2px;
|
| }
|
|
|
| .sidebar-meta-value {
|
| font-family: var(--font-mono);
|
| font-size: 10px;
|
| color: var(--color-ds-text-secondary);
|
| word-break: break-all;
|
| }
|
|
|
| .sidebar a {
|
| display: flex;
|
| align-items: center;
|
| padding: 14px 24px;
|
| font-family: var(--font-mono);
|
| font-size: 11px;
|
| text-transform: uppercase;
|
| letter-spacing: 0.12em;
|
| color: var(--color-ds-text-secondary);
|
| text-decoration: none;
|
| border-left: 2px solid transparent;
|
| transition: all 0.2s;
|
| }
|
|
|
| .sidebar a:hover {
|
| color: var(--color-ds-text);
|
| background: rgba(255, 255, 255, 0.02);
|
| }
|
|
|
| .sidebar a.active {
|
| color: var(--color-ds-red);
|
| background: var(--color-ds-red-dim);
|
| border-left-color: var(--color-ds-red);
|
| }
|
|
|
|
|
| main {
|
| margin-left: 220px;
|
| padding: 40px 48px;
|
| flex: 1;
|
| max-width: 1200px;
|
| min-height: 100vh;
|
| }
|
|
|
| main > h2:first-of-type,
|
| .page-title {
|
| font-family: var(--font-display);
|
| font-size: clamp(1.8rem, 3vw, 2.5rem);
|
| font-weight: 600;
|
| margin-bottom: 32px;
|
| color: var(--color-ds-text);
|
| }
|
|
|
|
|
| .stats-grid {
|
| display: grid;
|
| grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
| gap: 16px;
|
| margin-bottom: 40px;
|
| }
|
|
|
| .stat-card {
|
| background: var(--color-ds-card);
|
| border: 1px solid var(--color-ds-border);
|
| border-radius: 4px;
|
| padding: 24px;
|
| transition: all 0.25s ease;
|
| }
|
|
|
| .stat-card:hover {
|
| background: var(--color-ds-card-hover);
|
| border-color: var(--color-ds-border-hover);
|
| transform: translateY(-2px);
|
| box-shadow: 0 12px 32px rgba(0, 0, 0, 0.4);
|
| }
|
|
|
| .stat-card .label {
|
| font-family: var(--font-mono);
|
| font-size: 9px;
|
| text-transform: uppercase;
|
| letter-spacing: 0.2em;
|
| color: var(--color-ds-text-muted);
|
| margin-bottom: 10px;
|
| }
|
|
|
| .stat-card .value {
|
| font-family: var(--font-display);
|
| font-size: 36px;
|
| font-weight: 700;
|
| color: var(--color-ds-red);
|
| }
|
|
|
|
|
| .card {
|
| background: var(--color-ds-card);
|
| border: 1px solid var(--color-ds-border);
|
| border-radius: 4px;
|
| padding: 24px;
|
| margin-bottom: 16px;
|
| transition: all 0.25s ease;
|
| }
|
|
|
| .card:hover {
|
| border-color: var(--color-ds-border-hover);
|
| }
|
|
|
|
|
| table {
|
| width: 100%;
|
| border-collapse: collapse;
|
| font-size: 13px;
|
| }
|
|
|
| thead th {
|
| text-align: left;
|
| padding: 12px 16px;
|
| border-bottom: 1px solid var(--color-ds-border);
|
| font-family: var(--font-mono);
|
| font-size: 9px;
|
| font-weight: 500;
|
| text-transform: uppercase;
|
| letter-spacing: 0.15em;
|
| color: var(--color-ds-text-muted);
|
| }
|
|
|
| tbody td {
|
| padding: 14px 16px;
|
| border-bottom: 1px solid var(--color-ds-border);
|
| color: var(--color-ds-text-secondary);
|
| }
|
|
|
| tbody tr {
|
| transition: background 0.15s;
|
| }
|
|
|
| tbody tr:hover {
|
| background: var(--color-ds-card);
|
| }
|
|
|
| tbody td a {
|
| color: var(--color-ds-text);
|
| font-weight: 500;
|
| }
|
|
|
| tbody td a:hover {
|
| color: var(--color-ds-red);
|
| }
|
|
|
|
|
| .tag {
|
| display: inline-block;
|
| font-family: var(--font-mono);
|
| font-size: 9px;
|
| text-transform: uppercase;
|
| letter-spacing: 0.1em;
|
| background: var(--color-ds-card);
|
| color: var(--color-ds-cyan);
|
| padding: 4px 10px;
|
| border-radius: 2px;
|
| border: 1px solid var(--color-ds-border);
|
| margin: 2px 4px 2px 0;
|
| text-decoration: none;
|
| transition: all 0.2s;
|
| }
|
|
|
| .tag:hover {
|
| background: var(--color-ds-cyan-dim);
|
| border-color: rgba(116, 169, 238, 0.25);
|
| text-decoration: none;
|
| color: var(--color-ds-cyan);
|
| }
|
|
|
| .tag .remove-tag {
|
| margin-left: 6px;
|
| color: var(--color-ds-red);
|
| font-weight: bold;
|
| opacity: 0.6;
|
| }
|
|
|
| .tag .remove-tag:hover {
|
| opacity: 1;
|
| }
|
|
|
| .tag-cloud {
|
| display: flex;
|
| flex-wrap: wrap;
|
| gap: 6px;
|
| }
|
|
|
| .tag-count {
|
| opacity: 0.5;
|
| margin-left: 2px;
|
| }
|
|
|
|
|
| .search-box {
|
| display: flex;
|
| gap: 12px;
|
| margin-bottom: 32px;
|
| align-items: center;
|
| flex-wrap: wrap;
|
| }
|
|
|
| .search-box input[type='text'] {
|
| flex: 1;
|
| min-width: 300px;
|
| padding: 12px 16px;
|
| background: var(--color-ds-card);
|
| border: 1px solid var(--color-ds-border);
|
| border-radius: 4px;
|
| font-family: var(--font-body);
|
| font-size: 14px;
|
| color: var(--color-ds-text);
|
| transition: border-color 0.2s, box-shadow 0.2s;
|
| }
|
|
|
| .search-box input[type='text']::placeholder {
|
| color: var(--color-ds-text-muted);
|
| font-family: var(--font-mono);
|
| font-size: 11px;
|
| letter-spacing: 0.05em;
|
| }
|
|
|
| .search-box input:focus {
|
| outline: none;
|
| border-color: var(--color-ds-red);
|
| box-shadow: 0 0 0 1px var(--color-ds-red-dim);
|
| }
|
|
|
| .search-box select {
|
| padding: 12px 14px;
|
| background: var(--color-ds-card);
|
| border: 1px solid var(--color-ds-border);
|
| border-radius: 4px;
|
| font-family: var(--font-mono);
|
| font-size: 11px;
|
| color: var(--color-ds-text-secondary);
|
| letter-spacing: 0.05em;
|
| }
|
|
|
| .search-box button {
|
| padding: 12px 24px;
|
| background: var(--color-ds-red);
|
| color: var(--color-ds-black);
|
| border: none;
|
| border-radius: 4px;
|
| font-family: var(--font-mono);
|
| font-size: 10px;
|
| text-transform: uppercase;
|
| letter-spacing: 0.15em;
|
| font-weight: 600;
|
| cursor: pointer;
|
| transition: all 0.2s;
|
| }
|
|
|
| .search-box button:hover {
|
| background: #faa99e;
|
| transform: translateY(-1px);
|
| box-shadow: 0 4px 16px rgba(246, 135, 119, 0.25);
|
| }
|
|
|
|
|
| .result-card {
|
| background: var(--color-ds-card);
|
| border: 1px solid var(--color-ds-border);
|
| border-radius: 4px;
|
| padding: 20px 24px;
|
| margin-bottom: 12px;
|
| transition: all 0.25s ease;
|
| }
|
|
|
| .result-card:hover {
|
| background: var(--color-ds-card-hover);
|
| border-color: var(--color-ds-border-hover);
|
| transform: translateY(-2px);
|
| box-shadow: 0 16px 40px rgba(0, 0, 0, 0.3);
|
| }
|
|
|
| .result-header {
|
| display: flex;
|
| justify-content: space-between;
|
| align-items: baseline;
|
| margin-bottom: 10px;
|
| }
|
|
|
| .result-header h3 {
|
| font-family: var(--font-display);
|
| font-size: 17px;
|
| margin: 0;
|
| }
|
|
|
| .score {
|
| font-family: var(--font-mono);
|
| font-size: 11px;
|
| font-weight: 600;
|
| color: var(--color-ds-red);
|
| letter-spacing: 0.05em;
|
| }
|
|
|
| .score-bar {
|
| height: 2px;
|
| background: var(--color-ds-border);
|
| border-radius: 1px;
|
| margin-bottom: 12px;
|
| overflow: hidden;
|
| }
|
|
|
| .score-fill {
|
| height: 100%;
|
| background: linear-gradient(90deg, var(--color-ds-red), #faa99e);
|
| border-radius: 1px;
|
| }
|
|
|
| .snippet {
|
| font-size: 13px;
|
| color: var(--color-ds-text-secondary);
|
| line-height: 1.6;
|
| margin-bottom: 10px;
|
| }
|
|
|
|
|
| .two-column {
|
| display: grid;
|
| grid-template-columns: 2fr 1fr;
|
| gap: 40px;
|
| }
|
|
|
|
|
| .meta {
|
| display: flex;
|
| gap: 20px;
|
| font-family: var(--font-mono);
|
| font-size: 10px;
|
| text-transform: uppercase;
|
| letter-spacing: 0.1em;
|
| color: var(--color-ds-text-muted);
|
| margin-top: 8px;
|
| margin-bottom: 32px;
|
| }
|
|
|
|
|
| .prose {
|
| --tw-prose-body: var(--color-ds-text-secondary);
|
| --tw-prose-headings: var(--color-ds-text);
|
| --tw-prose-links: var(--color-ds-red);
|
| --tw-prose-bold: var(--color-ds-text);
|
| --tw-prose-counters: var(--color-ds-text-muted);
|
| --tw-prose-bullets: var(--color-ds-text-muted);
|
| --tw-prose-hr: var(--color-ds-border);
|
| --tw-prose-quotes: var(--color-ds-text-secondary);
|
| --tw-prose-quote-borders: var(--color-ds-red);
|
| --tw-prose-code: var(--color-ds-cyan);
|
| --tw-prose-pre-bg: rgba(255, 255, 255, 0.03);
|
| --tw-prose-pre-code: var(--color-ds-text-secondary);
|
| --tw-prose-th-borders: var(--color-ds-border);
|
| --tw-prose-td-borders: var(--color-ds-border);
|
| }
|
|
|
| .prose :where(code):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| font-family: var(--font-mono);
|
| font-size: 0.85em;
|
| background: rgba(255, 255, 255, 0.05);
|
| padding: 2px 6px;
|
| border-radius: 3px;
|
| border: 1px solid var(--color-ds-border);
|
| }
|
|
|
| .prose :where(pre):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| font-family: var(--font-mono);
|
| background: rgba(255, 255, 255, 0.03);
|
| border: 1px solid var(--color-ds-border);
|
| border-radius: 4px;
|
| }
|
|
|
| .prose :where(pre code):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| background: none;
|
| border: none;
|
| padding: 0;
|
| }
|
|
|
| .prose :where(blockquote):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| border-left-color: var(--color-ds-red);
|
| font-style: normal;
|
| color: var(--color-ds-text-secondary);
|
| }
|
|
|
| .prose {
|
| font-family: var(--font-body);
|
| font-size: 15px;
|
| line-height: 1.8;
|
| }
|
|
|
| .prose :where(h1):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| font-family: var(--font-display);
|
| font-size: 1.75em;
|
| margin-top: 1.6em;
|
| margin-bottom: 0.6em;
|
| }
|
|
|
| .prose :where(h2):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| font-family: var(--font-display);
|
| font-size: 1.4em;
|
| margin-top: 1.8em;
|
| margin-bottom: 0.6em;
|
| }
|
|
|
| .prose :where(h3):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| font-family: var(--font-display);
|
| font-size: 1.15em;
|
| margin-top: 1.6em;
|
| margin-bottom: 0.5em;
|
| }
|
|
|
| .prose :where(h4):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| font-family: var(--font-display);
|
| margin-top: 1.4em;
|
| margin-bottom: 0.4em;
|
| }
|
|
|
| .prose :where(p):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| margin-top: 0.8em;
|
| margin-bottom: 0.8em;
|
| }
|
|
|
| .prose :where(strong):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| color: var(--color-ds-text);
|
| }
|
|
|
| .prose :where(ul, ol):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| padding-left: 1.75em;
|
| list-style-position: outside;
|
| }
|
|
|
| .prose :where(li):not(:where([class~="not-prose"], [class~="not-prose"] *)) {
|
| padding-left: 0.25em;
|
| }
|
|
|
|
|
| .chunk {
|
| background: var(--color-ds-card);
|
| border: 1px solid var(--color-ds-border);
|
| border-radius: 4px;
|
| margin-bottom: 12px;
|
| overflow: hidden;
|
| }
|
|
|
| .chunk-header {
|
| display: flex;
|
| justify-content: space-between;
|
| padding: 10px 14px;
|
| background: rgba(255, 255, 255, 0.02);
|
| border-bottom: 1px solid var(--color-ds-border);
|
| font-family: var(--font-mono);
|
| font-size: 9px;
|
| text-transform: uppercase;
|
| letter-spacing: 0.12em;
|
| color: var(--color-ds-text-muted);
|
| }
|
|
|
| .chunk-content {
|
| padding: 14px;
|
| font-family: var(--font-mono);
|
| font-size: 12px;
|
| line-height: 1.7;
|
| white-space: pre-wrap;
|
| word-wrap: break-word;
|
| max-height: 200px;
|
| overflow-y: auto;
|
| color: var(--color-ds-text-secondary);
|
| background: transparent;
|
| }
|
|
|
|
|
| .pagination {
|
| display: flex;
|
| gap: 10px;
|
| margin-top: 24px;
|
| align-items: center;
|
| }
|
|
|
| .pagination a, .pagination span {
|
| padding: 8px 16px;
|
| border: 1px solid var(--color-ds-border);
|
| border-radius: 4px;
|
| font-family: var(--font-mono);
|
| font-size: 10px;
|
| text-transform: uppercase;
|
| letter-spacing: 0.1em;
|
| color: var(--color-ds-text-secondary);
|
| transition: all 0.2s;
|
| }
|
|
|
| .pagination a:hover {
|
| background: var(--color-ds-card);
|
| border-color: var(--color-ds-border-hover);
|
| color: var(--color-ds-text);
|
| text-decoration: none;
|
| }
|
|
|
|
|
| .tag-form {
|
| display: inline-flex;
|
| gap: 8px;
|
| margin-top: 10px;
|
| }
|
|
|
| .tag-form input {
|
| padding: 5px 10px;
|
| background: var(--color-ds-card);
|
| border: 1px solid var(--color-ds-border);
|
| border-radius: 3px;
|
| font-family: var(--font-mono);
|
| font-size: 10px;
|
| color: var(--color-ds-text);
|
| letter-spacing: 0.05em;
|
| }
|
|
|
| .tag-form input::placeholder {
|
| color: var(--color-ds-text-muted);
|
| }
|
|
|
| .tag-form button {
|
| padding: 5px 12px;
|
| background: var(--color-ds-red-dim);
|
| color: var(--color-ds-red);
|
| border: 1px solid rgba(246, 135, 119, 0.2);
|
| border-radius: 3px;
|
| font-family: var(--font-mono);
|
| font-size: 9px;
|
| text-transform: uppercase;
|
| letter-spacing: 0.12em;
|
| cursor: pointer;
|
| transition: all 0.2s;
|
| }
|
|
|
| .tag-form button:hover {
|
| background: rgba(246, 135, 119, 0.25);
|
| }
|
|
|
|
|
| .chart-section {
|
| background: var(--color-ds-card);
|
| border: 1px solid var(--color-ds-border);
|
| border-radius: 4px;
|
| padding: 28px;
|
| margin-bottom: 24px;
|
| }
|
|
|
| .chart-section h3 {
|
| font-family: var(--font-display);
|
| font-size: 17px;
|
| margin-bottom: 20px;
|
| color: var(--color-ds-text);
|
| }
|
|
|
|
|
| .empty-state {
|
| text-align: center;
|
| padding: 80px 24px;
|
| color: var(--color-ds-text-muted);
|
| }
|
|
|
| .empty-state h3 {
|
| font-family: var(--font-display);
|
| font-size: 20px;
|
| margin-bottom: 8px;
|
| color: var(--color-ds-text-secondary);
|
| }
|
|
|
| .empty-state p {
|
| font-family: var(--font-mono);
|
| font-size: 11px;
|
| letter-spacing: 0.05em;
|
| }
|
|
|
|
|
| ::-webkit-scrollbar {
|
| width: 6px;
|
| height: 6px;
|
| }
|
|
|
| ::-webkit-scrollbar-track {
|
| background: transparent;
|
| }
|
|
|
| ::-webkit-scrollbar-thumb {
|
| background: rgba(255, 255, 255, 0.08);
|
| border-radius: 3px;
|
| }
|
|
|
| ::-webkit-scrollbar-thumb:hover {
|
| background: rgba(255, 255, 255, 0.15);
|
| }
|
|
|
|
|
| @keyframes fadeUp {
|
| from { opacity: 0; transform: translateY(12px); }
|
| to { opacity: 1; transform: translateY(0); }
|
| }
|
|
|
| main > * {
|
| animation: fadeUp 0.4s ease both;
|
| }
|
|
|
| main > *:nth-child(1) { animation-delay: 0.05s; }
|
| main > *:nth-child(2) { animation-delay: 0.1s; }
|
| main > *:nth-child(3) { animation-delay: 0.15s; }
|
| main > *:nth-child(4) { animation-delay: 0.2s; }
|
| main > *:nth-child(5) { animation-delay: 0.25s; }
|
|
|
|
|
| @media (max-width: 900px) {
|
| .sidebar { width: 60px; }
|
| .sidebar-header h1 { font-size: 10px; letter-spacing: 0; }
|
| .sidebar-header .subtitle { display: none; }
|
| .sidebar a span { display: none; }
|
| main { margin-left: 60px; padding: 24px; }
|
| .two-column { grid-template-columns: 1fr; }
|
| .stats-grid { grid-template-columns: repeat(2, 1fr); }
|
| }
|
|
|