Files
Keith Casko 422dc6f20f
ci/woodpecker/push/woodpecker Pipeline was successful
Use shared project frame for server lab
2026-10-06 17:57:27 -04:00

1141 lines
25 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Keith Casko — Portfolio
Design: enterprise IT / infrastructure (late-2000s–early-2010s refined)
Palette: navy, steel blue, white, light gray, charcoal
*/
/* ---------- Reset & base ---------- */
*,
*::before,
*::after { box-sizing: border-box; }
html { scroll-behavior: smooth; }
:root {
--navy: #0b1d2e;
--navy-2: #10263d;
--steel: #1a6fa5;
--steel-dark: #155a86;
--rule: #d0d7df;
--rule-soft: #e4e8ee;
--bg: #f3f5f8;
--panel: #ffffff;
--text: #2b3540;
--muted: #566471;
--muted-2: #4b5663;
}
body {
margin: 0;
font-family: "Segoe UI", Arial, Helvetica, sans-serif;
font-size: 16px;
line-height: 1.6;
color: var(--text);
background: var(--bg);
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
h1, h2, h3, h4 {
font-family: Georgia, "Times New Roman", serif;
color: var(--navy-2);
font-weight: 700;
line-height: 1.25;
margin: 0 0 .55em;
letter-spacing: -0.005em;
}
p { margin: 0 0 1em; }
a { color: var(--steel); text-decoration: none; }
a:hover { text-decoration: underline; }
a:focus-visible,
button:focus-visible {
outline: 2px solid var(--steel);
outline-offset: 2px;
border-radius: 2px;
}
img { max-width: 100%; display: block; }
code {
font-family: "Consolas", "Menlo", "Courier New", monospace;
font-size: 0.92em;
background: #eef2f6;
border: 1px solid var(--rule-soft);
padding: 0 4px;
border-radius: 3px;
}
/* ---------- Layout ---------- */
.container {
width: 100%;
max-width: 1160px;
margin: 0 auto;
padding: 0 24px;
}
section { padding: 46px 0; }
.section-head {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 16px;
margin-bottom: 24px;
padding-bottom: 12px;
border-bottom: 2px solid var(--steel);
position: relative;
}
.section-head::after {
content: "";
position: absolute;
left: 0; right: 0;
bottom: -5px;
height: 1px;
background: var(--rule);
}
.section-head h2 { margin: 0; font-size: 26px; color: var(--navy-2); }
.section-head .subtitle { color: var(--muted); font-size: 14px; }
/* ---------- Header ---------- */
.site-header {
background: var(--navy);
color: #fff;
border-bottom: 4px solid var(--steel);
}
.site-header .container {
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
padding-top: 20px;
padding-bottom: 20px;
}
.brand-home {
display: block;
color: inherit;
text-decoration: none;
}
.brand-home:hover { text-decoration: none; }
.brand .name {
font-family: Georgia, "Times New Roman", serif;
font-size: 24px;
font-weight: 700;
color: #fff;
line-height: 1.1;
letter-spacing: 0.1px;
}
.brand .tagline {
display: block;
font-size: 12.5px;
color: #a9b8c7;
margin-top: 4px;
letter-spacing: .25px;
}
.brand .location {
display: inline-block;
margin-left: 10px;
padding-left: 10px;
border-left: 1px solid #3b556f;
color: #8ea1b5;
font-size: 12.5px;
}
.site-nav ul {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-wrap: wrap;
gap: 2px;
}
.site-nav a {
display: block;
padding: 8px 14px;
color: #e4ecf3;
font-size: 14px;
border-radius: 3px;
transition: background-color .12s ease, color .12s ease;
}
.site-nav a:hover { background: #16314a; text-decoration: none; color: #fff; }
.site-nav a.nav-resume {
margin-left: 8px;
border: 1px solid #69839d;
background: #102a42;
color: #fff;
font-weight: 600;
}
.site-nav a.nav-resume:hover {
background: #1a3b59;
border-color: #8da4ba;
}
.site-nav a.active {
background: var(--steel);
color: #fff;
box-shadow: inset 0 -2px 0 rgba(0,0,0,0.15);
}
.nav-toggle {
display: none;
background: transparent;
border: 1px solid #3b556f;
color: #fff;
padding: 6px 10px;
font-size: 14px;
border-radius: 3px;
cursor: pointer;
}
/* ---------- Hero ---------- */
.hero { padding: 34px 0 42px; }
.hero-grid {
background: var(--panel);
border: 1px solid var(--rule);
border-top: 3px solid var(--steel);
border-radius: 4px;
box-shadow: 0 2px 6px rgba(16, 38, 61, 0.06);
padding: 36px;
display: grid;
grid-template-columns: minmax(0, 1.12fr) minmax(340px, .88fr);
gap: 34px;
align-items: center;
}
.hero h1 { font-size: 34px; margin-bottom: 18px; line-height: 1.2; }
.hero p { color: var(--muted-2); font-size: 16px; }
.hero .lede { color: var(--text); }
.hero-target {
margin: 0 0 10px;
color: var(--steel);
font-size: 13px !important;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .45px;
}
.hero-actions {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-top: 24px;
}
.hero-facts {
display: flex;
flex-wrap: wrap;
gap: 8px 10px;
margin-top: 24px;
padding-top: 18px;
border-top: 1px solid var(--rule-soft);
}
.hero-facts span {
background: #eef2f6;
border: 1px solid var(--rule);
border-radius: 3px;
padding: 6px 9px;
font-size: 12.5px;
color: var(--muted-2);
font-weight: 600;
}
.hero-proof {
margin: 0;
background: #10283d;
border: 1px solid #29455f;
border-radius: 4px;
padding: 14px;
box-shadow: 0 6px 18px rgba(16, 38, 61, .12);
}
.hero-proof img {
width: 100%;
aspect-ratio: 16 / 10;
object-fit: contain;
background: #10283d;
}
.hero-proof figcaption {
color: #c4d3df;
font-size: 12px;
line-height: 1.45;
margin-top: 10px;
}
.btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 10px 18px;
font-size: 14px;
font-weight: 600;
border-radius: 3px;
border: 1px solid transparent;
cursor: pointer;
text-decoration: none;
line-height: 1.2;
transition: background-color .12s ease, border-color .12s ease, color .12s ease;
}
.btn-primary { background: var(--steel); color: #fff; border-color: var(--steel-dark); }
.btn-primary:hover { background: var(--steel-dark); color: #fff; text-decoration: none; }
.btn-secondary { background: #fff; color: var(--navy-2); border-color: #c3cbd4; }
.btn-secondary:hover { background: #eef2f6; border-color: #9fadbd; text-decoration: none; }
.hero-image {
background: #e9edf1;
border: 1px solid var(--rule);
border-radius: 3px;
overflow: hidden;
aspect-ratio: 4 / 3;
display: flex;
align-items: center;
justify-content: center;
}
.hero-image img { width: 100%; height: 100%; object-fit: cover; }
.hero-montage {
display: grid;
grid-template-columns: 1.25fr .9fr;
grid-template-rows: 1fr 1fr;
gap: 8px;
aspect-ratio: 4 / 3;
overflow: hidden;
border: 1px solid var(--rule);
border-radius: 3px;
background: #10283d;
padding: 8px;
}
.hero-montage img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
border: 1px solid rgba(255,255,255,.10);
}
.hero-montage .montage-main {
grid-row: 1 / 3;
object-fit: contain;
background: #10283d;
}
.image-placeholder {
width: 100%;
height: 100%;
background:
repeating-linear-gradient(45deg, #e3e8ed 0, #e3e8ed 10px, #eef2f6 10px, #eef2f6 20px);
color: #5a6775;
font-size: 12.5px;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
padding: 12px;
letter-spacing: .2px;
}
/* ---------- Projects ---------- */
.projects-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 24px;
}
.project-card {
background: var(--panel);
border: 1px solid var(--rule);
border-radius: 4px;
box-shadow: 0 1px 2px rgba(16, 38, 61, 0.04);
display: flex;
flex-direction: column;
overflow: hidden;
transition: border-color .15s ease, box-shadow .15s ease;
}
.project-card:hover {
border-color: #9fb6ca;
box-shadow: 0 4px 14px rgba(16, 38, 61, 0.10);
}
.project-card .thumb {
background: #e9edf1;
aspect-ratio: 16 / 9;
border-bottom: 1px solid var(--rule);
overflow: hidden;
}
.project-card .thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.project-card .thumb .image-placeholder { font-size: 12px; }
.project-card .body { padding: 20px 22px 22px; display: flex; flex-direction: column; flex: 1; }
.project-card h3 { font-size: 18px; margin-bottom: 10px; color: var(--navy-2); }
.project-card:hover h3 { color: var(--steel-dark); }
.project-card p {
font-size: 14px;
line-height: 1.55;
color: var(--muted-2);
margin-bottom: 16px;
flex: 1;
}
.project-card .view-link {
font-size: 13.5px;
font-weight: 600;
color: var(--steel);
align-self: flex-start;
}
.project-card .view-link::after { content: " \203A"; color: var(--steel); }
/* ---------- What I Work With ---------- */
.skills-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 18px;
}
.skill-card {
background: var(--panel);
border: 1px solid var(--rule);
border-radius: 4px;
padding: 18px 20px;
box-shadow: 0 1px 2px rgba(16, 38, 61, 0.04);
}
.skill-head {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 10px;
padding-bottom: 8px;
border-bottom: 1px solid var(--rule-soft);
}
.skill-head .ico { width: 22px; height: 22px; flex: 0 0 22px; color: var(--steel); }
.skill-card h3 {
font-size: 15px;
font-family: "Segoe UI", Arial, sans-serif;
color: var(--navy-2);
margin: 0;
line-height: 1.2;
}
.skill-card ul {
list-style: none;
margin: 0;
padding: 0;
font-size: 13.5px;
line-height: 1.55;
color: var(--muted-2);
}
.skill-card li { padding: 2px 0; }
/* ---------- Certifications & Credentials ---------- */
#credentials .container {
max-width: 1320px;
}
.credentials-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 20px;
}
.credential-card {
min-width: 0;
background: var(--panel);
border: 1px solid var(--rule);
border-top: 3px solid var(--steel);
border-radius: 4px;
padding: 18px;
box-shadow: 0 1px 2px rgba(16, 38, 61, 0.04);
display: grid;
grid-template-columns: 1fr;
gap: 10px;
align-items: start;
text-align: center;
}
.credential-badge {
min-height: 220px;
display: flex;
align-items: center;
justify-content: center;
}
.credential-badge img {
width: 190px;
height: 190px;
object-fit: contain;
display: block;
}
.credential-badge-google img {
transform: scale(1.08);
}
.credential-copy h3 {
font-size: 18px;
margin-bottom: 6px;
}
.credential-copy p {
margin: 0 0 16px;
color: var(--muted);
font-size: 14px;
}
.credential-copy .view-link {
font-size: 13.5px;
font-weight: 600;
}
.credential-copy .view-link::after {
content: " \203A";
}
/* ---------- Troubleshooting ---------- */
.notes-list {
background: var(--panel);
border: 1px solid var(--rule);
border-radius: 4px;
overflow: hidden;
box-shadow: 0 1px 2px rgba(16, 38, 61, 0.04);
}
.note-item {
display: grid;
grid-template-columns: 44px 1fr 24px;
gap: 18px;
align-items: start;
padding: 18px 22px;
border-bottom: 1px solid var(--rule-soft);
transition: background-color .12s ease;
}
.note-item:last-child { border-bottom: 0; }
.note-item:hover { background: #f7f9fb; }
.note-item .icon {
width: 36px;
height: 36px;
background: #eaf1f7;
color: var(--steel);
border: 1px solid #cfdbe6;
border-radius: 3px;
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 11px;
font-family: "Consolas", monospace;
letter-spacing: .5px;
}
.note-item h3 {
font-family: "Segoe UI", Arial, sans-serif;
font-size: 16px;
margin: 0 0 4px;
color: var(--steel);
}
.note-item:hover h3 { color: var(--steel-dark); }
.note-item p { margin: 0; color: var(--muted-2); font-size: 14px; }
.note-item ul {
margin: 8px 0 0;
padding-left: 20px;
color: var(--muted-2);
font-size: 13.5px;
line-height: 1.6;
}
.note-item li { padding: 1px 0; }
.note-item .chevron { color: #94a1ae; font-size: 20px; padding-top: 6px; }
/* ---------- About ---------- */
.about-grid {
display: grid;
grid-template-columns: minmax(240px, .8fr) 1.7fr;
gap: 24px;
align-items: start;
}
.about-photo {
background: #e9edf1;
border: 1px solid var(--rule);
border-radius: 3px;
overflow: hidden;
}
.about-text {
background: var(--panel);
border: 1px solid var(--rule);
border-top: 3px solid var(--steel);
border-radius: 4px;
padding: 22px 24px;
}
.about-text h3 { font-size: 19px; margin-bottom: 12px; }
.about-focus {
background: #eef2f6;
border: 1px solid var(--rule);
border-top: 3px solid var(--steel);
border-radius: 4px;
padding: 22px 24px;
}
.about-focus h3 {
font-size: 18px;
margin-bottom: 12px;
}
.about-focus ul {
margin: 0;
padding-left: 19px;
color: var(--muted-2);
font-size: 14px;
line-height: 1.6;
}
.about-links {
display: flex;
flex-wrap: wrap;
gap: 12px;
margin-top: 18px;
padding-top: 14px;
border-top: 1px solid var(--rule);
}
.about-links a {
font-size: 13.5px;
font-weight: 600;
}
/* ---------- Education / Experience ---------- */
.two-col {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 24px;
}
.experience-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 24px;
}
.panel {
background: var(--panel);
border: 1px solid var(--rule);
border-top: 3px solid var(--steel);
border-radius: 4px;
padding: 22px 26px;
box-shadow: 0 1px 2px rgba(16, 38, 61, 0.04);
}
.panel h3 { font-size: 18px; margin-bottom: 6px; }
.panel .meta { color: var(--muted); font-size: 13.5px; margin-bottom: 14px; }
.panel h4 {
font-family: "Segoe UI", Arial, sans-serif;
font-size: 13.5px;
color: var(--navy-2);
margin: 16px 0 6px;
text-transform: uppercase;
letter-spacing: .4px;
}
.panel ul {
margin: 0;
padding-left: 20px;
font-size: 14px;
line-height: 1.6;
color: var(--muted-2);
}
.panel li { padding: 2px 0; }
.panel-costco {
grid-column: 1 / -1;
}
.prior-experience {
margin: 18px 0 0;
padding-top: 14px;
border-top: 1px solid var(--rule-soft);
color: var(--muted-2);
font-size: 13.5px;
}
/* ---------- Contact banner ---------- */
.contact-cta {
background: var(--navy);
color: #e4ecf3;
border-radius: 4px;
border-top: 3px solid var(--steel);
padding: 28px 32px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
}
.contact-cta h2 { color: #fff; margin: 0 0 6px; font-size: 22px; }
.contact-cta p { margin: 0; color: #c7d3df; font-size: 14.5px; }
.contact-cta p a { color: #f4f8fb; font-weight: 600; text-decoration: underline; text-underline-offset: 2px; }
.contact-cta p a:hover { color: #ffffff; }
/* ---------- Footer ---------- */
.site-footer {
background: var(--navy);
color: #a9b8c7;
padding: 24px 0;
margin-top: 48px;
border-top: 4px solid var(--steel);
font-size: 13.5px;
}
.site-footer .container {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
}
.site-footer a { color: #cfd8e1; }
.site-footer a:hover { color: #fff; }
.footer-links {
list-style: none;
margin: 0;
padding: 0;
display: flex;
gap: 20px;
flex-wrap: wrap;
}
/* ---------- Responsive ---------- */
@media (max-width: 980px) {
.hero-grid { grid-template-columns: 1fr; padding: 30px; }
.hero-proof { max-width: 680px; }
.projects-grid { grid-template-columns: repeat(2, 1fr); }
.skills-grid { grid-template-columns: repeat(2, 1fr); }
.about-grid { grid-template-columns: 1fr; }
.two-col { grid-template-columns: 1fr; }
.experience-grid { grid-template-columns: 1fr; }
.contact-cta { flex-direction: column; align-items: flex-start; }
}
@media (max-width: 640px) {
body { font-size: 15.5px; }
section { padding: 36px 0; }
.hero { padding: 28px 0 36px; }
.hero-grid { padding: 22px; }
.hero h1 { font-size: 27px; }
.section-head h2 { font-size: 22px; }
.projects-grid { grid-template-columns: 1fr; }
.skills-grid { grid-template-columns: 1fr; }
.credentials-grid { grid-template-columns: 1fr; }
.credential-card { grid-template-columns: 1fr; text-align: center; }
.credential-badge { min-height: 190px; }
.credential-badge img { width: 165px; height: 165px; }
.credential-copy .view-link { display: inline-block; }
.note-item { grid-template-columns: 36px 1fr; padding: 16px; }
.note-item .chevron { display: none; }
.brand .location { display: block; margin: 4px 0 0; padding-left: 0; border-left: 0; }
.nav-toggle { display: inline-block; }
.site-header .container { flex-wrap: wrap; }
.site-nav { flex-basis: 100%; display: none; }
.site-nav.open { display: block; }
.site-nav ul { flex-direction: column; gap: 2px; }
.site-nav a { padding: 10px 12px; }
.site-nav a.nav-resume { margin-left: 0; margin-top: 4px; }
.section-head { flex-direction: column; align-items: flex-start; gap: 4px; }
}
.about-headshot {
width: 100%;
height: auto;
display: block;
}
.contact-actions {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
/* ---------- Diagram-style project thumb ---------- */
.project-card .thumb-diagram {
display: flex;
align-items: center;
justify-content: center;
}
.project-card .thumb-diagram img {
width: 100%;
height: 100%;
object-fit: contain;
background: #13283c;
border: 1px solid rgba(255,255,255,.10);
}
.project-card .card-link { display: block; color: inherit; }
.project-card .card-link:hover { text-decoration: none; }
/* ---------- Homelab detail page ---------- */
.eyebrow { font-size: 13px; color: var(--muted); margin: 0 0 10px; }
.eyebrow a { color: var(--steel); font-weight: 600; }
.lab-hero {
background: var(--panel);
border: 1px solid var(--rule);
border-top: 3px solid var(--steel);
border-radius: 4px;
box-shadow: 0 2px 6px rgba(16, 38, 61, 0.06);
padding: 32px 36px;
display: grid;
grid-template-columns: 1fr;
gap: 24px;
align-items: center;
}
.lab-hero h1 { font-size: 30px; margin-bottom: 14px; }
.lab-hero .lede { color: var(--text); }
.lab-hero-figure { margin: 0; width: 100%; }
.lab-hero-figure img {
width: 100%;
border: 1px solid var(--rule);
border-radius: 3px;
background: #fff;
}
.lab-hero-figure figcaption {
font-size: 12px;
color: var(--muted);
padding: 8px 2px 0;
line-height: 1.5;
}
.lab-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 18px; }
.lab-tags span {
background: #eef2f6;
border: 1px solid var(--rule);
color: var(--navy-2);
padding: 4px 10px;
font-size: 12px;
border-radius: 3px;
font-weight: 600;
letter-spacing: .2px;
}
.lab-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.lab-panel {
background: var(--panel);
border: 1px solid var(--rule);
border-top: 3px solid var(--steel);
border-radius: 4px;
padding: 22px 26px;
box-shadow: 0 1px 2px rgba(16, 38, 61, 0.04);
}
.lab-panel h3 { font-size: 17px; margin: 0 0 10px; }
.lab-panel h3.h3-sub { font-size: 15px; margin-top: 18px; }
.lab-panel h4 {
font-family: "Segoe UI", Arial, sans-serif;
font-size: 12.5px;
color: var(--navy-2);
margin: 14px 0 6px;
text-transform: uppercase;
letter-spacing: .4px;
}
.kv { list-style: none; margin: 0; padding: 0; font-size: 14px; }
.kv li {
display: grid;
grid-template-columns: 150px 1fr;
gap: 10px;
padding: 6px 0;
border-bottom: 1px solid var(--rule-soft);
}
.kv li:last-child { border-bottom: 0; }
.kv li span { color: var(--muted); font-size: 13px; }
.lab-tree, .lab-code {
background: #0b1d2e;
color: #e4ecf3;
font-family: "Consolas", "Menlo", monospace;
font-size: 12.5px;
line-height: 1.55;
padding: 14px 16px;
border-radius: 3px;
overflow-x: auto;
margin: 0 0 10px;
white-space: pre;
}
.lab-code { color: #b8d6ea; }
.mono-list { font-family: "Consolas", "Menlo", monospace; font-size: 13px; color: var(--text); margin: 6px 0 0; }
.lab-table-wrap { overflow-x: auto; }
.lab-table {
width: 100%;
border-collapse: collapse;
background: var(--panel);
border: 1px solid var(--rule);
font-size: 14px;
}
.lab-table thead th {
text-align: left;
background: #eef2f6;
color: var(--navy-2);
padding: 10px 12px;
border-bottom: 1px solid var(--rule);
font-size: 13px;
font-family: "Segoe UI", Arial, sans-serif;
}
.lab-table td {
padding: 10px 12px;
border-bottom: 1px solid var(--rule-soft);
vertical-align: top;
}
.lab-table tr:last-child td { border-bottom: 0; }
.lab-table-sm { font-size: 13px; }
.lab-table-sm th, .lab-table-sm td { padding: 7px 10px; }
.status-ok {
background: #eaf5ec;
border-left: 3px solid #3f8c53;
color: #26492f;
padding: 8px 12px;
margin: 10px 0 0;
font-size: 13.5px;
border-radius: 2px;
}
.lab-skill-list {
background: var(--panel);
border: 1px solid var(--rule);
border-radius: 4px;
padding: 20px 28px 20px 44px;
list-style: disc;
color: var(--muted-2);
font-size: 14.5px;
line-height: 1.65;
}
.lab-skill-list li { padding: 3px 0; }
.lab-skill-list strong { color: var(--navy-2); }
@media (max-width: 980px) {
.lab-hero { grid-template-columns: 1fr; padding: 24px; }
.lab-grid-2 { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
.lab-hero h1 { font-size: 24px; }
.lab-panel { padding: 18px; }
.lab-tree, .lab-code { font-size: 12px; padding: 12px; }
}
/* Portfolio evidence-focused updates */
.skills-grid-focused { grid-template-columns: repeat(2, minmax(0,1fr)); }
.skills-grid-focused .skill-card { display:flex; flex-direction:column; gap:10px; }
.skills-grid-focused .skill-card h3 { font-size:17px; font-family:Georgia,"Times New Roman",serif; margin:0; }
.skills-grid-focused .skill-card p { color:var(--muted-2); font-size:14px; margin:0; flex:1; }
.skills-grid-focused .view-link, .case-card .view-link { font-size:13.5px; font-weight:600; }
.screenshot-frame {
background: #101820;
padding: 18px 8px 8px;
position: relative;
border-color: #263746;
box-shadow: 0 4px 14px rgba(16, 38, 61, 0.10);
}
.screenshot-frame::before {
content: "";
position: absolute;
top: 7px;
left: 10px;
width: 34px;
height: 5px;
border-radius: 999px;
background: rgba(255,255,255,.24);
}
.screenshot-frame img {
border: 1px solid rgba(255,255,255,.10);
}
#troubleshooting {
background: #e8edf2;
border-top: 1px solid #d8e0e8;
border-bottom: 1px solid #d8e0e8;
}
.case-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0,1fr));
gap: 22px;
}
.case-card {
background: #10263d;
border: 1px solid #29455f;
border-top: 3px solid #5ca3d2;
padding: 26px;
border-radius: 4px;
box-shadow: 0 6px 18px rgba(16, 38, 61, .10);
}
.case-meta {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 10px;
}
.case-label {
display: block;
font-size: 12px;
text-transform: uppercase;
font-weight: 700;
color: #8fc4e6;
letter-spacing: .4px;
margin-bottom: 0;
}
.status-pill {
display: inline-flex;
align-items: center;
white-space: nowrap;
border-radius: 999px;
padding: 4px 8px;
font-size: 11px;
font-weight: 700;
letter-spacing: .2px;
}
.status-pill.verified {
background: #163c2a;
border: 1px solid #4f936a;
color: #c9f1d7;
}
.case-card h3 {
font-size: 20px;
color: #ffffff;
}
.case-card p {
font-size: 14px;
color: #c9d5df;
}
.case-card p strong {
color: #ffffff;
}
.case-card code {
background: #0a1a29;
border-color: #35536d;
color: #d8edf9;
}
.case-terminal {
margin: 18px 0;
padding: 14px 16px;
overflow-x: auto;
background: #081521;
border: 1px solid #35536d;
border-radius: 3px;
color: #bde3c7;
font: 13px/1.55 "Consolas", "Menlo", monospace;
white-space: pre-wrap;
}
.case-terminal span {
color: #8fc4e6;
}
.case-card .view-link {
color: #9ed4f3;
}
.case-card .view-link:hover {
color: #ffffff;
}
@media (max-width: 700px) {
.skills-grid-focused, .case-grid { grid-template-columns: 1fr; }
.case-meta { align-items: flex-start; flex-direction: column; }
}
/* ---------- Homelab dark project treatment ---------- */
.homelab-page .lab-hero,
.homelab-page .lab-panel {
background: #13283c;
border-color: #35536d;
color: #e7eef5;
box-shadow: 0 2px 8px rgba(8, 24, 38, 0.14);
}
.homelab-page .lab-hero h1,
.homelab-page .lab-panel h2,
.homelab-page .lab-panel h3,
.homelab-page .lab-panel h4,
.homelab-page .lab-panel strong {
color: #f4f7fa;
}
.homelab-page .lab-hero .lede,
.homelab-page .lab-panel p,
.homelab-page .lab-panel li,
.homelab-page .lab-panel dd,
.homelab-page .lab-panel dt,
.homelab-page .lab-hero-figure figcaption {
color: #c3d0dc;
}
.homelab-page .lab-hero-figure img {
background: #10283d;
border-color: #35536d;
}
.homelab-page .lab-tags span {
background: #0f2235;
border-color: #35536d;
color: #d8e5ef;
}
.homelab-page .lab-tree,
.homelab-page .lab-code {
background: #0b1d2e;
border-color: #35536d;
color: #d8e5ef;
}
.homelab-page .kv li {
border-color: #2f4a61;
}
.homelab-page .eyebrow,
.homelab-page .eyebrow a {
color: #8fc3e8;
}
.homelab-page .lab-table {
background: #13283c;
border-color: #35536d;
color: #d8e5ef;
}
.homelab-page .lab-table thead th {
background: #0f2235;
color: #f4f7fa;
border-color: #35536d;
}
.homelab-page .lab-table td {
border-color: #2f4a61;
}
.homelab-page .status-ok {
background: #163626;
border-left-color: #59a86f;
color: #d8eadc;
}
.homelab-page .lab-skill-list {
background: #13283c;
border-color: #35536d;
color: #c3d0dc;
}
.homelab-page .lab-skill-list strong {
color: #f4f7fa;
}
.homelab-page .mono-list,
.homelab-page .kv li span {
color: #c3d0dc;
}
/* Homelab contrast corrections */
.homelab-page .lab-hero-text p {
color: #edf3f8;
}
.homelab-page .lab-hero-text strong {
color: #ffffff;
}
.homelab-page code {
background: #0a1b2a;
border-color: #3d5a72;
color: #eaf3fa;
}
.homelab-page .status-ok code {
background: #0d291b;
border-color: #3f6f4d;
color: #f0faf2;
}
.homelab-page .lab-hero-figure figcaption {
color: #d6e1ea;
}