aboutsummaryrefslogtreecommitdiff
path: root/landing/static/css
diff options
context:
space:
mode:
authorbenj <benj@rse8.com>2026-04-09 15:22:43 +0800
committerbenj <benj@rse8.com>2026-04-09 15:22:43 +0800
commit5f56e0eaf8030f78077fc93b441296bb51fe9331 (patch)
treeab2bad3b7fb1e5bf40d4130f7a158d0ca7ddb011 /landing/static/css
parent862216a47ae42ec831d4c2cf0de18225f6971de5 (diff)
downloadtidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar.gz
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar.bz2
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar.lz
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar.xz
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.tar.zst
tidyindex-5f56e0eaf8030f78077fc93b441296bb51fe9331.zip
Add initial Hugo landing page
First pass at the tidyindex.com marketing site, built with a custom minimal Hugo theme — light palette (white/soft blue), Inter + JetBrains Mono, hero with a JSON code preview, format/audience/value sections, and a single-button CTA. Also adds a top-level .gitignore for local Claude/IDE state. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Diffstat (limited to '')
-rw-r--r--landing/static/css/style.css637
1 files changed, 637 insertions, 0 deletions
diff --git a/landing/static/css/style.css b/landing/static/css/style.css
new file mode 100644
index 0000000..30665f6
--- /dev/null
+++ b/landing/static/css/style.css
@@ -0,0 +1,637 @@
+/* ----------------------------------------------------------------
+ Tidy Index — landing styles
+ Palette: whites, soft blues, generous space.
+---------------------------------------------------------------- */
+
+:root {
+ --c-bg: #ffffff;
+ --c-bg-soft: #f6f9fc;
+ --c-bg-tint: #eef4fb;
+ --c-border: #e3ecf5;
+ --c-border-soft: #eef2f7;
+
+ --c-ink: #0b1f3a;
+ --c-ink-soft: #3b4f6b;
+ --c-ink-mute: #6b7c93;
+
+ --c-blue: #3b82f6;
+ --c-blue-deep: #2563eb;
+ --c-blue-soft: #dbeafe;
+ --c-blue-tint: #eef4ff;
+
+ --c-accent: #60a5fa;
+
+ --shadow-sm: 0 1px 2px rgba(15, 38, 73, 0.04);
+ --shadow-md: 0 6px 24px -8px rgba(37, 99, 235, 0.18),
+ 0 2px 6px rgba(15, 38, 73, 0.04);
+ --shadow-lg: 0 24px 60px -20px rgba(37, 99, 235, 0.25),
+ 0 6px 16px rgba(15, 38, 73, 0.06);
+
+ --radius-sm: 8px;
+ --radius-md: 14px;
+ --radius-lg: 22px;
+
+ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI',
+ Helvetica, Arial, sans-serif;
+ --font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo,
+ Consolas, monospace;
+
+ --max-w: 1120px;
+ --max-w-narrow: 760px;
+}
+
+* { box-sizing: border-box; }
+
+html { -webkit-text-size-adjust: 100%; }
+
+body {
+ margin: 0;
+ font-family: var(--font-sans);
+ font-size: 17px;
+ line-height: 1.6;
+ color: var(--c-ink);
+ background: var(--c-bg);
+ -webkit-font-smoothing: antialiased;
+ text-rendering: optimizeLegibility;
+ background-image:
+ radial-gradient(ellipse 80% 50% at 50% -10%, var(--c-blue-tint), transparent 70%),
+ radial-gradient(ellipse 60% 40% at 90% 10%, #f0f7ff, transparent 70%);
+ background-repeat: no-repeat;
+}
+
+a {
+ color: var(--c-blue-deep);
+ text-decoration: none;
+ transition: color 160ms ease;
+}
+a:hover { color: var(--c-blue); }
+
+img, svg { display: block; max-width: 100%; }
+
+/* ---------- layout helpers ---------- */
+
+.container {
+ width: 100%;
+ max-width: var(--max-w);
+ margin: 0 auto;
+ padding: 0 24px;
+}
+
+.container.narrow { max-width: var(--max-w-narrow); }
+
+.eyebrow {
+ display: inline-block;
+ font-size: 13px;
+ font-weight: 500;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ color: var(--c-blue-deep);
+ background: var(--c-blue-tint);
+ padding: 6px 12px;
+ border-radius: 999px;
+ border: 1px solid var(--c-blue-soft);
+}
+.eyebrow.center { display: inline-block; }
+
+.center { text-align: center; }
+.center.eyebrow { display: inline-block; }
+
+.section {
+ padding: 120px 0;
+}
+
+.section-soft {
+ background: var(--c-bg-soft);
+ border-top: 1px solid var(--c-border-soft);
+ border-bottom: 1px solid var(--c-border-soft);
+}
+
+.section-title {
+ font-size: clamp(28px, 4vw, 44px);
+ line-height: 1.15;
+ font-weight: 600;
+ letter-spacing: -0.02em;
+ margin: 18px 0 18px;
+ color: var(--c-ink);
+}
+.section-title.center { text-align: center; max-width: 720px; margin-left: auto; margin-right: auto; }
+
+.section-lede {
+ font-size: 19px;
+ color: var(--c-ink-soft);
+ max-width: 640px;
+ margin: 0 auto 60px;
+ line-height: 1.6;
+}
+.section-lede.center { text-align: center; }
+
+/* center the eyebrow when wrapped */
+.section .eyebrow.center,
+.container .eyebrow.center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ width: max-content;
+}
+
+/* ---------- header ---------- */
+
+.site-header {
+ position: sticky;
+ top: 0;
+ z-index: 50;
+ background: rgba(255, 255, 255, 0.78);
+ backdrop-filter: saturate(180%) blur(14px);
+ -webkit-backdrop-filter: saturate(180%) blur(14px);
+ border-bottom: 1px solid var(--c-border-soft);
+}
+
+.header-inner {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 72px;
+}
+
+.brand {
+ display: inline-flex;
+ align-items: center;
+ gap: 10px;
+ font-weight: 600;
+ font-size: 17px;
+ color: var(--c-ink);
+ letter-spacing: -0.01em;
+}
+.brand:hover { color: var(--c-blue-deep); }
+
+.brand-mark {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 32px; height: 32px;
+ color: var(--c-blue-deep);
+ background: var(--c-blue-tint);
+ border-radius: 9px;
+ border: 1px solid var(--c-blue-soft);
+}
+.brand-mark svg { width: 20px; height: 20px; }
+
+.site-nav {
+ display: flex;
+ align-items: center;
+ gap: 32px;
+}
+.site-nav a {
+ color: var(--c-ink-soft);
+ font-size: 15px;
+ font-weight: 500;
+}
+.site-nav a:hover { color: var(--c-blue-deep); }
+
+.nav-cta {
+ background: var(--c-ink);
+ color: #fff !important;
+ padding: 9px 16px;
+ border-radius: 999px;
+ transition: transform 160ms ease, background 160ms ease;
+}
+.nav-cta:hover {
+ background: var(--c-blue-deep);
+ transform: translateY(-1px);
+}
+
+/* ---------- buttons ---------- */
+
+.btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ font-family: inherit;
+ font-size: 16px;
+ font-weight: 500;
+ padding: 14px 24px;
+ border-radius: 999px;
+ border: 1px solid transparent;
+ cursor: pointer;
+ transition: all 180ms ease;
+ letter-spacing: -0.005em;
+}
+
+.btn-primary {
+ background: var(--c-blue-deep);
+ color: #fff;
+ box-shadow: 0 6px 18px -6px rgba(37, 99, 235, 0.5);
+}
+.btn-primary:hover {
+ background: #1d4ed8;
+ color: #fff;
+ transform: translateY(-1px);
+ box-shadow: 0 10px 24px -8px rgba(37, 99, 235, 0.55);
+}
+
+.btn-ghost {
+ background: transparent;
+ color: var(--c-ink);
+ border-color: var(--c-border);
+}
+.btn-ghost:hover {
+ background: #fff;
+ border-color: var(--c-blue-soft);
+ color: var(--c-blue-deep);
+}
+
+.btn-lg {
+ padding: 16px 30px;
+ font-size: 16px;
+}
+
+/* ---------- hero ---------- */
+
+.hero {
+ padding: 120px 0 80px;
+ position: relative;
+ overflow: hidden;
+}
+
+.hero-inner {
+ text-align: center;
+ position: relative;
+}
+
+.hero .eyebrow {
+ margin-bottom: 28px;
+}
+
+.hero-title {
+ font-size: clamp(40px, 6vw, 76px);
+ line-height: 1.05;
+ font-weight: 600;
+ letter-spacing: -0.035em;
+ margin: 0 auto 24px;
+ max-width: 12ch;
+ color: var(--c-ink);
+}
+
+.hero-title .accent {
+ background: linear-gradient(120deg, var(--c-blue-deep), var(--c-accent));
+ -webkit-background-clip: text;
+ background-clip: text;
+ color: transparent;
+}
+
+.hero-sub {
+ font-size: 20px;
+ line-height: 1.55;
+ color: var(--c-ink-soft);
+ max-width: 600px;
+ margin: 0 auto 40px;
+}
+
+.hero-cta {
+ display: flex;
+ gap: 14px;
+ justify-content: center;
+ flex-wrap: wrap;
+ margin-bottom: 80px;
+}
+
+/* ---------- code card ---------- */
+
+.hero-visual {
+ display: flex;
+ justify-content: center;
+ margin-top: 16px;
+}
+
+.code-card {
+ width: 100%;
+ max-width: 640px;
+ background: #ffffff;
+ border: 1px solid var(--c-border);
+ border-radius: var(--radius-lg);
+ box-shadow: var(--shadow-lg);
+ overflow: hidden;
+ text-align: left;
+ position: relative;
+}
+
+.code-card::before {
+ content: "";
+ position: absolute;
+ inset: -1px;
+ border-radius: inherit;
+ padding: 1px;
+ background: linear-gradient(160deg, rgba(96,165,250,0.4), rgba(255,255,255,0) 60%);
+ -webkit-mask:
+ linear-gradient(#000 0 0) content-box,
+ linear-gradient(#000 0 0);
+ -webkit-mask-composite: xor;
+ mask-composite: exclude;
+ pointer-events: none;
+}
+
+.code-card-head {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 14px 18px;
+ background: var(--c-bg-soft);
+ border-bottom: 1px solid var(--c-border-soft);
+}
+
+.code-card-head .dot {
+ width: 10px; height: 10px;
+ border-radius: 50%;
+ background: #d6dde7;
+}
+.dot-a { background: #ffd1d1; }
+.dot-b { background: #ffe5b4; }
+.dot-c { background: #c8e6c9; }
+
+.code-card-title {
+ margin-left: 12px;
+ font-family: var(--font-mono);
+ font-size: 13px;
+ color: var(--c-ink-mute);
+}
+
+.code-card-body {
+ margin: 0;
+ padding: 22px 24px;
+ font-family: var(--font-mono);
+ font-size: 13.5px;
+ line-height: 1.65;
+ color: var(--c-ink-soft);
+ background: #ffffff;
+ overflow-x: auto;
+ white-space: pre;
+}
+.code-card-body code { font-family: inherit; }
+
+.tk-k { color: #2563eb; }
+.tk-s { color: #0f766e; }
+.tk-n { color: #b45309; }
+.tk-p { color: #94a3b8; }
+
+/* ---------- format grid ---------- */
+
+.format-grid {
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ gap: 20px;
+ margin-top: 20px;
+}
+
+.format-card {
+ background: #fff;
+ border: 1px solid var(--c-border);
+ border-radius: var(--radius-md);
+ padding: 32px 26px;
+ box-shadow: var(--shadow-sm);
+ transition: transform 200ms ease, box-shadow 200ms ease, border-color 200ms ease;
+}
+
+.format-card:hover {
+ transform: translateY(-3px);
+ border-color: var(--c-blue-soft);
+ box-shadow: var(--shadow-md);
+}
+
+.format-icon {
+ display: inline-flex;
+ width: 44px;
+ height: 44px;
+ align-items: center;
+ justify-content: center;
+ border-radius: 12px;
+ background: var(--c-blue-tint);
+ color: var(--c-blue-deep);
+ margin-bottom: 18px;
+}
+.format-icon svg { width: 22px; height: 22px; }
+
+.format-card h3 {
+ margin: 0 0 8px;
+ font-size: 18px;
+ font-weight: 600;
+ letter-spacing: -0.01em;
+ color: var(--c-ink);
+}
+
+.format-card p {
+ margin: 0;
+ font-size: 15px;
+ line-height: 1.55;
+ color: var(--c-ink-mute);
+}
+
+/* ---------- audience grid ---------- */
+
+.audience-grid {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 24px;
+ margin-top: 20px;
+}
+
+.audience-card {
+ position: relative;
+ background: #fff;
+ border: 1px solid var(--c-border);
+ border-radius: var(--radius-lg);
+ padding: 40px 32px;
+ box-shadow: var(--shadow-sm);
+ transition: transform 200ms ease, box-shadow 200ms ease;
+}
+
+.audience-card:hover {
+ transform: translateY(-3px);
+ box-shadow: var(--shadow-md);
+}
+
+.audience-card-feature {
+ background: linear-gradient(180deg, #ffffff 0%, var(--c-blue-tint) 130%);
+ border-color: var(--c-blue-soft);
+}
+
+.audience-num {
+ font-family: var(--font-mono);
+ font-size: 13px;
+ font-weight: 500;
+ color: var(--c-blue-deep);
+ letter-spacing: 0.04em;
+ margin-bottom: 16px;
+}
+
+.audience-card h3 {
+ margin: 0 0 12px;
+ font-size: 22px;
+ font-weight: 600;
+ letter-spacing: -0.015em;
+ color: var(--c-ink);
+}
+
+.audience-card p {
+ margin: 0;
+ color: var(--c-ink-soft);
+ font-size: 16px;
+ line-height: 1.6;
+}
+
+/* ---------- value list ---------- */
+
+.value-list {
+ list-style: none;
+ padding: 0;
+ margin: 40px 0 0;
+ display: grid;
+ gap: 22px;
+}
+
+.value-list li {
+ display: flex;
+ align-items: flex-start;
+ gap: 18px;
+ background: #fff;
+ border: 1px solid var(--c-border);
+ border-radius: var(--radius-md);
+ padding: 22px 26px;
+ box-shadow: var(--shadow-sm);
+}
+
+.value-check {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 36px;
+ height: 36px;
+ flex: 0 0 36px;
+ border-radius: 50%;
+ background: var(--c-blue-tint);
+ color: var(--c-blue-deep);
+}
+.value-check svg { width: 18px; height: 18px; }
+
+.value-list strong {
+ display: block;
+ font-weight: 600;
+ font-size: 17px;
+ color: var(--c-ink);
+ margin-bottom: 4px;
+}
+
+.value-list p {
+ margin: 0;
+ color: var(--c-ink-mute);
+ font-size: 15.5px;
+ line-height: 1.55;
+}
+
+/* ---------- CTA card ---------- */
+
+.cta-card {
+ position: relative;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ background: linear-gradient(160deg, #ffffff 0%, var(--c-blue-tint) 100%);
+ border: 1px solid var(--c-blue-soft);
+ border-radius: var(--radius-lg);
+ padding: 72px 40px;
+ box-shadow: var(--shadow-md);
+ overflow: hidden;
+}
+
+.cta-glow {
+ position: absolute;
+ top: -120px;
+ left: 50%;
+ width: 360px;
+ height: 360px;
+ transform: translateX(-50%);
+ background: radial-gradient(closest-side, rgba(96, 165, 250, 0.35), rgba(96, 165, 250, 0) 70%);
+ pointer-events: none;
+ z-index: 0;
+}
+
+.cta-title {
+ position: relative;
+ z-index: 1;
+ margin: 0 0 28px;
+ font-size: clamp(26px, 3.4vw, 36px);
+ font-weight: 600;
+ letter-spacing: -0.02em;
+ color: var(--c-ink);
+ text-align: center;
+}
+
+.cta-btn {
+ position: relative;
+ z-index: 1;
+ gap: 10px;
+}
+
+.cta-btn svg {
+ width: 18px;
+ height: 18px;
+}
+
+/* ---------- footer ---------- */
+
+.site-footer {
+ border-top: 1px solid var(--c-border-soft);
+ background: var(--c-bg);
+ padding: 60px 0 50px;
+}
+
+.footer-inner {
+ text-align: center;
+}
+
+.footer-brand {
+ display: inline-flex;
+ align-items: center;
+ gap: 10px;
+ font-weight: 600;
+ color: var(--c-ink);
+ margin-bottom: 14px;
+}
+.footer-brand .brand-mark { color: var(--c-blue-deep); }
+.footer-brand .brand-mark svg { width: 20px; height: 20px; }
+
+.footer-tagline {
+ margin: 0 0 12px;
+ color: var(--c-ink-soft);
+ font-size: 15px;
+}
+
+.footer-meta {
+ margin: 0;
+ color: var(--c-ink-mute);
+ font-size: 13px;
+}
+
+/* ---------- responsive ---------- */
+
+@media (max-width: 880px) {
+ .format-grid { grid-template-columns: repeat(2, 1fr); }
+ .audience-grid { grid-template-columns: 1fr; }
+ .section { padding: 90px 0; }
+ .hero { padding: 80px 0 40px; }
+}
+
+@media (max-width: 640px) {
+ body { font-size: 16px; }
+ .site-nav { gap: 18px; }
+ .site-nav a:not(.nav-cta) { display: none; }
+ .header-inner { height: 64px; }
+ .hero-cta { flex-direction: column; align-items: stretch; }
+ .hero-cta .btn { width: 100%; }
+ .code-card-body { font-size: 12px; padding: 18px; }
+ .format-grid { grid-template-columns: 1fr; }
+ .cta-card { padding: 40px 24px; }
+}
+
+@media (prefers-reduced-motion: reduce) {
+ * { transition: none !important; }
+}