diff --git a/static/css/style.css b/static/css/style.css index 8c54cdd..2f06767 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1,3 +1,56 @@ +/* CSS Variables for easy customization */ +:root { + /* Colors */ + --color-primary: #000; + --color-background: #fff; + --color-text: #000; + --color-text-muted: #666; + --color-disabled: #999; + --color-hover-bg: #f0f0f0; + + /* Typography */ + --font-family: 'Courier New', Courier, monospace; + --font-size-base: 1rem; + --font-size-xs: 0.7rem; + --font-size-sm: 0.75rem; + --font-size-md: 0.85rem; + --font-size-lg: 0.9rem; + --font-size-xl: 1.2rem; + --font-size-2xl: 1.5rem; + --font-size-3xl: 2rem; + --font-size-4xl: 6rem; + --line-height-base: 1.5; + --line-height-tight: 1.3; + --line-height-relaxed: 1.6; + --letter-spacing-tight: 1px; + --letter-spacing-wide: 2px; + + /* Spacing */ + --space-xs: 0.25rem; + --space-sm: 0.5rem; + --space-md: 1rem; + --space-lg: 1.5rem; + --space-xl: 2rem; + --space-2xl: 3rem; + --space-3xl: 4rem; + + /* Borders */ + --border-width-thin: 2px; + --border-width-thick: 3px; + --border-color: var(--color-primary); + --border-radius: 0; /* Can be changed for rounded corners */ + + /* Layout */ + --container-max-width: 900px; + --content-max-width: 700px; + --archive-grid-min: 180px; + --archive-grid-min-mobile: 140px; + --archive-thumbnail-height: 120px; + + /* Transitions (for future enhancements) */ + --transition-speed: 0.2s; +} + /* Reset and base styles */ * { margin: 0; @@ -6,16 +59,16 @@ } body { - font-family: 'Courier New', Courier, monospace; - line-height: 1.5; - color: #000; - background-color: #fff; + font-family: var(--font-family); + line-height: var(--line-height-base); + color: var(--color-text); + background-color: var(--color-background); } .container { - max-width: 900px; + max-width: var(--container-max-width); margin: 0 auto; - padding: 0 1rem; + padding: 0 var(--space-md); } /* Site Header Image */ @@ -33,16 +86,16 @@ body { /* Header and Navigation */ header { - border-bottom: 3px solid #000; - padding: 1.5rem 0; - margin-bottom: 2rem; + border-bottom: var(--border-width-thick) solid var(--border-color); + padding: var(--space-lg) 0; + margin-bottom: var(--space-xl); } /* Header with image variant - no border, no padding, centered nav */ header.header-with-image { border-bottom: none; - padding: 1rem 0 0 0; - margin-bottom: 0.5rem; + padding: var(--space-md) 0 0 0; + margin-bottom: var(--space-sm); } header.header-with-image nav .container { @@ -50,7 +103,7 @@ header.header-with-image nav .container { } header.header-with-image .nav-links a { - font-size: 1.2rem; + font-size: var(--font-size-xl); font-weight: bold; } @@ -59,26 +112,26 @@ nav .container { justify-content: space-between; align-items: center; flex-wrap: wrap; - gap: 1rem; + gap: var(--space-md); } .nav-brand a { - color: #000; + color: var(--color-text); text-decoration: none; - font-size: 1.5rem; + font-size: var(--font-size-2xl); font-weight: bold; text-transform: uppercase; - letter-spacing: 2px; + letter-spacing: var(--letter-spacing-wide); } .nav-links { display: flex; list-style: none; - gap: 1.5rem; + gap: var(--space-lg); } .nav-links a { - color: #000; + color: var(--color-text); text-decoration: none; text-transform: lowercase; } @@ -91,49 +144,49 @@ nav .container { /* Main content */ main { min-height: calc(100vh - 250px); - padding: 0 0 3rem 0; + padding: 0 0 var(--space-2xl) 0; } /* Page header */ .page-header { - margin-bottom: 2rem; - padding-bottom: 1rem; - border-bottom: 2px solid #000; + margin-bottom: var(--space-xl); + padding-bottom: var(--space-md); + border-bottom: var(--border-width-thin) solid var(--border-color); } .page-header h1 { - color: #000; - font-size: 2rem; + color: var(--color-text); + font-size: var(--font-size-3xl); text-transform: uppercase; - letter-spacing: 1px; + letter-spacing: var(--letter-spacing-tight); } .page-header p { - margin-top: 0.5rem; - font-size: 0.9rem; + margin-top: var(--space-sm); + font-size: var(--font-size-lg); } /* Content sections */ .about-content { - max-width: 700px; + max-width: var(--content-max-width); } .about-content h2 { - color: #000; - margin-top: 2rem; - margin-bottom: 0.5rem; + color: var(--color-text); + margin-top: var(--space-xl); + margin-bottom: var(--space-sm); text-transform: uppercase; - font-size: 1.2rem; - letter-spacing: 1px; + font-size: var(--font-size-xl); + letter-spacing: var(--letter-spacing-tight); } .about-content p { - margin-bottom: 1rem; + margin-bottom: var(--space-md); } .about-content ul { - margin-left: 1.5rem; - margin-bottom: 1rem; + margin-left: var(--space-lg); + margin-bottom: var(--space-md); } .about-content li { @@ -144,49 +197,49 @@ main { .btn { display: inline-block; padding: 0.6rem 1.2rem; - background-color: #000; - color: #fff; + background-color: var(--color-primary); + color: var(--color-background); text-decoration: none; - border: 2px solid #000; + border: var(--border-width-thin) solid var(--border-color); cursor: pointer; - font-size: 0.9rem; - font-family: 'Courier New', Courier, monospace; + font-size: var(--font-size-lg); + font-family: var(--font-family); text-transform: uppercase; - letter-spacing: 1px; + letter-spacing: var(--letter-spacing-tight); } .btn:hover { - background-color: #fff; - color: #000; + background-color: var(--color-background); + color: var(--color-primary); } /* Error page */ .error-page { text-align: center; - padding: 4rem 1rem; + padding: var(--space-3xl) var(--space-md); } .error-page h1 { - font-size: 6rem; - color: #000; - margin-bottom: 1rem; + font-size: var(--font-size-4xl); + color: var(--color-text); + margin-bottom: var(--space-md); } .error-page h2 { - color: #000; - margin-bottom: 1rem; + color: var(--color-text); + margin-bottom: var(--space-md); text-transform: uppercase; } .error-page p { - color: #000; - margin-bottom: 2rem; + color: var(--color-text); + margin-bottom: var(--space-xl); } /* Comic Container */ .comic-container { - border: 3px solid #000; - padding: 1rem; + border: var(--border-width-thick) solid var(--border-color); + padding: var(--space-md); } /* Full-width comic variant */ @@ -198,11 +251,11 @@ main { .comic-container-fullwidth .comic-header, .comic-container-fullwidth .comic-navigation, .comic-container-fullwidth .comic-transcript { - max-width: 900px; + max-width: var(--container-max-width); margin-left: auto; margin-right: auto; - padding-left: 1rem; - padding-right: 1rem; + padding-left: var(--space-md); + padding-right: var(--space-md); } .comic-container-fullwidth .comic-image { @@ -224,30 +277,30 @@ main { } .comic-header { - margin-bottom: 1.5rem; - padding-bottom: 1rem; - border-bottom: 2px solid #000; + margin-bottom: var(--space-lg); + padding-bottom: var(--space-md); + border-bottom: var(--border-width-thin) solid var(--border-color); } .comic-header h1 { - color: #000; - font-size: 1.5rem; - margin-bottom: 0.25rem; + color: var(--color-text); + font-size: var(--font-size-2xl); + margin-bottom: var(--space-xs); text-transform: uppercase; - letter-spacing: 1px; + letter-spacing: var(--letter-spacing-tight); } .comic-date { - color: #000; - font-size: 0.85rem; + color: var(--color-text); + font-size: var(--font-size-md); } /* Comic Image */ .comic-image { text-align: center; - margin-bottom: 1.5rem; - padding: 0.5rem; - background: #fff; + margin-bottom: var(--space-lg); + padding: var(--space-sm); + background: var(--color-background); } .comic-image a { @@ -264,16 +317,16 @@ main { /* Comic Navigation */ .comic-navigation { - border-top: 2px solid #000; - padding-top: 1rem; - margin-bottom: 1rem; + border-top: var(--border-width-thin) solid var(--border-color); + padding-top: var(--space-md); + margin-bottom: var(--space-md); } .nav-buttons { display: flex; justify-content: center; align-items: center; - gap: 0.5rem; + gap: var(--space-sm); flex-wrap: wrap; } @@ -283,54 +336,54 @@ main { } .btn-disabled { - background-color: #fff; - color: #999; - border-color: #999; + background-color: var(--color-background); + color: var(--color-disabled); + border-color: var(--color-disabled); cursor: not-allowed; } .btn-disabled:hover { - background-color: #fff; - color: #999; + background-color: var(--color-background); + color: var(--color-disabled); } .comic-date-display { - padding: 0 0.5rem; - color: #000; + padding: 0 var(--space-sm); + color: var(--color-text); font-weight: bold; - margin: 0 0.25rem; - font-size: 0.85rem; + margin: 0 var(--space-xs); + font-size: var(--font-size-md); font-style: italic; } /* Comic Transcript */ .comic-transcript { - border: 2px solid #000; - padding: 1rem; - margin-top: 1rem; + border: var(--border-width-thin) solid var(--border-color); + padding: var(--space-md); + margin-top: var(--space-md); } .comic-transcript h3 { - color: #000; - margin-bottom: 0.5rem; + color: var(--color-text); + margin-bottom: var(--space-sm); text-transform: uppercase; - font-size: 0.9rem; - letter-spacing: 1px; + font-size: var(--font-size-lg); + letter-spacing: var(--letter-spacing-tight); } .comic-transcript p { - color: #000; - line-height: 1.6; - font-size: 0.9rem; + color: var(--color-text); + line-height: var(--line-height-relaxed); + font-size: var(--font-size-lg); } .comic-transcript ul, .comic-transcript ol { - margin-left: 1.5rem; - margin-bottom: 1rem; - color: #000; - line-height: 1.6; - font-size: 0.9rem; + margin-left: var(--space-lg); + margin-bottom: var(--space-md); + color: var(--color-text); + line-height: var(--line-height-relaxed); + font-size: var(--font-size-lg); } .comic-transcript li { @@ -339,36 +392,36 @@ main { /* Archive Content */ .archive-content { - margin-top: 1rem; + margin-top: var(--space-md); } .archive-grid { display: grid; - grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); - gap: 1rem; + grid-template-columns: repeat(auto-fill, minmax(var(--archive-grid-min), 1fr)); + gap: var(--space-md); } .archive-item { - border: 2px solid #000; + border: var(--border-width-thin) solid var(--border-color); overflow: hidden; } .archive-item:hover { - background: #f0f0f0; + background: var(--color-hover-bg); } .archive-item a { text-decoration: none; - color: #000; + color: var(--color-text); display: block; } .archive-item img { width: 100%; - height: 120px; + height: var(--archive-thumbnail-height); object-fit: cover; display: block; - border-bottom: 2px solid #000; + border-bottom: var(--border-width-thin) solid var(--border-color); } .archive-info { @@ -376,39 +429,39 @@ main { } .archive-info h3 { - color: #000; - font-size: 0.85rem; - margin-bottom: 0.25rem; - line-height: 1.3; + color: var(--color-text); + font-size: var(--font-size-md); + margin-bottom: var(--space-xs); + line-height: var(--line-height-tight); text-transform: uppercase; } .archive-date { - color: #000; - font-size: 0.75rem; + color: var(--color-text); + font-size: var(--font-size-sm); } /* Responsive adjustments */ @media (max-width: 768px) { .nav-brand a { - font-size: 1.2rem; + font-size: var(--font-size-xl); } .nav-links { - gap: 1rem; + gap: var(--space-md); } .btn-nav { padding: 0.3rem 0.6rem; - font-size: 0.75rem; + font-size: var(--font-size-sm); } .comic-date-display { - font-size: 0.7rem; + font-size: var(--font-size-xs); } .archive-grid { - grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); + grid-template-columns: repeat(auto-fill, minmax(var(--archive-grid-min-mobile), 1fr)); gap: 0.75rem; } @@ -419,16 +472,16 @@ main { /* Footer */ footer { - border-top: 3px solid #000; - padding: 2rem 0; - margin-top: 3rem; + border-top: var(--border-width-thick) solid var(--border-color); + padding: var(--space-xl) 0; + margin-top: var(--space-2xl); } .footer-content { display: flex; justify-content: space-around; - gap: 2rem; - margin-bottom: 2rem; + gap: var(--space-xl); + margin-bottom: var(--space-xl); flex-wrap: wrap; } @@ -438,23 +491,23 @@ footer { } .footer-section h3 { - color: #000; - font-size: 0.9rem; + color: var(--color-text); + font-size: var(--font-size-lg); text-transform: uppercase; - letter-spacing: 1px; - margin-bottom: 1rem; + letter-spacing: var(--letter-spacing-tight); + margin-bottom: var(--space-md); } .social-links { display: flex; flex-direction: column; - gap: 0.5rem; + gap: var(--space-sm); } .social-links a { - color: #000; + color: var(--color-text); text-decoration: none; - font-size: 0.85rem; + font-size: var(--font-size-md); } .social-links a:hover { @@ -463,50 +516,50 @@ footer { .newsletter-form { display: flex; - gap: 0.5rem; + gap: var(--space-sm); } .newsletter-form input[type="email"] { flex: 1; - padding: 0.5rem; - border: 2px solid #000; - font-family: 'Courier New', Courier, monospace; - font-size: 0.85rem; + padding: var(--space-sm); + border: var(--border-width-thin) solid var(--border-color); + font-family: var(--font-family); + font-size: var(--font-size-md); } .newsletter-form button { - padding: 0.5rem 1rem; - background-color: #000; - color: #fff; - border: 2px solid #000; + padding: var(--space-sm) var(--space-md); + background-color: var(--color-primary); + color: var(--color-background); + border: var(--border-width-thin) solid var(--border-color); cursor: pointer; - font-family: 'Courier New', Courier, monospace; - font-size: 0.85rem; + font-family: var(--font-family); + font-size: var(--font-size-md); text-transform: uppercase; } .newsletter-form button:hover { - background-color: #fff; - color: #000; + background-color: var(--color-background); + color: var(--color-primary); } .newsletter-placeholder { - font-size: 0.85rem; - color: #666; + font-size: var(--font-size-md); + color: var(--color-text-muted); } .footer-bottom { text-align: center; - padding-top: 1.5rem; - border-top: 2px solid #000; + padding-top: var(--space-lg); + border-top: var(--border-width-thin) solid var(--border-color); } .footer-bottom p { margin: 0; - color: #000; - font-size: 0.85rem; + color: var(--color-text); + font-size: var(--font-size-md); text-transform: uppercase; - letter-spacing: 1px; + letter-spacing: var(--letter-spacing-tight); } /* Compact Footer Mode */ @@ -520,13 +573,13 @@ footer.compact-footer .container { display: flex; align-items: center; justify-content: center; - gap: 1rem; + gap: var(--space-md); } footer.compact-footer .footer-content { display: flex; align-items: center; - gap: 1rem; + gap: var(--space-md); margin-bottom: 0; flex-wrap: nowrap; } @@ -536,26 +589,26 @@ footer.compact-footer .footer-section { min-width: auto; display: flex; align-items: center; - gap: 0.5rem; + gap: var(--space-sm); } footer.compact-footer .footer-section h3 { - font-size: 0.75rem; + font-size: var(--font-size-sm); margin-bottom: 0; display: inline; } footer.compact-footer .social-links { flex-direction: row; - gap: 0.5rem; + gap: var(--space-sm); } footer.compact-footer .social-links a { - font-size: 0.75rem; + font-size: var(--font-size-sm); } footer.compact-footer .newsletter-placeholder { - font-size: 0.75rem; + font-size: var(--font-size-sm); margin: 0; } @@ -568,18 +621,18 @@ footer.compact-footer .footer-bottom { footer.compact-footer .footer-bottom::before { content: '|'; - margin-right: 1rem; - color: #666; + margin-right: var(--space-md); + color: var(--color-text-muted); } footer.compact-footer .footer-bottom p { - font-size: 0.75rem; + font-size: var(--font-size-sm); margin: 0; } /* Add separator between sections in compact mode */ footer.compact-footer .footer-section:not(:last-child)::after { content: '|'; - margin-left: 1rem; - color: #666; + margin-left: var(--space-md); + color: var(--color-text-muted); } \ No newline at end of file