Gene-Embedding-Hub / style.css
danieltslz's picture
Rename expression categories to Bulk expression and Single-cell expression
d260439 verified
Raw History Blame Contribute Delete
21.9 kB
: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 */