:root { --ink: #172033; --muted: #647089; --line: #dbe2ee; --paper: #ffffff; --wash: #f4f7fb; --brand: #3157d5; --brand-dark: #213c9d; --success: #167c5a; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } * { box-sizing: border-box; } body { margin: 0; color: var(--ink); background: var(--wash); } a { color: inherit; } .hero { background: linear-gradient(135deg, #182858, #3157d5 62%, #5a80ef); color: white; } .hero-inner { max-width: 1160px; margin: auto; padding: 72px 24px 58px; } .eyebrow { text-transform: uppercase; letter-spacing: .14em; font-weight: 700; font-size: .78rem; opacity: .8; } h1 { font-size: clamp(2.5rem, 7vw, 5.2rem); line-height: .98; margin: 12px 0 20px; } .lead { max-width: 800px; font-size: 1.15rem; line-height: 1.65; color: #e9efff; } .actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 28px; } .button { display: inline-flex; align-items: center; justify-content: center; padding: 12px 17px; border-radius: 10px; border: 1px solid currentColor; text-decoration: none; font-weight: 700; } .hero .button { color: white; } .hero .button.primary { background: white; color: var(--brand-dark); border-color: white; } .notice { max-width: 850px; font-size: .88rem; color: #d6e0ff; margin-top: 20px; } main { max-width: 1160px; margin: auto; padding: 0 24px 70px; } .stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-top: -28px; } .stats article { background: var(--paper); border: 1px solid var(--line); border-radius: 15px; padding: 22px; box-shadow: 0 8px 28px rgba(31, 47, 88, .08); } .stats strong { display: block; font-size: 2rem; } .stats span { color: var(--muted); } .controls { display: grid; grid-template-columns: 1fr 260px; gap: 12px; margin: 38px 0 12px; } input, select { width: 100%; padding: 13px 14px; border: 1px solid var(--line); border-radius: 10px; background: var(--paper); font: inherit; } .result-count { color: var(--muted); } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; } .card { text-align: left; border: 1px solid var(--line); background: var(--paper); border-radius: 15px; padding: 19px; cursor: pointer; transition: transform .15s ease, box-shadow .15s ease; } .card:hover { transform: translateY(-2px); box-shadow: 0 10px 30px rgba(31,47,88,.10); } .card h3 { margin: 0 0 9px; font-size: 1.05rem; } .card p { color: var(--muted); line-height: 1.5; min-height: 4.5em; } .badge { display: inline-block; border-radius: 999px; background: #e8edff; color: var(--brand-dark); padding: 5px 9px; font-size: .75rem; font-weight: 700; } .metrics { display: flex; gap: 12px; flex-wrap: wrap; border-top: 1px solid var(--line); padding-top: 13px; font-size: .83rem; color: var(--muted); } .metrics strong { color: var(--ink); } .contribute { margin-top: 54px; padding: 30px; background: var(--paper); border: 1px solid var(--line); border-radius: 16px; } .contribute li { margin: 10px 0; line-height: 1.55; } .contribute .button.primary { background: var(--brand); color: white; border-color: var(--brand); } dialog { width: min(720px, calc(100vw - 32px)); border: 0; border-radius: 16px; padding: 28px; box-shadow: 0 30px 100px rgba(0,0,0,.3); } dialog::backdrop { background: rgba(12,20,40,.55); } .close { float: right; border: 0; background: none; font-size: 2rem; cursor: pointer; } .detail-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 18px 0; } .detail-grid div { background: var(--wash); border-radius: 10px; padding: 13px; } .detail-grid strong { display: block; font-size: 1.2rem; } @media (max-width: 720px) { .stats, .controls { grid-template-columns: 1fr; } .hero-inner { padding-top: 48px; } } .badge-row { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; margin-bottom: 12px; } .card .community-badge { background: #253044; color: #ffffff; border: 1px solid #253044; } .button-row { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 22px; } .staging-note { margin-top: 22px; padding: 14px 16px; border-left: 4px solid var(--brand); background: var(--wash); color: var(--muted); line-height: 1.55; } .guide-layout { display: grid; gap: 18px; padding-top: 38px; } .guide-card { background: var(--paper); border: 1px solid var(--line); border-radius: 16px; padding: 26px; } .guide-card h2 { margin-top: 0; } .guide-card p, .guide-card li { line-height: 1.65; } .guide-card pre { overflow-x: auto; padding: 16px; border-radius: 10px; background: #111a2e; color: #edf2ff; } .warning-card { border-left: 5px solid #c77a00; } .staging-card { border-left: 5px solid var(--brand); } html { scroll-behavior: smooth; } .card { --category-background: #ffffff; --category-border: #dbe2ee; --category-accent: #3157d5; --category-badge: #e8edff; background: var(--category-background); border-color: var(--category-border); border-top: 5px solid var(--category-accent); } .card .badge-row .badge:first-child { background: var(--category-badge); color: var(--category-accent); } .category-dna { --category-background: #eef5ff; --category-border: #aac9ef; --category-accent: #2869c7; --category-badge: #dae9fc; } .category-expression, .category-bulk-expression { --category-background: #fff4e9; --category-border: #edc69a; --category-accent: #b96512; --category-badge: #ffe3c3; } .category-functional-genomics { --category-background: #edf9f1; --category-border: #acd8b8; --category-accent: #267842; --category-badge: #d7f0df; } .category-knowledge { --category-background: #f5efff; --category-border: #cbb5e9; --category-accent: #7044ac; --category-badge: #e8dcfa; } .category-literature { --category-background: #fff0f4; --category-border: #e8b5c4; --category-accent: #ac3e61; --category-badge: #f9dce4; } .category-multimodal { --category-background: #eaf9fb; --category-border: #a5d7dd; --category-accent: #177684; --category-badge: #d3eff2; } .category-network { --category-background: #fff0ee; --category-border: #eab3ab; --category-accent: #af4437; --category-badge: #f9d9d4; } .category-protein { --category-background: #edf8f6; --category-border: #a5d4cb; --category-accent: #187361; --category-badge: #d2ede7; } .category-rna { --category-background: #fff9e7; --category-border: #e3cb88; --category-accent: #8a6810; --category-badge: #f5e7b6; } .category-regulatory { --category-background: #f0f1ff; --category-border: #b7bae7; --category-accent: #4c50ae; --category-badge: #dedff8; } .category-single-cell, .category-single-cell-expression { --category-background: #fff0fa; --category-border: #e1b2d2; --category-accent: #9f3e7f; --category-badge: #f4daeb; } .category-other, .category-uncategorized { --category-background: #f3f5f7; --category-border: #c7cdd5; --category-accent: #596576; --category-badge: #e1e5ea; } .contribute { scroll-margin-top: 24px; margin-top: 64px; padding: 34px; background: var(--paper); border: 1px solid var(--line); border-radius: 18px; } .section-label { margin: 0 0 8px; color: var(--brand); font-size: 0.78rem; font-weight: 800; letter-spacing: 0.14em; text-transform: uppercase; } .contribute h2 { margin-top: 0; } .contribute-intro { max-width: 800px; color: var(--muted); line-height: 1.65; } .instruction-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; margin-top: 28px; } .instruction-card { padding: 22px; border: 1px solid var(--line); border-radius: 14px; background: var(--wash); } .instruction-card.full-width { grid-column: 1 / -1; } .instruction-card h3 { margin: 8px 0 12px; } .instruction-card p, .instruction-card li { line-height: 1.6; } .step-number { display: inline-flex; align-items: center; justify-content: center; width: 29px; height: 29px; border-radius: 50%; background: var(--brand); color: white; font-size: 0.85rem; font-weight: 800; } .category-list { font-weight: 650; } .button-row { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 26px; } .cli-alternative { margin-top: 24px; padding-top: 20px; border-top: 1px solid var(--line); } .cli-alternative summary { cursor: pointer; font-weight: 700; } .cli-alternative pre, .instruction-card pre { overflow-x: auto; padding: 16px; border-radius: 10px; background: #111a2e; color: #edf2ff; } @media (max-width: 720px) { .instruction-grid { grid-template-columns: 1fr; } .instruction-card.full-width { grid-column: auto; } .contribute { padding: 24px 18px; } } /* Summary statistic color */ .stats article { background: #eaf0ff; border-color: #afc2f2; box-shadow: 0 8px 28px rgba(49, 87, 213, 0.12); } .stats strong { color: #2448b8; } .stats span { color: #53658f; } /* End summary statistic color */ /* THEME TOGGLE */ .theme-toggle { position: absolute; top: 16px; right: 18px; z-index: 1000; display: inline-flex; align-items: center; justify-content: center; width: 42px; height: 42px; padding: 0; border: 1px solid rgba(23, 32, 51, .22); border-radius: 50%; color: #172033; background: rgba(255, 255, 255, .94); box-shadow: 0 5px 18px rgba(0, 0, 0, .15); font: inherit; font-size: 1.25rem; line-height: 1; cursor: pointer; transition: transform .15s ease, background .15s ease, color .15s ease, border-color .15s ease; } .theme-toggle:hover { transform: translateY(-1px); } .theme-toggle:focus-visible { outline: 3px solid rgba(129, 156, 255, .55); outline-offset: 3px; } /* Only the page background changes in night mode. Cards, category palettes, badges and panels keep their original colors. */ html[data-theme="night"] { background: #090f1c; } html[data-theme="night"] body { background: #090f1c; } html[data-theme="night"] .theme-toggle { color: #f5f7ff; background: rgba(17, 24, 39, .96); border-color: #475569; } @media (max-width: 720px) { .theme-toggle { top: 10px; right: 10px; width: 38px; height: 38px; font-size: 1.1rem; } } /* NIGHT COLORED PANELS */ /* Very subtle darkening: - preserves each category hue; - does not recolor text, borders, or badges; - avoids gray or washed-out cards. */ html[data-theme="night"] .card { position: relative; isolation: isolate; overflow: hidden; } html[data-theme="night"] .card::before { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; background: rgba(0, 0, 0, .01); -webkit-backdrop-filter: brightness(.88) saturate(1.70); backdrop-filter: brightness(.88) saturate(1.70); } html[data-theme="night"] .card > * { position: relative; z-index: 1; } html[data-theme="night"] .card:hover::before { -webkit-backdrop-filter: brightness(.92) saturate(1.90); backdrop-filter: brightness(.92) saturate(1.90); } /* HERO BACKGROUND IMAGE */ .hero { background-image: linear-gradient( 90deg, rgba(3, 12, 32, .88) 0%, rgba(3, 17, 43, .72) 48%, rgba(3, 17, 43, .38) 100% ), url("hero-background.jpg"); background-position: center 46%; background-size: cover; background-repeat: no-repeat; } @media (max-width: 720px) { .hero { background-position: 58% center; background-image: linear-gradient( rgba(3, 12, 32, .78), rgba(3, 12, 32, .78) ), url("hero-background.jpg"); } } /* THEME-AWARE HERO BRIGHTNESS */ /* Day mode uses a lighter overlay, making the DNA image brighter. Night mode keeps a darker overlay for readability. */ .hero, html[data-theme="day"] .hero { background-image: linear-gradient( 90deg, rgba(3, 12, 32, .62) 0%, rgba(3, 17, 43, .38) 48%, rgba(3, 17, 43, .15) 100% ), url("hero-background.jpg"); background-position: center 46%; background-size: cover; background-repeat: no-repeat; } html[data-theme="night"] .hero { background-image: linear-gradient( 90deg, rgba(3, 10, 28, .88) 0%, rgba(3, 14, 36, .70) 48%, rgba(3, 14, 36, .42) 100% ), url("hero-background.jpg"); } @media (max-width: 720px) { .hero, html[data-theme="day"] .hero { background-position: 58% center; background-image: linear-gradient( rgba(3, 12, 32, .58), rgba(3, 12, 32, .58) ), url("hero-background.jpg"); } html[data-theme="night"] .hero { background-image: linear-gradient( rgba(3, 10, 28, .80), rgba(3, 10, 28, .80) ), url("hero-background.jpg"); } } /* CONTINUOUS HERO PAGE BACKGROUND */ /* Continue the blue tones of the DNA hero into the page. The image itself is not repeated, so the content remains clear. */ html:not([data-theme]), html[data-theme="day"] { background: #f5fafc; } html:not([data-theme]) body, html[data-theme="day"] body { background: radial-gradient( circle at 75% 0%, rgba(42, 181, 224, .20), transparent 34rem ), linear-gradient( 180deg, #0b3158 0, #78b9d5 390px, #d8edf5 650px, #f5fafc 1050px ); background-attachment: fixed; } html[data-theme="night"] { background: #07111f; } html[data-theme="night"] body { background: radial-gradient( circle at 75% 0%, rgba(15, 126, 177, .18), transparent 34rem ), linear-gradient( 180deg, #06182c 0, #0a2946 410px, #0a192b 720px, #07111f 1100px ); background-attachment: fixed; } main { background: transparent; } /* SEAMLESS HERO CONTINUATION */ /* One continuous image is placed behind the hero and the beginning of the page. It gradually fades into the normal page background. */ html, body { min-height: 100%; } body { position: relative; background: #f5fafc !important; } body::before { content: ""; position: absolute; top: 0; right: 0; left: 0; height: clamp(820px, 58vw, 1120px); background-image: linear-gradient( 90deg, rgba(3, 12, 32, .60) 0%, rgba(3, 17, 43, .32) 50%, rgba(3, 17, 43, .10) 100% ), url("hero-background.jpg"); background-position: center top; background-size: cover; background-repeat: no-repeat; -webkit-mask-image: linear-gradient( to bottom, #000 0%, #000 48%, rgba(0, 0, 0, .93) 58%, rgba(0, 0, 0, .68) 72%, rgba(0, 0, 0, .30) 87%, transparent 100% ); mask-image: linear-gradient( to bottom, #000 0%, #000 48%, rgba(0, 0, 0, .93) 58%, rgba(0, 0, 0, .68) 72%, rgba(0, 0, 0, .30) 87%, transparent 100% ); filter: brightness(1.06) saturate(1.06); pointer-events: none; z-index: 0; } .hero, main, .theme-toggle { position: relative; z-index: 1; } .hero { background: transparent !important; border-bottom-color: transparent; } main { background: transparent !important; } /* Night version */ html[data-theme="night"] body { background: #07111f !important; } html[data-theme="night"] body::before { background-image: linear-gradient( 90deg, rgba(2, 8, 22, .80) 0%, rgba(3, 13, 34, .60) 50%, rgba(3, 13, 34, .30) 100% ), url("hero-background.jpg"); filter: brightness(.86) saturate(1.12); } @media (max-width: 720px) { body::before { height: 900px; background-position: 58% top; -webkit-mask-image: linear-gradient( to bottom, #000 0%, #000 46%, rgba(0, 0, 0, .75) 68%, transparent 100% ); mask-image: linear-gradient( to bottom, #000 0%, #000 46%, rgba(0, 0, 0, .75) 68%, transparent 100% ); } } /* SMALLER IMAGE WITH BLUE FADE */ /* The image uses its full width rather than being enlarged to cover a very tall area. It ends sooner and fades into the blue page background underneath it. */ html[data-theme="day"] body, html:not([data-theme]) body { background: linear-gradient( 180deg, #071a33 0, #0b355b 480px, #176b94 720px, #64afd0 980px, #b8dfea 1320px, #edf7fa 1720px, #f5fafc 2050px ) !important; } body::before { height: clamp(680px, 49vw, 900px); background-size: 100% auto; background-position: center top; -webkit-mask-image: linear-gradient( to bottom, #000 0%, #000 52%, rgba(0, 0, 0, .92) 62%, rgba(0, 0, 0, .68) 75%, rgba(0, 0, 0, .32) 88%, transparent 100% ); mask-image: linear-gradient( to bottom, #000 0%, #000 52%, rgba(0, 0, 0, .92) 62%, rgba(0, 0, 0, .68) 75%, rgba(0, 0, 0, .32) 88%, transparent 100% ); } /* Night mode uses the same transition with deeper blue tones. */ html[data-theme="night"] body { background: linear-gradient( 180deg, #030b18 0, #061a30 500px, #082d4b 760px, #0a3655 1020px, #091e32 1420px, #07111f 1800px ) !important; } @media (max-width: 720px) { body::before { height: 720px; /* Slight enlargement is retained on narrow screens so the image does not leave empty horizontal space. */ background-size: auto 720px; background-position: 56% top; -webkit-mask-image: linear-gradient( to bottom, #000 0%, #000 48%, rgba(0, 0, 0, .82) 66%, rgba(0, 0, 0, .38) 84%, transparent 100% ); mask-image: linear-gradient( to bottom, #000 0%, #000 48%, rgba(0, 0, 0, .82) 66%, rgba(0, 0, 0, .38) 84%, transparent 100% ); } html[data-theme="day"] body, html:not([data-theme]) body { background: linear-gradient( 180deg, #071a33 0, #0b355b 430px, #247da3 700px, #8bc7dd 1000px, #e3f2f7 1450px, #f5fafc 1750px ) !important; } } /* FINAL HERO SIZE AND TOGGLE POSITION */ /* The theme icon stays in the top-right corner of the page. It is not fixed, so it disappears normally when scrolling. */ body > #theme-toggle, .theme-toggle { position: absolute; top: 16px; right: 18px; z-index: 10000; } /* Use a shorter image layer and begin fading it earlier. The image disappears into the existing blue background. */ body::before { height: clamp(560px, 42vw, 720px); background-size: 100% auto; background-position: center top; -webkit-mask-image: linear-gradient( to bottom, #000 0%, #000 34%, rgba(0, 0, 0, .92) 43%, rgba(0, 0, 0, .68) 55%, rgba(0, 0, 0, .38) 68%, rgba(0, 0, 0, .14) 78%, transparent 88% ); mask-image: linear-gradient( to bottom, #000 0%, #000 34%, rgba(0, 0, 0, .92) 43%, rgba(0, 0, 0, .68) 55%, rgba(0, 0, 0, .38) 68%, rgba(0, 0, 0, .14) 78%, transparent 88% ); } /* Keep the button and transition balanced on smaller screens. */ @media (max-width: 720px) { body > #theme-toggle, .theme-toggle { top: 10px; right: 10px; } body::before { height: 610px; background-size: auto 610px; background-position: 56% top; -webkit-mask-image: linear-gradient( to bottom, #000 0%, #000 30%, rgba(0, 0, 0, .86) 42%, rgba(0, 0, 0, .52) 58%, rgba(0, 0, 0, .18) 73%, transparent 84% ); mask-image: linear-gradient( to bottom, #000 0%, #000 30%, rgba(0, 0, 0, .86) 42%, rgba(0, 0, 0, .52) 58%, rgba(0, 0, 0, .18) 73%, transparent 84% ); } } /* BEGIN FINAL MODALITY LABEL PALETTES */ /* These selectors mirror the existing Space palette under the final taxonomy labels. */ .category-dna-sequence { --category-background: #eef5ff; --category-border: #aac9ef; --category-accent: #2869c7; --category-badge: #dae9fc; } .category-expression, .category-bulk-expression { --category-background: #fff4e9; --category-border: #edc69a; --category-accent: #b96512; --category-badge: #ffe3c3; } .category-functional-genomics, .category-functional { --category-background: #edf9f1; --category-border: #acd8b8; --category-accent: #267842; --category-badge: #d7f0df; } .category-knowledge-graph, .category-ontologies { --category-background: #f5efff; --category-border: #cbb5e9; --category-accent: #7044ac; --category-badge: #e8dcfa; } .category-biomedical-text { --category-background: #fff0f4; --category-border: #e8b5c4; --category-accent: #ac3e61; --category-badge: #f9dce4; } .category-multimodal { --category-background: #eaf9fb; --category-border: #a5d7dd; --category-accent: #177684; --category-badge: #d3eff2; } .category-networks { --category-background: #fff0ee; --category-border: #eab3ab; --category-accent: #af4437; --category-badge: #f9d9d4; } .category-protein-sequence { --category-background: #edf8f6; --category-border: #a5d4cb; --category-accent: #187361; --category-badge: #d2ede7; } .category-rna-sequence { --category-background: #fff9e7; --category-border: #e3cb88; --category-accent: #8a6810; --category-badge: #f5e7b6; } .category-regulatory-genomics { --category-background: #f0f1ff; --category-border: #b7bae7; --category-accent: #4c50ae; --category-badge: #dedff8; } .category-single-cell, .category-single-cell-expression { --category-background: #fff0fa; --category-border: #e1b2d2; --category-accent: #9f3e7f; --category-badge: #f4daeb; } /* END FINAL MODALITY LABEL PALETTES */