sammoftah's picture
Deploy One-File Algorithms
154b005 verified
/* HF-Master Shared Styles */
/* CSS Variables for theming */
:root {
--primary-color: #ff6b6b;
--secondary-color: #4ecdc4;
--accent-color: #ffe66d;
--background-dark: #0f172a;
--background-light: #111827;
--surface-elevated: rgba(17, 24, 39, 0.82);
--surface-soft: rgba(255, 255, 255, 0.05);
--text-primary: #f8fafc;
--text-secondary: #cbd5e1;
--success-color: #22c55e;
--warning-color: #f59e0b;
--error-color: #ef4444;
--border-radius: 16px;
--box-shadow: 0 20px 45px rgba(0, 0, 0, 0.28);
--border-color: rgba(255, 255, 255, 0.12);
}
/* Global Styles */
html {
scroll-behavior: smooth;
}
body {
font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background:
radial-gradient(circle at top left, rgba(78, 205, 196, 0.18), transparent 30%),
radial-gradient(circle at top right, rgba(255, 107, 107, 0.16), transparent 32%),
linear-gradient(180deg, #0f172a 0%, #111827 100%);
color: var(--text-primary);
}
.main {
background: transparent;
}
/* Streamlit shell polish */
.block-container {
padding-top: 2rem;
padding-bottom: 2rem;
max-width: 1200px;
}
div[data-testid="stHeader"] {
background: transparent;
}
div[data-testid="stSidebar"] {
background: linear-gradient(180deg, rgba(15, 23, 42, 0.96) 0%, rgba(17, 24, 39, 0.96) 100%);
border-right: 1px solid var(--border-color);
}
div[data-testid="stToolbar"] {
background: transparent;
}
/* Hero / surface helpers */
.hero {
background:
linear-gradient(135deg, rgba(78, 205, 196, 0.12), rgba(255, 107, 107, 0.14)),
rgba(255, 255, 255, 0.04);
border: 1px solid var(--border-color);
border-radius: 24px;
padding: 2rem 1.5rem;
margin: 0 0 1.5rem 0;
box-shadow: var(--box-shadow);
text-align: center;
backdrop-filter: blur(14px);
}
.hero h1,
.hero h2,
.hero p {
margin: 0;
}
.hero h1 {
font-size: clamp(2rem, 4vw, 3.25rem);
letter-spacing: -0.03em;
margin-bottom: 0.4rem;
}
.hero p {
color: var(--text-secondary);
font-size: 1.05rem;
line-height: 1.6;
}
.glass-card,
.project-card,
.info-card,
.metric-card {
background: var(--surface-elevated);
border: 1px solid var(--border-color);
border-radius: var(--border-radius);
box-shadow: var(--box-shadow);
backdrop-filter: blur(14px);
}
/* Card Styles */
.project-card {
padding: 1.5rem;
margin: 1rem 0;
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.project-card:hover {
transform: translateY(-2px);
box-shadow: 0 28px 52px rgba(0, 0, 0, 0.35);
}
/* Badge Styles */
.badge {
display: inline-block;
padding: 0.25rem 0.75rem;
border-radius: 9999px;
font-size: 0.75rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.badge-success {
background-color: rgba(46, 204, 113, 0.2);
color: var(--success-color);
border: 1px solid var(--success-color);
}
.badge-warning {
background-color: rgba(243, 156, 18, 0.2);
color: var(--warning-color);
border: 1px solid var(--warning-color);
}
.badge-error {
background-color: rgba(231, 76, 60, 0.2);
color: var(--error-color);
border: 1px solid var(--error-color);
}
.badge-info {
background-color: rgba(78, 205, 196, 0.2);
color: var(--secondary-color);
border: 1px solid var(--secondary-color);
}
/* Tech Stack Tags */
.tech-tag {
display: inline-block;
background-color: rgba(255, 107, 107, 0.15);
color: var(--primary-color);
padding: 0.25rem 0.5rem;
border-radius: 6px;
font-size: 0.75rem;
font-family: 'Monaco', 'Menlo', monospace;
margin: 0.125rem;
}
/* Markdown Content Styles */
.markdown-content {
line-height: 1.7;
}
.markdown-content h1 {
color: var(--primary-color);
border-bottom: 2px solid var(--primary-color);
padding-bottom: 0.5rem;
margin-top: 1.5rem;
}
.markdown-content h2 {
color: var(--secondary-color);
margin-top: 1.25rem;
}
.markdown-content h3 {
color: var(--accent-color);
}
.markdown-content code {
background-color: rgba(0, 0, 0, 0.35);
padding: 0.125rem 0.375rem;
border-radius: 4px;
font-family: 'Monaco', 'Menlo', monospace;
font-size: 0.875em;
}
.markdown-content pre {
background-color: rgba(2, 6, 23, 0.8);
padding: 1rem;
border-radius: 8px;
overflow-x: auto;
border: 1px solid var(--border-color);
}
.markdown-content pre code {
background: none;
padding: 0;
}
/* Table Styles */
.data-table {
width: 100%;
border-collapse: collapse;
margin: 1rem 0;
}
.data-table th {
background-color: var(--primary-color);
color: white;
padding: 0.75rem;
text-align: left;
font-weight: 600;
}
.data-table td {
padding: 0.75rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
.data-table tr:hover {
background-color: rgba(255, 255, 255, 0.05);
}
/* Animation Classes */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.fade-in {
animation: fadeIn 0.3s ease-out;
}
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.5;
}
}
.pulse {
animation: pulse 2s ease-in-out infinite;
}
/* Loading Spinner */
.spinner {
display: inline-block;
width: 2rem;
height: 2rem;
border: 3px solid rgba(255, 255, 255, 0.1);
border-top-color: var(--primary-color);
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
/* Streamlit input polish */
div[data-baseweb="input"],
div[data-baseweb="textarea"],
div[data-baseweb="select"] {
background: rgba(255, 255, 255, 0.03);
}
textarea,
input,
select {
color: var(--text-primary) !important;
}
div[data-testid="stTextInput"] input,
div[data-testid="stTextArea"] textarea,
div[data-testid="stSelectbox"] div {
border-radius: 14px !important;
border-color: var(--border-color) !important;
}
div[data-testid="stButton"] > button {
border-radius: 999px;
border: 1px solid rgba(255, 255, 255, 0.16);
background: linear-gradient(135deg, var(--primary-color), #fb7185);
color: white;
font-weight: 700;
padding: 0.7rem 1.15rem;
box-shadow: 0 14px 30px rgba(255, 107, 107, 0.22);
transition: transform 0.18s ease, box-shadow 0.18s ease;
}
div[data-testid="stButton"] > button:hover {
transform: translateY(-1px);
box-shadow: 0 18px 34px rgba(255, 107, 107, 0.28);
}
div[data-testid="stMetric"] {
background: rgba(255, 255, 255, 0.04);
border: 1px solid var(--border-color);
border-radius: 18px;
padding: 0.8rem 1rem;
box-shadow: var(--box-shadow);
}
/* Small utility wrappers for markdown HTML blocks */
.pill-row {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
justify-content: center;
}
.pill {
display: inline-flex;
align-items: center;
gap: 0.35rem;
padding: 0.45rem 0.8rem;
border-radius: 999px;
background: rgba(255, 255, 255, 0.07);
border: 1px solid var(--border-color);
color: var(--text-primary);
font-size: 0.85rem;
}
/* Metric Cards */
.metric-card {
background: linear-gradient(135deg, var(--background-light) 0%, rgba(78, 205, 196, 0.1) 100%);
border-radius: var(--border-radius);
padding: 1.5rem;
text-align: center;
border: 1px solid rgba(78, 205, 196, 0.2);
}
.metric-card .value {
font-size: 2.5rem;
font-weight: 700;
color: var(--secondary-color);
}
.metric-card .label {
font-size: 0.875rem;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.1em;
}
/* Gradio Overrides */
.gradio-container {
max-width: 1200px !important;
margin: 0 auto !important;
}
/* Tab Styles */
.tab-nav button {
background-color: transparent !important;
border: none !important;
border-bottom: 3px solid transparent !important;
transition: all 0.2s ease;
}
.tab-nav button:hover {
background-color: rgba(255, 255, 255, 0.05) !important;
}
.tab-nav button.selected {
border-bottom-color: var(--primary-color) !important;
color: var(--primary-color) !important;
}
/* Footer Styles */
.footer {
text-align: center;
padding: 2rem 0;
margin-top: 3rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
color: var(--text-secondary);
font-size: 0.875rem;
}
/* Status Indicators */
.status-indicator {
display: inline-flex;
align-items: center;
gap: 0.5rem;
}
.status-dot {
width: 8px;
height: 8px;
border-radius: 50%;
}
.status-dot.complete {
background-color: var(--success-color);
}
.status-dot.in-progress {
background-color: var(--warning-color);
animation: pulse 2s infinite;
}
.status-dot.planned {
background-color: var(--text-secondary);
}
/* Difficulty Badges */
.difficulty {
padding: 0.25rem 0.75rem;
border-radius: 4px;
font-size: 0.75rem;
font-weight: 600;
}
.difficulty.beginner {
background-color: rgba(46, 204, 113, 0.2);
color: #2ECC71;
}
.difficulty.intermediate {
background-color: rgba(243, 156, 18, 0.2);
color: #F39C12;
}
.difficulty.advanced {
background-color: rgba(231, 76, 60, 0.2);
color: #E74C3C;
}
.difficulty.expert {
background-color: rgba(155, 89, 182, 0.2);
color: #9B59B6;
}
/* Responsive Grid */
.grid-2 {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1.5rem;
}
.grid-3 {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1.5rem;
}
/* Custom Scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--background-dark);
}
::-webkit-scrollbar-thumb {
background: var(--text-secondary);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--primary-color);
}
/* Utility Classes */
.text-center {
text-align: center;
}
.text-muted {
color: var(--text-secondary);
}
.mt-1 { margin-top: 0.5rem; }
.mt-2 { margin-top: 1rem; }
.mt-3 { margin-top: 1.5rem; }
.mt-4 { margin-top: 2rem; }
.mb-1 { margin-bottom: 0.5rem; }
.mb-2 { margin-bottom: 1rem; }
.mb-3 { margin-bottom: 1.5rem; }
.mb-4 { margin-bottom: 2rem; }
.p-1 { padding: 0.5rem; }
.p-2 { padding: 1rem; }
.p-3 { padding: 1.5rem; }
.p-4 { padding: 2rem; }
.flex {
display: flex;
}
.flex-center {
display: flex;
align-items: center;
justify-content: center;
}
.gap-1 { gap: 0.5rem; }
.gap-2 { gap: 1rem; }
.gap-3 { gap: 1.5rem; }
/* Hidden utility */
.hidden {
display: none !important;
}