<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>ASTRYX TCG — Coming to Kickstarter</title>

<link rel="preconnect" href="https://fonts.googleapis.com">

<link href="https://fonts.googleapis.com/css2?family=Cinzel+Decorative:wght@400;700;900&family=Cinzel:wght@400;600;700&family=Crimson+Pro:ital,wght@0,300;0,400;1,300;1,400&display=swap" rel="stylesheet">

<style>

  :root {

    --gold: #c9a84c;

    --gold-bright: #f0c85a;

    --gold-dark: #7a5c1e;

    --deep: #04070f;

    --nebula-purple: #1a0b2e;

    --nebula-teal: #071a1f;

    --text: #e8dfc8;

    --muted: #8a7d60;

    --accent: #5db8c8;

  }

 

  * { margin: 0; padding: 0; box-sizing: border-box; }

 

  html { scroll-behavior: smooth; }

 

  body {

    background: var(--deep);

    color: var(--text);

    font-family: 'Crimson Pro', Georgia, serif;

    overflow-x: hidden;

    cursor: default;

  }

 

  /* STAR FIELD */

  .starfield {

    position: fixed;

    inset: 0;

    z-index: 0;

    overflow: hidden;

    pointer-events: none;

  }

  .starfield::before, .starfield::after {

    content: '';

    position: absolute;

    inset: -50%;

    width: 200%;

    height: 200%;

    background-image:

      radial-gradient(1px 1px at 10% 15%, rgba(255,255,255,0.8) 0%, transparent 100%),

      radial-gradient(1px 1px at 23% 44%, rgba(255,255,255,0.5) 0%, transparent 100%),

      radial-gradient(1.5px 1.5px at 37% 8%, rgba(255,255,255,0.9) 0%, transparent 100%),

      radial-gradient(1px 1px at 52% 31%, rgba(255,255,255,0.6) 0%, transparent 100%),

      radial-gradient(1px 1px at 67% 19%, rgba(255,255,255,0.7) 0%, transparent 100%),

      radial-gradient(1.5px 1.5px at 78% 55%, rgba(255,255,255,0.8) 0%, transparent 100%),

      radial-gradient(1px 1px at 88% 7%, rgba(255,255,255,0.5) 0%, transparent 100%),

      radial-gradient(1px 1px at 94% 40%, rgba(255,255,255,0.6) 0%, transparent 100%),

      radial-gradient(1px 1px at 5% 70%, rgba(255,255,255,0.7) 0%, transparent 100%),

      radial-gradient(1px 1px at 18% 85%, rgba(255,255,255,0.4) 0%, transparent 100%),

      radial-gradient(1.5px 1.5px at 30% 62%, rgba(255,255,255,0.8) 0%, transparent 100%),

      radial-gradient(1px 1px at 45% 90%, rgba(255,255,255,0.5) 0%, transparent 100%),

      radial-gradient(1px 1px at 60% 74%, rgba(255,255,255,0.6) 0%, transparent 100%),

      radial-gradient(1px 1px at 72% 88%, rgba(255,255,255,0.4) 0%, transparent 100%),

      radial-gradient(1.5px 1.5px at 83% 67%, rgba(255,255,255,0.7) 0%, transparent 100%),

      radial-gradient(1px 1px at 91% 80%, rgba(255,255,255,0.5) 0%, transparent 100%),

      radial-gradient(1px 1px at 14% 33%, rgba(200,220,255,0.6) 0%, transparent 100%),

      radial-gradient(1px 1px at 56% 50%, rgba(200,220,255,0.5) 0%, transparent 100%),

      radial-gradient(2px 2px at 75% 25%, rgba(255,240,200,0.6) 0%, transparent 100%),

      radial-gradient(1px 1px at 40% 77%, rgba(180,200,255,0.5) 0%, transparent 100%);

    animation: drift 120s linear infinite;

  }

  .starfield::after {

    animation-duration: 180s;

    animation-direction: reverse;

    background-image:

      radial-gradient(1px 1px at 8% 22%, rgba(255,255,255,0.6) 0%, transparent 100%),

      radial-gradient(1px 1px at 19% 55%, rgba(255,255,255,0.4) 0%, transparent 100%),

      radial-gradient(1.5px 1.5px at 33% 38%, rgba(255,255,255,0.7) 0%, transparent 100%),

      radial-gradient(1px 1px at 48% 12%, rgba(255,255,255,0.5) 0%, transparent 100%),

      radial-gradient(1px 1px at 63% 67%, rgba(255,255,255,0.8) 0%, transparent 100%),

      radial-gradient(1px 1px at 77% 44%, rgba(255,255,255,0.4) 0%, transparent 100%),

      radial-gradient(1.5px 1.5px at 85% 18%, rgba(255,255,255,0.7) 0%, transparent 100%),

      radial-gradient(1px 1px at 96% 72%, rgba(255,255,255,0.5) 0%, transparent 100%),

      radial-gradient(1px 1px at 25% 93%, rgba(255,255,255,0.6) 0%, transparent 100%),

      radial-gradient(1px 1px at 55% 86%, rgba(200,180,255,0.5) 0%, transparent 100%),

      radial-gradient(2px 2px at 70% 5%, rgba(255,240,180,0.7) 0%, transparent 100%),

      radial-gradient(1px 1px at 42% 59%, rgba(180,220,255,0.4) 0%, transparent 100%);

  }

  @keyframes drift {

    from { transform: translateY(0) translateX(0); }

    to { transform: translateY(-25%) translateX(-10%); }

  }

 

  /* NEBULA BG */

  .nebula-bg {

    position: fixed;

    inset: 0;

    z-index: 0;

    background:

      radial-gradient(ellipse 80% 60% at 20% 30%, rgba(40,10,80,0.5) 0%, transparent 60%),

      radial-gradient(ellipse 60% 80% at 80% 70%, rgba(5,40,50,0.5) 0%, transparent 60%),

      radial-gradient(ellipse 100% 50% at 50% 100%, rgba(10,20,50,0.7) 0%, transparent 50%),

      var(--deep);

    pointer-events: none;

  }

 

  /* LAYOUT */

  .page { position: relative; z-index: 1; }

 

  /* ── HERO ── */

  .hero {

    min-height: 100vh;

    display: flex;

    flex-direction: column;

    align-items: center;

    justify-content: center;

    text-align: center;

    padding: 2rem;

    position: relative;

  }

 

  .hero-logo {

    width: min(480px, 85vw);

    margin-bottom: 2.5rem;

    animation: floatLogo 6s ease-in-out infinite, fadeIn 1.2s ease forwards;

    filter: drop-shadow(0 0 40px rgba(201,168,76,0.4));

  }

  @keyframes floatLogo {

    0%, 100% { transform: translateY(0px); }

    50% { transform: translateY(-12px); }

  }

  @keyframes fadeIn {

    from { opacity: 0; transform: scale(0.92); }

    to { opacity: 1; transform: scale(1); }

  }

 

  .hero-tagline {

    font-family: 'Cinzel', serif;

    font-size: clamp(0.7rem, 1.8vw, 0.95rem);

    letter-spacing: 0.35em;

    color: var(--gold);

    text-transform: uppercase;

    margin-bottom: 1.5rem;

    opacity: 0;

    animation: slideUp 0.8s ease 0.4s forwards;

  }

 

  .hero-headline {

    font-family: 'Cinzel Decorative', serif;

    font-size: clamp(2rem, 6vw, 4rem);

    font-weight: 900;

    line-height: 1.1;

    background: linear-gradient(135deg, var(--gold-bright) 0%, var(--gold) 40%, #fff6cc 70%, var(--gold) 100%);

    -webkit-background-clip: text;

    -webkit-text-fill-color: transparent;

    background-clip: text;

    margin-bottom: 1.5rem;

    opacity: 0;

    animation: slideUp 0.8s ease 0.6s forwards;

  }

 

  .hero-sub {

    font-size: clamp(1rem, 2.5vw, 1.3rem);

    font-style: italic;

    color: var(--text);

    max-width: 600px;

    line-height: 1.7;

    opacity: 0;

    animation: slideUp 0.8s ease 0.8s forwards;

    margin-bottom: 3rem;

  }

 

  @keyframes slideUp {

    from { opacity: 0; transform: translateY(20px); }

    to { opacity: 1; transform: translateY(0); }

  }

 

  .cta-group {

    display: flex;

    flex-wrap: wrap;

    gap: 1rem;

    justify-content: center;

    opacity: 0;

    animation: slideUp 0.8s ease 1s forwards;

  }

 

  .btn-primary {

    font-family: 'Cinzel', serif;

    font-size: 0.85rem;

    letter-spacing: 0.2em;

    text-transform: uppercase;

    padding: 1rem 2.5rem;

    background: linear-gradient(135deg, var(--gold) 0%, var(--gold-bright) 50%, var(--gold) 100%);

    color: var(--deep);

    border: none;

    cursor: pointer;

    position: relative;

    clip-path: polygon(8px 0%, 100% 0%, calc(100% - 8px) 100%, 0% 100%);

    transition: all 0.3s ease;

    font-weight: 700;

    text-decoration: none;

    display: inline-block;

  }

  .btn-primary:hover {

    background: linear-gradient(135deg, var(--gold-bright) 0%, #fff5a0 50%, var(--gold-bright) 100%);

    transform: translateY(-2px);

    box-shadow: 0 8px 30px rgba(201,168,76,0.5);

  }

 

  .btn-secondary {

    font-family: 'Cinzel', serif;

    font-size: 0.85rem;

    letter-spacing: 0.2em;

    text-transform: uppercase;

    padding: 1rem 2.5rem;

    background: transparent;

    color: var(--gold);

    border: 1px solid var(--gold-dark);

    cursor: pointer;

    clip-path: polygon(8px 0%, 100% 0%, calc(100% - 8px) 100%, 0% 100%);

    transition: all 0.3s ease;

    text-decoration: none;

    display: inline-block;

  }

  .btn-secondary:hover {

    border-color: var(--gold);

    background: rgba(201,168,76,0.1);

    transform: translateY(-2px);

  }

 

  /* SCROLL INDICATOR */

  .scroll-hint {

    position: absolute;

    bottom: 2rem;

    left: 50%;

    transform: translateX(-50%);

    display: flex;

    flex-direction: column;

    align-items: center;

    gap: 0.5rem;

    opacity: 0.5;

    animation: fadeIn 1s ease 2s forwards, bounce 2s ease 2s infinite;

  }

  .scroll-hint span {

    font-family: 'Cinzel', serif;

    font-size: 0.6rem;

    letter-spacing: 0.3em;

    color: var(--gold);

  }

  .scroll-arrow {

    width: 20px;

    height: 20px;

    border-right: 1px solid var(--gold);

    border-bottom: 1px solid var(--gold);

    transform: rotate(45deg);

  }

  @keyframes bounce {

    0%, 100% { transform: translateX(-50%) translateY(0); }

    50% { transform: translateX(-50%) translateY(6px); }

  }

 

  /* DIVIDER */

  .divider {

    width: 100%;

    height: 1px;

    background: linear-gradient(90deg, transparent, var(--gold-dark), var(--gold), var(--gold-dark), transparent);

    margin: 0;

    position: relative;

  }

  .divider-diamond {

    position: absolute;

    top: 50%;

    left: 50%;

    transform: translate(-50%, -50%) rotate(45deg);

    width: 8px;

    height: 8px;

    background: var(--gold);

    box-shadow: 0 0 12px var(--gold);

  }

 

  /* SECTIONS */

  section {

    padding: 5rem 2rem;

    max-width: 1000px;

    margin: 0 auto;

  }

 

  .section-label {

    font-family: 'Cinzel', serif;

    font-size: 0.65rem;

    letter-spacing: 0.4em;

    color: var(--gold);

    text-transform: uppercase;

    display: block;

    margin-bottom: 1rem;

  }

 

  .section-title {

    font-family: 'Cinzel Decorative', serif;

    font-size: clamp(1.4rem, 3.5vw, 2.2rem);

    font-weight: 700;

    color: var(--text);

    margin-bottom: 2rem;

    line-height: 1.2;

  }

  .section-title em {

    font-style: normal;

    background: linear-gradient(135deg, var(--gold-bright), var(--gold));

    -webkit-background-clip: text;

    -webkit-text-fill-color: transparent;

    background-clip: text;

  }

 

  .section-body {

    font-size: 1.15rem;

    line-height: 1.85;

    color: #c8bfa4;

    max-width: 680px;

  }

  .section-body p + p { margin-top: 1.2rem; }

 

  /* CARD SHOWCASE */

  .card-showcase {

    padding: 5rem 2rem;

    max-width: 1000px;

    margin: 0 auto;

    display: grid;

    grid-template-columns: 1fr 1fr;

    gap: 4rem;

    align-items: center;

  }

 

  .card-display {

    position: relative;

    display: flex;

    justify-content: center;

  }

 

  .card-img {

    width: min(320px, 80vw);

    border-radius: 12px;

    box-shadow:

      0 0 60px rgba(201,168,76,0.25),

      0 0 120px rgba(93,184,200,0.1),

      0 30px 60px rgba(0,0,0,0.7);

    animation: cardFloat 5s ease-in-out infinite;

    transition: transform 0.3s ease, box-shadow 0.3s ease;

  }

  .card-img:hover {

    transform: scale(1.04) rotate(1deg);

    box-shadow:

      0 0 80px rgba(201,168,76,0.4),

      0 0 160px rgba(93,184,200,0.15),

      0 40px 80px rgba(0,0,0,0.8);

  }

  @keyframes cardFloat {

    0%, 100% { transform: translateY(0) rotate(-1deg); }

    50% { transform: translateY(-10px) rotate(1deg); }

  }

 

  .card-glow {

    position: absolute;

    inset: -20px;

    background: radial-gradient(ellipse at center, rgba(93,184,200,0.15) 0%, transparent 70%);

    pointer-events: none;

    animation: glowPulse 3s ease-in-out infinite;

  }

  @keyframes glowPulse {

    0%, 100% { opacity: 0.6; }

    50% { opacity: 1; }

  }

 

  /* PILLARS */

  .pillars {

    padding: 5rem 2rem;

    max-width: 1000px;

    margin: 0 auto;

  }

 

  .pillars-grid {

    display: grid;

    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));

    gap: 1.5rem;

    margin-top: 3rem;

  }

 

  .pillar {

    border: 1px solid rgba(201,168,76,0.15);

    padding: 2rem 1.5rem;

    position: relative;

    background: linear-gradient(135deg, rgba(201,168,76,0.03) 0%, transparent 100%);

    transition: border-color 0.3s ease, background 0.3s ease;

  }

  .pillar:hover {

    border-color: rgba(201,168,76,0.4);

    background: linear-gradient(135deg, rgba(201,168,76,0.07) 0%, transparent 100%);

  }

  .pillar::before {

    content: '';

    position: absolute;

    top: -1px;

    left: 20%;

    width: 60%;

    height: 1px;

    background: linear-gradient(90deg, transparent, var(--gold), transparent);

  }

 

  .pillar-icon {

    font-size: 1.6rem;

    margin-bottom: 1rem;

    display: block;

  }

 

  .pillar-title {

    font-family: 'Cinzel', serif;

    font-size: 0.8rem;

    letter-spacing: 0.2em;

    color: var(--gold);

    text-transform: uppercase;

    margin-bottom: 0.75rem;

  }

 

  .pillar-text {

    font-size: 0.95rem;

    line-height: 1.7;

    color: #a09278;

  }

 

  /* FACTIONS */

  .factions {

    padding: 5rem 2rem;

    max-width: 1000px;

    margin: 0 auto;

  }

 

  .faction-list {

    margin-top: 2.5rem;

    display: flex;

    flex-direction: column;

    gap: 1px;

  }

 

  .faction-item {

    display: grid;

    grid-template-columns: 180px 1fr;

    gap: 2rem;

    padding: 1.4rem 0;

    border-bottom: 1px solid rgba(201,168,76,0.08);

    align-items: start;

    transition: background 0.2s ease;

  }

  .faction-item:hover {

    background: rgba(201,168,76,0.03);

    padding-left: 0.5rem;

    padding-right: 0.5rem;

    margin: 0 -0.5rem;

  }

 

  .faction-name {

    font-family: 'Cinzel', serif;

    font-size: 0.8rem;

    letter-spacing: 0.15em;

    color: var(--gold);

    text-transform: uppercase;

    padding-top: 0.15rem;

  }

 

  .faction-desc {

    font-size: 0.98rem;

    line-height: 1.65;

    color: #a09278;

  }

 

  /* NOTIFY FORM */

  .notify-section {

    padding: 5rem 2rem 7rem;

    max-width: 700px;

    margin: 0 auto;

    text-align: center;

  }

 

  .notify-box {

    border: 1px solid rgba(201,168,76,0.25);

    padding: 3.5rem 3rem;

    position: relative;

    background: linear-gradient(135deg, rgba(10,5,25,0.8) 0%, rgba(5,15,20,0.8) 100%);

    backdrop-filter: blur(10px);

  }

  .notify-box::before {

    content: '';

    position: absolute;

    inset: -1px;

    background: linear-gradient(135deg, rgba(201,168,76,0.3), transparent 40%, rgba(93,184,200,0.1), transparent 80%, rgba(201,168,76,0.2));

    z-index: -1;

    border-radius: 1px;

  }

 

  .notify-box .section-title {

    font-size: clamp(1.2rem, 3vw, 1.8rem);

    margin-bottom: 1rem;

  }

 

  .notify-box p {

    font-size: 1.05rem;

    line-height: 1.7;

    color: #a09278;

    margin-bottom: 2.5rem;

    font-style: italic;

  }

 

  .notify-form {

    display: flex;

    gap: 0;

    max-width: 460px;

    margin: 0 auto 1.5rem;

  }

 

  .notify-input {

    flex: 1;

    padding: 0.9rem 1.2rem;

    background: rgba(255,255,255,0.05);

    border: 1px solid rgba(201,168,76,0.3);

    border-right: none;

    color: var(--text);

    font-family: 'Crimson Pro', serif;

    font-size: 1rem;

    outline: none;

    transition: border-color 0.3s ease;

    clip-path: polygon(6px 0%, 100% 0%, 100% 100%, 0% 100%);

  }

  .notify-input::placeholder { color: var(--muted); }

  .notify-input:focus { border-color: var(--gold); }

 

  .notify-btn {

    font-family: 'Cinzel', serif;

    font-size: 0.75rem;

    letter-spacing: 0.2em;

    text-transform: uppercase;

    padding: 0.9rem 1.5rem;

    background: linear-gradient(135deg, var(--gold) 0%, var(--gold-bright) 100%);

    color: var(--deep);

    border: none;

    cursor: pointer;

    font-weight: 700;

    transition: all 0.3s ease;

    white-space: nowrap;

    clip-path: polygon(0% 0%, calc(100% - 6px) 0%, 100% 100%, 0% 100%);

  }

  .notify-btn:hover {

    background: linear-gradient(135deg, var(--gold-bright) 0%, #fff5a0 100%);

    box-shadow: 0 4px 20px rgba(201,168,76,0.4);

  }

 

  .notify-note {

    font-size: 0.78rem;

    color: var(--muted);

    letter-spacing: 0.05em;

  }

 

  .success-msg {

    display: none;

    font-family: 'Cinzel', serif;

    font-size: 0.85rem;

    letter-spacing: 0.15em;

    color: var(--gold-bright);

    padding: 1rem;

    text-align: center;

  }

 

  /* FOOTER */

  footer {

    border-top: 1px solid rgba(201,168,76,0.1);

    padding: 2rem;

    text-align: center;

  }

  footer p {

    font-size: 0.78rem;

    color: var(--muted);

    letter-spacing: 0.1em;

    font-family: 'Cinzel', serif;

  }

  footer .footer-logo {

    font-family: 'Cinzel Decorative', serif;

    font-size: 0.9rem;

    color: var(--gold);

    letter-spacing: 0.3em;

    margin-bottom: 0.5rem;

  }

 

  /* STAT BAR */

  .stat-bar {

    display: flex;

    justify-content: center;

    gap: 4rem;

    padding: 3rem 2rem;

    border-top: 1px solid rgba(201,168,76,0.1);

    border-bottom: 1px solid rgba(201,168,76,0.1);

    flex-wrap: wrap;

  }

  .stat { text-align: center; }

  .stat-num {

    font-family: 'Cinzel Decorative', serif;

    font-size: clamp(1.6rem, 4vw, 2.4rem);

    background: linear-gradient(135deg, var(--gold-bright), var(--gold));

    -webkit-background-clip: text;

    -webkit-text-fill-color: transparent;

    background-clip: text;

    display: block;

  }

  .stat-label {

    font-family: 'Cinzel', serif;

    font-size: 0.6rem;

    letter-spacing: 0.3em;

    color: var(--muted);

    text-transform: uppercase;

    display: block;

    margin-top: 0.3rem;

  }

 

  /* RESPONSIVE */

  @media (max-width: 700px) {

    .card-showcase {

      grid-template-columns: 1fr;

      gap: 2.5rem;

    }

    .card-showcase .card-display { order: -1; }

    .notify-form { flex-direction: column; }

    .notify-input, .notify-btn {

      clip-path: none;

      border-right: 1px solid rgba(201,168,76,0.3);

    }

    .notify-btn { width: 100%; padding: 1rem; }

    .faction-item { grid-template-columns: 1fr; gap: 0.5rem; }

    .stat-bar { gap: 2rem; }

  }

</style>

</head>

<body>

 

<div class="nebula-bg"></div>

<div class="starfield"></div>

 

<div class="page">

 

  <!-- HERO -->

  <section class="hero">

    <img class="hero-logo" src="/mnt/user-data/uploads/IMG_9405.png" alt="ASTRYX Trading Card Game Logo">

    <span class="hero-tagline">A Space Opera Trading Card Game — Coming to Kickstarter</span>

    <h1 class="hero-headline">The Expanse<br>Awaits</h1>

    <p class="hero-sub">

      256 cards. Six factions. One galaxy on the edge of total war.<br>

      Ancient gods watch from a dimension you cannot see.

    </p>

    <div class="cta-group">

      <a href="#notify" class="btn-primary">Notify Me at Launch</a>

      <a href="#about" class="btn-secondary">Learn More</a>

    </div>

    <div class="scroll-hint">

      <span>Explore</span>

      <div class="scroll-arrow"></div>

    </div>

  </section>

 

  <!-- STAT BAR -->

  <div class="stat-bar">

    <div class="stat">

      <span class="stat-num">256</span>

      <span class="stat-label">Cards in Set</span>

    </div>

    <div class="stat">

      <span class="stat-num">6</span>

      <span class="stat-label">Factions</span>

    </div>

    <div class="stat">

      <span class="stat-num">8</span>

      <span class="stat-label">Rarity Tiers</span>

    </div>

    <div class="stat">

      <span class="stat-num">8</span>

      <span class="stat-label">Species</span>

    </div>

  </div>

 

  <div class="divider"><div class="divider-diamond"></div></div>

 

  <!-- ABOUT -->

  <section id="about">

    <span class="section-label">The Premise</span>

    <h2 class="section-title">Pirates. Warlords. <em>Ancient Gods.</em></h2>

    <div class="section-body">

      <p>

        ASTRYX is a physical trading card game set in <em>The Expanse</em> — a galaxy four thousand years into its latest age, stretched between empire and rebellion, science and worship, the known and the terrifyingly ancient.

      </p>

      <p>

        The Astryx themselves — the Forerunners — didn't die. They retired into a sub-dimensional resonance layer, watching everything, reachable only under very specific conditions. Their megastructures still drift through the galaxy. Some still work.

      </p>

      <p>

        You are one spark away from waking them up.

      </p>

    </div>

  </section>

 

  <div class="divider"><div class="divider-diamond"></div></div>

 

  <!-- CARD SHOWCASE -->

  <div class="card-showcase" id="cards">

    <div>

      <span class="section-label">First Reveal</span>

      <h2 class="section-title">Legendary Card <em>001</em></h2>

      <div class="section-body">

        <p>

          The Stellar Cartographer is the first card officially unveiled for the ASTRYX TCG. A Legendary-tier COSMIC MAPPER, she lets you navigate your deck like Mirra Volesh navigates the Expanse — always one step ahead.

        </p>

        <p>

          Every card in ASTRYX carries lore, faction identity, and strategic weight. Ships clash in orbit. Planets fall to bombardment. Fuel determines your reach. And sometimes — if you're reckless enough — you wake something ancient.

        </p>

      </div>

    </div>

    <div class="card-display">

      <div class="card-glow"></div>

      <img class="card-img" src="/mnt/user-data/uploads/IMG_9406.png" alt="Stellar Cartographer — Astryx Legendary Card 001">

    </div>

  </div>

 

  <div class="divider"><div class="divider-diamond"></div></div>

 

  <!-- PILLARS -->

  <div class="pillars">

    <span class="section-label">How It Plays</span>

    <h2 class="section-title">Deep Space. <em>Deep Strategy.</em></h2>

    <div class="pillars-grid">

      <div class="pillar">

        <span class="pillar-icon">⚔</span>

        <div class="pillar-title">Fleet Combat</div>

        <p class="pillar-text">Ships engage in direct or orbital combat. High maneuverability trades off against raw firepower. Tactics matter as much as deck construction.</p>

      </div>

      <div class="pillar">

        <span class="pillar-icon">🪐</span>

        <div class="pillar-title">Planet Control</div>

        <p class="pillar-text">Planets deploy fleets and project power — but they're exposed to orbital bombardment. Control the skies, control the surface.</p>

      </div>

      <div class="pillar">

        <span class="pillar-icon">⚡</span>

        <div class="pillar-title">Fuel Economy</div>

        <p class="pillar-text">Solar, Chemical, and Nuclear fuel types define your reach. E-115 Moscovium is the Exodia-tier resource — rare, devastating, coveted.</p>

      </div>

      <div class="pillar">

        <span class="pillar-icon">👁</span>

        <div class="pillar-title">Forerunner Triggers</div>

        <p class="pillar-text">Four ways to wake the Astryx — intentional, accidental, destructive, or through genuine achievement. What you get back is never guaranteed.</p>

      </div>

    </div>

  </div>

 

  <div class="divider"><div class="divider-diamond"></div></div>

 

  <!-- FACTIONS -->

  <div class="factions">

    <span class="section-label">Six Powers</span>

    <h2 class="section-title">Choose Your <em>Allegiance</em></h2>

    <div class="faction-list">

      <div class="faction-item">

        <div class="faction-name">Sovereign Compact</div>

        <div class="faction-desc">The lawful empire of the core systems. Disciplined, resourced, and convinced that order is the only thing standing between civilization and the void.</div>

      </div>

      <div class="faction-item">

        <div class="faction-name">Free Margin</div>

        <div class="faction-desc">Pirates, mercenaries, and frontier colonies bound by loose alliance and a shared disdain for authority. Unpredictable. Adaptive. Dangerous.</div>

      </div>

      <div class="faction-item">

        <div class="faction-name">Ecclesiast</div>

        <div class="faction-desc">Forerunner worshippers who sail cathedral ships and believe the Astryx are gods in waiting. One of them already found an active Resonance Anchor.</div>

      </div>

      <div class="faction-item">

        <div class="faction-name">Concord</div>

        <div class="faction-desc">Scientists and diplomats operating from three neutral stations. They study everything. They trust no one. They are closer to the truth than anyone realizes.</div>

      </div>

      <div class="faction-item">

        <div class="faction-name">Veldhari Dominion</div>

        <div class="faction-desc">Humanoid reptilians and a fallen empire slowly rebuilding. They remember what the Expanse looked like before the current age. That memory is a weapon.</div>

      </div>

      <div class="faction-item">

        <div class="faction-name">Mycelarch Collective</div>

        <div class="faction-desc">A humanoid fungal hivemind that spreads through infiltration. Seventeen confirmed hosts. The identity of the seventeenth is unknown.</div>

      </div>

    </div>

  </div>

 

  <div class="divider"><div class="divider-diamond"></div></div>

 

  <!-- NOTIFY -->

  <div class="notify-section" id="notify">

    <div class="notify-box">

      <span class="section-label" style="display:block; margin-bottom:1rem;">Kickstarter Pre-Launch</span>

      <h2 class="section-title">Be First Into <em>The Expanse</em></h2>

      <p>

        The campaign launches soon. Follow on Kickstarter now and be notified the moment it goes live — early backers unlock exclusive rewards.

      </p>

      <div class="notify-form" id="notifyForm">

        <input class="notify-input" type="email" placeholder="your@email.com" id="emailInput">

        <button class="notify-btn" onclick="handleNotify()">Follow</button>

      </div>

      <div class="success-msg" id="successMsg">✦ &nbsp; You're on the list. The Expanse will find you. &nbsp; ✦</div>

      <p class="notify-note">No spam. One launch notification. Unsubscribe anytime.</p>

    </div>

  </div>

 

  <!-- FOOTER -->

  <footer>

    <div class="footer-logo">A · S · T · R · Y · X</div>

    <p>Trading Card Game &nbsp;·&nbsp; Physical Print Edition &nbsp;·&nbsp; Kickstarter Campaign Coming Soon</p>

  </footer>

 

</div>

 

<script>

  function handleNotify() {

    const email = document.getElementById('emailInput').value;

    if (!email || !email.includes('@')) {

      document.getElementById('emailInput').style.borderColor = 'rgba(200,80,80,0.6)';

      return;

    }

    document.getElementById('notifyForm').style.display = 'none';

    document.getElementById('successMsg').style.display = 'block';

  }

 

  // Intersection observer for reveal animations

  const observer = new IntersectionObserver((entries) => {

    entries.forEach(entry => {

      if (entry.isIntersecting) {

        entry.target.style.opacity = '1';

        entry.target.style.transform = 'translateY(0)';

      }

    });

  }, { threshold: 0.15 });

 

  document.querySelectorAll('section, .card-showcase, .pillars, .factions, .notify-section').forEach(el => {

    el.style.opacity = '0';

    el.style.transform = 'translateY(30px)';

    el.style.transition = 'opacity 0.8s ease, transform 0.8s ease';

    observer.observe(el);

  });

  // Hero shouldn't fade on scroll

  document.querySelector('.hero').style.opacity = '1';

  document.querySelector('.hero').style.transform = 'none';

</script>

 

</body>

</html>