:root { --bg: #f4f6f8; --paper: #ffffff; --ink: #17202a; --muted: #5d6876; --line: #d3d9e1; --line-strong: #9aa6b4; --accent: #9b1c1f; --accent-soft: #fff4f2; --blue: #225c86; --code-bg: #eef2f5; --code-ink: #18212b; --mono: "Cascadia Code", "JetBrains Mono", Consolas, monospace; --serif: "Source Serif 4", "Iowan Old Style", "Palatino Linotype", Georgia, serif; --ui: "Aptos", "Segoe UI Variable Text", "Segoe UI", sans-serif; } * { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; background: var(--bg); color: var(--ink); font-family: var(--serif); font-size: 17px; line-height: 1.64; } body, button, input { letter-spacing: 0; } a { color: var(--blue); text-decoration-thickness: 1px; text-underline-offset: 3px; } a:hover { color: var(--accent); } .page { width: min(1080px, calc(100% - 34px)); margin: 0 auto; padding: 34px 0 72px; } .hero { border-top: 4px solid var(--ink); border-bottom: 1px solid var(--line-strong); padding: 28px 0 24px; } .hero-layout { display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(300px, 0.72fr); gap: 28px; align-items: start; } .hero-copy { min-width: 0; } .hero-visual { margin: 0; } .hero-visual img { display: block; width: 100%; height: auto; border: 1px solid var(--line-strong); border-radius: 8px; background: var(--paper); } .eyebrow, .card-kicker, .algo-label { display: inline-block; color: var(--accent); font-family: var(--mono); font-size: 0.78rem; font-weight: 700; text-transform: uppercase; } h1, h2, h3 { margin: 0; color: var(--ink); font-family: var(--ui); font-weight: 720; line-height: 1.12; letter-spacing: 0; } h1 { max-width: 860px; margin-top: 12px; font-size: 3.05rem; } h2 { font-size: 1.72rem; } h3 { margin: 22px 0 8px; font-size: 1.13rem; } p { margin: 12px 0 0; } .dek { max-width: 880px; color: #2e3946; font-size: 1.08rem; } .byline, .hero-meta, .profile-links { font-family: var(--ui); } .byline { display: flex; flex-wrap: wrap; gap: 8px 18px; margin-top: 18px; color: var(--muted); font-size: 0.95rem; } .profile-links { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-top: 20px; } .profile-links a { min-height: 70px; padding: 12px 13px; border: 1px solid var(--line); border-radius: 8px; background: var(--paper); color: var(--ink); font-weight: 700; text-decoration: none; } .profile-links span { display: block; margin-top: 4px; color: var(--muted); font-size: 0.85rem; font-weight: 500; } .hero-meta { display: flex; flex-wrap: wrap; gap: 8px 10px; margin-top: 20px; color: #3e4a58; font-size: 0.9rem; } .hero-meta span { padding: 5px 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--paper); } .grid { display: grid; gap: 22px; margin-top: 26px; } .grid > * { min-width: 0; } .grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } .panel, .stat { border-bottom: 1px solid var(--line); background: transparent; } .panel { padding: 28px 0; } .grid > .panel, .stat { border: 1px solid var(--line); border-radius: 8px; background: var(--paper); padding: 20px; } .stat strong { display: block; margin-top: 8px; font-family: var(--ui); font-size: 1.08rem; line-height: 1.25; } .stat p { color: var(--muted); font-size: 0.96rem; } .stat-head, .section-head { display: flex; align-items: baseline; gap: 10px; } .section-head { margin-top: 8px; } .icon-badge { display: none; } ul, ol { margin: 12px 0 0; padding-left: 1.3rem; } li + li { margin-top: 7px; } code, pre { font-family: var(--mono); } code { padding: 0.08rem 0.25rem; border-radius: 4px; background: var(--code-bg); color: var(--code-ink); font-size: 0.9em; overflow-wrap: anywhere; } pre { margin: 16px 0 0; padding: 15px 16px; overflow-x: auto; border: 1px solid #c7d0da; border-radius: 8px; background: #f8fafc; color: var(--code-ink); font-size: 0.84rem; line-height: 1.55; } pre code { padding: 0; background: transparent; } .tok-key { color: #8a2b2f; } .tok-fn { color: #0f5b78; } .tok-str { color: #6b4a00; } .note { margin-top: 16px; padding: 12px 14px; border-left: 4px solid var(--accent); border-radius: 0 6px 6px 0; background: var(--accent-soft); color: #34251f; } .inline-proof { margin: 18px 0 0; } .inline-proof img { display: block; width: 100%; height: auto; border: 1px solid var(--line-strong); border-radius: 6px; background: var(--paper); } figcaption { margin-top: 8px; color: var(--muted); font-family: var(--ui); font-size: 0.88rem; } .timeline { margin-top: 12px; border-top: 1px solid var(--line); } .timeline-item { padding: 13px 0; border-bottom: 1px solid var(--line); } .timeline-item strong { display: block; margin-bottom: 3px; font-family: var(--ui); } .lab-steps { padding-left: 1.45rem; } .algo-demo { margin-top: 24px; padding: 20px; border: 1px solid var(--line-strong); border-radius: 8px; background: #fbfcfd; } .algo-demo-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; } .algo-demo-head h3 { margin-top: 6px; } .algo-demo-actions { display: flex; flex-wrap: wrap; gap: 8px; } .algo-demo-button { min-height: 38px; padding: 8px 12px; border: 1px solid #8290a0; border-radius: 6px; background: var(--paper); color: var(--ink); cursor: pointer; font-family: var(--ui); font-weight: 700; } .algo-demo-button:hover { border-color: var(--accent); color: var(--accent); } .algo-demo-copy, .algo-form-copy, .algo-foot { color: var(--muted); font-family: var(--ui); font-size: 0.93rem; } .algo-form { margin-top: 18px; } .algo-field { display: grid; gap: 6px; } .algo-input { width: 100%; max-width: 360px; min-height: 42px; padding: 8px 10px; border: 1px solid var(--line-strong); border-radius: 6px; background: var(--paper); color: var(--ink); font-family: var(--mono); font-size: 1rem; } .algo-input:focus { border-color: var(--blue); outline: 2px solid rgba(34, 92, 134, 0.18); } .algo-stage-strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-top: 18px; } .algo-stage { padding: 8px 9px; border: 1px solid var(--line); border-radius: 6px; background: var(--paper); color: var(--muted); font-family: var(--mono); font-size: 0.75rem; text-align: center; } .algo-stage.is-hot { border-color: var(--accent); background: var(--accent-soft); color: var(--accent); } .algo-stage.is-done { border-color: #a9c0d3; background: #eff5f9; color: var(--blue); } .algo-demo-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-top: 16px; } .algo-card { min-width: 0; padding: 15px; border: 1px solid var(--line); border-radius: 8px; background: var(--paper); } .algo-card-output { border-color: #b8c5d2; } .algo-rows { display: grid; gap: 8px; margin-top: 12px; } .algo-row { display: grid; gap: 5px; padding: 9px; border: 1px solid var(--line); border-radius: 6px; background: #f7f9fb; font-family: var(--ui); font-size: 0.88rem; } .algo-row code { overflow-wrap: anywhere; font-size: 0.8rem; } .algo-row.is-hot, .algo-index-item.is-hot, .algo-password-char.is-hot { border-color: var(--accent); background: var(--accent-soft); color: var(--accent); } .algo-index-list, .chip-row { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 12px; } .algo-index-item, .chip, .algo-password-char { display: inline-flex; align-items: center; justify-content: center; min-width: 34px; min-height: 34px; padding: 5px 7px; border: 1px solid var(--line); border-radius: 6px; background: #f7f9fb; font-family: var(--mono); font-size: 0.84rem; } .algo-result-stack { display: grid; gap: 10px; margin-top: 12px; } .algo-result { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px; border: 1px solid var(--line); border-radius: 6px; background: #f7f9fb; font-family: var(--ui); } .algo-result strong { font-family: var(--mono); font-size: 1rem; } .algo-status { min-height: 1.4em; } @media (max-width: 900px) { body { font-size: 16px; } .page { width: min(100% - 24px, 680px); padding-top: 22px; } h1 { font-size: 2.2rem; } h2 { font-size: 1.45rem; } .grid-2, .grid-3, .hero-layout, .profile-links, .algo-demo-grid { grid-template-columns: 1fr; } .algo-demo-head { display: grid; } .algo-stage-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } .algo-result { display: grid; } } @media (max-width: 520px) { .page { width: min(100% - 18px, 460px); } h1 { font-size: 1.9rem; } .grid > .panel, .stat, .algo-demo { padding: 15px; } .algo-stage-strip { grid-template-columns: 1fr; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; transition: none !important; animation: none !important; } }