Files
PunktFri/static/style.css
Henrik Jess Nielsen 187d95043b
All checks were successful
Build and Deploy PunktFri / build-and-deploy (push) Successful in 47s
Rewrite copy (positive tone) + redesign target grid
- All section copy rewritten: solution-first framing, no 'klagesang'
- Hero: 'Selvhosternes registrar. Bygget af jer. Kostpris.'
- Section order: target identity first, then what we build, then background
- Rename 'Problemet' → 'Baggrunden', 'Idéen' → 'Hvad vi bygger'
- Remove all victim language (tvinger, mod din vilje, ingen teknisk gevinst)
- Target grid: drop colored backgrounds/borders, clean bordered grid
  with row separators, blue checkmarks, muted dashes — no template feel
- Fix inline color styles → CSS classes (.required, .optional)
- Footer: slight copy improvement
2026-04-26 23:27:49 +02:00

773 lines
16 KiB
CSS
Raw 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.
:root {
--primary: #2563EB;
--primary-d: #1D4ED8;
--primary-bg: #EFF6FF;
--hero-bg: #0F172A;
--dark: #111827;
--text: #374151;
--muted: #9CA3AF;
--border: #E5E7EB;
--section-alt:#F9FAFB;
--white: #FFFFFF;
--red: #DC2626;
--red-bg: #FEF2F2;
--red-border: #FECACA;
--green: #16A34A;
--green-bg: #F0FDF4;
--green-bdr: #BBF7D0;
--mono: 'IBM Plex Mono', 'Fira Code', 'Consolas', monospace;
/* legacy aliases so tak/admin still work */
--gray-20: #E5E7EB;
--gray-10: #F9FAFB;
}
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'IBM Plex Sans', 'Segoe UI', system-ui, sans-serif;
color: var(--text);
line-height: 1.65;
background: var(--white);
font-size: 1rem;
}
/* ── Header ─────────────────────────── */
header {
background: var(--white);
border-bottom: 1px solid var(--gray-20);
padding: 0 1.5rem;
position: sticky;
top: 0;
z-index: 100;
}
header nav {
max-width: 860px;
margin: 0 auto;
height: 56px;
display: flex;
align-items: center;
}
.logo {
color: var(--dark);
font-weight: 700;
font-size: 1.1rem;
letter-spacing: -0.01em;
text-decoration: none;
font-family: 'IBM Plex Sans', sans-serif;
}
.logo span {
color: var(--primary);
}
/* ── Hero ────────────────────────────── */
.hero {
background: var(--gray-10);
border-bottom: 1px solid var(--gray-20);
padding: 5rem 1.5rem 4.5rem;
}
.hero-inner {
max-width: 860px;
margin: 0 auto;
}
.hero h1 {
font-size: clamp(2.75rem, 7vw, 4.5rem);
font-weight: 700;
letter-spacing: -0.03em;
margin-bottom: 0.75rem;
line-height: 1.0;
color: var(--dark);
}
.hero h1 .accent {
color: var(--primary);
}
.hero .tagline {
font-size: clamp(1rem, 2.2vw, 1.2rem);
color: var(--text);
margin-bottom: 2rem;
font-weight: 400;
}
.hero .intro {
font-size: 1.05rem;
color: var(--text);
line-height: 1.75;
max-width: 640px;
border-left: 3px solid var(--primary);
padding-left: 1rem;
}
.hero-cta {
display: inline-block;
margin-top: 2rem;
padding: 0.875rem 2rem;
background: var(--primary);
color: var(--white);
text-decoration: none;
font-weight: 600;
font-size: 0.975rem;
border-radius: 0;
transition: background 0.15s;
letter-spacing: 0.01em;
}
.hero-cta:hover {
background: var(--primary-d);
}
/* ── Sections ────────────────────────── */
.section {
padding: 3.5rem 1.5rem;
border-bottom: 1px solid var(--gray-20);
}
.section-inner {
max-width: 860px;
margin: 0 auto;
}
.section:nth-child(odd) {
background: var(--white);
}
.section:nth-child(even) {
background: var(--gray-10);
}
.section h2 {
font-size: 1.5rem;
font-weight: 700;
margin-bottom: 1.25rem;
color: var(--dark);
line-height: 1.2;
letter-spacing: -0.01em;
display: flex;
align-items: center;
gap: 0.75rem;
flex-wrap: wrap;
}
.section p {
margin-bottom: 1rem;
font-size: 0.975rem;
color: var(--text);
}
/* ── Problem list ────────────────────── */
.problem-list {
list-style: none;
margin: 1.25rem 0 0;
border: 1px solid var(--gray-20);
background: var(--white);
}
.problem-list li {
padding: 1rem 1rem 1rem 3.25rem;
position: relative;
border-bottom: 1px solid var(--gray-20);
font-size: 0.95rem;
color: var(--text);
}
.problem-list li:last-child {
border-bottom: none;
}
.problem-list li::before {
content: "—";
position: absolute;
left: 1rem;
top: 1rem;
color: var(--red);
font-family: var(--mono);
font-weight: 500;
}
.problem-list li strong {
color: var(--dark);
font-family: var(--mono);
font-size: 0.82rem;
font-weight: 500;
display: block;
margin-bottom: 0.2rem;
}
/* ── Target grid ─────────────────────── */
.target-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.5rem;
margin-top: 1.5rem;
}
@media (max-width: 580px) {
.target-grid { grid-template-columns: 1fr; }
}
.target-box {
padding: 1.5rem;
border: 1px solid var(--gray-20);
background: var(--white);
border-top: 3px solid transparent;
}
.target-box.not-for {
border-top-color: var(--red);
background: var(--red-bg);
border-color: var(--red-border);
border-top-color: var(--red);
}
.target-box.is-for {
border-top-color: var(--green);
background: var(--green-bg);
border-color: var(--green-bdr);
border-top-color: var(--green);
}
.target-box h3 {
font-size: 0.7rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.12em;
margin-bottom: 1rem;
font-family: var(--mono);
}
.target-box.not-for h3 { color: var(--red); }
.target-box.is-for h3 { color: var(--green); }
.target-box ul {
list-style: none;
}
.target-box ul li {
padding: 0.3rem 0 0.3rem 1.4rem;
font-size: 0.9rem;
color: var(--text);
position: relative;
line-height: 1.5;
}
.target-box.not-for ul li::before {
content: "✕";
position: absolute;
left: 0;
color: var(--red);
font-size: 0.7rem;
font-family: var(--mono);
top: 0.42rem;
}
.target-box.is-for ul li::before {
content: "✓";
position: absolute;
left: 0;
color: var(--green);
font-size: 0.8rem;
font-family: var(--mono);
top: 0.35rem;
}
/* ── Idea list ───────────────────────── */
.idea-items {
list-style: none;
margin-top: 1.25rem;
border: 1px solid var(--gray-20);
background: var(--white);
}
.idea-items li {
padding: 0.9rem 1rem 0.9rem 2.75rem;
position: relative;
border-bottom: 1px solid var(--gray-20);
font-size: 0.95rem;
color: var(--text);
}
.idea-items li:last-child {
border-bottom: none;
}
.idea-items li::before {
content: "→";
position: absolute;
left: 1rem;
top: 0.9rem;
color: var(--primary);
font-family: var(--mono);
font-size: 0.85rem;
}
.status-badge {
display: inline-block;
background: var(--primary-bg);
color: var(--primary);
border: 1px solid #B0C9FF;
padding: 0.15rem 0.55rem;
font-size: 0.65rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
font-family: var(--mono);
vertical-align: middle;
position: relative;
top: -2px;
}
/* ── Not-list ────────────────────────── */
.not-list {
list-style: none;
margin-top: 1.25rem;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0.5rem;
}
@media (max-width: 480px) {
.not-list { grid-template-columns: 1fr; }
}
.not-list li {
background: var(--white);
border: 1px solid var(--gray-20);
padding: 0.65rem 1rem;
color: var(--muted);
display: flex;
align-items: center;
gap: 0.6rem;
font-family: var(--mono);
font-size: 0.82rem;
}
.not-list li::before {
content: "";
color: var(--muted);
flex-shrink: 0;
}
/* ── Signup form ─────────────────────── */
.form-section {
background: var(--white) !important;
border-top: 2px solid var(--primary);
}
.form-section .lead {
color: var(--dark) !important;
margin-bottom: 0.5rem;
font-size: 1.05rem !important;
font-weight: 600;
}
.form-section .disclaimer {
color: var(--muted) !important;
font-size: 0.875rem !important;
margin-bottom: 2rem;
line-height: 1.6;
border-left: 3px solid var(--gray-20);
padding-left: 1rem;
}
.form-section .founding-note {
color: var(--dark) !important;
font-size: 0.9rem !important;
margin-bottom: 1rem;
background: var(--primary-bg);
border-left: 3px solid var(--primary);
padding: 0.75rem 1rem;
line-height: 1.6;
}
.signup-form {
margin-top: 1.5rem;
}
.form-group {
margin-bottom: 1.5rem;
}
.form-group label {
display: block;
font-size: 0.875rem;
font-weight: 600;
margin-bottom: 0.4rem;
color: var(--dark);
}
.form-group .hint {
display: block;
font-size: 0.78rem;
color: var(--muted);
font-weight: 400;
margin-top: 0.3rem;
font-family: var(--mono);
}
.form-group input[type="text"],
.form-group input[type="email"],
.form-group input[type="number"],
.form-group textarea {
width: 100%;
padding: 0.625rem 0.875rem;
background: var(--white);
border: 1px solid var(--gray-20);
border-bottom: 2px solid var(--muted);
border-radius: 0;
color: var(--dark);
font-size: 0.975rem;
font-family: inherit;
transition: border-color 0.15s;
}
.form-group input:focus,
.form-group textarea:focus {
outline: none;
border-color: var(--primary);
border-bottom-color: var(--primary);
}
.form-group textarea {
min-height: 100px;
resize: vertical;
}
.radio-group {
display: flex;
gap: 1.5rem;
margin-top: 0.3rem;
}
.radio-group label {
display: flex;
align-items: center;
gap: 0.4rem;
font-weight: 400;
cursor: pointer;
color: var(--text);
font-size: 0.975rem;
}
.radio-group input[type="radio"] {
width: 1rem;
height: 1rem;
accent-color: var(--primary);
flex-shrink: 0;
}
.error-msg {
background: var(--red-bg);
border: 1px solid var(--red-border);
border-left: 3px solid var(--red);
color: var(--red);
padding: 0.875rem 1rem;
margin-bottom: 1.5rem;
font-size: 0.9rem;
}
.submit-btn {
background: var(--primary);
color: var(--white);
border: none;
padding: 0.875rem 2rem;
font-size: 0.975rem;
font-weight: 600;
border-radius: 0;
cursor: pointer;
width: 100%;
transition: background 0.15s;
font-family: inherit;
letter-spacing: 0.01em;
}
.submit-btn:hover {
background: var(--primary-d);
}
/* ── Footer ──────────────────────────── */
footer {
background: var(--gray-10);
border-top: 1px solid var(--gray-20);
padding: 2.5rem 1.5rem;
}
.footer-inner {
max-width: 860px;
margin: 0 auto;
text-align: center;
}
.footer-inner p {
font-size: 0.875rem;
color: var(--muted);
margin-bottom: 0.5rem;
}
.footer-inner strong {
color: var(--dark);
}
.footer-inner a {
color: var(--primary);
text-decoration: none;
}
.footer-inner a:hover {
text-decoration: underline;
}
.footer-small {
font-size: 0.75rem !important;
color: var(--gray-20) !important;
margin-top: 0.25rem;
font-family: var(--mono);
}
/* ── Tak page ────────────────────────── */
.tak-section {
min-height: 65vh;
display: flex;
align-items: center;
justify-content: center;
padding: 3rem 1.5rem;
background: var(--gray-10);
}
.tak-card {
max-width: 520px;
text-align: center;
background: var(--white);
border: 1px solid var(--gray-20);
border-top: 3px solid var(--primary);
padding: 3rem 2.5rem;
}
.tak-icon {
font-size: 2rem;
margin-bottom: 1rem;
color: var(--primary);
font-family: var(--mono);
font-weight: 500;
}
.tak-card h1 {
font-size: 1.75rem;
font-weight: 700;
margin-bottom: 0.75rem;
color: var(--dark);
}
.tak-card p {
color: var(--text);
margin-bottom: 0.75rem;
font-size: 0.975rem;
}
.back-link {
display: inline-block;
margin-top: 1.25rem;
color: var(--primary);
text-decoration: none;
font-weight: 600;
font-family: var(--mono);
font-size: 0.85rem;
}
.back-link:hover {
text-decoration: underline;
}
.tak-contact {
font-size: 0.82rem;
color: var(--muted);
margin-top: 1.25rem;
margin-bottom: 0;
}
.tak-contact a {
color: var(--primary);
text-decoration: none;
}
.tak-contact a:hover {
text-decoration: underline;
}
/* ── Share box (tak page) ────────────── */
.share-box {
margin: 2rem 0 1.5rem;
background: var(--gray-10);
border: 1px solid var(--gray-20);
padding: 1.5rem;
text-align: left;
}
.share-heading {
font-size: 0.9rem !important;
font-weight: 700;
color: var(--dark) !important;
margin-bottom: 0.4rem !important;
}
.share-sub {
font-size: 0.82rem !important;
color: var(--muted) !important;
margin-bottom: 1rem !important;
line-height: 1.55;
}
.share-text {
background: var(--white);
border: 1px solid var(--gray-20);
padding: 0.875rem 1rem;
font-size: 0.82rem;
color: var(--text);
line-height: 1.55;
font-family: var(--mono);
margin-bottom: 0.75rem;
word-break: break-word;
user-select: all;
cursor: text;
}
.copy-btn {
background: var(--dark);
color: var(--white);
border: none;
padding: 0.5rem 1.25rem;
font-size: 0.82rem;
font-weight: 600;
border-radius: 0;
cursor: pointer;
font-family: inherit;
transition: background 0.15s;
}
.copy-btn:hover {
background: #333;
}
.copy-confirm {
display: none;
margin-left: 0.75rem;
font-size: 0.82rem;
color: var(--green);
font-family: var(--mono);
font-weight: 500;
}
/* ── Admin ───────────────────────────── */
.admin-section {
padding: 2rem 1.5rem;
max-width: 1100px;
margin: 0 auto;
}
.admin-section h1 {
font-size: 1.5rem;
font-weight: 700;
margin-bottom: 0.4rem;
color: var(--dark);
}
.admin-meta {
color: var(--muted);
font-size: 0.875rem;
margin-bottom: 1.5rem;
font-family: var(--mono);
}
.table-wrapper {
overflow-x: auto;
}
.signups-table {
width: 100%;
border-collapse: collapse;
font-size: 0.875rem;
}
.signups-table th {
background: var(--dark);
color: var(--white);
padding: 0.75rem 0.875rem;
text-align: left;
font-weight: 600;
border-bottom: 2px solid var(--primary);
white-space: nowrap;
font-family: var(--mono);
font-size: 0.75rem;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.signups-table td {
padding: 0.75rem 0.875rem;
border-bottom: 1px solid var(--gray-20);
vertical-align: top;
color: var(--text);
}
.signups-table tr:hover td {
background: var(--gray-10);
}
.badge-ja {
background: var(--green-bg);
color: var(--green);
padding: 0.15rem 0.5rem;
font-size: 0.7rem;
font-weight: 600;
font-family: var(--mono);
text-transform: uppercase;
border: 1px solid var(--green-bdr);
}
.badge-nej {
background: var(--red-bg);
color: var(--red);
padding: 0.15rem 0.5rem;
font-size: 0.7rem;
font-weight: 600;
font-family: var(--mono);
text-transform: uppercase;
border: 1px solid var(--red-border);
}
.empty-state {
text-align: center;
padding: 3rem;
color: var(--muted);
font-family: var(--mono);
}
/* ── Mobile ──────────────────────────── */
@media (max-width: 640px) {
.hero {
padding: 3.5rem 1.25rem 3rem;
}
.section {
padding: 2.5rem 1.25rem;
}
}
/* ── Form helpers ──────────────────── */
.required {
color: var(--red);
}
.optional {
color: var(--muted);
font-weight: 400;
}