updated styles for homelab
This commit is contained in:
@@ -72,7 +72,14 @@
|
|||||||
"WebFetch(domain:marimo.io)",
|
"WebFetch(domain:marimo.io)",
|
||||||
"WebFetch(domain:unpkg.com)",
|
"WebFetch(domain:unpkg.com)",
|
||||||
"WebFetch(domain:forums.zotero.org)",
|
"WebFetch(domain:forums.zotero.org)",
|
||||||
"WebFetch(domain:www.gmass.co)"
|
"WebFetch(domain:www.gmass.co)",
|
||||||
|
"WebFetch(domain:docs.theme-park.dev)",
|
||||||
|
"WebFetch(domain:plugins.traefik.io)",
|
||||||
|
"WebFetch(domain:doc.traefik.io)",
|
||||||
|
"WebFetch(domain:volkovlabs.io)",
|
||||||
|
"Bash(grep:*)",
|
||||||
|
"Bash(for f in /home/kert/.claude/projects/-home-kert-stack/*.jsonl)",
|
||||||
|
"Bash(do grep -o '\"\"file_path\"\":\"\"[^\"\"]*\\\\.js\"\"' \"$f\")"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./traefik/traefik.yml:/etc/traefik/traefik.yml:ro
|
- ./traefik/traefik.yml:/etc/traefik/traefik.yml:ro
|
||||||
- ./traefik/dynamic:/etc/traefik/dynamic:ro
|
- ./traefik/dynamic:/etc/traefik/dynamic:ro
|
||||||
|
- ./traefik/plugins:/plugins-local:ro
|
||||||
environment:
|
environment:
|
||||||
- OTEL_SERVICE_NAME=traefik
|
- OTEL_SERVICE_NAME=traefik
|
||||||
security_opt:
|
security_opt:
|
||||||
@@ -162,6 +163,8 @@ services:
|
|||||||
- PYTHONPATH=/home/kert/src
|
- PYTHONPATH=/home/kert/src
|
||||||
volumes:
|
volumes:
|
||||||
- ./notebooks:/home/kert/notebooks
|
- ./notebooks:/home/kert/notebooks
|
||||||
|
- ./notebooks/.marimo-config:/home/kert/.config/marimo:ro
|
||||||
|
- ./notebooks/home-page-DUMF8ZY4.js:/home/kert/workspace/.venv/lib/python3.13/site-packages/marimo/_static/assets/home-page-DUMF8ZY4.js:ro
|
||||||
- ./data:/home/kert/data
|
- ./data:/home/kert/data
|
||||||
- ./zotero/data:/home/kert/zotero:ro
|
- ./zotero/data:/home/kert/zotero:ro
|
||||||
- ./src:/home/kert/src:ro
|
- ./src:/home/kert/src:ro
|
||||||
@@ -296,6 +299,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||||
- ./nginx/index.html:/usr/share/nginx/html/index.html:ro
|
- ./nginx/index.html:/usr/share/nginx/html/index.html:ro
|
||||||
|
- ./nginx/nes-theme.css:/usr/share/nginx/html/nes-theme.css:ro
|
||||||
security_opt:
|
security_opt:
|
||||||
- no-new-privileges:true
|
- no-new-privileges:true
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|||||||
989
nginx/nes-theme.css
Normal file
989
nginx/nes-theme.css
Normal file
@@ -0,0 +1,989 @@
|
|||||||
|
/* NES SPORTS THEME - Universal Injectable CSS
|
||||||
|
Injected via Traefik rewrite-body plugin into:
|
||||||
|
Grafana, Traefik Dashboard, RustFS/MinIO, Jaeger, Prometheus, Trino
|
||||||
|
Palette matches: Gitea, Woodpecker, Marimo, nginx dashboard themes */
|
||||||
|
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&family=IBM+Plex+Mono:wght@400;500;600&display=swap');
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
NES COLOR PALETTE
|
||||||
|
============================================ */
|
||||||
|
:root {
|
||||||
|
--nes-black: #0f0f0f;
|
||||||
|
--nes-dark-gray: #1a1a2e;
|
||||||
|
--nes-gray: #4a4a68;
|
||||||
|
--nes-light-gray: #9090a8;
|
||||||
|
--nes-white: #f0f0f0;
|
||||||
|
|
||||||
|
--nes-dark-blue: #1a1a40;
|
||||||
|
--nes-blue: #2840a0;
|
||||||
|
--nes-mid-blue: #4060c0;
|
||||||
|
--nes-light-blue: #70a0e0;
|
||||||
|
--nes-sky: #90c0f0;
|
||||||
|
|
||||||
|
--nes-red: #d03030;
|
||||||
|
--nes-orange: #e07020;
|
||||||
|
--nes-yellow: #e0b040;
|
||||||
|
--nes-green: #40a040;
|
||||||
|
--nes-light-green: #80d080;
|
||||||
|
--nes-cyan: #40b0c0;
|
||||||
|
--nes-cream: #e8d8c0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
BASE STYLES
|
||||||
|
============================================ */
|
||||||
|
body, html {
|
||||||
|
font-family: 'IBM Plex Mono', 'Courier New', monospace !important;
|
||||||
|
background: linear-gradient(180deg, #0a0a28 0%, #1a1a40 30%, #1a1a40 70%, #0a0a28 100%) !important;
|
||||||
|
background-attachment: fixed !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HEADINGS
|
||||||
|
============================================ */
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
font-family: 'Press Start 2P', 'IBM Plex Mono', monospace !important;
|
||||||
|
letter-spacing: 0.5px !important;
|
||||||
|
line-height: 1.8 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 16px !important;
|
||||||
|
color: var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 13px !important;
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 11px !important;
|
||||||
|
color: var(--nes-yellow) !important;
|
||||||
|
}
|
||||||
|
h4, h5, h6 {
|
||||||
|
font-size: 10px !important;
|
||||||
|
color: var(--nes-cream) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
NAVIGATION / HEADER BARS
|
||||||
|
============================================ */
|
||||||
|
nav,
|
||||||
|
header,
|
||||||
|
[class*="navbar"],
|
||||||
|
[class*="header"],
|
||||||
|
[class*="toolbar"],
|
||||||
|
[class*="topbar"],
|
||||||
|
[class*="top-bar"],
|
||||||
|
[class*="app-bar"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border-bottom: 3px solid var(--nes-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
SIDEBAR / NAVIGATION MENUS
|
||||||
|
============================================ */
|
||||||
|
aside,
|
||||||
|
[class*="sidebar"],
|
||||||
|
[class*="sidenav"],
|
||||||
|
[class*="side-nav"],
|
||||||
|
[class*="drawer"],
|
||||||
|
[class*="menu-panel"] {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border-right: 3px solid var(--nes-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
TABLES (Scoreboard style)
|
||||||
|
============================================ */
|
||||||
|
table {
|
||||||
|
border-collapse: collapse !important;
|
||||||
|
font-family: 'IBM Plex Mono', monospace !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
font-family: 'Press Start 2P', monospace !important;
|
||||||
|
font-size: 9px !important;
|
||||||
|
padding: 10px 12px !important;
|
||||||
|
text-transform: uppercase !important;
|
||||||
|
letter-spacing: 1px !important;
|
||||||
|
border: 1px solid var(--nes-mid-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
color: var(--nes-cream) !important;
|
||||||
|
padding: 8px 12px !important;
|
||||||
|
border: 1px solid var(--nes-dark-gray) !important;
|
||||||
|
font-size: 13px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:nth-child(even) td {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:hover td {
|
||||||
|
background: rgba(40, 64, 160, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
BUTTONS
|
||||||
|
============================================ */
|
||||||
|
button,
|
||||||
|
[role="button"],
|
||||||
|
.btn,
|
||||||
|
[class*="button"] {
|
||||||
|
font-family: 'IBM Plex Mono', monospace !important;
|
||||||
|
font-weight: 500 !important;
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
transition: all 0.15s ease !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover,
|
||||||
|
[role="button"]:hover,
|
||||||
|
.btn:hover,
|
||||||
|
[class*="button"]:hover {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
border-color: var(--nes-light-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:active,
|
||||||
|
[role="button"]:active {
|
||||||
|
transform: translate(1px, 1px) !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Primary action buttons */
|
||||||
|
button[type="submit"],
|
||||||
|
[class*="primary"],
|
||||||
|
[class*="submit"] {
|
||||||
|
background: var(--nes-green) !important;
|
||||||
|
color: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
button[type="submit"]:hover,
|
||||||
|
[class*="primary"]:hover {
|
||||||
|
background: var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
INPUTS AND FORMS
|
||||||
|
============================================ */
|
||||||
|
input,
|
||||||
|
textarea,
|
||||||
|
select,
|
||||||
|
[class*="input"],
|
||||||
|
[contenteditable="true"] {
|
||||||
|
font-family: 'IBM Plex Mono', monospace !important;
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus,
|
||||||
|
textarea:focus,
|
||||||
|
select:focus {
|
||||||
|
border-color: var(--nes-light-blue) !important;
|
||||||
|
outline: none !important;
|
||||||
|
box-shadow: 0 0 0 2px rgba(112, 160, 224, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CODE BLOCKS
|
||||||
|
============================================ */
|
||||||
|
pre, code {
|
||||||
|
font-family: 'IBM Plex Mono', monospace !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
color: var(--nes-light-green) !important;
|
||||||
|
padding: 2px 6px !important;
|
||||||
|
border-radius: 3px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
padding: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre code {
|
||||||
|
background: transparent !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
LINKS
|
||||||
|
============================================ */
|
||||||
|
a {
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
text-decoration: none !important;
|
||||||
|
transition: color 0.15s ease !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited {
|
||||||
|
color: var(--nes-light-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CARDS / PANELS / CONTAINERS
|
||||||
|
============================================ */
|
||||||
|
[class*="card"],
|
||||||
|
[class*="panel"],
|
||||||
|
[class*="widget"],
|
||||||
|
[class*="Paper"],
|
||||||
|
[class*="container"]:not(body):not(html) {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
DROPDOWNS / MENUS / POPOVERS
|
||||||
|
============================================ */
|
||||||
|
[role="menu"],
|
||||||
|
[role="listbox"],
|
||||||
|
[class*="dropdown"],
|
||||||
|
[class*="popover"],
|
||||||
|
[class*="tooltip"],
|
||||||
|
[class*="Popover"],
|
||||||
|
[class*="Menu-list"],
|
||||||
|
[class*="MenuList"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[role="menuitem"]:hover,
|
||||||
|
[role="option"]:hover,
|
||||||
|
[class*="MenuItem"]:hover {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
BADGES / PILLS / CHIPS / TAGS
|
||||||
|
============================================ */
|
||||||
|
[class*="badge"],
|
||||||
|
[class*="chip"],
|
||||||
|
[class*="tag"],
|
||||||
|
[class*="label"],
|
||||||
|
[class*="pill"] {
|
||||||
|
font-family: 'IBM Plex Mono', monospace !important;
|
||||||
|
font-size: 11px !important;
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
border: 1px solid var(--nes-mid-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Status indicators */
|
||||||
|
[class*="success"],
|
||||||
|
[class*="healthy"],
|
||||||
|
[class*="running"],
|
||||||
|
[class*="active"],
|
||||||
|
[class*="ok"] {
|
||||||
|
color: var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*="error"],
|
||||||
|
[class*="danger"],
|
||||||
|
[class*="failed"],
|
||||||
|
[class*="critical"] {
|
||||||
|
color: var(--nes-red) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*="warning"],
|
||||||
|
[class*="pending"] {
|
||||||
|
color: var(--nes-yellow) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
SCROLLBARS
|
||||||
|
============================================ */
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
background: var(--nes-dark-gray);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: var(--nes-gray);
|
||||||
|
border-radius: 6px;
|
||||||
|
border: 2px solid var(--nes-dark-gray);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: var(--nes-light-gray);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
TEXT SELECTION
|
||||||
|
============================================ */
|
||||||
|
::selection {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
FOCUS STYLES
|
||||||
|
============================================ */
|
||||||
|
:focus-visible {
|
||||||
|
outline: 2px solid var(--nes-light-blue) !important;
|
||||||
|
outline-offset: 2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CRT SCANLINE OVERLAY
|
||||||
|
============================================ */
|
||||||
|
body::after {
|
||||||
|
content: "";
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 9998;
|
||||||
|
background: repeating-linear-gradient(
|
||||||
|
0deg,
|
||||||
|
transparent,
|
||||||
|
transparent 2px,
|
||||||
|
rgba(0, 0, 0, 0.06) 2px,
|
||||||
|
rgba(0, 0, 0, 0.06) 4px
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
POWER-ON ANIMATION
|
||||||
|
============================================ */
|
||||||
|
@keyframes power-on {
|
||||||
|
0% { opacity: 0; filter: brightness(2) saturate(0); }
|
||||||
|
30% { opacity: 1; filter: brightness(1.5) saturate(0.5); }
|
||||||
|
100% { opacity: 1; filter: brightness(1) saturate(1); }
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
animation: power-on 0.8s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HIDE SERVICE LOGOS (universal)
|
||||||
|
============================================ */
|
||||||
|
[class*="logo"],
|
||||||
|
[class*="Logo"],
|
||||||
|
[class*="brand-logo"],
|
||||||
|
img[src*="logo"],
|
||||||
|
img[alt*="logo" i],
|
||||||
|
img[alt*="Logo" i] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ================================================================
|
||||||
|
GRAFANA-SPECIFIC
|
||||||
|
================================================================ */
|
||||||
|
|
||||||
|
/* Hide Grafana logo */
|
||||||
|
.grafana-app .preloader__logo,
|
||||||
|
.grafana-app [class*="Logo"],
|
||||||
|
.grafana-app img[src*="logo"],
|
||||||
|
.grafana-app [class*="branding"] img,
|
||||||
|
.grafana-app [class*="Branding"] img,
|
||||||
|
.grafana-app [class*="sidemenu"] img[class*="logo"],
|
||||||
|
.grafana-app [aria-label="Home"] img {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main app background */
|
||||||
|
.grafana-app,
|
||||||
|
.main-view,
|
||||||
|
.scroll-canvas {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Top navbar */
|
||||||
|
.grafana-app .navbar,
|
||||||
|
.grafana-app nav,
|
||||||
|
.grafana-app [class*="NavBar"],
|
||||||
|
.grafana-app [class*="Topbar"],
|
||||||
|
.grafana-app [aria-label="Main menu"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border-bottom: 3px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sidenav */
|
||||||
|
.grafana-app [class*="sidemenu"],
|
||||||
|
.grafana-app [class*="NavBar"][class*="wrapper"] {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border-right: 3px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dashboard container */
|
||||||
|
.grafana-app .dashboard-container,
|
||||||
|
.grafana-app [class*="DashboardPage"] {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Panels */
|
||||||
|
.grafana-app .panel-container,
|
||||||
|
.grafana-app [class*="panel-content"],
|
||||||
|
.grafana-app [class*="PanelChrome"] {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Panel headers */
|
||||||
|
.grafana-app .panel-title,
|
||||||
|
.grafana-app [class*="panel-header"],
|
||||||
|
.grafana-app [class*="PanelHeader"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
font-family: 'Press Start 2P', monospace !important;
|
||||||
|
font-size: 9px !important;
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Explore page */
|
||||||
|
.grafana-app [class*="explore"],
|
||||||
|
.grafana-app [class*="Explore"] {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grafana query editor */
|
||||||
|
.grafana-app [class*="query-editor"],
|
||||||
|
.grafana-app [class*="QueryEditor"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Alert list */
|
||||||
|
.grafana-app [class*="AlertList"],
|
||||||
|
.grafana-app [class*="alert-rule"] {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 1px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grafana page toolbar */
|
||||||
|
.grafana-app [class*="page-toolbar"],
|
||||||
|
.grafana-app [class*="PageToolbar"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ================================================================
|
||||||
|
JAEGER-SPECIFIC
|
||||||
|
================================================================ */
|
||||||
|
|
||||||
|
/* Hide Jaeger logo */
|
||||||
|
[class*="TracePageHeader--titleRow"] img,
|
||||||
|
[class*="TopNav"] img,
|
||||||
|
[class*="TopNav"] svg[class*="logo"],
|
||||||
|
[class*="jaeger-logo"],
|
||||||
|
header img[alt*="Jaeger" i] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header bar */
|
||||||
|
.jaeger-ui .TopNav,
|
||||||
|
.jaeger-ui [class*="TopNav"],
|
||||||
|
[class*="jaeger"] [class*="TopNav"],
|
||||||
|
[data-testid="TopNav"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border-bottom: 3px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Trace page */
|
||||||
|
.TracePage,
|
||||||
|
[class*="TracePage"] {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Timeline viewer */
|
||||||
|
.TraceTimelineViewer,
|
||||||
|
[class*="TraceTimelineViewer"] {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Span bars */
|
||||||
|
[class*="SpanBar"] {
|
||||||
|
border-radius: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Search form */
|
||||||
|
.SearchForm,
|
||||||
|
[class*="SearchForm"],
|
||||||
|
[class*="search-form"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
padding: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Trace result list */
|
||||||
|
[class*="ResultItem"],
|
||||||
|
[class*="result-item"] {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 1px solid var(--nes-gray) !important;
|
||||||
|
margin-bottom: 4px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*="ResultItem"]:hover,
|
||||||
|
[class*="result-item"]:hover {
|
||||||
|
background: rgba(40, 64, 160, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Span detail */
|
||||||
|
[class*="SpanDetail"],
|
||||||
|
[class*="AccordianKeyValues"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Jaeger-specific selects */
|
||||||
|
.jaeger-ui select,
|
||||||
|
[class*="jaeger"] select {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ================================================================
|
||||||
|
PROMETHEUS-SPECIFIC
|
||||||
|
================================================================ */
|
||||||
|
|
||||||
|
/* Hide Prometheus logo */
|
||||||
|
nav.navbar img,
|
||||||
|
nav.navbar svg,
|
||||||
|
.navbar-brand img,
|
||||||
|
.navbar-brand svg {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main navbar */
|
||||||
|
.prometheus-app nav.navbar,
|
||||||
|
nav.navbar {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border-bottom: 3px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav.navbar .navbar-brand {
|
||||||
|
font-family: 'Press Start 2P', monospace !important;
|
||||||
|
font-size: 10px !important;
|
||||||
|
color: var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Expression input */
|
||||||
|
.prometheus-app .expression-input,
|
||||||
|
[class*="expression-input"],
|
||||||
|
.cm-expression-input {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 3px solid var(--nes-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
font-family: 'IBM Plex Mono', monospace !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Graph container */
|
||||||
|
.graph-container,
|
||||||
|
[class*="graph-container"],
|
||||||
|
.panel {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Graph tab controls */
|
||||||
|
.graph-controls,
|
||||||
|
[class*="graph-controls"],
|
||||||
|
.nav-tabs {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border-bottom: 2px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs .nav-link,
|
||||||
|
.nav-tabs a {
|
||||||
|
color: var(--nes-light-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-tabs .nav-link.active,
|
||||||
|
.nav-tabs .active a {
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
border-bottom: 3px solid var(--nes-mid-blue) !important;
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Alert/Rule manager */
|
||||||
|
.rules-head,
|
||||||
|
[class*="rules"] th {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Prometheus targets page */
|
||||||
|
.target-head,
|
||||||
|
[class*="scrape-pool"] h2 {
|
||||||
|
font-family: 'Press Start 2P', monospace !important;
|
||||||
|
font-size: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Status badges */
|
||||||
|
.badge-success,
|
||||||
|
.label-success {
|
||||||
|
background: var(--nes-green) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-danger,
|
||||||
|
.label-danger {
|
||||||
|
background: var(--nes-red) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-warning,
|
||||||
|
.label-warning {
|
||||||
|
background: var(--nes-orange) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ================================================================
|
||||||
|
TRAEFIK DASHBOARD-SPECIFIC
|
||||||
|
================================================================ */
|
||||||
|
|
||||||
|
/* Hide Traefik logo */
|
||||||
|
#app img[src*="logo"],
|
||||||
|
#app img[alt*="Traefik" i],
|
||||||
|
#app [class*="logo"] img,
|
||||||
|
#app [class*="logo"] svg,
|
||||||
|
#app [class*="brand"] img {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Vue app root */
|
||||||
|
#app {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Traefik top nav */
|
||||||
|
#app nav,
|
||||||
|
#app [class*="nav-bar"],
|
||||||
|
#app .navbar {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border-bottom: 3px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sidebar */
|
||||||
|
#app [class*="sidebar"],
|
||||||
|
#app [class*="side-menu"],
|
||||||
|
#app aside {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border-right: 3px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sidebar menu items */
|
||||||
|
#app [class*="sidebar"] a,
|
||||||
|
#app [class*="side-menu"] a {
|
||||||
|
color: var(--nes-light-gray) !important;
|
||||||
|
border-left: 3px solid transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app [class*="sidebar"] a:hover,
|
||||||
|
#app [class*="side-menu"] a:hover,
|
||||||
|
#app [class*="sidebar"] a.active,
|
||||||
|
#app [class*="side-menu"] a.active {
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
background: rgba(40, 64, 160, 0.2) !important;
|
||||||
|
border-left-color: var(--nes-mid-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main content area */
|
||||||
|
#app main,
|
||||||
|
#app [class*="main-content"],
|
||||||
|
#app [class*="page-body"] {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Status indicators */
|
||||||
|
#app [class*="status"][class*="positive"],
|
||||||
|
#app [class*="status"][class*="success"],
|
||||||
|
#app [class*="pill"][class*="green"],
|
||||||
|
#app [class*="positive"] {
|
||||||
|
background: var(--nes-green) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app [class*="status"][class*="negative"],
|
||||||
|
#app [class*="status"][class*="error"],
|
||||||
|
#app [class*="pill"][class*="red"],
|
||||||
|
#app [class*="negative"] {
|
||||||
|
background: var(--nes-red) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app [class*="status"][class*="warning"],
|
||||||
|
#app [class*="pill"][class*="orange"] {
|
||||||
|
background: var(--nes-orange) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Traefik table rows */
|
||||||
|
#app table tr:hover td {
|
||||||
|
background: rgba(40, 64, 160, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Service detail panels */
|
||||||
|
#app [class*="detail"],
|
||||||
|
#app [class*="panel-block"] {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ================================================================
|
||||||
|
RUSTFS / MINIO CONSOLE-SPECIFIC (Material UI)
|
||||||
|
================================================================ */
|
||||||
|
|
||||||
|
/* Hide MinIO/RustFS logo */
|
||||||
|
#root img[src*="logo"],
|
||||||
|
#root img[alt*="MinIO" i],
|
||||||
|
#root img[alt*="RustFS" i],
|
||||||
|
#root [class*="logo"] img,
|
||||||
|
#root [class*="logo"] svg,
|
||||||
|
#root [class*="Logo"] img,
|
||||||
|
#root [class*="Logo"] svg {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI root */
|
||||||
|
#root {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* App bar */
|
||||||
|
#root .MuiAppBar-root,
|
||||||
|
#root [class*="MuiAppBar"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border-bottom: 3px solid var(--nes-gray) !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI Drawer / Sidebar */
|
||||||
|
#root .MuiDrawer-root,
|
||||||
|
#root .MuiDrawer-paper,
|
||||||
|
#root [class*="MuiDrawer"] {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border-right: 3px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Drawer list items */
|
||||||
|
#root .MuiListItem-root,
|
||||||
|
#root .MuiListItemButton-root,
|
||||||
|
#root [class*="MuiListItem"] {
|
||||||
|
color: var(--nes-light-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .MuiListItem-root:hover,
|
||||||
|
#root .MuiListItemButton-root:hover,
|
||||||
|
#root [class*="MuiListItem"]:hover {
|
||||||
|
background: rgba(40, 64, 160, 0.2) !important;
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .Mui-selected,
|
||||||
|
#root [class*="Mui-selected"] {
|
||||||
|
background: rgba(40, 64, 160, 0.3) !important;
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI Paper */
|
||||||
|
#root .MuiPaper-root,
|
||||||
|
#root [class*="MuiPaper"] {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI Buttons */
|
||||||
|
#root .MuiButton-root,
|
||||||
|
#root [class*="MuiButton"] {
|
||||||
|
font-family: 'IBM Plex Mono', monospace !important;
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
text-transform: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .MuiButton-root:hover,
|
||||||
|
#root [class*="MuiButton"]:hover {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
border-color: var(--nes-light-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .MuiButton-containedPrimary,
|
||||||
|
#root [class*="MuiButton-containedPrimary"] {
|
||||||
|
background: var(--nes-green) !important;
|
||||||
|
color: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .MuiButton-containedPrimary:hover {
|
||||||
|
background: var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI Table */
|
||||||
|
#root .MuiTableCell-root,
|
||||||
|
#root [class*="MuiTableCell"] {
|
||||||
|
border-color: var(--nes-gray) !important;
|
||||||
|
color: var(--nes-cream) !important;
|
||||||
|
font-family: 'IBM Plex Mono', monospace !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .MuiTableCell-head,
|
||||||
|
#root [class*="MuiTableCell-head"] {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
font-family: 'Press Start 2P', monospace !important;
|
||||||
|
font-size: 9px !important;
|
||||||
|
text-transform: uppercase !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .MuiTableRow-root:hover,
|
||||||
|
#root [class*="MuiTableRow"]:hover {
|
||||||
|
background: rgba(40, 64, 160, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI Inputs */
|
||||||
|
#root .MuiInputBase-root,
|
||||||
|
#root .MuiOutlinedInput-root,
|
||||||
|
#root [class*="MuiInputBase"],
|
||||||
|
#root [class*="MuiOutlinedInput"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .MuiOutlinedInput-notchedOutline,
|
||||||
|
#root [class*="notchedOutline"] {
|
||||||
|
border-color: var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .MuiInputLabel-root,
|
||||||
|
#root [class*="MuiInputLabel"] {
|
||||||
|
color: var(--nes-light-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI Dialogs */
|
||||||
|
#root .MuiDialog-paper,
|
||||||
|
#root [class*="MuiDialog-paper"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border: 3px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI Tabs */
|
||||||
|
#root .MuiTab-root,
|
||||||
|
#root [class*="MuiTab"] {
|
||||||
|
color: var(--nes-light-gray) !important;
|
||||||
|
font-family: 'IBM Plex Mono', monospace !important;
|
||||||
|
text-transform: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .MuiTab-root.Mui-selected,
|
||||||
|
#root [class*="MuiTab"][class*="Mui-selected"] {
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#root .MuiTabs-indicator,
|
||||||
|
#root [class*="MuiTabs-indicator"] {
|
||||||
|
background: var(--nes-mid-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI Breadcrumbs */
|
||||||
|
#root .MuiBreadcrumbs-root,
|
||||||
|
#root [class*="MuiBreadcrumbs"] {
|
||||||
|
color: var(--nes-light-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI Chips */
|
||||||
|
#root .MuiChip-root,
|
||||||
|
#root [class*="MuiChip"] {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
border: 1px solid var(--nes-mid-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MUI Icons */
|
||||||
|
#root .MuiSvgIcon-root,
|
||||||
|
#root [class*="MuiSvgIcon"],
|
||||||
|
#root svg {
|
||||||
|
color: var(--nes-light-gray) !important;
|
||||||
|
fill: currentColor !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ================================================================
|
||||||
|
TRINO-SPECIFIC
|
||||||
|
============================================ */
|
||||||
|
|
||||||
|
/* Trino has a simple UI - mostly tables and headers */
|
||||||
|
body > h2,
|
||||||
|
body > h3 {
|
||||||
|
font-family: 'Press Start 2P', monospace !important;
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
padding: 10px 0 !important;
|
||||||
|
border-bottom: 3px solid var(--nes-gray) !important;
|
||||||
|
margin-bottom: 15px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Trino status page tables */
|
||||||
|
body > table {
|
||||||
|
width: 100% !important;
|
||||||
|
margin: 15px 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Trino worker status */
|
||||||
|
[class*="query-list"],
|
||||||
|
[class*="query-detail"] {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Progress bars used by various services */
|
||||||
|
progress,
|
||||||
|
[role="progressbar"],
|
||||||
|
[class*="progress-bar"],
|
||||||
|
[class*="ProgressBar"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border: 1px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress::-webkit-progress-bar {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress::-webkit-progress-value {
|
||||||
|
background: var(--nes-mid-blue) !important;
|
||||||
|
}
|
||||||
@@ -13,6 +13,14 @@ http {
|
|||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
index index.html;
|
index index.html;
|
||||||
|
|
||||||
|
# CORS for CSS files (loaded cross-origin by themed services)
|
||||||
|
location ~* \.css$ {
|
||||||
|
add_header Access-Control-Allow-Origin "*";
|
||||||
|
add_header Access-Control-Allow-Methods "GET, OPTIONS";
|
||||||
|
add_header Cache-Control "public, max-age=3600";
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
try_files $uri $uri/ =404;
|
try_files $uri $uri/ =404;
|
||||||
}
|
}
|
||||||
|
|||||||
3
notebooks/.marimo-config/marimo.toml
Normal file
3
notebooks/.marimo-config/marimo.toml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[display]
|
||||||
|
theme = "dark"
|
||||||
|
custom_css = ["/home/kert/.config/marimo/retro-arcade.css"]
|
||||||
663
notebooks/.marimo-config/retro-arcade.css
Normal file
663
notebooks/.marimo-config/retro-arcade.css
Normal file
@@ -0,0 +1,663 @@
|
|||||||
|
/* NES SPORTS THEME - RBI Baseball / Tecmo Super Bowl */
|
||||||
|
/* Uses marimo's native CSS variable system for proper theming */
|
||||||
|
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&family=IBM+Plex+Mono:wght@400;500;600&display=swap');
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
FONT CONFIGURATION
|
||||||
|
============================================ */
|
||||||
|
:root {
|
||||||
|
--marimo-monospace-font: 'IBM Plex Mono', 'Courier New', monospace;
|
||||||
|
--marimo-text-font: 'IBM Plex Mono', 'Courier New', monospace;
|
||||||
|
--marimo-heading-font: 'Press Start 2P', 'IBM Plex Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
NES COLOR PALETTE
|
||||||
|
============================================ */
|
||||||
|
:root {
|
||||||
|
/* Core NES colors */
|
||||||
|
--nes-black: #0f0f0f;
|
||||||
|
--nes-dark-gray: #1a1a2e;
|
||||||
|
--nes-gray: #4a4a68;
|
||||||
|
--nes-light-gray: #9090a8;
|
||||||
|
--nes-white: #f0f0f0;
|
||||||
|
|
||||||
|
/* NES blues (the classic Tecmo/RBI look) */
|
||||||
|
--nes-dark-blue: #1a1a40;
|
||||||
|
--nes-blue: #2840a0;
|
||||||
|
--nes-mid-blue: #4060c0;
|
||||||
|
--nes-light-blue: #70a0e0;
|
||||||
|
--nes-sky: #90c0f0;
|
||||||
|
|
||||||
|
/* Accent colors */
|
||||||
|
--nes-red: #d03030;
|
||||||
|
--nes-orange: #e07020;
|
||||||
|
--nes-yellow: #e0b040;
|
||||||
|
--nes-green: #40a040;
|
||||||
|
--nes-light-green: #80d080;
|
||||||
|
--nes-cyan: #40b0c0;
|
||||||
|
--nes-cream: #e8d8c0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
MARIMO THEME VARIABLES (Dark Mode)
|
||||||
|
============================================ */
|
||||||
|
:root {
|
||||||
|
/* Base colors */
|
||||||
|
--background: var(--nes-dark-blue);
|
||||||
|
--foreground: var(--nes-white);
|
||||||
|
|
||||||
|
/* Muted/secondary text */
|
||||||
|
--muted: var(--nes-dark-gray);
|
||||||
|
--muted-foreground: var(--nes-light-gray);
|
||||||
|
|
||||||
|
/* Popover/dropdown backgrounds */
|
||||||
|
--popover: var(--nes-dark-gray);
|
||||||
|
--popover-foreground: var(--nes-white);
|
||||||
|
|
||||||
|
/* Cards (cells) */
|
||||||
|
--card: var(--nes-black);
|
||||||
|
--card-foreground: var(--nes-white);
|
||||||
|
|
||||||
|
/* Borders and inputs */
|
||||||
|
--border: var(--nes-gray);
|
||||||
|
--input: var(--nes-dark-gray);
|
||||||
|
|
||||||
|
/* Primary action color */
|
||||||
|
--primary: var(--nes-mid-blue);
|
||||||
|
--primary-foreground: var(--nes-white);
|
||||||
|
|
||||||
|
/* Secondary elements */
|
||||||
|
--secondary: var(--nes-gray);
|
||||||
|
--secondary-foreground: var(--nes-white);
|
||||||
|
|
||||||
|
/* Accent/highlight */
|
||||||
|
--accent: var(--nes-light-blue);
|
||||||
|
--accent-foreground: var(--nes-black);
|
||||||
|
|
||||||
|
/* Focus ring */
|
||||||
|
--ring: var(--nes-light-blue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
SEMANTIC COLORS
|
||||||
|
============================================ */
|
||||||
|
:root {
|
||||||
|
/* Error states */
|
||||||
|
--destructive: var(--nes-red);
|
||||||
|
--destructive-foreground: var(--nes-white);
|
||||||
|
--error: var(--nes-red);
|
||||||
|
--error-foreground: var(--nes-white);
|
||||||
|
|
||||||
|
/* Success states */
|
||||||
|
--success: var(--nes-green);
|
||||||
|
--success-foreground: var(--nes-white);
|
||||||
|
|
||||||
|
/* Action buttons (run, etc) */
|
||||||
|
--action: var(--nes-green);
|
||||||
|
--action-hover: var(--nes-light-green);
|
||||||
|
--action-foreground: var(--nes-black);
|
||||||
|
|
||||||
|
/* Links */
|
||||||
|
--link: var(--nes-sky);
|
||||||
|
--link-visited: var(--nes-light-blue);
|
||||||
|
|
||||||
|
/* Stale indicator */
|
||||||
|
--stale: rgba(224, 176, 64, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
SHADOWS (subtle, NES-style)
|
||||||
|
============================================ */
|
||||||
|
:root {
|
||||||
|
--base-shadow: rgba(0, 0, 0, 0.4);
|
||||||
|
--base-shadow-darker: rgba(0, 0, 0, 0.6);
|
||||||
|
--base-shadow-opacity: 20%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
BACKGROUND GRADIENT (Tecmo field style)
|
||||||
|
============================================ */
|
||||||
|
:root {
|
||||||
|
--background-image: linear-gradient(
|
||||||
|
180deg,
|
||||||
|
#0a0a28 0%,
|
||||||
|
#1a1a40 30%,
|
||||||
|
#1a1a40 70%,
|
||||||
|
#0a0a28 100%
|
||||||
|
);
|
||||||
|
--background-repeat: no-repeat;
|
||||||
|
--background-attachment: fixed;
|
||||||
|
--background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-image: var(--background-image) !important;
|
||||||
|
background-repeat: var(--background-repeat) !important;
|
||||||
|
background-attachment: var(--background-attachment) !important;
|
||||||
|
background-size: var(--background-size) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CODE EDITOR - CODEMIRROR STYLING
|
||||||
|
============================================ */
|
||||||
|
.cm-editor {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
font-size: 14px !important;
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-content {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-line {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-gutters {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border-right: 2px solid var(--nes-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-lineNumbers .cm-gutterElement {
|
||||||
|
color: var(--nes-light-gray) !important;
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
font-size: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Syntax highlighting */
|
||||||
|
.cm-keyword, .tok-keyword { color: var(--nes-sky) !important; }
|
||||||
|
.cm-string, .tok-string { color: var(--nes-light-green) !important; }
|
||||||
|
.cm-number, .tok-number { color: var(--nes-yellow) !important; }
|
||||||
|
.cm-comment, .tok-comment { color: var(--nes-light-gray) !important; font-style: italic !important; }
|
||||||
|
.cm-function, .tok-function { color: var(--nes-cream) !important; }
|
||||||
|
.cm-variableName, .tok-variableName { color: var(--nes-white) !important; }
|
||||||
|
.cm-operator, .tok-operator { color: var(--nes-cyan) !important; }
|
||||||
|
.cm-propertyName, .tok-propertyName { color: var(--nes-light-blue) !important; }
|
||||||
|
.tok-standard, .cm-builtin { color: var(--nes-orange) !important; }
|
||||||
|
.tok-definition, .cm-def { color: var(--nes-sky) !important; }
|
||||||
|
.tok-typeName { color: var(--nes-yellow) !important; }
|
||||||
|
.tok-bool { color: var(--nes-orange) !important; }
|
||||||
|
|
||||||
|
/* Cursor */
|
||||||
|
.cm-cursor {
|
||||||
|
border-left: 2px solid var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Selection */
|
||||||
|
.cm-selectionBackground,
|
||||||
|
::selection {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Active line */
|
||||||
|
.cm-activeLine {
|
||||||
|
background: rgba(64, 96, 192, 0.15) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HEADINGS (Press Start 2P for that NES feel)
|
||||||
|
============================================ */
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
font-family: var(--marimo-heading-font) !important;
|
||||||
|
letter-spacing: 0.5px !important;
|
||||||
|
line-height: 1.8 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 18px !important;
|
||||||
|
color: var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 14px !important;
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 12px !important;
|
||||||
|
color: var(--nes-yellow) !important;
|
||||||
|
}
|
||||||
|
h4, h5, h6 {
|
||||||
|
font-size: 11px !important;
|
||||||
|
color: var(--nes-cream) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
TABLES (Scoreboard style)
|
||||||
|
============================================ */
|
||||||
|
table {
|
||||||
|
border-collapse: collapse !important;
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
font-family: var(--marimo-heading-font) !important;
|
||||||
|
font-size: 10px !important;
|
||||||
|
padding: 10px 12px !important;
|
||||||
|
text-transform: uppercase !important;
|
||||||
|
letter-spacing: 1px !important;
|
||||||
|
border: 1px solid var(--nes-mid-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
color: var(--nes-cream) !important;
|
||||||
|
padding: 8px 12px !important;
|
||||||
|
border: 1px solid var(--nes-dark-gray) !important;
|
||||||
|
font-size: 13px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:nth-child(even) td {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:hover td {
|
||||||
|
background: var(--nes-dark-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
BUTTONS (NES menu style)
|
||||||
|
============================================ */
|
||||||
|
button,
|
||||||
|
[role="button"],
|
||||||
|
.btn {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
font-weight: 500 !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
transition: all 0.15s ease !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Primary/action buttons should be visible */
|
||||||
|
button[data-variant="primary"],
|
||||||
|
button.primary,
|
||||||
|
[data-action="run"] {
|
||||||
|
background: var(--nes-green) !important;
|
||||||
|
color: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
button[data-variant="primary"]:hover,
|
||||||
|
button.primary:hover,
|
||||||
|
[data-action="run"]:hover {
|
||||||
|
background: var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
INPUTS AND FORMS
|
||||||
|
============================================ */
|
||||||
|
input,
|
||||||
|
textarea,
|
||||||
|
select {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
padding: 8px 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus,
|
||||||
|
textarea:focus,
|
||||||
|
select:focus {
|
||||||
|
border-color: var(--nes-light-blue) !important;
|
||||||
|
outline: none !important;
|
||||||
|
box-shadow: 0 0 0 2px rgba(112, 160, 224, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CODE BLOCKS (in markdown)
|
||||||
|
============================================ */
|
||||||
|
pre, code {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
color: var(--nes-light-green) !important;
|
||||||
|
padding: 2px 6px !important;
|
||||||
|
border-radius: 3px !important;
|
||||||
|
font-size: 0.9em !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
padding: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre code {
|
||||||
|
background: transparent !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
LINKS
|
||||||
|
============================================ */
|
||||||
|
a {
|
||||||
|
color: var(--nes-sky) !important;
|
||||||
|
text-decoration: none !important;
|
||||||
|
transition: color 0.15s ease !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited {
|
||||||
|
color: var(--nes-light-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
SCROLLBARS
|
||||||
|
============================================ */
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
background: var(--nes-dark-gray);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background: var(--nes-gray);
|
||||||
|
border-radius: 6px;
|
||||||
|
border: 2px solid var(--nes-dark-gray);
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-scrollbar-thumb:hover {
|
||||||
|
background: var(--nes-light-gray);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
MISC UI REFINEMENTS
|
||||||
|
============================================ */
|
||||||
|
|
||||||
|
/* Tooltips */
|
||||||
|
[role="tooltip"],
|
||||||
|
[data-state="open"][data-side] {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
font-size: 12px !important;
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dropdown menus */
|
||||||
|
[role="menu"],
|
||||||
|
[role="listbox"] {
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 4px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
[role="menuitem"]:hover,
|
||||||
|
[role="option"]:hover,
|
||||||
|
[role="menuitem"][data-highlighted],
|
||||||
|
[role="option"][data-highlighted] {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
color: var(--nes-white) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Badges and pills */
|
||||||
|
[class*="badge"],
|
||||||
|
[class*="pill"],
|
||||||
|
[class*="tag"] {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
font-size: 11px !important;
|
||||||
|
font-weight: 500 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Focus visible for accessibility */
|
||||||
|
:focus-visible {
|
||||||
|
outline: 2px solid var(--nes-light-blue) !important;
|
||||||
|
outline-offset: 2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CELL OUTPUT AREA
|
||||||
|
============================================ */
|
||||||
|
[data-testid="outputs"],
|
||||||
|
.output-area {
|
||||||
|
background: rgba(26, 26, 64, 0.5) !important;
|
||||||
|
border-top: 2px solid var(--nes-gray) !important;
|
||||||
|
padding: 12px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* DataFrame outputs */
|
||||||
|
[class*="dataframe"] {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Plot/chart containers */
|
||||||
|
[class*="plot"],
|
||||||
|
[class*="chart"],
|
||||||
|
svg {
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CRT SCANLINE OVERLAY
|
||||||
|
============================================ */
|
||||||
|
body::after {
|
||||||
|
content: "";
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 9998;
|
||||||
|
background: repeating-linear-gradient(
|
||||||
|
0deg,
|
||||||
|
transparent,
|
||||||
|
transparent 2px,
|
||||||
|
rgba(0, 0, 0, 0.06) 2px,
|
||||||
|
rgba(0, 0, 0, 0.06) 4px
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HOME PAGE - "CREATE NEW NOTEBOOK" CARD
|
||||||
|
============================================ */
|
||||||
|
/* The "Create a new notebook" link card */
|
||||||
|
a[rel="noreferrer"][target="_blank"] {
|
||||||
|
background: linear-gradient(135deg, #1a1a40 0%, #2840a0 100%) !important;
|
||||||
|
border: 3px solid var(--nes-mid-blue) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow:
|
||||||
|
4px 4px 0 var(--nes-black),
|
||||||
|
inset 0 0 20px rgba(64, 96, 192, 0.2) !important;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[rel="noreferrer"][target="_blank"]::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -100%;
|
||||||
|
width: 50%;
|
||||||
|
height: 100%;
|
||||||
|
background: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
transparent,
|
||||||
|
rgba(144, 192, 240, 0.08),
|
||||||
|
transparent
|
||||||
|
);
|
||||||
|
animation: cartridge-shine 4s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes cartridge-shine {
|
||||||
|
0% { left: -50%; }
|
||||||
|
50% { left: 100%; }
|
||||||
|
100% { left: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
a[rel="noreferrer"][target="_blank"]:hover {
|
||||||
|
border-color: var(--nes-light-green) !important;
|
||||||
|
box-shadow:
|
||||||
|
4px 4px 0 var(--nes-black),
|
||||||
|
0 0 15px rgba(128, 208, 128, 0.3),
|
||||||
|
inset 0 0 20px rgba(128, 208, 128, 0.1) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[rel="noreferrer"][target="_blank"] h2 {
|
||||||
|
font-family: var(--marimo-heading-font) !important;
|
||||||
|
font-size: 12px !important;
|
||||||
|
color: var(--nes-light-green) !important;
|
||||||
|
text-transform: uppercase !important;
|
||||||
|
letter-spacing: 2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HOME PAGE - SECTION HEADERS
|
||||||
|
============================================ */
|
||||||
|
/* "Running notebooks" / "Recent notebooks" / "Workspace" headers */
|
||||||
|
h2.text-xl {
|
||||||
|
font-family: var(--marimo-heading-font) !important;
|
||||||
|
font-size: 11px !important;
|
||||||
|
text-transform: uppercase !important;
|
||||||
|
letter-spacing: 2px !important;
|
||||||
|
color: var(--nes-yellow) !important;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
border-bottom: 2px solid var(--nes-gray);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HOME PAGE - FILE LISTS (notebook lists)
|
||||||
|
============================================ */
|
||||||
|
/* The bordered list containers */
|
||||||
|
.divide-y.border.rounded {
|
||||||
|
border: 3px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow: 4px 4px 0 var(--nes-black) !important;
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Individual file rows */
|
||||||
|
.divide-y.border > a,
|
||||||
|
.divide-y.border > div > a {
|
||||||
|
border-color: var(--nes-dark-gray) !important;
|
||||||
|
transition: all 0.1s ease !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divide-y.border > a:hover,
|
||||||
|
.divide-y.border > div > a:hover {
|
||||||
|
background: rgba(40, 64, 160, 0.3) !important;
|
||||||
|
border-left: 3px solid var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* File names in lists */
|
||||||
|
.divide-y.border a .flex-1 span {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HOME PAGE - WORKSPACE FILE TREE
|
||||||
|
============================================ */
|
||||||
|
/* Tree row hover */
|
||||||
|
[class*="cursor-pointer"][class*="whitespace-nowrap"]:hover {
|
||||||
|
background: rgba(40, 64, 160, 0.25) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Directory names - slightly brighter */
|
||||||
|
[class*="cursor-pointer"][class*="whitespace-nowrap"] span {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
font-size: 13px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
PIXEL-PERFECT BORDERS (NES cartridge feel)
|
||||||
|
============================================ */
|
||||||
|
/* Override all rounded corners for that crisp 8-bit look */
|
||||||
|
.rounded-lg,
|
||||||
|
.rounded-md {
|
||||||
|
border-radius: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Keep small UI elements slightly rounded */
|
||||||
|
.rounded-sm,
|
||||||
|
.rounded {
|
||||||
|
border-radius: 2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
TOP BAR / ACTION BUTTONS
|
||||||
|
============================================ */
|
||||||
|
/* Settings and shutdown buttons in top right */
|
||||||
|
.absolute.top-3.right-5 button {
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
box-shadow: 2px 2px 0 var(--nes-black) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absolute.top-3.right-5 button:hover {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
border-color: var(--nes-light-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absolute.top-3.right-5 button:active {
|
||||||
|
box-shadow: none !important;
|
||||||
|
transform: translate(2px, 2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
SEARCH INPUT - PIXEL STYLE
|
||||||
|
============================================ */
|
||||||
|
input#search {
|
||||||
|
border: 3px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
box-shadow: inset 2px 2px 0 rgba(0, 0, 0, 0.3) !important;
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
input#search:focus {
|
||||||
|
border-color: var(--nes-light-blue) !important;
|
||||||
|
box-shadow:
|
||||||
|
inset 2px 2px 0 rgba(0, 0, 0, 0.3),
|
||||||
|
0 0 8px rgba(112, 160, 224, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
POWER-ON GLOW (subtle animation on page)
|
||||||
|
============================================ */
|
||||||
|
@keyframes power-on {
|
||||||
|
0% { opacity: 0; filter: brightness(2) saturate(0); }
|
||||||
|
30% { opacity: 1; filter: brightness(1.5) saturate(0.5); }
|
||||||
|
100% { opacity: 1; filter: brightness(1) saturate(1); }
|
||||||
|
}
|
||||||
|
|
||||||
|
#root {
|
||||||
|
animation: power-on 0.8s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
BLINKING CURSOR / READY INDICATOR
|
||||||
|
============================================ */
|
||||||
|
@keyframes blink-cursor {
|
||||||
|
0%, 100% { opacity: 1; }
|
||||||
|
50% { opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-cursor {
|
||||||
|
animation: blink-cursor 1s step-end infinite !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
NES-STYLE BUTTON PRESS EFFECT
|
||||||
|
============================================ */
|
||||||
|
button:active,
|
||||||
|
[role="button"]:active {
|
||||||
|
transform: translate(1px, 1px) !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
4
notebooks/home-page-DUMF8ZY4.js
Normal file
4
notebooks/home-page-DUMF8ZY4.js
Normal file
File diff suppressed because one or more lines are too long
@@ -442,3 +442,222 @@ a:visited {
|
|||||||
svg {
|
svg {
|
||||||
background: transparent !important;
|
background: transparent !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
CRT SCANLINE OVERLAY
|
||||||
|
============================================ */
|
||||||
|
body::after {
|
||||||
|
content: "";
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 9998;
|
||||||
|
background: repeating-linear-gradient(
|
||||||
|
0deg,
|
||||||
|
transparent,
|
||||||
|
transparent 2px,
|
||||||
|
rgba(0, 0, 0, 0.06) 2px,
|
||||||
|
rgba(0, 0, 0, 0.06) 4px
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HOME PAGE - "CREATE NEW NOTEBOOK" CARD
|
||||||
|
============================================ */
|
||||||
|
/* The "Create a new notebook" link card */
|
||||||
|
a[rel="noreferrer"][target="_blank"] {
|
||||||
|
background: linear-gradient(135deg, #1a1a40 0%, #2840a0 100%) !important;
|
||||||
|
border: 3px solid var(--nes-mid-blue) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow:
|
||||||
|
4px 4px 0 var(--nes-black),
|
||||||
|
inset 0 0 20px rgba(64, 96, 192, 0.2) !important;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[rel="noreferrer"][target="_blank"]::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -100%;
|
||||||
|
width: 50%;
|
||||||
|
height: 100%;
|
||||||
|
background: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
transparent,
|
||||||
|
rgba(144, 192, 240, 0.08),
|
||||||
|
transparent
|
||||||
|
);
|
||||||
|
animation: cartridge-shine 4s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes cartridge-shine {
|
||||||
|
0% { left: -50%; }
|
||||||
|
50% { left: 100%; }
|
||||||
|
100% { left: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
a[rel="noreferrer"][target="_blank"]:hover {
|
||||||
|
border-color: var(--nes-light-green) !important;
|
||||||
|
box-shadow:
|
||||||
|
4px 4px 0 var(--nes-black),
|
||||||
|
0 0 15px rgba(128, 208, 128, 0.3),
|
||||||
|
inset 0 0 20px rgba(128, 208, 128, 0.1) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a[rel="noreferrer"][target="_blank"] h2 {
|
||||||
|
font-family: var(--marimo-heading-font) !important;
|
||||||
|
font-size: 12px !important;
|
||||||
|
color: var(--nes-light-green) !important;
|
||||||
|
text-transform: uppercase !important;
|
||||||
|
letter-spacing: 2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HOME PAGE - SECTION HEADERS
|
||||||
|
============================================ */
|
||||||
|
/* "Running notebooks" / "Recent notebooks" / "Workspace" headers */
|
||||||
|
h2.text-xl {
|
||||||
|
font-family: var(--marimo-heading-font) !important;
|
||||||
|
font-size: 11px !important;
|
||||||
|
text-transform: uppercase !important;
|
||||||
|
letter-spacing: 2px !important;
|
||||||
|
color: var(--nes-yellow) !important;
|
||||||
|
padding-bottom: 6px;
|
||||||
|
border-bottom: 2px solid var(--nes-gray);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HOME PAGE - FILE LISTS (notebook lists)
|
||||||
|
============================================ */
|
||||||
|
/* The bordered list containers */
|
||||||
|
.divide-y.border.rounded {
|
||||||
|
border: 3px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
box-shadow: 4px 4px 0 var(--nes-black) !important;
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Individual file rows */
|
||||||
|
.divide-y.border > a,
|
||||||
|
.divide-y.border > div > a {
|
||||||
|
border-color: var(--nes-dark-gray) !important;
|
||||||
|
transition: all 0.1s ease !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.divide-y.border > a:hover,
|
||||||
|
.divide-y.border > div > a:hover {
|
||||||
|
background: rgba(40, 64, 160, 0.3) !important;
|
||||||
|
border-left: 3px solid var(--nes-light-green) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* File names in lists */
|
||||||
|
.divide-y.border a .flex-1 span {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
HOME PAGE - WORKSPACE FILE TREE
|
||||||
|
============================================ */
|
||||||
|
/* Tree row hover */
|
||||||
|
[class*="cursor-pointer"][class*="whitespace-nowrap"]:hover {
|
||||||
|
background: rgba(40, 64, 160, 0.25) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Directory names - slightly brighter */
|
||||||
|
[class*="cursor-pointer"][class*="whitespace-nowrap"] span {
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
font-size: 13px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
PIXEL-PERFECT BORDERS (NES cartridge feel)
|
||||||
|
============================================ */
|
||||||
|
/* Override all rounded corners for that crisp 8-bit look */
|
||||||
|
.rounded-lg,
|
||||||
|
.rounded-md {
|
||||||
|
border-radius: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Keep small UI elements slightly rounded */
|
||||||
|
.rounded-sm,
|
||||||
|
.rounded {
|
||||||
|
border-radius: 2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
TOP BAR / ACTION BUTTONS
|
||||||
|
============================================ */
|
||||||
|
/* Settings and shutdown buttons in top right */
|
||||||
|
.absolute.top-3.right-5 button {
|
||||||
|
border: 2px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
background: var(--nes-dark-gray) !important;
|
||||||
|
box-shadow: 2px 2px 0 var(--nes-black) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absolute.top-3.right-5 button:hover {
|
||||||
|
background: var(--nes-blue) !important;
|
||||||
|
border-color: var(--nes-light-blue) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absolute.top-3.right-5 button:active {
|
||||||
|
box-shadow: none !important;
|
||||||
|
transform: translate(2px, 2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
SEARCH INPUT - PIXEL STYLE
|
||||||
|
============================================ */
|
||||||
|
input#search {
|
||||||
|
border: 3px solid var(--nes-gray) !important;
|
||||||
|
border-radius: 0 !important;
|
||||||
|
background: var(--nes-black) !important;
|
||||||
|
box-shadow: inset 2px 2px 0 rgba(0, 0, 0, 0.3) !important;
|
||||||
|
font-family: var(--marimo-monospace-font) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
input#search:focus {
|
||||||
|
border-color: var(--nes-light-blue) !important;
|
||||||
|
box-shadow:
|
||||||
|
inset 2px 2px 0 rgba(0, 0, 0, 0.3),
|
||||||
|
0 0 8px rgba(112, 160, 224, 0.3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
POWER-ON GLOW (subtle animation on page)
|
||||||
|
============================================ */
|
||||||
|
@keyframes power-on {
|
||||||
|
0% { opacity: 0; filter: brightness(2) saturate(0); }
|
||||||
|
30% { opacity: 1; filter: brightness(1.5) saturate(0.5); }
|
||||||
|
100% { opacity: 1; filter: brightness(1) saturate(1); }
|
||||||
|
}
|
||||||
|
|
||||||
|
#root {
|
||||||
|
animation: power-on 0.8s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
BLINKING CURSOR / READY INDICATOR
|
||||||
|
============================================ */
|
||||||
|
@keyframes blink-cursor {
|
||||||
|
0%, 100% { opacity: 1; }
|
||||||
|
50% { opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-cursor {
|
||||||
|
animation: blink-cursor 1s step-end infinite !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================================
|
||||||
|
NES-STYLE BUTTON PRESS EFFECT
|
||||||
|
============================================ */
|
||||||
|
button:active,
|
||||||
|
[role="button"]:active {
|
||||||
|
transform: translate(1px, 1px) !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,213 +2,211 @@
|
|||||||
|
|
||||||
import marimo
|
import marimo
|
||||||
|
|
||||||
__generated_with = "0.9.14"
|
__generated_with = "0.19.9"
|
||||||
app = marimo.App(
|
app = marimo.App()
|
||||||
layout_file="layouts/sample.slides.json")
|
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md(r"""
|
||||||
r"""
|
# Sample Markdown Block
|
||||||
# Sample Markdown Block
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Header 1
|
# Header 1
|
||||||
## Header 2
|
## Header 2
|
||||||
### Header 3
|
### Header 3
|
||||||
#### Header 4
|
#### Header 4
|
||||||
##### Header 5
|
##### Header 5
|
||||||
###### Header 6
|
###### Header 6
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Bold** | *Italic:* | ~~Strikethrough~~ | `Inline Code`
|
**Bold** | *Italic:* | ~~Strikethrough~~ | `Inline Code`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
> "The only way to do great work is to love what you do."
|
> "The only way to do great work is to love what you do."
|
||||||
> — *Steve Jobs*
|
> — *Steve Jobs*
|
||||||
"""
|
""")
|
||||||
)
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md(r"""
|
||||||
r"""
|
---
|
||||||
---
|
|
||||||
|
|
||||||
1. Item One
|
1. Item One
|
||||||
2. Item Two
|
2. Item Two
|
||||||
3. Item Three
|
3. Item Three
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- Bullet One
|
- Bullet One
|
||||||
- Bullet Two
|
- Bullet Two
|
||||||
- Bullet Three
|
- Bullet Three
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
1. Main Item
|
1. Main Item
|
||||||
- Sub Item
|
- Sub Item
|
||||||
- Sub-sub Item
|
- Sub-sub Item
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
[Marimo](https://marimo.io/)
|
[Marimo](https://marimo.io/)
|
||||||
"""
|
""")
|
||||||
)
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md("""
|
||||||
"""
|
| Syntax | Description | Example |
|
||||||
| Syntax | Description | Example |
|
|-------------|-------------|-------------------|
|
||||||
|-------------|-------------|-------------------|
|
| **Header** | Row Title | Content Here |
|
||||||
| **Header** | Row Title | Content Here |
|
| **Row 1** | First Cell | `Some code` |
|
||||||
| **Row 1** | First Cell | `Some code` |
|
| **Row 2** | Second Cell | *Italicized text* |
|
||||||
| **Row 2** | Second Cell | *Italicized text* |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def greet(name: str) -> str:
|
def greet(name: str) -> str:
|
||||||
\"""Return a greeting message.\"""
|
"\""Return a greeting message."\""
|
||||||
return f"Hello, {name}!"
|
return f"Hello, {name}!"
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Here is a sentence with a footnote reference[^1].
|
Here is a sentence with a footnote reference[^1].
|
||||||
|
|
||||||
[^1]: This is the footnote content.
|
[^1]: This is the footnote content.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
- Inline: $E = mc^2$
|
- Inline: $E = mc^2$
|
||||||
- Block:
|
- Block:
|
||||||
|
|
||||||
$$
|
$$
|
||||||
f(x) = \\int_{-\\infty}^{\\infty} e^{-x^2} \\, dx
|
f(x) = \int_{-\infty}^{\infty} e^{-x^2} \, dx
|
||||||
$$
|
$$
|
||||||
"""
|
""")
|
||||||
)
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(r"""# Incomplete Reference of Different Args' Use""")
|
mo.md(r"""
|
||||||
|
# Incomplete Reference of Different Args' Use
|
||||||
|
""")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md(r"""
|
||||||
r"""
|
## `bg-muted` & `text-muted-foreground`
|
||||||
## `bg-muted` & `text-muted-foreground`
|
|
||||||
|
|
||||||
- hover on `fullscreen` and `cell action` buttons at the right of each cell
|
- hover on `fullscreen` and `cell action` buttons at the right of each cell
|
||||||
- The banner of collapsed cells
|
- The banner of collapsed cells
|
||||||
"""
|
""")
|
||||||
)
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md(r"""
|
||||||
r"""
|
## `bg-popover` & `text-popover-foreground`
|
||||||
## `bg-popover` & `text-popover-foreground`
|
|
||||||
|
|
||||||
- `Snippets` side panel
|
- `Snippets` side panel
|
||||||
- `Menu` items: `Share`, `Download`, `Helper panel`, `Present as`
|
- `Menu` items: `Share`, `Download`, `Helper panel`, `Present as`
|
||||||
- The popover snippets when you enter `:` in markdown cell
|
- The popover snippets when you enter `:` in markdown cell
|
||||||
- The popover snippets when you enter code in python cell
|
- The popover snippets when you enter code in python cell
|
||||||
"""
|
""")
|
||||||
)
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md(r"""
|
||||||
r"""
|
## `bg-card` & `text-card-foreground`
|
||||||
## `bg-card` & `text-card-foreground`
|
|
||||||
|
|
||||||
- even rows of markdown table
|
- even rows of markdown table
|
||||||
|
|
||||||
| Syntax | Description | Example |
|
| Syntax | Description | Example |
|
||||||
|-------------|-------------|-------------------|
|
|-------------|-------------|-------------------|
|
||||||
| **Header** | Row Title | Content Here |
|
| **Header** | Row Title | Content Here |
|
||||||
| **Row 1** | First Cell | `Some code` |
|
| **Row 1** | First Cell | `Some code` |
|
||||||
| **Row 2** | Second Cell | *Italicized text* |
|
| **Row 2** | Second Cell | *Italicized text* |
|
||||||
"""
|
""")
|
||||||
)
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md(r"""
|
||||||
r"""
|
## `bg-primary & text-primary-foreground`
|
||||||
## `bg-primary & text-primary-foreground`
|
|
||||||
|
|
||||||
- `machine stats` on the right bottom of notebook
|
- `machine stats` on the right bottom of notebook
|
||||||
- the header of `Documentation` panel
|
- the header of `Documentation` panel
|
||||||
"""
|
""")
|
||||||
)
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md("""## `bg-secondary & text-secondary-foreground`""")
|
mo.md("""
|
||||||
|
## `bg-secondary & text-secondary-foreground`
|
||||||
|
""")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md(r"""
|
||||||
r"""
|
## `bg-accent` & `text-accent-foreground`
|
||||||
## `bg-accent` & `text-accent-foreground`
|
|
||||||
|
|
||||||
- Floating Outline on the right center of the notebook
|
- Floating Outline on the right center of the notebook
|
||||||
- Side panels on the left of the notebook
|
- Side panels on the left of the notebook
|
||||||
"""
|
""")
|
||||||
)
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md(r"""
|
||||||
r"""
|
## `destructive` & `destructive-foreground`
|
||||||
## `destructive` & `destructive-foreground`
|
|
||||||
|
|
||||||
- delete button in each cell
|
- delete button in each cell
|
||||||
"""
|
""")
|
||||||
)
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md(r"""
|
||||||
r"""
|
## other args
|
||||||
## other args
|
|
||||||
|
|
||||||
- `border`: borders of cells, buttons, etc.
|
- `border`: borders of cells, buttons, etc.
|
||||||
- `input`: markdown table separator line between header and content
|
- `input`: markdown table separator line between header and content
|
||||||
- ...
|
- ...
|
||||||
"""
|
""")
|
||||||
)
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(r"""# Marimo UI Components""")
|
mo.md(r"""
|
||||||
|
# Marimo UI Components
|
||||||
|
""")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.hstack(
|
mo.hstack(
|
||||||
[
|
[
|
||||||
mo.ui.button(
|
mo.ui.button(
|
||||||
@@ -235,63 +233,73 @@ def __(mo) -> None:
|
|||||||
],
|
],
|
||||||
justify="space-around",
|
justify="space-around",
|
||||||
)
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.chat(model="")
|
mo.ui.chat(model="")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.checkbox()
|
mo.ui.checkbox()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.code_editor()
|
mo.ui.code_editor()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(data, mo) -> None:
|
def _(data, mo):
|
||||||
mo.ui.dataframe(data.cars())
|
mo.ui.dataframe(data.cars())
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(data, mo) -> None:
|
def _(data, mo):
|
||||||
mo.ui.data_explorer(data.cars())
|
mo.ui.data_explorer(data.cars())
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.date(
|
mo.ui.date(
|
||||||
value="2022-06-01",
|
value="2022-06-01",
|
||||||
start="2022-01-01",
|
start="2022-01-01",
|
||||||
stop="2022-12-31",
|
stop="2022-12-31",
|
||||||
)
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.dropdown(
|
mo.ui.dropdown(
|
||||||
options={"one": 1, "two": 2, "three": 3},
|
options={"one": 1, "two": 2, "three": 3},
|
||||||
value="one",
|
value="one",
|
||||||
label="pick a number",
|
label="pick a number",
|
||||||
)
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.file(kind="area")
|
mo.ui.file(kind="area")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.file_browser()
|
mo.ui.file_browser()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.md(
|
mo.md(
|
||||||
"""
|
"""
|
||||||
**Your form.**
|
**Your form.**
|
||||||
@@ -304,61 +312,70 @@ def __(mo) -> None:
|
|||||||
name=mo.ui.text(label="name"),
|
name=mo.ui.text(label="name"),
|
||||||
date=mo.ui.date(label="date"),
|
date=mo.ui.date(label="date"),
|
||||||
).form(show_clear_button=True, bordered=True)
|
).form(show_clear_button=True, bordered=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.microphone()
|
mo.ui.microphone()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.multiselect(options=["a", "b", "c"], label="choose some options")
|
mo.ui.multiselect(options=["a", "b", "c"], label="choose some options")
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.number(start=1, stop=10, step=2)
|
mo.ui.number(start=1, stop=10, step=2)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.radio(
|
mo.ui.radio(
|
||||||
options={"one": 1, "two": 2, "three": 3},
|
options={"one": 1, "two": 2, "three": 3},
|
||||||
value="one",
|
value="one",
|
||||||
label="pick a number",
|
label="pick a number",
|
||||||
)
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.range_slider(start=1, stop=10, step=2, value=[2, 6], show_value=True)
|
mo.ui.range_slider(start=1, stop=10, step=2, value=[2, 6], show_value=True)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.refresh(
|
mo.ui.refresh(
|
||||||
options=["1m", "5m 30s", "10m"],
|
options=["1m", "5m 30s", "10m"],
|
||||||
default_interval="10m",
|
default_interval="10m",
|
||||||
)
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.switch()
|
mo.ui.switch()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(data, mo) -> None:
|
def _(data, mo):
|
||||||
mo.ui.table(
|
mo.ui.table(
|
||||||
data.cars(),
|
data.cars(),
|
||||||
show_column_summaries=True,
|
show_column_summaries=True,
|
||||||
selection="multi",
|
selection="multi",
|
||||||
)
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo):
|
def _(mo):
|
||||||
tab1 = mo.vstack(
|
tab1 = mo.vstack(
|
||||||
[
|
[
|
||||||
mo.ui.slider(1, 10),
|
mo.ui.slider(1, 10),
|
||||||
@@ -371,11 +388,11 @@ def __(mo):
|
|||||||
|
|
||||||
tabs = mo.ui.tabs({"Heading 1": tab1, "Heading 2": tab2})
|
tabs = mo.ui.tabs({"Heading 1": tab1, "Heading 2": tab2})
|
||||||
tabs
|
tabs
|
||||||
return tab1, tab2, tabs
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.hstack(
|
mo.hstack(
|
||||||
[
|
[
|
||||||
mo.ui.text(value="Hello, Text", kind="text"),
|
mo.ui.text(value="Hello, Text", kind="text"),
|
||||||
@@ -385,15 +402,17 @@ def __(mo) -> None:
|
|||||||
],
|
],
|
||||||
justify="space-around",
|
justify="space-around",
|
||||||
)
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.ui.text_area()
|
mo.ui.text_area()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.accordion(
|
mo.accordion(
|
||||||
{
|
{
|
||||||
"Door 1": mo.md("Nothing!"),
|
"Door 1": mo.md("Nothing!"),
|
||||||
@@ -403,10 +422,11 @@ def __(mo) -> None:
|
|||||||
),
|
),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.carousel(
|
mo.carousel(
|
||||||
[
|
[
|
||||||
mo.md("# Introduction"),
|
mo.md("# Introduction"),
|
||||||
@@ -416,10 +436,11 @@ def __(mo) -> None:
|
|||||||
mo.md("## Questions?"),
|
mo.md("## Questions?"),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __(mo) -> None:
|
def _(mo):
|
||||||
mo.vstack(
|
mo.vstack(
|
||||||
[
|
[
|
||||||
mo.callout("This is a info callout", kind="info"),
|
mo.callout("This is a info callout", kind="info"),
|
||||||
@@ -429,17 +450,18 @@ def __(mo) -> None:
|
|||||||
mo.callout("This is a success callout", kind="success"),
|
mo.callout("This is a success callout", kind="success"),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __():
|
def _():
|
||||||
from vega_datasets import data
|
from vega_datasets import data
|
||||||
|
|
||||||
return (data,)
|
return (data,)
|
||||||
|
|
||||||
|
|
||||||
@app.cell(hide_code=True)
|
@app.cell(hide_code=True)
|
||||||
def __():
|
def _():
|
||||||
import marimo as mo
|
import marimo as mo
|
||||||
|
|
||||||
return (mo,)
|
return (mo,)
|
||||||
|
|||||||
@@ -13,3 +13,12 @@ http:
|
|||||||
rateLimit:
|
rateLimit:
|
||||||
average: 100
|
average: 100
|
||||||
burst: 50
|
burst: 50
|
||||||
|
|
||||||
|
# NES theme CSS injection
|
||||||
|
inject-nes-theme:
|
||||||
|
plugin:
|
||||||
|
rewrite-body:
|
||||||
|
lastModified: true
|
||||||
|
rewrites:
|
||||||
|
- regex: "</head>"
|
||||||
|
replacement: '<link rel="stylesheet" type="text/css" href="http://home.fhirworx.io/nes-theme.css"></head>'
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ http:
|
|||||||
service: trino
|
service: trino
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- web
|
- web
|
||||||
|
middlewares:
|
||||||
|
- inject-nes-theme
|
||||||
|
|
||||||
# RustFS S3 API
|
# RustFS S3 API
|
||||||
rustfs-api:
|
rustfs-api:
|
||||||
@@ -65,6 +67,8 @@ http:
|
|||||||
service: rustfs-console
|
service: rustfs-console
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- web
|
- web
|
||||||
|
middlewares:
|
||||||
|
- inject-nes-theme
|
||||||
|
|
||||||
# Grafana
|
# Grafana
|
||||||
grafana:
|
grafana:
|
||||||
@@ -72,6 +76,8 @@ http:
|
|||||||
service: grafana
|
service: grafana
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- web
|
- web
|
||||||
|
middlewares:
|
||||||
|
- inject-nes-theme
|
||||||
|
|
||||||
# Prometheus
|
# Prometheus
|
||||||
prometheus:
|
prometheus:
|
||||||
@@ -79,6 +85,8 @@ http:
|
|||||||
service: prometheus
|
service: prometheus
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- web
|
- web
|
||||||
|
middlewares:
|
||||||
|
- inject-nes-theme
|
||||||
|
|
||||||
# Jaeger
|
# Jaeger
|
||||||
jaeger:
|
jaeger:
|
||||||
@@ -86,6 +94,8 @@ http:
|
|||||||
service: jaeger
|
service: jaeger
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- web
|
- web
|
||||||
|
middlewares:
|
||||||
|
- inject-nes-theme
|
||||||
|
|
||||||
# Loki
|
# Loki
|
||||||
loki:
|
loki:
|
||||||
@@ -100,6 +110,8 @@ http:
|
|||||||
service: api@internal
|
service: api@internal
|
||||||
entryPoints:
|
entryPoints:
|
||||||
- web
|
- web
|
||||||
|
middlewares:
|
||||||
|
- inject-nes-theme
|
||||||
|
|
||||||
# Polaris Catalog
|
# Polaris Catalog
|
||||||
polaris:
|
polaris:
|
||||||
|
|||||||
Submodule traefik/plugins/src/github.com/packruler/rewrite-body added at a37d56008e
@@ -26,6 +26,11 @@ log:
|
|||||||
|
|
||||||
accessLog: {}
|
accessLog: {}
|
||||||
|
|
||||||
|
experimental:
|
||||||
|
localPlugins:
|
||||||
|
rewrite-body:
|
||||||
|
moduleName: "github.com/packruler/rewrite-body"
|
||||||
|
|
||||||
# Enable OpenTelemetry tracing
|
# Enable OpenTelemetry tracing
|
||||||
tracing:
|
tracing:
|
||||||
otlp:
|
otlp:
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
172.19.0.15:+33626
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
172.19.0.15:+89300
|
|
||||||
@@ -1 +1 @@
|
|||||||
{"windows":[{"type":"pane","tabs":[{"type":"library","title":"Claims Processing","timeUnselected":1770589933,"data":{"icon":"collection"}},{"type":"reader","title":"Fee Schedule Administration and Coding Requirements","data":{"itemID":3656,"icon":"attachmentPDF","secondViewState":null},"selected":true}]}]}
|
{"windows":[{"type":"pane","tabs":[{"type":"library","title":"Healthcare Data Platform","timeUnselected":1770590371,"data":{"icon":"collection"},"selected":true}]}]}
|
||||||
Reference in New Issue
Block a user