diff --git a/public/css/site.css b/public/css/site.css index 41d3104..7166cdc 100644 --- a/public/css/site.css +++ b/public/css/site.css @@ -1,76 +1,97 @@ :root { - --brand-dark: #121826; - --brand-accent: #b48a5a; - --paper: #fcfbf7; - --paper-2: #f4efe7; - --ink: #1e2430; - --text-muted-soft: #6b7280; -} - -body { - background: - radial-gradient(circle at top left, rgba(180, 138, 90, 0.09), transparent 28%), - radial-gradient(circle at top right, rgba(18, 24, 38, 0.05), transparent 24%), - linear-gradient(180deg, #ffffff 0%, var(--paper) 24%, #f8f4ee 100%); - font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + --brand-dark: #212529; + --brand-accent: #0085A1; + --paper: #ffffff; + --paper-2: #f8f9fa; + --ink: #212529; + --text-muted-soft: #495057; + --border-soft: #e9ecef; +} + +html { + scroll-behavior: smooth; +} + +body.clean-blog { + background: var(--paper); color: var(--ink); - line-height: 1.65; + font-family: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + line-height: 1.7; + padding-top: 74px; } -/* Navbar */ -.site-topbar { - height: 6px; - background: linear-gradient(90deg, var(--brand-accent), #d6b186 40%, #7c5c3a 100%); +a { + color: var(--brand-dark); + text-decoration: none; } -.navbar.bg-dark { - background-color: var(--brand-dark) !important; +a:hover { + color: var(--brand-accent); } -.navbar { - backdrop-filter: blur(8px); +a:focus-visible, +button:focus-visible, +input:focus-visible, +textarea:focus-visible, +select:focus-visible, +.btn:focus-visible { + outline: 3px solid rgba(0, 133, 161, 0.45); + outline-offset: 2px; } -.brand { - font-size: 1.35rem; - font-weight: 800; - letter-spacing: -0.03em; - color: #fff !important; - font-family: "Cormorant Garamond", Georgia, "Times New Roman", serif; +.skip-link { + position: absolute; + left: 1rem; + top: -4rem; + z-index: 1040; + padding: 0.75rem 1rem; + background: var(--brand-dark); + color: #fff; + font-weight: 700; + transition: top 0.15s ease; } -.brand-tagline { - display: inline-block; - font-size: 0.72rem; +.skip-link:focus { + top: 0.75rem; +} + +/* Navbar */ +#mainNav { + background: rgba(255, 255, 255, 0.98); + border-bottom: 1px solid var(--border-soft); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.04); + transition: all 0.2s ease-in-out; +} + +.navbar-brand.brand { + font-family: "Lora", Georgia, "Times New Roman", serif; + font-size: 1.6rem; font-weight: 700; - color: rgba(255,255,255,0.55); - text-transform: uppercase; - letter-spacing: 0.18em; - margin-left: 0.5rem; - vertical-align: middle; + letter-spacing: -0.02em; + color: var(--brand-dark) !important; } -.navbar .nav-link { - font-size: 0.9rem; - font-weight: 600; - color: rgba(255,255,255,0.72) !important; - padding-left: 1rem !important; - padding-right: 1rem !important; - transition: color 0.15s; +#mainNav .nav-link { + color: var(--brand-dark) !important; + font-weight: 700; + letter-spacing: 0.04em; + text-transform: uppercase; + font-size: 0.78rem; + padding: 0.85rem 0.95rem; position: relative; } -.navbar .nav-link:hover, -.navbar .nav-link.active { - color: #fff !important; +#mainNav .nav-link:hover, +#mainNav .nav-link.active { + color: var(--brand-accent) !important; } -.navbar .nav-link.active::after { +#mainNav .nav-link.active::after { content: ""; position: absolute; - left: 1rem; - right: 1rem; - bottom: 0.2rem; + left: 0.95rem; + right: 0.95rem; + bottom: 0.35rem; height: 2px; background: var(--brand-accent); border-radius: 999px; @@ -78,201 +99,405 @@ body { /* Main content */ .site-main { - padding-top: 2rem; - padding-bottom: 3.5rem; - min-height: calc(100vh - 60px); + padding: 0 0 4rem; + min-height: calc(100vh - 74px); +} + +/* Masthead */ +.masthead { + position: relative; + display: flex; + align-items: center; + min-height: 22rem; + padding: 5rem 0 4rem; + margin: 0 0 3rem; + color: #fff; + background-color: #343a40; + background-repeat: no-repeat; + background-position: center center; + background-attachment: scroll; + background-size: cover; } -/* Hero */ -.hero { - border: 1px solid rgba(18, 24, 38, 0.08); - border-radius: 1.5rem; - background: - linear-gradient(135deg, rgba(255,255,255,0.88), rgba(255,255,255,0.72)), - radial-gradient(circle at top right, rgba(180, 138, 90, 0.12), transparent 36%); - box-shadow: 0 20px 60px rgba(18, 24, 38, 0.08); - padding: 3rem 2rem; +.masthead-home { + min-height: 28rem; } -.home-sidebar { - max-width: 24rem; - border-radius: 1.2rem; +.masthead-page, +.masthead-post { + min-height: 18rem; } -.hero .display-5, +.masthead .overlay { + position: absolute; + inset: 0; + background: linear-gradient(180deg, rgba(33, 37, 41, 0.42), rgba(33, 37, 41, 0.68)); +} + +.masthead .container { + position: relative; + z-index: 2; +} + +.page-heading, +.post-heading { + padding: 1rem 0; +} + +.page-heading h1, +.post-heading h1 { + font-family: "Lora", Georgia, "Times New Roman", serif; + font-size: clamp(2.8rem, 6vw, 5rem); + font-weight: 700; + line-height: 1.1; + margin: 0 0 0.75rem; +} + +.page-heading .subheading, +.post-heading .subheading { + display: block; + font-family: "Lora", Georgia, "Times New Roman", serif; + font-size: clamp(1.05rem, 2vw, 1.5rem); + font-weight: 400; + line-height: 1.35; + margin-top: 0.5rem; + color: rgba(255, 255, 255, 0.92); +} + +.post-heading-kicker, +.post-preview-kicker { + display: inline-block; + margin-bottom: 0.75rem; + padding-bottom: 0.35rem; + border-bottom: 2px solid rgba(255,255,255,0.45); + font-size: 0.78rem; + font-weight: 700; + letter-spacing: 0.18em; + text-transform: uppercase; + color: rgba(255, 255, 255, 0.86); +} + +.page-heading.text-center .subheading, +.post-heading.text-center .subheading { + max-width: 42rem; + margin-left: auto; + margin-right: auto; +} + +/* Typography */ .page-title, +.post-title, +.hero .display-5, .card h1, .card h2, .card h3 { - font-family: "Cormorant Garamond", Georgia, "Times New Roman", serif; + font-family: "Lora", Georgia, "Times New Roman", serif; letter-spacing: -0.02em; } -.eyebrow { - display: inline-flex; - align-items: center; - gap: 0.5rem; - font-size: 0.78rem; - font-weight: 700; - text-transform: uppercase; - letter-spacing: 0.18em; - color: var(--brand-accent); +.lede, +.post-subtitle, +.prose { + max-width: 70ch; } -.eyebrow::before { - content: ""; - width: 2rem; - height: 1px; - background: currentColor; +.lede { + font-size: 1.15rem; + color: var(--text-muted-soft); } -.lede { - max-width: 42rem; - font-size: 1.08rem; +.post-preview { + padding: 2rem 0; + border-bottom: 1px solid var(--border-soft); +} + +.post-preview:first-of-type { + padding-top: 0; +} + +.post-preview:last-of-type { + border-bottom: 0; +} + +.post-preview .post-title { + font-size: clamp(1.8rem, 4vw, 2.35rem); + margin-bottom: 0.4rem; +} + +.post-preview .post-subtitle { + font-family: "Lora", Georgia, "Times New Roman", serif; + font-size: 1.15rem; + font-weight: 400; color: var(--text-muted-soft); + margin-bottom: 0.75rem; } -/* Cards */ -.card { - border: 1px solid rgba(18, 24, 38, 0.08); - border-radius: 1.1rem; - background: rgba(255,255,255,0.9); +.post-meta { + font-size: 0.95rem; + font-style: italic; + color: var(--text-muted-soft); + margin-bottom: 0; +} + +.post-meta-inline { + display: flex; + flex-wrap: wrap; + gap: 0.5rem 0.75rem; + align-items: center; + margin: 0.75rem 0 0; + font-size: 0.92rem; + color: var(--text-muted-soft); +} + +.post-meta-inline .meta-sep { + color: #adb5bd; +} + +.masthead .post-meta-inline { + color: rgba(255, 255, 255, 0.95); +} + +.masthead .post-meta-inline .meta-sep { + color: rgba(255, 255, 255, 0.7); +} + +.post-card { overflow: hidden; + background: #fff; } -.card.shadow-sm { - box-shadow: 0 10px 32px rgba(18, 24, 38, 0.07) !important; +.post-card-featured .card-body { + padding: 1.75rem; } -.card-body { - padding: 1.35rem 1.35rem; +.post-card-image { + display: block; + height: 12rem; + background: linear-gradient(135deg, rgba(0, 133, 161, 0.22), rgba(33, 37, 41, 0.06)); + background-size: cover; + background-position: center; } -/* Alerts (flash messages) */ -.alert { - border-radius: 1rem; - font-size: 0.9rem; - box-shadow: 0 8px 24px rgba(18, 24, 38, 0.04); +.post-card-featured .post-card-image { + height: 16rem; } -/* Post/article cards */ -article.card:hover { - box-shadow: 0 16px 40px rgba(18, 24, 38, 0.12) !important; - transition: box-shadow 0.2s, transform 0.2s; - transform: translateY(-1px); +.post-card .post-title { + margin-bottom: 0.5rem; } -.article-meta, -.small.text-muted { - color: var(--text-muted-soft) !important; +.post-card .post-subtitle { + margin-bottom: 0.9rem; } -.prose { - max-width: 70ch; - font-size: 1.07rem; +.story-aside { + position: sticky; + top: 96px; } -.prose p:last-child { - margin-bottom: 0; +.story-aside .card { + margin-bottom: 1rem; } -.magazine-label { +.topic-chip-grid { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; +} + +.topic-chip { display: inline-flex; align-items: center; - padding: 0.25rem 0.7rem; - border-radius: 999px; - background: rgba(180, 138, 90, 0.12); - color: #8b653f; - font-size: 0.75rem; + padding: 0.35rem 0.7rem; + border: 1px solid var(--border-soft); + background: #fff; + color: var(--ink); + font-size: 0.82rem; font-weight: 700; - text-transform: uppercase; - letter-spacing: 0.1em; } -.magazine-list .card { - border-left: 4px solid transparent; +.post-meta a { + color: inherit; + text-decoration: underline; } -.magazine-list .card:hover { - border-left-color: var(--brand-accent); +/* Cards */ +.card { + border: 1px solid var(--border-soft); + border-radius: 0; + background: #fff; } -.editorial-list li + li { - padding-top: 0.85rem; - border-top: 1px solid rgba(18, 24, 38, 0.08); +.card.shadow-sm { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04) !important; } -.editorial-list a { - color: var(--ink); +.card-body { + padding: 1.5rem; } -.editorial-list a:hover { - color: #8b653f; +article.card:hover { + transform: translateY(-1px); + transition: transform 0.18s ease, box-shadow 0.18s ease; + box-shadow: 0 8px 26px rgba(0, 0, 0, 0.08) !important; } -.feature-article { - position: relative; +/* Content */ +.prose { + font-size: 1.05rem; } -.feature-article::after { - content: ""; - position: absolute; - inset: 0; - pointer-events: none; - background: linear-gradient(135deg, rgba(180, 138, 90, 0.06), transparent 35%); +.prose p:last-child { + margin-bottom: 0; } .feature-dropcap:first-letter { float: left; - font-family: "Cormorant Garamond", Georgia, serif; - font-size: 4.2rem; + font-family: "Lora", Georgia, serif; + font-size: 4.1rem; line-height: 0.8; padding-right: 0.25rem; - padding-top: 0.2rem; - color: #8b653f; + padding-top: 0.15rem; + color: var(--brand-accent); +} + +.post-body-preview { + margin-bottom: 2rem; +} + +.post-body-preview .post-preview-content { + max-width: 68ch; + margin: 0 auto; +} + +.post-card a { + color: inherit; } +.post-card a:hover { + color: var(--brand-accent); +} + +.post-card .card-body { + padding-top: 1.45rem; +} + +.post-preview-content img, +.ql-editor img { + max-width: 100%; + height: auto; + border-radius: 0.35rem; +} + +/* Comments */ .comment-card { - border-left: 4px solid rgba(180, 138, 90, 0.32); + border: 1px solid var(--border-soft); + background: #fff; +} + +.comment-card-body { + padding: 1.1rem 1.25rem; } -.comment-card .small.text-muted { - letter-spacing: 0.02em; +.comment-form-shell { + border: 1px solid var(--border-soft); + background: var(--paper-2); } +.comment-form-inner { + padding: 1.4rem 1.4rem 1.1rem; +} + +/* Buttons */ .btn { - border-radius: 999px; - font-weight: 600; + border-radius: 0; + font-weight: 700; + letter-spacing: 0.05em; + text-transform: uppercase; + font-size: 0.82rem; } .btn-primary { - background: linear-gradient(135deg, #27324a, #1b2436); - border-color: #1b2436; + background: var(--brand-accent); + border-color: var(--brand-accent); +} + +.btn-primary:hover, +.btn-primary:focus { + background: #00657b; + border-color: #00657b; } .btn-outline-primary { - border-color: rgba(27, 36, 54, 0.2); - color: #1b2436; + color: var(--brand-dark); + border-color: var(--brand-dark); } -.btn-outline-primary:hover { - background: #1b2436; - border-color: #1b2436; +.btn-outline-primary:hover, +.btn-outline-primary:focus { + background: var(--brand-dark); + border-color: var(--brand-dark); + color: #fff; } -.btn-outline-secondary { - border-color: rgba(18, 24, 38, 0.18); - color: var(--ink); +/* Footer */ +.footer-divider { + margin: 3rem 0 2rem; + border-color: var(--border-soft); + opacity: 1; +} + +.site-footer { + padding: 1rem 0 3rem; +} + +/* General utilities used by the current views */ +.eyebrow { + font-size: 0.78rem; + font-weight: 700; + letter-spacing: 0.18em; + text-transform: uppercase; + color: var(--brand-accent); } -.btn-outline-secondary:hover { - background: rgba(18, 24, 38, 0.06); +.magazine-label { + display: inline-flex; + align-items: center; + padding: 0.25rem 0.7rem; + border: 1px solid rgba(0, 133, 161, 0.22); + background: rgba(0, 133, 161, 0.06); + color: var(--brand-accent); + font-size: 0.72rem; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.editorial-list li + li { + border-top: 1px solid var(--border-soft); + padding-top: 0.85rem; +} + +.editorial-list a { color: var(--ink); } +.editorial-list a:hover { + color: var(--brand-accent); +} + +.small.text-muted, +.text-muted { + color: var(--text-muted-soft) !important; +} + +.alert { + border-radius: 0; +} + +/* Editor */ .editor-shell { - border: 1px solid rgba(18, 24, 38, 0.12); - border-radius: 1rem; + border: 1px solid var(--border-soft); overflow: hidden; background: #fff; } @@ -283,14 +508,14 @@ article.card:hover { .ql-toolbar.ql-snow { border: 0; - border-bottom: 1px solid rgba(18, 24, 38, 0.10); + border-bottom: 1px solid var(--border-soft); padding: 0.75rem; - background: #fbfaf7; + background: #fbfbfb; } .ql-container.ql-snow { border: 0; - font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + font-family: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size: 16px; } @@ -300,14 +525,8 @@ article.card:hover { line-height: 1.7; } -.ql-editor img { - max-width: 100%; - border-radius: 0.75rem; - box-shadow: 0 12px 30px rgba(18, 24, 38, 0.12); -} - .ql-toolbar .btn { - border-radius: 999px; + border-radius: 0; padding: 0.35rem 0.8rem; font-size: 0.82rem; }