design: SUSE-inspireret redesign
Some checks failed
Build and Deploy PunktFri / build-and-deploy (push) Failing after 5s

- Farveskema: SUSE skovgrøn (#0C322C) + signaturgrøn (#30BA78)
- Typografi: Source Sans 3 + JetBrains Mono til tekniske elementer
- Installer-layout: venstre grønne border-accenter på sektionsoverskrifter
- Hero: venstre-alignet med grøn left-border på intro-tekst
- Lister: panel-stil med border-top accent (rød/grøn)
- Footer: mørk grøn (matcher header)
- Knap: SUSE grøn med mørk tekst
This commit is contained in:
Henrik Jess Nielsen
2026-04-26 22:34:11 +02:00
parent afddfc4242
commit df365ec49f
3 changed files with 287 additions and 158 deletions

View File

@@ -1,3 +1,22 @@
:root {
--suse-dark: #0C322C;
--suse-mid: #1a4a3f;
--suse-green: #30BA78;
--suse-green-d: #22a065;
--suse-pale: #f2faf6;
--suse-light: #e4f5ec;
--suse-border: #c8e8d8;
--text: #1a2a24;
--text-mid: #3a5248;
--text-muted: #6b8880;
--border: #dde8e4;
--white: #ffffff;
--red: #c0392b;
--red-bg: #fdf2f1;
--red-border: #f5c4be;
--mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
}
*, *::before, *::after { *, *::before, *::after {
box-sizing: border-box; box-sizing: border-box;
margin: 0; margin: 0;
@@ -5,70 +24,100 @@
} }
body { body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif; font-family: 'Source Sans 3', 'Segoe UI', system-ui, sans-serif;
color: #1a1a1a; color: var(--text);
line-height: 1.65; line-height: 1.65;
background: #fff; background: var(--white);
font-size: 1rem;
} }
/* ── Nav ─────────────────────────────── */ /* ── Nav ─────────────────────────────── */
header { header {
background: #0f172a; background: var(--suse-dark);
padding: 1rem 1.5rem; padding: 0 1.5rem;
border-bottom: 2px solid var(--suse-green);
} }
header nav { header nav {
max-width: 860px; max-width: 900px;
margin: 0 auto; margin: 0 auto;
height: 54px;
display: flex;
align-items: center;
} }
.logo { .logo {
color: #fff; color: var(--white);
font-weight: 800; font-weight: 700;
font-size: 1.2rem; font-size: 1.15rem;
letter-spacing: -0.02em; letter-spacing: 0.01em;
text-decoration: none; text-decoration: none;
font-family: 'Source Sans 3', sans-serif;
} }
.logo span { .logo span {
color: #818cf8; color: var(--suse-green);
} }
/* ── Hero ────────────────────────────── */ /* ── Hero ────────────────────────────── */
.hero { .hero {
background: #0f172a; background: var(--suse-dark);
color: #fff; color: var(--white);
padding: 5rem 1.5rem 4.5rem; padding: 4.5rem 1.5rem 4rem;
text-align: center; text-align: left;
border-bottom: 1px solid #1e293b; position: relative;
overflow: hidden;
}
.hero::after {
content: "";
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 3px;
background: linear-gradient(90deg, var(--suse-green) 0%, transparent 60%);
}
.hero-inner {
max-width: 760px;
margin: 0 auto;
} }
.hero h1 { .hero h1 {
font-size: clamp(2.2rem, 6vw, 3.8rem); font-size: clamp(2.4rem, 6vw, 4rem);
font-weight: 800; font-weight: 700;
letter-spacing: -0.04em; letter-spacing: -0.02em;
margin-bottom: 0.6rem; margin-bottom: 0.5rem;
line-height: 1.1; line-height: 1.05;
color: var(--white);
}
.hero h1 .accent {
color: var(--suse-green);
} }
.hero .tagline { .hero .tagline {
font-size: clamp(1rem, 2.5vw, 1.3rem); font-size: clamp(1rem, 2.2vw, 1.2rem);
color: #94a3b8; color: #a8cfc0;
margin-bottom: 2rem; margin-bottom: 2rem;
font-weight: 400;
font-style: italic; font-style: italic;
} }
.hero .intro { .hero .intro {
max-width: 580px; font-size: 1rem;
margin: 0 auto; color: #c4ddd4;
font-size: 1.05rem;
color: #cbd5e1;
line-height: 1.75; line-height: 1.75;
max-width: 640px;
border-left: 3px solid var(--suse-green);
padding-left: 1rem;
} }
/* ── Sections ────────────────────────── */ /* ── Sections ────────────────────────── */
.section { .section {
padding: 3.5rem 1.5rem; padding: 3rem 1.5rem;
border-bottom: 1px solid var(--border);
} }
.section-inner { .section-inner {
@@ -77,39 +126,49 @@ header nav {
} }
.section:nth-child(odd) { .section:nth-child(odd) {
background: #f8fafc; background: var(--white);
} }
.section:nth-child(even) { .section:nth-child(even) {
background: #fff; background: var(--suse-pale);
} }
.section h2 { .section h2 {
font-size: 1.55rem; font-size: 1.35rem;
font-weight: 700; font-weight: 700;
margin-bottom: 1.25rem; margin-bottom: 1.25rem;
letter-spacing: -0.02em; color: var(--suse-dark);
line-height: 1.2; padding-left: 0.9rem;
border-left: 3px solid var(--suse-green);
line-height: 1.25;
display: flex;
align-items: center;
gap: 0.6rem;
flex-wrap: wrap;
} }
.section p { .section p {
margin-bottom: 1rem; margin-bottom: 1rem;
font-size: 0.975rem; font-size: 0.975rem;
color: #374151; color: var(--text-mid);
} }
/* ── Problem list ────────────────────── */ /* ── Problem list ────────────────────── */
.problem-list { .problem-list {
list-style: none; list-style: none;
margin: 1.25rem 0 0; margin: 1rem 0 0;
border: 1px solid var(--border);
border-radius: 4px;
overflow: hidden;
} }
.problem-list li { .problem-list li {
padding: 0.7rem 0 0.7rem 1.6rem; padding: 0.85rem 1rem 0.85rem 3rem;
position: relative; position: relative;
border-bottom: 1px solid #e5e7eb; border-bottom: 1px solid var(--border);
font-size: 0.95rem; font-size: 0.95rem;
color: #374151; color: var(--text-mid);
background: var(--white);
} }
.problem-list li:last-child { .problem-list li:last-child {
@@ -117,22 +176,28 @@ header nav {
} }
.problem-list li::before { .problem-list li::before {
content: ""; content: "";
position: absolute; position: absolute;
left: 0; left: 1rem;
color: #dc2626; top: 50%;
font-weight: 700; transform: translateY(-50%);
color: var(--red);
font-size: 0.75rem;
font-family: var(--mono);
} }
.problem-list li strong { .problem-list li strong {
color: #111827; color: var(--text);
font-family: var(--mono);
font-size: 0.85rem;
font-weight: 500;
} }
/* ── Target grid ─────────────────────── */ /* ── Target grid ─────────────────────── */
.target-grid { .target-grid {
display: grid; display: grid;
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
gap: 1.25rem; gap: 1rem;
margin-top: 1.25rem; margin-top: 1.25rem;
} }
@@ -143,35 +208,42 @@ header nav {
} }
.target-box { .target-box {
padding: 1.25rem 1.25rem 1rem; padding: 1.25rem;
border-radius: 7px; border: 1px solid var(--border);
border: 1px solid #e5e7eb; border-radius: 3px;
background: var(--white);
border-top: 3px solid transparent;
} }
.target-box.not-for { .target-box.not-for {
background: #fff5f5; border-top-color: var(--red);
border-color: #fecaca; background: var(--red-bg);
border-color: var(--red-border);
border-top-color: var(--red);
} }
.target-box.is-for { .target-box.is-for {
background: #f0fdf4; border-top-color: var(--suse-green);
border-color: #bbf7d0; background: var(--suse-pale);
border-color: var(--suse-border);
border-top-color: var(--suse-green);
} }
.target-box h3 { .target-box h3 {
font-size: 0.78rem; font-size: 0.72rem;
font-weight: 700; font-weight: 700;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.07em; letter-spacing: 0.1em;
margin-bottom: 0.85rem; margin-bottom: 0.85rem;
font-family: var(--mono);
} }
.target-box.not-for h3 { .target-box.not-for h3 {
color: #dc2626; color: var(--red);
} }
.target-box.is-for h3 { .target-box.is-for h3 {
color: #16a34a; color: var(--suse-green-d);
} }
.target-box ul { .target-box ul {
@@ -179,42 +251,49 @@ header nav {
} }
.target-box ul li { .target-box ul li {
padding: 0.3rem 0 0.3rem 1.3rem; padding: 0.3rem 0 0.3rem 1.4rem;
font-size: 0.875rem; font-size: 0.9rem;
color: #374151; color: var(--text-mid);
position: relative; position: relative;
line-height: 1.45;
} }
.target-box.not-for ul li::before { .target-box.not-for ul li::before {
content: "✕"; content: "✕";
position: absolute; position: absolute;
left: 0; left: 0;
color: #dc2626; color: var(--red);
font-size: 0.8rem; font-size: 0.7rem;
top: 0.35rem; font-family: var(--mono);
top: 0.4rem;
} }
.target-box.is-for ul li::before { .target-box.is-for ul li::before {
content: "✓"; content: "✓";
position: absolute; position: absolute;
left: 0; left: 0;
color: #16a34a; color: var(--suse-green-d);
font-size: 0.85rem; font-size: 0.8rem;
font-family: var(--mono);
top: 0.3rem; top: 0.3rem;
} }
/* ── Idea list ───────────────────────── */ /* ── Idea list ───────────────────────── */
.idea-items { .idea-items {
list-style: none; list-style: none;
margin-top: 1.25rem; margin-top: 1rem;
border: 1px solid var(--suse-border);
border-radius: 3px;
overflow: hidden;
} }
.idea-items li { .idea-items li {
padding: 0.75rem 0 0.75rem 1.6rem; padding: 0.8rem 1rem 0.8rem 2.75rem;
position: relative; position: relative;
border-bottom: 1px solid #e5e7eb; border-bottom: 1px solid var(--suse-border);
font-size: 0.95rem; font-size: 0.95rem;
color: #374151; color: var(--text-mid);
background: var(--white);
} }
.idea-items li:last-child { .idea-items li:last-child {
@@ -222,27 +301,28 @@ header nav {
} }
.idea-items li::before { .idea-items li::before {
content: "·"; content: "";
position: absolute; position: absolute;
left: 0.45rem; left: 1rem;
top: 0.45rem; top: 50%;
color: #6366f1; transform: translateY(-50%);
font-size: 1.6rem; color: var(--suse-green);
line-height: 1; font-family: var(--mono);
font-size: 0.85rem;
} }
.status-badge { .status-badge {
display: inline-block; display: inline-block;
background: #fef3c7; background: var(--suse-light);
color: #92400e; color: var(--suse-mid);
border: 1px solid #fcd34d; border: 1px solid var(--suse-border);
border-radius: 4px; border-radius: 3px;
padding: 0.1rem 0.5rem; padding: 0.1rem 0.5rem;
font-size: 0.7rem; font-size: 0.65rem;
font-weight: 700; font-weight: 700;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05em; letter-spacing: 0.08em;
margin-left: 0.4rem; font-family: var(--mono);
vertical-align: middle; vertical-align: middle;
position: relative; position: relative;
top: -1px; top: -1px;
@@ -251,10 +331,10 @@ header nav {
/* ── Not-list ────────────────────────── */ /* ── Not-list ────────────────────────── */
.not-list { .not-list {
list-style: none; list-style: none;
margin-top: 1.25rem; margin-top: 1rem;
display: grid; display: grid;
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
gap: 0.75rem; gap: 0.5rem;
} }
@media (max-width: 480px) { @media (max-width: 480px) {
@@ -264,47 +344,54 @@ header nav {
} }
.not-list li { .not-list li {
background: #f1f5f9; background: var(--white);
border: 1px solid #e2e8f0; border: 1px solid var(--border);
border-radius: 6px; border-radius: 3px;
padding: 0.7rem 1rem; padding: 0.6rem 0.9rem;
font-size: 0.875rem; font-size: 0.875rem;
color: #475569; color: var(--text-muted);
display: flex; display: flex;
align-items: center; align-items: center;
gap: 0.5rem; gap: 0.5rem;
font-family: var(--mono);
font-size: 0.82rem;
} }
.not-list li::before { .not-list li::before {
content: ""; content: "";
color: #94a3b8; color: var(--text-muted);
font-size: 0.75rem; font-size: 0.85rem;
flex-shrink: 0; flex-shrink: 0;
font-family: var(--mono);
} }
/* ── Signup form ─────────────────────── */ /* ── Signup form ─────────────────────── */
.form-section { .form-section {
background: #0f172a !important; background: var(--suse-dark) !important;
color: #fff; color: var(--white);
border-bottom: none;
} }
.form-section h2 { .form-section h2 {
color: #fff; color: var(--white);
border-left-color: var(--suse-green);
} }
.form-section .lead { .form-section .lead {
color: #94a3b8 !important; color: #a8cfc0 !important;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
font-size: 1rem !important;
} }
.form-section .disclaimer { .form-section .disclaimer {
color: #64748b !important; color: #6b8880 !important;
font-size: 0.85rem !important; font-size: 0.875rem !important;
margin-bottom: 1.5rem; margin-bottom: 1.75rem;
line-height: 1.6;
} }
.signup-form { .signup-form {
margin-top: 1.5rem; margin-top: 1.25rem;
} }
.form-group { .form-group {
@@ -316,15 +403,17 @@ header nav {
font-size: 0.875rem; font-size: 0.875rem;
font-weight: 600; font-weight: 600;
margin-bottom: 0.4rem; margin-bottom: 0.4rem;
color: #e2e8f0; color: #c4ddd4;
letter-spacing: 0.01em;
} }
.form-group .hint { .form-group .hint {
display: block; display: block;
font-size: 0.78rem; font-size: 0.78rem;
color: #64748b; color: #5a7870;
font-weight: 400; font-weight: 400;
margin-top: 0.2rem; margin-top: 0.25rem;
font-family: var(--mono);
} }
.form-group input[type="text"], .form-group input[type="text"],
@@ -333,20 +422,20 @@ header nav {
.form-group textarea { .form-group textarea {
width: 100%; width: 100%;
padding: 0.65rem 0.875rem; padding: 0.65rem 0.875rem;
background: #1e293b; background: var(--suse-mid);
border: 1px solid #334155; border: 1px solid #2d6050;
border-radius: 5px; border-radius: 3px;
color: #f1f5f9; color: #e8f5f0;
font-size: 1rem; font-size: 0.975rem;
font-family: inherit; font-family: inherit;
transition: border-color 0.15s; transition: border-color 0.15s, background 0.15s;
} }
.form-group input:focus, .form-group input:focus,
.form-group textarea:focus { .form-group textarea:focus {
outline: none; outline: none;
border-color: #6366f1; border-color: var(--suse-green);
background: #1e293b; background: #1f5545;
} }
.form-group textarea { .form-group textarea {
@@ -366,49 +455,50 @@ header nav {
gap: 0.4rem; gap: 0.4rem;
font-weight: 400; font-weight: 400;
cursor: pointer; cursor: pointer;
color: #e2e8f0; color: #c4ddd4;
font-size: 1rem; font-size: 0.975rem;
} }
.radio-group input[type="radio"] { .radio-group input[type="radio"] {
width: 1rem; width: 1rem;
height: 1rem; height: 1rem;
accent-color: #6366f1; accent-color: var(--suse-green);
flex-shrink: 0; flex-shrink: 0;
} }
.error-msg { .error-msg {
background: #7f1d1d; background: #3d1010;
border: 1px solid #ef4444; border: 1px solid #c0392b;
color: #fecaca; color: #f5c4be;
padding: 0.75rem 1rem; padding: 0.75rem 1rem;
border-radius: 5px; border-radius: 3px;
margin-bottom: 1.25rem; margin-bottom: 1.25rem;
font-size: 0.9rem; font-size: 0.9rem;
} }
.submit-btn { .submit-btn {
background: #6366f1; background: var(--suse-green);
color: #fff; color: var(--suse-dark);
border: none; border: none;
padding: 0.875rem 2rem; padding: 0.875rem 2rem;
font-size: 1rem; font-size: 1rem;
font-weight: 600; font-weight: 700;
border-radius: 5px; border-radius: 3px;
cursor: pointer; cursor: pointer;
width: 100%; width: 100%;
transition: background 0.15s; transition: background 0.15s;
font-family: inherit; font-family: inherit;
letter-spacing: 0.01em;
} }
.submit-btn:hover { .submit-btn:hover {
background: #4f46e5; background: var(--suse-green-d);
} }
/* ── Footer ──────────────────────────── */ /* ── Footer ──────────────────────────── */
footer { footer {
background: #f1f5f9; background: var(--suse-dark);
border-top: 1px solid #e2e8f0; border-top: 1px solid var(--suse-mid);
padding: 2rem 1.5rem; padding: 2rem 1.5rem;
} }
@@ -420,12 +510,16 @@ footer {
.footer-inner p { .footer-inner p {
font-size: 0.85rem; font-size: 0.85rem;
color: #64748b; color: #6b8880;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
.footer-inner strong {
color: #a8cfc0;
}
.footer-inner a { .footer-inner a {
color: #6366f1; color: var(--suse-green);
text-decoration: none; text-decoration: none;
} }
@@ -435,8 +529,9 @@ footer {
.footer-small { .footer-small {
font-size: 0.75rem !important; font-size: 0.75rem !important;
color: #94a3b8 !important; color: #3d5a52 !important;
margin-top: 0.25rem; margin-top: 0.25rem;
font-family: var(--mono);
} }
/* ── Tak page ────────────────────────── */ /* ── Tak page ────────────────────────── */
@@ -446,32 +541,36 @@ footer {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 3rem 1.5rem; padding: 3rem 1.5rem;
background: #f8fafc; background: var(--suse-pale);
} }
.tak-card { .tak-card {
max-width: 520px; max-width: 520px;
text-align: center; text-align: center;
background: #fff; background: var(--white);
border: 1px solid #e5e7eb; border: 1px solid var(--suse-border);
border-radius: 10px; border-top: 3px solid var(--suse-green);
border-radius: 3px;
padding: 2.5rem 2rem; padding: 2.5rem 2rem;
} }
.tak-icon { .tak-icon {
font-size: 2.8rem; font-size: 2rem;
margin-bottom: 1rem; margin-bottom: 1rem;
color: var(--suse-green);
font-family: var(--mono);
font-weight: 500;
} }
.tak-card h1 { .tak-card h1 {
font-size: 1.9rem; font-size: 1.75rem;
font-weight: 700; font-weight: 700;
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
letter-spacing: -0.02em; color: var(--suse-dark);
} }
.tak-card p { .tak-card p {
color: #6b7280; color: var(--text-mid);
margin-bottom: 0.75rem; margin-bottom: 0.75rem;
font-size: 0.95rem; font-size: 0.95rem;
} }
@@ -479,10 +578,12 @@ footer {
.back-link { .back-link {
display: inline-block; display: inline-block;
margin-top: 1.25rem; margin-top: 1.25rem;
color: #6366f1; color: var(--suse-green-d);
text-decoration: none; text-decoration: none;
font-size: 0.9rem; font-size: 0.9rem;
font-weight: 500; font-weight: 600;
font-family: var(--mono);
font-size: 0.85rem;
} }
.back-link:hover { .back-link:hover {
@@ -500,12 +601,14 @@ footer {
font-size: 1.4rem; font-size: 1.4rem;
font-weight: 700; font-weight: 700;
margin-bottom: 0.4rem; margin-bottom: 0.4rem;
color: var(--suse-dark);
} }
.admin-meta { .admin-meta {
color: #6b7280; color: var(--text-muted);
font-size: 0.875rem; font-size: 0.875rem;
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
font-family: var(--mono);
} }
.table-wrapper { .table-wrapper {
@@ -519,45 +622,66 @@ footer {
} }
.signups-table th { .signups-table th {
background: #f1f5f9; background: var(--suse-dark);
color: var(--suse-green);
padding: 0.6rem 0.75rem; padding: 0.6rem 0.75rem;
text-align: left; text-align: left;
font-weight: 600; font-weight: 600;
border-bottom: 2px solid #e2e8f0; border-bottom: 2px solid var(--suse-green);
white-space: nowrap; white-space: nowrap;
color: #374151; font-family: var(--mono);
font-size: 0.78rem;
letter-spacing: 0.05em;
text-transform: uppercase;
} }
.signups-table td { .signups-table td {
padding: 0.6rem 0.75rem; padding: 0.6rem 0.75rem;
border-bottom: 1px solid #e5e7eb; border-bottom: 1px solid var(--border);
vertical-align: top; vertical-align: top;
color: var(--text-mid);
} }
.signups-table tr:hover td { .signups-table tr:hover td {
background: #f8fafc; background: var(--suse-pale);
} }
.badge-ja { .badge-ja {
background: #dcfce7; background: var(--suse-light);
color: #166534; color: var(--suse-mid);
padding: 0.1rem 0.45rem; padding: 0.1rem 0.45rem;
border-radius: 3px; border-radius: 2px;
font-size: 0.75rem; font-size: 0.72rem;
font-weight: 700; font-weight: 700;
font-family: var(--mono);
text-transform: uppercase;
} }
.badge-nej { .badge-nej {
background: #fee2e2; background: var(--red-bg);
color: #991b1b; color: var(--red);
padding: 0.1rem 0.45rem; padding: 0.1rem 0.45rem;
border-radius: 3px; border-radius: 2px;
font-size: 0.75rem; font-size: 0.72rem;
font-weight: 700; font-weight: 700;
font-family: var(--mono);
text-transform: uppercase;
} }
.empty-state { .empty-state {
text-align: center; text-align: center;
padding: 3rem; padding: 3rem;
color: #9ca3af; color: var(--text-muted);
font-family: var(--mono);
}
/* ── Mobile ──────────────────────────── */
@media (max-width: 640px) {
.hero {
padding: 3rem 1.25rem 2.75rem;
text-align: left;
}
.section {
padding: 2.25rem 1.25rem;
}
} }

View File

@@ -5,6 +5,9 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="PunktFri — non-profit registratorinitiativ for selvhostere med egne navneservere."> <meta name="description" content="PunktFri — non-profit registratorinitiativ for selvhostere med egne navneservere.">
<title>{% block title %}PunktFri{% endblock %}</title> <title>{% block title %}PunktFri{% endblock %}</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Source+Sans+3:ital,wght@0,300;0,400;0,600;0,700;1,400&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}"> <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head> </head>
<body> <body>

View File

@@ -6,13 +6,15 @@
<!-- 1. Hero --> <!-- 1. Hero -->
<section class="hero"> <section class="hero">
<h1>PunktFri</h1> <div class="hero-inner">
<h1>Punkt<span class="accent">Fri</span></h1>
<p class="tagline">Din domæneaftale. Ingen mellemled. Ingen markup.</p> <p class="tagline">Din domæneaftale. Ingen mellemled. Ingen markup.</p>
<p class="intro"> <p class="intro">
Punktum dk tvinger fra 2026 alle .dk-domæneejere til at bruge en kommerciel forhandler. Punktum dk tvinger fra 2026 alle .dk-domæneejere til at bruge en kommerciel forhandler.
Det rammer dig, der kører egne navneservere og aldrig har haft brug for hjælp. Det rammer dig, der kører egne navneservere og aldrig har haft brug for hjælp.
Vi undersøger, om vi kan gøre noget ved det — på vores egne præmisser. Vi undersøger, om vi kan gøre noget ved det — på vores egne præmisser.
</p> </p>
</div>
</section> </section>
<!-- 2. Problemet --> <!-- 2. Problemet -->