ChaRtBot / assets /custom.css
Deepa Shalini
gallery view, updated prompt for subplots choropleth
b89c575
/* Import Manrope font */
@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;600;700;800&display=swap');
:root {
--bg: #F7F8FB;
--card: #FFFFFF;
--ink: #101828;
--muted: #475467;
--border: #E4E7EC;
--cobalt: #2563EB;
--mint: #10B981;
--wash-blue: #EEF4FF;
--wash-green: #ECFDF3;
--shadow: 0 18px 60px rgba(16, 24, 40, .10);
}
* {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
font-family: "Manrope", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
color: var(--ink);
background:
radial-gradient(900px 600px at 18% 18%, rgba(37, 99, 235, .10), transparent 60%),
radial-gradient(900px 600px at 82% 22%, rgba(16, 185, 129, .10), transparent 62%),
linear-gradient(180deg, var(--bg), #FFFFFF);
}
.viewport {
min-height: 100vh;
display: grid;
place-items: center;
padding: 28px 16px;
}
.shell {
width: min(1400px, 85vw);
position: relative;
}
.ribbon {
position: absolute;
width: 320px;
height: 140px;
border-radius: 999px;
filter: blur(28px);
opacity: .55;
pointer-events: none;
}
.ribbon.a {
top: -40px;
left: -40px;
background: rgba(37, 99, 235, .22);
}
.ribbon.b {
bottom: -50px;
right: -30px;
background: rgba(16, 185, 129, .22);
}
.card {
background: var(--card);
border: 1px solid var(--border);
border-radius: 26px;
box-shadow: var(--shadow);
padding: 26px;
}
header {
display: flex;
gap: 14px;
align-items: flex-start;
justify-content: space-between;
flex-wrap: wrap;
margin-bottom: 14px;
}
/* Tab switcher styles */
.tabs {
display: flex;
align-items: center;
gap: 10px;
padding: 6px;
background: rgba(255, 255, 255, 0.70);
border: 1px solid var(--border);
border-radius: 999px;
box-shadow: 0 10px 20px rgba(16, 24, 40, 0.05);
}
.tab {
border: 0;
background: transparent;
padding: 10px 14px;
border-radius: 999px;
font-weight: 600;
font-size: 12px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: rgba(15, 23, 42, 0.70);
cursor: pointer;
font-family: inherit;
transition: all 0.2s ease;
}
.tab:focus {
outline: none;
box-shadow: 0 0 0 4px rgba(47, 107, 255, 0.18);
}
.tab.active {
color: #0b2a7a;
background: linear-gradient(180deg, rgba(47, 107, 255, 0.18), rgba(47, 107, 255, 0.08));
border: 1px solid rgba(47, 107, 255, 0.22);
}
.tab:hover:not(.active) {
background: rgba(47, 107, 255, 0.05);
}
.brand {
display: flex;
gap: 12px;
align-items: flex-start;
min-width: 260px;
}
.mark {
width: 44px;
height: 44px;
border-radius: 16px;
background:
radial-gradient(14px 14px at 30% 30%, rgba(255, 255, 255, .9), transparent 60%),
linear-gradient(135deg, var(--cobalt), var(--mint));
box-shadow: 0 14px 30px rgba(37, 99, 235, .18);
flex: 0 0 auto;
}
h1 {
margin: 0;
font-size: 22px;
line-height: 1.2;
letter-spacing: -0.02em;
}
.sub {
margin-top: 6px;
color: var(--muted);
font-size: 13.5px;
line-height: 1.5;
max-width: 62ch;
}
.pill {
border: 1px solid rgba(37, 99, 235, .22);
background: var(--wash-blue);
color: #1D4ED8;
border-radius: 999px;
padding: 8px 12px;
font-size: 12px;
font-weight: 800;
letter-spacing: .12em;
text-transform: uppercase;
white-space: nowrap;
}
.prompt {
border: 1px solid var(--border);
border-radius: 18px;
background:
linear-gradient(180deg, var(--wash-blue), transparent 70%),
#fff;
padding: 14px;
}
.row {
display: flex;
align-items: stretch;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
margin-top: 12px;
}
.pickBtn {
border: 1px solid rgba(37, 99, 235, .18);
background: var(--wash-blue);
color: #1D4ED8;
border-radius: 14px;
padding: 10px 12px;
cursor: pointer;
font-weight: 800;
font-size: 12px;
letter-spacing: .06em;
display: flex;
align-items: center;
gap: 8px;
transition: transform .12s ease, filter .12s ease;
user-select: none;
}
.pickBtn:hover {
filter: brightness(.99);
}
.pickBtn:active {
transform: translateY(1px);
}
.submitBtn {
border: none;
border-radius: 16px;
padding: 12px 16px;
cursor: pointer;
font-weight: 900;
color: #fff;
background: linear-gradient(135deg, var(--cobalt), #1D4ED8);
box-shadow: 0 14px 30px rgba(37, 99, 235, .22);
transition: transform .12s ease, filter .12s ease;
flex: 0 0 auto;
}
.submitBtn:hover {
filter: brightness(.98);
}
.submitBtn:active {
transform: translateY(1px);
}
.submitBtn:disabled {
background: linear-gradient(135deg, #94A3B8, #CBD5E1);
box-shadow: none;
cursor: not-allowed;
opacity: 0.6;
}
.submitBtn:disabled:hover {
filter: none;
transform: none;
}
.submitBtn:disabled:active {
transform: none;
}
.icon {
width: 18px;
height: 18px;
display: block;
}
.icon-blue path {
stroke: #1D4ED8;
}
@media (max-width: 560px) {
.row {
align-items: stretch;
}
.submitBtn {
width: 100%;
}
}
/* Gallery Page Styles */
.page-head {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 18px;
padding: 8px 10px 14px;
}
.page-title h2 {
margin: 0;
font-size: 18px;
letter-spacing: -0.02em;
}
.page-title p {
margin: 6px 0 0;
font-size: 13px;
color: var(--muted);
}
/* Gallery grid: 5 rows x 4 columns = 20 items */
.gallery-grid {
margin: 8px 6px 0;
padding: 14px 10px 8px;
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 14px;
}
/* Gallery Cards */
.gallery-card {
background: rgba(255, 255, 255, 0.82);
border: 1px solid var(--border);
border-radius: 22px;
box-shadow: 0 10px 26px rgba(16, 24, 40, 0.08);
overflow: hidden;
position: relative;
transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
display: flex;
flex-direction: column;
min-height: 250px;
}
.gallery-card:hover {
transform: translateY(-2px);
border-color: rgba(47, 107, 255, 0.18);
box-shadow: 0 18px 44px rgba(16, 24, 40, 0.12);
}
.gallery-card:focus-within {
box-shadow: 0 0 0 4px rgba(31, 209, 192, 0.14), 0 18px 44px rgba(16, 24, 40, 0.12);
}
/* Thumbnail area */
.thumb {
aspect-ratio: 1 / 1;
border-bottom: 1px solid rgba(15, 23, 42, 0.06);
background:
radial-gradient(260px 120px at 20% 30%, rgba(79, 172, 254, 0.25), transparent 60%),
radial-gradient(260px 120px at 80% 40%, rgba(31, 209, 192, 0.18), transparent 62%),
linear-gradient(180deg, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.6));
display: flex;
align-items: center;
justify-content: center;
position: relative;
}
.thumb img {
width: 92%;
height: 88%;
object-fit: contain;
border-radius: 14px;
border: 1px solid rgba(15, 23, 42, 0.10);
box-shadow: 0 12px 22px rgba(16, 24, 40, 0.10);
background: white;
}
/* Badge/Chip styling */
.badge {
display: inline-flex;
align-items: center;
padding: 4px 10px;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.03em;
text-transform: uppercase;
color: #2f6bff;
background: rgba(47, 107, 255, 0.1);
border: 1px solid rgba(47, 107, 255, 0.2);
border-radius: 999px;
white-space: nowrap;
}
/* Content */
.content {
padding: 12px 12px 12px;
display: flex;
flex-direction: column;
gap: 10px;
flex: 1;
}
.gallery-prompt {
margin: 0;
font-size: 12.5px;
line-height: 1.35;
color: rgba(15, 23, 42, 0.78);
display: -webkit-box;
-webkit-box-orient: vertical;
overflow: hidden;
min-height: calc(1.35em * 3);
}
.meta {
margin-top: auto;
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.links {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.link {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 7px 10px;
border-radius: 999px;
font-size: 12px;
font-weight: 700;
color: rgba(15, 23, 42, 0.74);
border: 1px solid var(--border);
background: rgba(255, 255, 255, 0.75);
text-decoration: none;
transition: all 0.15s ease;
}
.link:hover {
border-color: rgba(47, 107, 255, 0.22);
color: rgba(11, 42, 122, 0.95);
}
.link:focus {
outline: none;
box-shadow: 0 0 0 4px rgba(47, 107, 255, 0.18);
}
.kebab {
width: 34px;
height: 34px;
border-radius: 999px;
border: 1px solid var(--border);
background: rgba(255, 255, 255, 0.75);
cursor: pointer;
display: grid;
place-items: center;
transition: border-color 0.15s ease;
font-size: 18px;
line-height: 1;
color: rgba(15, 23, 42, 0.74);
}
.kebab:hover {
border-color: rgba(15, 23, 42, 0.18);
}
.kebab:focus {
outline: none;
box-shadow: 0 0 0 4px rgba(47, 107, 255, 0.18);
}
/* Responsive gallery grid */
@media (max-width: 1200px) {
.gallery-grid {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
@media (max-width: 980px) {
.gallery-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@media (max-width: 680px) {
.gallery-grid {
grid-template-columns: 1fr;
}
}