Spaces:
Sleeping
Sleeping
Download frontend/src/app/globals.css from Comfoa/Civilly-Simplified-Backend: direct link, hf CLI and curl.
- Browser
- Download file 9.26 kB
-
https://huggingface.co/spaces/Comfoa/Civilly-Simplified-Backend/resolve/main/frontend/src/app/globals.css
- Command line
-
hf download hf://spaces/Comfoa/Civilly-Simplified-Backend/frontend/src/app/globals.css
-
curl -L -o globals.css https://huggingface.co/spaces/Comfoa/Civilly-Simplified-Backend/resolve/main/frontend/src/app/globals.css
9.26 kB
| @import "tailwindcss"; | |
| /* ========================================================================== | |
| CivillySimplified — Professional News Site Theme | |
| ========================================================================== | |
| A clean, modern news-site design with: | |
| - Light/dark mode support (system preference + manual toggle) | |
| - Professional typography inspired by NYT/WaPo | |
| - City-branded accent colors | |
| - Responsive grid layouts | |
| ========================================================================== */ | |
| :root { | |
| /* Core palette */ | |
| --background: #ffffff; | |
| --background-secondary: #f8f9fa; | |
| --foreground: #111827; | |
| --foreground-secondary: #4b5563; | |
| --border: #e5e7eb; | |
| --border-light: #f3f4f6; | |
| /* Brand — default blue (overridden per city) */ | |
| --brand: #1a73e8; | |
| --brand-light: #e8f0fe; | |
| --brand-dark: #1557b0; | |
| --brand-muted: #6b93d6; | |
| /* Accents */ | |
| --accent-green: #059669; | |
| --accent-yellow: #d97706; | |
| --accent-red: #dc2626; | |
| --accent-purple: #7c3aed; | |
| /* Surfaces */ | |
| --card-bg: #ffffff; | |
| --card-border: #e5e7eb; | |
| --card-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); | |
| --card-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.12); | |
| /* Typography */ | |
| --font-serif: 'Georgia', 'Times New Roman', serif; | |
| --font-sans: 'Inter', system-ui, -apple-system, sans-serif; | |
| --font-mono: 'JetBrains Mono', 'Fira Code', monospace; | |
| /* Sizes */ | |
| --max-width: 1280px; | |
| --header-height: 56px; | |
| } | |
| /* Dark mode */ | |
| @media (prefers-color-scheme: dark) { | |
| :root { | |
| --background: #0f172a; | |
| --background-secondary: #1e293b; | |
| --foreground: #f1f5f9; | |
| --foreground-secondary: #94a3b8; | |
| --border: #334155; | |
| --border-light: #1e293b; | |
| --card-bg: #1e293b; | |
| --card-border: #334155; | |
| --card-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); | |
| --card-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.4); | |
| --brand-light: #1e3a5f; | |
| } | |
| } | |
| /* Force light mode */ | |
| :root.light-mode { | |
| --background: #ffffff; | |
| --background-secondary: #f8f9fa; | |
| --foreground: #111827; | |
| --foreground-secondary: #4b5563; | |
| --border: #e5e7eb; | |
| --border-light: #f3f4f6; | |
| --card-bg: #ffffff; | |
| --card-border: #e5e7eb; | |
| --card-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); | |
| --card-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.12); | |
| --brand-light: #e8f0fe; | |
| } | |
| /* Force dark mode */ | |
| :root.dark-mode { | |
| --background: #0f172a; | |
| --background-secondary: #1e293b; | |
| --foreground: #f1f5f9; | |
| --foreground-secondary: #94a3b8; | |
| --border: #334155; | |
| --border-light: #1e293b; | |
| --card-bg: #1e293b; | |
| --card-border: #334155; | |
| --card-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); | |
| --card-shadow-hover: 0 4px 12px rgba(0, 0, 0, 0.4); | |
| --brand-light: #1e3a5f; | |
| } | |
| /* ========================================================================== | |
| Base Styles | |
| ========================================================================== */ | |
| body { | |
| background-color: var(--background); | |
| color: var(--foreground); | |
| font-family: var(--font-sans); | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| } | |
| /* ========================================================================== | |
| Typography — News Site Style | |
| ========================================================================== */ | |
| .news-headline { | |
| font-family: var(--font-serif); | |
| font-weight: 700; | |
| line-height: 1.15; | |
| letter-spacing: -0.02em; | |
| } | |
| .news-headline-xl { | |
| font-family: var(--font-serif); | |
| font-size: 2.5rem; | |
| font-weight: 700; | |
| line-height: 1.1; | |
| letter-spacing: -0.03em; | |
| } | |
| .news-headline-lg { | |
| font-family: var(--font-serif); | |
| font-size: 1.75rem; | |
| font-weight: 700; | |
| line-height: 1.2; | |
| letter-spacing: -0.02em; | |
| } | |
| .news-headline-md { | |
| font-family: var(--font-serif); | |
| font-size: 1.25rem; | |
| font-weight: 600; | |
| line-height: 1.3; | |
| } | |
| .news-body { | |
| font-family: var(--font-serif); | |
| font-size: 1.0625rem; | |
| line-height: 1.7; | |
| color: var(--foreground-secondary); | |
| } | |
| .news-byline { | |
| font-size: 0.8125rem; | |
| color: var(--foreground-secondary); | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| } | |
| .news-section-tag { | |
| font-size: 0.75rem; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| letter-spacing: 0.08em; | |
| color: var(--brand); | |
| } | |
| /* ========================================================================== | |
| Components | |
| ========================================================================== */ | |
| /* Article Card */ | |
| .article-card { | |
| background: var(--card-bg); | |
| border: 1px solid var(--card-border); | |
| border-radius: 0.5rem; | |
| overflow: hidden; | |
| transition: box-shadow 0.2s, transform 0.2s; | |
| cursor: pointer; | |
| } | |
| .article-card:hover { | |
| box-shadow: var(--card-shadow-hover); | |
| transform: translateY(-1px); | |
| } | |
| .article-card-featured { | |
| border-left: 4px solid var(--brand); | |
| } | |
| /* Divider */ | |
| .news-divider { | |
| border: none; | |
| border-top: 1px solid var(--border); | |
| margin: 2rem 0; | |
| } | |
| .news-divider-thick { | |
| border: none; | |
| border-top: 3px solid var(--foreground); | |
| margin: 1.5rem 0; | |
| } | |
| /* Section Header */ | |
| .section-header { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.75rem; | |
| margin-bottom: 1.25rem; | |
| } | |
| .section-header::after { | |
| content: ''; | |
| flex: 1; | |
| height: 1px; | |
| background: var(--border); | |
| } | |
| /* Button */ | |
| .btn { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| padding: 0.5rem 1rem; | |
| border-radius: 0.375rem; | |
| font-size: 0.875rem; | |
| font-weight: 500; | |
| transition: all 0.15s; | |
| cursor: pointer; | |
| border: none; | |
| } | |
| .btn-primary { | |
| background: var(--brand); | |
| color: white; | |
| } | |
| .btn-primary:hover { | |
| background: var(--brand-dark); | |
| } | |
| .btn-secondary { | |
| background: var(--background-secondary); | |
| color: var(--foreground); | |
| border: 1px solid var(--border); | |
| } | |
| .btn-secondary:hover { | |
| border-color: var(--brand); | |
| color: var(--brand); | |
| } | |
| /* Badge */ | |
| .badge { | |
| display: inline-flex; | |
| align-items: center; | |
| padding: 0.125rem 0.5rem; | |
| border-radius: 9999px; | |
| font-size: 0.6875rem; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| letter-spacing: 0.04em; | |
| } | |
| .badge-green { | |
| background: rgba(5, 150, 105, 0.1); | |
| color: var(--accent-green); | |
| border: 1px solid rgba(5, 150, 105, 0.2); | |
| } | |
| .badge-yellow { | |
| background: rgba(217, 119, 6, 0.1); | |
| color: var(--accent-yellow); | |
| border: 1px solid rgba(217, 119, 6, 0.2); | |
| } | |
| .badge-red { | |
| background: rgba(220, 38, 38, 0.1); | |
| color: var(--accent-red); | |
| border: 1px solid rgba(220, 38, 38, 0.2); | |
| } | |
| .badge-purple { | |
| background: rgba(124, 58, 237, 0.1); | |
| color: var(--accent-purple); | |
| border: 1px solid rgba(124, 58, 237, 0.2); | |
| } | |
| .badge-blue { | |
| background: rgba(37, 99, 235, 0.1); | |
| color: #3b82f6; | |
| border: 1px solid rgba(37, 99, 235, 0.2); | |
| } | |
| .badge-brand { | |
| background: var(--brand-light); | |
| color: var(--brand); | |
| border: 1px solid color-mix(in srgb, var(--brand) 20%, transparent); | |
| } | |
| .badge-warning { | |
| background: rgba(217, 119, 6, 0.1); | |
| color: var(--accent-yellow); | |
| border: 1px solid rgba(217, 119, 6, 0.2); | |
| } | |
| /* Skeleton loading */ | |
| @keyframes shimmer { | |
| 0% { background-position: -200% 0; } | |
| 100% { background-position: 200% 0; } | |
| } | |
| .skeleton { | |
| background: linear-gradient(90deg, var(--background-secondary) 25%, var(--border) 50%, var(--background-secondary) 75%); | |
| background-size: 200% 100%; | |
| animation: shimmer 1.5s infinite; | |
| border-radius: 0.25rem; | |
| } | |
| /* City selector dropdown */ | |
| .city-selector { | |
| position: relative; | |
| } | |
| .city-selector select { | |
| appearance: none; | |
| background: var(--background-secondary); | |
| border: 1px solid var(--border); | |
| border-radius: 0.375rem; | |
| padding: 0.375rem 2rem 0.375rem 0.75rem; | |
| font-size: 0.8125rem; | |
| color: var(--foreground); | |
| cursor: pointer; | |
| transition: border-color 0.15s; | |
| } | |
| .city-selector select:hover { | |
| border-color: var(--brand); | |
| } | |
| .city-selector::after { | |
| content: '▾'; | |
| position: absolute; | |
| right: 0.625rem; | |
| top: 50%; | |
| transform: translateY(-50%); | |
| font-size: 0.75rem; | |
| color: var(--foreground-secondary); | |
| pointer-events: none; | |
| } | |
| /* Theme toggle */ | |
| .theme-toggle { | |
| background: none; | |
| border: 1px solid var(--border); | |
| border-radius: 0.375rem; | |
| padding: 0.375rem; | |
| cursor: pointer; | |
| color: var(--foreground-secondary); | |
| transition: all 0.15s; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| width: 32px; | |
| height: 32px; | |
| } | |
| .theme-toggle:hover { | |
| border-color: var(--brand); | |
| color: var(--brand); | |
| } | |
| /* Responsive grid */ | |
| .news-grid { | |
| display: grid; | |
| gap: 1.5rem; | |
| } | |
| .news-grid-2 { | |
| grid-template-columns: 1fr; | |
| } | |
| @media (min-width: 768px) { | |
| .news-grid-2 { | |
| grid-template-columns: 1fr 1fr; | |
| } | |
| } | |
| .news-grid-3 { | |
| grid-template-columns: 1fr; | |
| } | |
| @media (min-width: 768px) { | |
| .news-grid-3 { | |
| grid-template-columns: 1fr 1fr; | |
| } | |
| } | |
| @media (min-width: 1024px) { | |
| .news-grid-3 { | |
| grid-template-columns: 1fr 1fr 1fr; | |
| } | |
| } | |
| /* Layout */ | |
| .news-layout { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 2rem; | |
| } | |
| @media (min-width: 1024px) { | |
| .news-layout { | |
| grid-template-columns: 1fr 320px; | |
| } | |
| } | |
| /* Sidebar */ | |
| .sidebar-card { | |
| background: var(--background-secondary); | |
| border: 1px solid var(--border); | |
| border-radius: 0.5rem; | |
| padding: 1.25rem; | |
| } | |
| .sidebar-card h3 { | |
| font-size: 0.8125rem; | |
| font-weight: 600; | |
| text-transform: uppercase; | |
| letter-spacing: 0.06em; | |
| color: var(--foreground-secondary); | |
| margin-bottom: 0.75rem; | |
| padding-bottom: 0.5rem; | |
| border-bottom: 2px solid var(--brand); | |
| } | |