@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700&display=swap'); /* ===== CSS Variables ===== */ :root { --padding: 1.5rem; --color-black: #000; --color-white: #fff; --color-grey: #777; --color-light: #efefef; --color-text: #e8f4ff; --color-text-grey: #cfd9e4; --color-background: var(--color-white); --color-code-light-grey: #cacbd1; --color-code-comment: #a9aaad; --color-code-white: #c5c9c6; --color-code-red: #d16464; --color-code-orange: #de935f; --color-code-yellow: #f0c674; --color-code-green: #a7bd68; --color-code-aqua: #8abeb7; --color-code-blue: #7e9abf; --color-code-purple: #b294bb; --font-family-sans: 'Poppins', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; --font-family-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; } /* ===== Background overlay ===== */ body { font-family: var(--font-family-sans); color: var(--color-text); background: none; position: relative; min-height: 100vh; z-index: 0; } body::before { content: ""; position: fixed; top: 50%; left: 50%; width: 320vmax; height: 320vmax; background: linear-gradient(135deg, #3f0e00, #a63b00, #ffbe6e); z-index: -1; animation: rotate-gradient 60s linear infinite; pointer-events: none; } .is-blackout body::before { animation: none; background: #000; } .blackout-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.95); color: #fff; display: none; align-items: center; justify-content: center; flex-direction: column; text-align: center; z-index: 100; font-size: 2rem; letter-spacing: 0.2em; pointer-events: none; } .is-blackout .blackout-overlay { display: flex; } /* ===== Magnetic Menu (improved) ===== */ .magnetic-menu { min-height: 70vh; display: flex; align-items: center; justify-content: center; padding: 4rem var(--padding) 2rem; text-align: center; } .magnetic-menu__inner { display: flex; flex-wrap: wrap; justify-content: center; gap: 2.5rem; width: min(60rem, 100%); } .magnetic-menu__item { width: clamp(8rem, 18vw, 12rem); flex: 0 0 auto; aspect-ratio: 1 / 1; border-radius: 50%; position: relative; overflow: visible; display: grid; place-items: center; text-decoration: none; color: var(--color-text); transition: transform 200ms ease-out; will-change: transform; cursor: pointer; } .magnetic-menu__item:hover { transform: scale(1.1) rotate(5deg); } .magnetic-menu__image { width: 62%; aspect-ratio: 1 / 1; border-radius: 50%; overflow: hidden; position: relative; z-index: 1; } .magnetic-menu__image img { width: 100%; height: 100%; object-fit: cover; display: block; } .magnetic-menu__circle { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; } .magnetic-menu__circle text { font-size: clamp(0.55rem, 1.6vw, 0.75rem); letter-spacing: 0.4em; text-transform: uppercase; fill: var(--color-text); font-weight: 600; } .magnetic-menu__item.is-placeholder { pointer-events: none; opacity: 0.45; } /* ===== NEW: Hover text on magnetic menu items ===== */ .magnetic-menu__item::before { content: attr(data-lamp-desc); position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity 200ms ease; pointer-events: none; background: rgba(0, 0, 0, 0.7); color: var(--color-white); font-size: clamp(0.4rem, 1.2vw, 0.5rem); letter-spacing: 0.2em; text-transform: uppercase; z-index: 10; width: 100%; height: 100%; } .magnetic-menu__item:hover::before { opacity: 1; } /* ===== Footer magnet ===== */ .footer-magnet { display: inline-block; transition: transform 280ms cubic-bezier(.25, .8, .25, 1); will-change: transform; user-select: none; } .footer-dim-image { display: block; margin-top: 1rem; filter: brightness(1); transition: filter 250ms ease; cursor: pointer; } /* ===== Responsive ===== */ @media (max-width: 800px) { .magnetic-menu { min-height: auto; padding: 3rem var(--padding) 1rem; justify-content: flex-start; } .magnetic-menu__inner { width: 100%; justify-content: space-between; gap: 1.5rem; } .magnetic-menu__item { flex: 1 1 calc((100% / 3) - 1rem); max-width: none; width: calc((100% / 3) - 1rem); } .has-top-menu .magnetic-menu__inner { justify-content: space-between; } } @media (max-width: 520px) { .magnetic-menu { min-height: auto; padding: 1rem var(--padding) 0.5rem; } .magnetic-menu__inner { gap: 0.75rem; } .magnetic-menu__item { flex: 1 1 calc((100% / 3) - 0.5rem); width: calc((100% / 3) - 0.5rem); } .magnetic-menu__circle text { font-size: clamp(0.45rem, 3vw, 0.6rem); } } /* ===== Top menu mode ===== */ .has-top-menu .magnetic-menu { position: sticky; top: 0; z-index: 20; min-height: auto; justify-content: center; padding: 1rem 0 0.5rem; } .has-top-menu .magnetic-menu__inner { justify-content: center; max-width: 70rem; margin: 0 auto; padding: 0 var(--padding); } .has-top-menu .main { padding-top: calc(var(--padding) + 6rem); } /* ===== Main layout ===== */ .main { max-width: 70rem; margin: 0 auto; padding: var(--padding); padding-bottom: calc(8rem + var(--padding)); } /* ===== Base elements ===== */ li { list-style: none; } a { color: currentColor; text-decoration: none; } button { font: inherit; background: none; border: 0; color: currentColor; cursor: pointer; } strong, b { font-weight: 600; } small { font-size: inherit; color: var(--color-text-grey); } /* ===== Background helpers ===== */ .bg-light { background-color: var(--color-light); } .color-grey { color: var(--color-text-grey); } /* ===== Header ===== */ .header { position: relative; display: flex; flex-wrap: wrap; justify-content: space-between; margin-right: -1rem; margin-left: -1rem; margin-bottom: 6rem; } .logo { padding: 1rem; display: flex; align-items: center; font-weight: 600; cursor: pointer; } /* ===== Menu ===== */ .menu { display: flex; } .menu a { padding: 1rem; display: block; } .menu a[aria-current] { text-decoration: underline; } /* ===== Social ===== */ .social { display: flex; padding: 0 .5rem; } .social a { padding: 1rem .5rem; } /* ===== Sections ===== */ .section { padding: 3rem 0; } /* ===== Grid ===== */ .grid { --columns: 12; --gutter: 3rem; display: grid; grid-gap: var(--gutter); grid-template-columns: 1fr; } .grid > .column { margin-bottom: var(--gutter); } /* ===== Auto-grid ===== */ .autogrid { --gutter: 3rem; --min: 10rem; display: grid; grid-gap: var(--gutter); grid-template-columns: repeat(auto-fit, minmax(var(--min), 1fr)); grid-auto-flow: dense; } /* ===== Headings ===== */ h1, h2, h3, h4, h5, h6 { font-size: inherit; font-weight: inherit; line-height: inherit; } /* ===== Text ===== */ .text { line-height: 1.5em; } .text a { text-decoration: underline; } .text :first-child { margin-top: 0; } .text :last-child { margin-bottom: 0; } .text p, .text ul, .text ol { margin-bottom: 1.5rem; } .text ul, .text ol { margin-left: 1rem; } .text ul p, .text ol p { margin-bottom: 0; } .text ul > li { list-style: disc; } .text ol > li { list-style: decimal; } .text ul ol, .text ul ul, .text ol ul, .text ol ol { margin-bottom: 0; } .text h1, .h1, .intro { font-size: 2rem; margin-bottom: 3rem; line-height: 1.25em; } .text h2, .h2 { font-size: 1.25rem; font-weight: 600; margin-bottom: 1.25rem; } .text h3, .h3 { font-weight: 600; } .text .codeblock { display: grid; } .text code { font-family: var(--font-family-mono); font-size: 1em; background: var(--color-light); padding: 0 .5rem; display: inline-block; color: var(--color-black); } .text pre { margin: 3rem 0; background: var(--color-black); color: var(--color-white); padding: 1.5rem; overflow-x: scroll; overflow-y: hidden; line-height: 1.5rem; } .text pre code { padding: 0; background: none; color: inherit; } /* ===== HR & Alignment ===== */ hr { border: 0; background: currentColor; height: 2px; width: 1.5rem; margin: 3rem auto; } .align-center { text-align: center; } /* ===== Intro ===== */ .intro { max-width: 40rem; } .intro *:not(:last-child) { margin-bottom: 1em; } /* ===== CTA ===== */ .cta { background: var(--color-black); color: var(--color-white); display: inline-flex; justify-content: center; padding: .75rem 1.5rem; border: 4px solid var(--color-white); outline: 2px solid var(--color-black); } /* ===== Box ===== */ .box { background: var(--color-light); padding: 1.5rem; border: 4px solid var(--color-white); outline: 2px solid var(--color-light); } /* ===== Video ===== */ .video,