Files
.profile/public/css/projects.css
T
SowinskiBraedenandClaude Opus 5 54c00bf16f pull the terminal styling back and add an ASCII backdrop
The first pass applied terminal decoration to everything, which read as
costume rather than design. Strip it back to a few deliberate cues and
let an animated backdrop carry the character instead:

- Drop the prefix glyphs from links, tags, nav items, badges and
  headings, and restore plain section names in place of snake_case.
- Keep one prompt in the hero, the ~/ on the wordmark, ISO dates and
  status dots; everything else is ordinary type.
- Restore depth: acrylic surfaces over soft radial light, 6px radii,
  and an accent glow on the primary action and status dots.
- Draw a dithered ASCII field behind the page. A fixed per-cell dither
  value decides which cells are lit so coverage stays even, while slow
  interfering waves move brightness through it. It idles when the tab
  is hidden and stays still under prefers-reduced-motion.
- Remove the nested panel boxes on the projects page and size the entry
  page to its article column.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-17 23:55:06 -07:00

417 lines
7.4 KiB
CSS
Executable File

.projects-page,
.entry-page {
padding-top: 40px;
}
/* The page header sits on the background; only cards get a surface. */
.projects-hero {
margin-bottom: 40px;
max-width: 760px;
}
.projects-hero h1,
.entry-title {
font-size: clamp(1.5rem, 3vw, 2.1rem);
line-height: 1.2;
margin: 0 0 14px;
}
.projects-intro,
.entry-summary {
margin: 0;
max-width: 720px;
color: var(--muted);
font-size: 0.92rem;
}
.eyebrow {
margin: 0 0 10px;
font-size: 12px;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--secondary);
font-weight: 500;
}
.content-section {
margin-bottom: 44px;
}
.section-heading {
display: flex;
justify-content: space-between;
align-items: baseline;
gap: 14px;
margin: 0 0 18px;
padding-bottom: 10px;
border-bottom: 1px solid var(--border);
}
.section-heading h2 {
margin: 0;
font-size: 1.05rem;
font-weight: 700;
}
.section-heading__right {
display: flex;
align-items: baseline;
gap: 16px;
}
.section-count {
font-size: 12px;
color: var(--muted);
}
.section-link {
font-size: 13px;
color: var(--muted);
}
.section-link:hover {
color: var(--secondary);
}
.content-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 16px;
}
.updates-grid {
grid-template-columns: 1fr;
}
.content-card.is-hidden {
display: none;
}
/* ---------------------------------------------------------------- cards */
.content-card {
padding: 20px;
background: var(--surface);
backdrop-filter: blur(16px) saturate(130%);
-webkit-backdrop-filter: blur(16px) saturate(130%);
border: 1px solid var(--border);
border-radius: var(--radius);
display: flex;
flex-direction: column;
min-height: 100%;
scroll-margin-top: 90px;
transition:
border-color 0.2s ease,
box-shadow 0.2s ease,
transform 0.2s ease;
}
.content-card:hover {
border-color: var(--border-strong);
box-shadow: var(--shadow);
}
.content-card.featured {
border-color: rgba(235, 82, 52, 0.28);
}
body.light .content-card.featured {
border-color: rgba(200, 64, 31, 0.3);
}
.card-meta {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 12px;
margin: 0 0 14px;
font-size: 11.5px;
color: var(--muted);
}
.card-kicker {
color: var(--secondary);
letter-spacing: 0.1em;
text-transform: uppercase;
font-size: 11px;
}
.card-status {
margin-left: auto;
display: inline-flex;
align-items: center;
gap: 7px;
}
.card-status::before {
content: "";
width: 5px;
height: 5px;
border-radius: 50%;
background: var(--muted);
display: inline-block;
}
.card-status[data-state="active"]::before {
background: var(--ok);
box-shadow: 0 0 8px rgba(127, 176, 105, 0.6);
}
.card-status[data-state="attention"]::before {
background: var(--secondary);
box-shadow: 0 0 8px rgba(235, 82, 52, 0.5);
}
.content-card h3 {
margin: 0 0 10px;
font-size: 1.1rem;
line-height: 1.3;
}
.card-summary {
color: var(--muted);
margin: 0 0 16px;
font-size: 0.86rem;
flex: 1;
}
.tag-list,
.entry-tag-list {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.tag,
.entry-tag {
display: inline-flex;
padding: 2px 8px;
border-radius: var(--radius);
font-size: 11px;
color: var(--muted);
background: var(--bar);
border: 1px solid var(--border);
}
.card-links,
.entry-links {
display: flex;
flex-wrap: wrap;
gap: 18px;
align-items: center;
}
.card-links {
margin-top: 18px;
padding-top: 16px;
border-top: 1px solid var(--border);
}
.card-link,
.entry-back,
.inline-button {
display: inline-flex;
align-items: center;
color: var(--muted);
font-size: 13px;
}
.card-link:hover,
.entry-back:hover,
.inline-button:hover {
color: var(--secondary);
}
.card-link-primary,
.inline-button-primary {
color: var(--primary);
}
.projects-toggle-shell {
display: flex;
justify-content: center;
margin-top: 24px;
}
.projects-toggle {
font-family: var(--mono);
display: inline-flex;
align-items: center;
border: 1px solid var(--border);
border-radius: var(--radius);
padding: 7px 18px;
font-size: 13px;
background: var(--bar);
color: var(--muted);
cursor: pointer;
transition:
color 0.18s ease,
border-color 0.18s ease;
}
.projects-toggle:hover {
color: var(--bright);
border-color: var(--border-strong);
}
.site-footer {
margin-bottom: 28px;
}
/* ----------------------------------------------------------- entry page */
/* The article column sets the page width, so the card hugs its text. */
.entry-page.page-shell {
width: min(880px, calc(100% - 32px));
}
.entry-shell {
background: var(--surface);
backdrop-filter: blur(18px) saturate(135%);
-webkit-backdrop-filter: blur(18px) saturate(135%);
border: 1px solid var(--border);
border-radius: var(--radius);
box-shadow: var(--shadow);
padding: 32px 34px 38px;
}
.entry-header {
margin-bottom: 8px;
}
.entry-back {
margin-bottom: 26px;
}
.entry-meta {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 14px;
margin-bottom: 14px;
font-size: 11.5px;
color: var(--muted);
}
.entry-pill-primary {
color: var(--secondary);
text-transform: uppercase;
letter-spacing: 0.1em;
font-size: 11px;
}
.entry-links {
margin-top: 20px;
}
.entry-content {
margin-top: 30px;
padding-top: 26px;
border-top: 1px solid var(--border);
font-size: 0.92rem;
}
.entry-content h1,
.entry-content h2,
.entry-content h3,
.entry-content h4 {
margin-top: 32px;
margin-bottom: 10px;
line-height: 1.3;
font-size: 1.02rem;
}
.entry-content p,
.entry-content li {
color: var(--primary);
}
.entry-content ul,
.entry-content ol {
padding-left: 20px;
}
.entry-content li {
margin-bottom: 4px;
}
.entry-content li::marker {
color: var(--secondary);
}
.entry-content a {
color: var(--secondary);
border-bottom: 1px solid rgba(235, 82, 52, 0.3);
}
.entry-content a:hover {
border-bottom-color: var(--secondary);
}
.entry-content blockquote {
margin: 18px 0;
padding: 12px 16px;
border-left: 2px solid var(--secondary);
background: var(--bar);
border-radius: 0 var(--radius) var(--radius) 0;
color: var(--muted);
}
.entry-content code {
background: var(--bar);
border: 1px solid var(--border);
border-radius: 3px;
padding: 1px 5px;
font-size: 0.86rem;
}
.entry-content pre {
padding: 16px 18px;
overflow-x: auto;
background: rgba(0, 0, 0, 0.22);
border: 1px solid var(--border);
border-radius: var(--radius);
font-size: 0.84rem;
line-height: 1.55;
}
body.light .entry-content pre {
background: rgba(0, 0, 0, 0.05);
}
.entry-content pre code {
background: transparent;
border: 0;
padding: 0;
}
.entry-empty {
text-align: center;
padding: 40px 18px;
}
@media only screen and (max-width: 860px) {
.projects-page,
.entry-page {
padding-top: 28px;
}
.entry-page.page-shell {
width: min(880px, calc(100% - 20px));
}
.entry-shell {
padding: 22px 20px 26px;
}
.content-section {
margin-bottom: 34px;
}
.section-heading {
flex-direction: column;
align-items: start;
gap: 6px;
}
}