/* Welcome landing page
 *
 * Colour comes from the Radix scales in radix-colors-light.css / -dark.css.
 * Neutral scale is SLATE (not gray), accent is BLUE, and steps follow the Radix
 * contract: 1-2 page backgrounds, 3-5 component backgrounds, 6-8 borders,
 * 9 solid fill / 10 solid hover, 11 low-contrast text, 12 high-contrast text.
 * The admin brand colours already sit on that scale (btn_background_color is
 * --blue-9), so .btn-main keeps using --main / --main-hover.
 *
 * The dark file defines --slate-dark-* / --blue-dark-* rather than redefining
 * --slate-* / --blue-*, so the --wl-* aliases below are remapped under body.dark.
 *
 * Rules are scoped to .tag_stup_welcome: this file is also loaded on /login,
 * /register and /forgot-password (all render with page == 'welcome'), so an
 * unscoped selector would leak into the auth screens. The modal block at the end
 * of the file is the one intentional exception — see its own comment.
 */

:root {
	--wl-bg: var(--slate-1);
	--wl-bg-subtle: var(--slate-2);
	--wl-panel: var(--slate-1);
	--wl-panel-subtle: var(--slate-3);
	--wl-panel-hover: var(--slate-4);
	--wl-border: var(--slate-6);
	--wl-border-strong: var(--slate-7);
	--wl-border-hover: var(--slate-8);
	--wl-text: var(--slate-12);
	--wl-text-muted: var(--slate-11);
	--wl-accent-solid: var(--blue-9);
	--wl-accent-text: var(--blue-11);
	--wl-accent-subtle: var(--blue-3);
	--wl-accent-border: var(--blue-6);
	--wl-accent-glow: var(--blue-4);
	--wl-focus: var(--blue-8);
	--wl-danger-text: var(--red-11);
	--wl-danger-subtle: var(--red-3);
	--wl-shadow-sm: 0 1px 2px rgba(0, 0, 0, .04);
	--wl-shadow-md: 0 1px 2px rgba(0, 0, 0, .04), 0 10px 26px -14px rgba(0, 0, 0, .18);
	--wl-shadow-lg: 0 1px 2px rgba(0, 0, 0, .05), 0 18px 40px -18px rgba(0, 0, 0, .22);
}

body.dark {
	--wl-bg: var(--slate-dark-1);
	--wl-bg-subtle: var(--slate-dark-2);
	--wl-panel: var(--slate-dark-2);
	--wl-panel-subtle: var(--slate-dark-3);
	--wl-panel-hover: var(--slate-dark-4);
	--wl-border: var(--slate-dark-6);
	--wl-border-strong: var(--slate-dark-7);
	--wl-border-hover: var(--slate-dark-8);
	--wl-text: var(--slate-dark-12);
	--wl-text-muted: var(--slate-dark-11);
	--wl-accent-solid: var(--blue-dark-9);
	--wl-accent-text: var(--blue-dark-11);
	--wl-accent-subtle: var(--blue-dark-3);
	--wl-accent-border: var(--blue-dark-6);
	--wl-accent-glow: var(--blue-dark-4);
	--wl-focus: var(--blue-dark-8);
	--wl-danger-text: var(--red-dark-11);
	--wl-danger-subtle: var(--red-dark-3);
	--wl-shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);
	--wl-shadow-md: 0 1px 2px rgba(0, 0, 0, .4), 0 10px 26px -14px rgba(0, 0, 0, .7);
	--wl-shadow-lg: 0 1px 2px rgba(0, 0, 0, .5), 0 18px 40px -18px rgba(0, 0, 0, .8);
}

.tag_stup_brand {
	font-family: 'Ubuntu', sans-serif;
}

/* Login page tab switcher (username / social). Lives here because this file is
 * the only stylesheet loaded on /login that defines it — dark.css supplies the
 * night-mode variant. Kept as-is; not part of the landing redesign. */
.tag_stup_switch {
	margin: 0 auto 20px;
	border: 0;
	background: #ecf0f5;
	border-radius: 2em;
	padding: 3px;
	white-space: nowrap;
	overflow-x: auto;
	flex-wrap: nowrap;
}

.tag_stup_switch > li > a {
	font-weight: 500;
	font-size: 13px;
	border-radius: 2em;
	letter-spacing: 0.3px;
	display: block;
	padding: 3px 12px;
}

.tag_stup_switch > li > a.active {
	background-color: #efefef;
	color: #000;
	box-shadow: 0 2px 3px rgba(0, 0, 0, 0.15);
}

/* Shell
 * welcome.css turns .tag_welcome into the fixed-height split layout used by the
 * auth screens (including an !important block at >=1024px). The landing shares
 * that class, so the scrolling page layout is restored here. */
.tag_stup_welcome {
	width: 100%;
	height: auto;
	min-height: 100vh;
	display: flex;
	flex-direction: column;
	position: relative;
	z-index: 1;
	background: var(--wl-bg);
	color: var(--wl-text);
}

.tag_stup_welcome a {
	color: var(--wl-text);
}

.tag_stup_welcome .container {
	max-width: 1180px;
	padding-left: 20px;
	padding-right: 20px;
}

.tag_stup_welcome .tag_wel_middle {
	margin: 0;
	flex: 1 0 auto;
}

.tag_stup_welcome .tag_wel_bottom {
	margin-top: 0;
}

@media (min-width: 1024px) {
	/* Counters the split-layout overrides in welcome.css, which are !important. */
	.tag_stup_welcome {
		flex-direction: column !important;
		overflow: visible !important;
		height: auto !important;
	}

	.tag_stup_welcome .container {
		width: 100% !important;
		max-width: 1180px !important;
	}

	.tag_stup_welcome .tag_wel_middle {
		margin-top: 0 !important;
	}
}

/* Buttons */
.tag_stup_welcome .btn-mat {
	border-radius: 12px;
}

/* `.tag_stup_welcome a` above sets the page link colour and outranks `.btn-main`
 * (0,1,1 vs 0,1,0), which left solid buttons rendering with body-text labels.
 * Two classes here put the white label back on every solid button. */
.tag_stup_welcome .btn-main,
.tag_stup_welcome .btn-main:hover,
.tag_stup_welcome .btn-main:focus,
.tag_stup_welcome .btn-main:active {
	color: #fff;
}

.tag_stup_welcome .btn:focus-visible {
	outline: 2px solid var(--wl-focus);
	outline-offset: 2px;
}

.tag_stup_btn_soft {
	background-color: var(--wl-panel-subtle);
	color: var(--wl-text) !important;
	border: 1px solid var(--wl-border-strong) !important;
	transition: background-color .15s ease, border-color .15s ease;
}

.tag_stup_btn_soft:hover,
.tag_stup_btn_soft:focus {
	background-color: var(--wl-panel-hover);
	border-color: var(--wl-border-hover) !important;
}

.tag_stup_btn_lg {
	line-height: 46px;
	padding: 0 26px;
	font-size: 15px;
}

/* Header */
.tag_stup_welcome .tag_wel_upper {
	background: transparent;
	overflow: visible;
}

.tag_stup_nav {
	justify-content: space-between;
	padding: 22px 0;
}

.tag_stup_nav .logo img {
	max-width: 140px;
	max-height: 46px;
}

.tag_stup_nav .loginbtns {
	display: flex;
	align-items: center;
	gap: 10px;
}

.tag_stup_nav .loginbtns .btn {
	min-width: 96px;
}

/* Signed-in header state: avatar + name replace Login/Register. */
.tag_stup_account {
	gap: 14px;
}

/* Hover opens the menu; a JS-toggled .is-open covers click, keyboard and touch.
 * The wrapper keeps padding-bottom so the pointer can cross into the panel
 * without passing over a gap that would close it. */
.tag_stup_account_menu {
	position: relative;
	padding-bottom: 8px;
	margin-bottom: -8px;
}

.tag_stup_account_id {
	display: flex;
	align-items: center;
	gap: 10px;
	min-width: 0;
	padding: 4px 8px 4px 4px;
	border: 1px solid transparent;
	border-radius: 2em;
	background: none;
	cursor: pointer;
	color: var(--wl-text);
	transition: background-color .15s ease, border-color .15s ease;
}

.tag_stup_account_menu:hover .tag_stup_account_id,
.tag_stup_account_menu.is-open .tag_stup_account_id {
	background-color: var(--wl-panel-subtle);
	border-color: var(--wl-border);
}

.tag_stup_account_caret {
	flex-shrink: 0;
	color: var(--wl-text-muted);
	transition: transform .15s ease;
}

.tag_stup_account_menu.is-open .tag_stup_account_caret {
	transform: rotate(180deg);
}

.tag_stup_account_drop {
	position: absolute;
	top: 100%;
	right: 0;
	z-index: 20;
	min-width: 190px;
	padding: 6px;
	border: 1px solid var(--wl-border);
	border-radius: 14px;
	background-color: var(--wl-panel);
	box-shadow: var(--wl-shadow-lg);
	opacity: 0;
	visibility: hidden;
	transform: translateY(-4px);
	transition: opacity .15s ease, transform .15s ease, visibility 0s .15s;
}

.tag_stup_account_menu:hover .tag_stup_account_drop,
.tag_stup_account_menu.is-open .tag_stup_account_drop {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
	transition: opacity .15s ease, transform .15s ease, visibility 0s;
}

.tag_stup_welcome .tag_stup_account_drop a {
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 9px 12px;
	border-radius: 10px;
	font-size: 14px;
	color: var(--wl-text);
	transition: background-color .12s ease;
}

.tag_stup_welcome .tag_stup_account_drop a:hover,
.tag_stup_welcome .tag_stup_account_drop a:focus {
	background-color: var(--wl-panel-hover);
	text-decoration: none;
}

.tag_stup_account_drop a svg {
	flex-shrink: 0;
	color: var(--wl-text-muted);
}

.tag_stup_account_sep {
	display: block;
	height: 1px;
	margin: 6px 4px;
	background-color: var(--wl-border);
}

/* Destructive action: red 11 for the label, red 3 behind it on hover — the same
 * text/component steps the rest of the file uses, just on the red scale. */
.tag_stup_welcome .tag_stup_account_drop a.tag_stup_account_logout {
	color: var(--wl-danger-text);
}

.tag_stup_welcome .tag_stup_account_drop a.tag_stup_account_logout svg {
	color: inherit;
}

.tag_stup_welcome .tag_stup_account_drop a.tag_stup_account_logout:hover,
.tag_stup_welcome .tag_stup_account_drop a.tag_stup_account_logout:focus {
	background-color: var(--wl-danger-subtle);
	color: var(--wl-danger-text);
}

.tag_stup_account_avatar {
	width: 36px;
	height: 36px;
	border-radius: 50%;
	object-fit: cover;
	border: 1px solid var(--wl-border);
	flex-shrink: 0;
}

.tag_stup_account_name {
	max-width: 140px;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	font-weight: 500;
	color: var(--wl-text);
}

@media (max-width: 640px) {
	.tag_stup_account_name {
		display: none;
	}
}

/* Hero */
.tag_stup_hdr {
	position: relative;
	overflow: hidden;
	background: var(--wl-bg-subtle);
	border-bottom: 1px solid var(--wl-border);
	padding: 0 0 40px;
}

.tag_stup_hdr::before {
	content: '';
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	background:
		radial-gradient(68% 90% at 82% 4%, var(--wl-accent-glow) 0%, transparent 62%),
		radial-gradient(52% 68% at 4% 104%, var(--wl-panel-subtle) 0%, transparent 66%);
	pointer-events: none;
	z-index: 0;
}

.tag_stup_hdr > * {
	position: relative;
	z-index: 1;
}

/* The rule above puts every direct child on the same layer, so the hero block —
 * which comes later in the DOM — painted over the nav's account dropdown. Lift
 * the nav's container so its menu escapes above the hero art. */
.tag_stup_hdr > .tag_stup_nav_prnt {
	z-index: 30;
}

.tag_stup_hero {
	display: grid;
	grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
	align-items: center;
	gap: 40px;
	padding: 40px 0 0;
}

/* Slate pill: --slate-3 fill, --slate-6 border, --slate-11 text (and the
 * --slate-dark-* equivalents), via the semantic aliases at the top of the file.
 * Sentence case rather than uppercase — the accreditation line is long enough
 * that uppercase plus letter-spacing overflowed the copy column. */
.tag_stup_eyebrow {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	max-width: 100%;
	padding: 6px 14px;
	border-radius: 2em;
	background-color: var(--wl-panel-subtle);
	border: 1px solid var(--wl-border);
	color: var(--wl-text-muted);
	font-size: 12px;
	font-weight: 500;
	line-height: 1.45;
	letter-spacing: .01em;
	text-align: start;
}

.tag_stup_eyebrow svg {
	flex-shrink: 0;
}

.tag_stup_eyebrow u {
	text-decoration-thickness: 1px;
	text-underline-offset: 2px;
}

.tag_stup_hero_title {
	font-family: 'Readex Pro', sans-serif;
	font-size: clamp(34px, 4.6vw, 58px);
	line-height: 1.08;
	letter-spacing: -1px;
	font-weight: 600;
	color: var(--wl-text);
	margin: 20px 0 0;
}

/* Brush-marked word in the headline. The stroke is an SVG behind the word with
 * preserveAspectRatio="none", so it stretches to whatever the word measures —
 * it survives translation and every breakpoint without per-word tuning. */
.tag_stup_hero_mark {
	position: relative;
	display: inline-block;
	white-space: nowrap;
	padding: 0 .14em;
}

.tag_stup_hero_mark_brush {
	position: absolute;
	top: 50%;
	left: 0;
	z-index: 0;
	width: 100%;
	height: 1.34em;
	transform: translateY(-52%) rotate(-1.2deg);
	color: var(--wl-accent-solid);
	fill: currentColor;
	pointer-events: none;
}

.tag_stup_hero_mark_word {
	position: relative;
	z-index: 1;
	color: #fff;
}

.tag_stup_hero_sub {
	margin: 18px 0 0;
	max-width: 54ch;
	font-size: 17px;
	line-height: 1.6;
	color: var(--wl-text-muted);
}

.tag_stup_hero_sub u {
	color: var(--wl-text);
	font-weight: 500;
	text-decoration-color: var(--wl-accent-solid);
	text-decoration-thickness: 1.5px;
	text-underline-offset: 3px;
}

.tag_stup_hero_cta {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	margin: 32px 0 0;
}

.tag_stup_hero_art {
	position: relative;
	display: flex;
	justify-content: center;
	align-items: center;
	/* Both radii clear the phone silhouette (~175px half-width), otherwise the
	 * inner ring renders entirely behind the mockup and is never seen. */
	--wl-orbit-outer: 272px;
	--wl-orbit-inner: 202px;
	--wl-coin-size: 40px;
}

/* Portrait mockup — bounded by height so it never dwarfs the copy column.
 * Sits above the orbit so the coins read as passing behind the phone. */
.tag_stup_hero_phone {
	position: relative;
	z-index: 1;
	max-width: 100%;
	width: auto;
	height: auto;
	max-height: 560px;
	user-select: none;
	-webkit-user-drag: none;
}

/* Notification lottie — sits above the phone's top-right corner, like a toast
 * peeking out from behind the mockup. */
.tag_stup_hero_notif {
	position: absolute;
	top: -11%;
	right: 5%;
	z-index: 2;
	pointer-events: none;
}

/* Dinar orbit — four nested layers, each with one job:
 *   _track  spins the whole ring
 *   .coin   places one coin at its angle on the ring (static)
 *   > span  cancels that placement angle
 *   > i     cancels the ring's spin, so the coin face never tumbles
 * A single element cannot hold both a static transform and an animated one. */
.tag_stup_orbit {
	position: absolute;
	top: 50%;
	left: 50%;
	z-index: 0;
	width: 0;
	height: 0;
	pointer-events: none;
}

/* --wl-border is --slate-6, remapped to --slate-dark-6 under body.dark. */
.tag_stup_orbit_path {
	position: absolute;
	top: 50%;
	left: 50%;
	border: 1px solid var(--wl-border);
	border-radius: 50%;
}

.tag_stup_orbit_path_outer {
	width: calc(var(--wl-orbit-outer) * 2);
	height: calc(var(--wl-orbit-outer) * 2);
	margin: calc(var(--wl-orbit-outer) * -1) 0 0 calc(var(--wl-orbit-outer) * -1);
}

.tag_stup_orbit_path_inner {
	width: calc(var(--wl-orbit-inner) * 2);
	height: calc(var(--wl-orbit-inner) * 2);
	margin: calc(var(--wl-orbit-inner) * -1) 0 0 calc(var(--wl-orbit-inner) * -1);
	border-style: dashed;
}

.tag_stup_orbit_track {
	position: absolute;
	top: 0;
	left: 0;
	width: 0;
	height: 0;
	animation: tag_stup_orbit_spin linear infinite;
}

.tag_stup_orbit_track_outer {
	--wl-orbit-r: var(--wl-orbit-outer);
	animation-duration: 46s;
}

.tag_stup_orbit_track_inner {
	--wl-orbit-r: var(--wl-orbit-inner);
	animation-duration: 32s;
	animation-direction: reverse;
}

.tag_stup_coin {
	position: absolute;
	top: 0;
	left: 0;
	width: var(--wl-coin-size);
	height: var(--wl-coin-size);
	margin: calc(var(--wl-coin-size) / -2) 0 0 calc(var(--wl-coin-size) / -2);
	transform:
		rotate(calc(360deg / var(--wl-coins) * var(--wl-i)))
		translateY(calc(var(--wl-orbit-r) * -1));
}

.tag_stup_coin > span {
	display: block;
	width: 100%;
	height: 100%;
	transform: rotate(calc(360deg / var(--wl-coins) * var(--wl-i) * -1));
}

.tag_stup_coin > span > i {
	display: block;
	width: 100%;
	height: 100%;
	animation: tag_stup_orbit_spin_rev linear infinite;
	animation-duration: inherit;
}

.tag_stup_orbit_track_outer .tag_stup_coin > span > i {
	animation-duration: 46s;
}

.tag_stup_orbit_track_inner .tag_stup_coin > span > i {
	animation-duration: 32s;
	animation-direction: reverse;
}

.tag_stup_coin img {
	width: 100%;
	height: 100%;
	opacity: .9;
	filter: drop-shadow(0 4px 10px rgba(0, 0, 0, .18));
	user-select: none;
	-webkit-user-drag: none;
}

@keyframes tag_stup_orbit_spin {
	from { transform: rotate(0deg); }
	to   { transform: rotate(360deg); }
}

@keyframes tag_stup_orbit_spin_rev {
	from { transform: rotate(0deg); }
	to   { transform: rotate(-360deg); }
}

/* Mobile app links + ad slot */
.tag_stup_apps {
	display: flex;
	flex-wrap: wrap;
	gap: 30px;
	margin: 56px 0 0;
	padding: 22px;
	border: 1px solid var(--wl-border);
	border-radius: 16px;
	background-color: var(--wl-panel);
}

.tag_stup_apps_col > p {
	margin: 0 0 10px;
	font-size: 14px;
	font-weight: 500;
	color: var(--wl-text-muted);
}

.tag_stup_ad {
	margin: 40px 0 0;
}

.tag_stup_ad:empty {
	display: none;
}

/* Platform features */
.tag_stup_features_band {
	/* No top margin: the advantages grid above already ends in 88px of
	 * padding. The bottom needs one — the creators band below is a shaded,
	 * bordered panel, which reads cramped at a plain section gap. */
	margin: 0 0 56px;
}

/* Five features in one row — smaller cards than this class defaults to, so
 * they line up evenly. Scoped to this band; the advantages section reuses
 * .tag_stup_feats_3 at its own larger size. */
.tag_stup_features_band .tag_stup_feats_3 {
	grid-template-columns: repeat(5, minmax(0, 1fr));
	gap: 16px;
	padding-bottom: 0;
}

.tag_stup_features_band .tag_stup_feat_card {
	padding: 24px 20px 22px;
}

.tag_stup_features_band .tag_stup_feat_card b {
	font-size: 16px;
	margin-bottom: 8px;
}

.tag_stup_features_band .tag_stup_feat_card p {
	font-size: 13px;
	line-height: 1.55;
}

/* Flat neutral tile, deliberately not the multi-colour gradient set the
 * Discover section uses: keeping every icon the same weight lets the copy
 * carry the section rather than the icon colour. */
.tag_stup_feat_squircle {
	display: grid;
	place-items: center;
	width: 64px;
	height: 64px;
	margin: 0 0 18px;
	border-radius: 20px;
	background-color: var(--wl-panel-subtle);
}

.tag_stup_feat_squircle svg {
	width: 26px;
	height: 26px;
	color: var(--slate-9r);
}

.tag_stup_features_band .tag_stup_feat_squircle {
	width: 48px;
	height: 48px;
	margin-bottom: 14px;
	border-radius: 15px;
}

.tag_stup_features_band .tag_stup_feat_squircle svg {
	width: 20px;
	height: 20px;
}

/* Section headings */
.tag_stup_section_title {
	margin: 0 0 32px;
	font-family: 'Readex Pro', sans-serif;
	font-size: clamp(24px, 2.6vw, 32px);
	font-weight: 600;
	letter-spacing: -.4px;
	color: var(--wl-text);
	text-align: center;
}

.tag_stup_section_sub {
	margin: -20px auto 32px;
	max-width: 56ch;
	font-size: 16px;
	line-height: 1.6;
	color: var(--wl-text-muted);
	text-align: center;
}

/* Brand hashtag heading above the advantages grid */
.tag_stup_hash_title {
	margin: 88px 0 40px;
	letter-spacing: -.5px;
}

.tag_stup_hash_title::after {
	content: '';
	display: block;
	width: 56px;
	height: 3px;
	margin: 16px auto 0;
	border-radius: 2px;
	background-color: var(--wl-accent-solid);
}

/* Advantages */
.tag_stup_feats {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 20px;
	padding: 0 0 88px;
}

.tag_stup_feats_3 {
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 28px;
}

.tag_stup_feat_card {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	padding: 32px 28px 28px;
	border: 1px solid var(--wl-border);
	border-radius: 20px;
	background-color: var(--wl-panel);
	box-shadow: var(--wl-shadow-sm);
	transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
}

.tag_stup_feat_card:hover {
	transform: translateY(-4px);
	border-color: var(--wl-border-hover);
	box-shadow: var(--wl-shadow-md);
}

/* Isometric illustration. Sized to read clearly while the title underneath it
 * still holds the most visual weight in the card. Decorative, so the empty
 * alt keeps it out of the accessibility tree. */
.tag_stup_feat_art {
	display: block;
	width: 100px;
	height: 100px;
	margin: 0 0 20px -6px;
	object-fit: contain;
}

.tag_stup_feat_card b {
	display: block;
	margin: 0 0 12px;
	font-family: 'Readex Pro', sans-serif;
	font-size: clamp(20px, 1.7vw, 23px);
	font-weight: 500;
	line-height: 1.25;
	letter-spacing: -.3px;
	color: var(--wl-text);
}

.tag_stup_feat_card p {
	margin: 0;
	font-size: 14.5px;
	line-height: 1.65;
	color: var(--wl-text-muted);
}

/* Creators showcase */
.tag_stup_creators_band {
	padding: 80px 0;
	background: var(--wl-bg-subtle);
	border-top: 1px solid var(--wl-border);
	border-bottom: 1px solid var(--wl-border);
}

/* Five up, so a full set of 10 lands as two even rows. */
.tag_stup_creator_grid {
	display: grid;
	grid-template-columns: repeat(5, minmax(0, 1fr));
	gap: 14px;
}

.tag_stup_creator_card {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	padding: 20px 12px 16px;
	border: 1px solid var(--wl-border);
	border-radius: 16px;
	background-color: var(--wl-panel);
	box-shadow: var(--wl-shadow-sm);
	transition: transform .2s ease, box-shadow .2s ease, border-color .2s ease;
}

.tag_stup_creator_card:hover {
	transform: translateY(-3px);
	border-color: var(--wl-border-hover);
	box-shadow: var(--wl-shadow-md);
}

.tag_stup_creator_head {
	display: flex;
	flex-direction: column;
	align-items: center;
	width: 100%;
	min-width: 0;
}

.tag_stup_creator_avatar {
	width: 60px;
	height: 60px;
	border-radius: 50%;
	object-fit: cover;
	background-color: var(--wl-panel-subtle);
	border: 1px solid var(--wl-border);
}

/* Flex row so the badge sits tight against the name and stays vertically
 * centred on it. The name is truncated by its own child, not here — a flex
 * container can't ellipsis its contents. */
.tag_stup_creator_name {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 4px;
	max-width: 100%;
	margin: 12px 0 2px;
	font-family: 'Readex Pro', sans-serif;
	font-size: 14px;
	font-weight: 500;
	line-height: 1.3;
	color: var(--wl-text);
	min-width: 0;
}

.tag_stup_creator_name_text {
	min-width: 0;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* Sized here rather than by width/height attributes so it can never be
 * stretched or shrunk by the flex row it sits in. `display: block` keeps the
 * inline baseline gap from nudging it off-centre against the name. */
.tag_stup_creator_badge {
	flex: 0 0 auto;
	display: block;
	width: 13px;
	height: 13px;
	color: var(--wl-accent-solid);
}

.tag_stup_creator_username {
	display: block;
	max-width: 100%;
	font-size: 12px;
	color: var(--wl-text-muted);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.tag_stup_creator_stat {
	margin: 12px 0 14px;
	font-size: 12px;
	color: var(--wl-text-muted);
}

.tag_stup_creator_stat b {
	display: block;
	font-family: 'Readex Pro', sans-serif;
	font-size: 18px;
	font-weight: 600;
	line-height: 1.2;
	color: var(--wl-text);
}

/* Stacked at this width — two buttons side by side would each be too narrow
 * to hold their label once the card is a fifth of the row. */
.tag_stup_creator_actions {
	display: flex;
	flex-direction: column;
	gap: 6px;
	width: 100%;
	margin-top: auto;
}

.tag_stup_creator_actions .btn {
	width: 100%;
	min-width: 0;
	line-height: 32px;
	padding: 0 8px;
	font-size: 13px;
}

/* FAQ */
.tag_stup_faq_band {
	margin: 88px 0 0;
}

.tag_stup_faq_list {
	max-width: 760px;
	margin: 0 auto;
	border: 1px solid var(--wl-border);
	border-radius: 16px;
	background-color: var(--wl-panel);
	box-shadow: var(--wl-shadow-sm);
	overflow: hidden;
}

.tag_stup_faq_item + .tag_stup_faq_item {
	border-top: 1px solid var(--wl-border);
}

/* list-style on the summary itself covers Firefox; ::-webkit-details-marker
 * covers older WebKit. Both are needed to lose the default triangle. */
.tag_stup_faq_q {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	padding: 18px 22px;
	cursor: pointer;
	list-style: none;
	font-family: 'Readex Pro', sans-serif;
	font-size: 15.5px;
	font-weight: 500;
	line-height: 1.4;
	color: var(--wl-text);
	transition: background-color .15s ease;
}

.tag_stup_faq_q::-webkit-details-marker {
	display: none;
}

.tag_stup_faq_q:hover {
	background-color: var(--wl-panel-subtle);
}

.tag_stup_faq_q:focus-visible {
	outline: 2px solid var(--wl-focus);
	outline-offset: -2px;
}

.tag_stup_faq_chevron {
	flex: 0 0 auto;
	color: var(--wl-text-muted);
	transition: transform .2s ease;
}

.tag_stup_faq_item[open] .tag_stup_faq_chevron {
	transform: rotate(180deg);
}

.tag_stup_faq_a {
	padding: 0 22px 20px;
}

.tag_stup_faq_a p {
	margin: 0;
	max-width: 62ch;
	font-size: 14.5px;
	line-height: 1.7;
	color: var(--wl-text-muted);
}

/* Trust band */
.tag_stup_trend_widget {
	padding: 72px 0;
	text-align: center;
	background: var(--wl-bg);
	border-bottom: 1px solid var(--wl-border);
}

.tag_stup_trend_prnt {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 28px 40px;
}

/* Each logo's box is sized server-side from its real file dimensions (see
 * content-startup.phtml), so the skeleton below reserves the right footprint
 * and nothing shifts once the image decodes in. */
.tag_stup_trend_logo_ph {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: 6px;
	background: linear-gradient(90deg, var(--wl-panel-subtle) 25%, var(--wl-panel-hover) 37%, var(--wl-panel-subtle) 63%);
	background-size: 400% 100%;
	animation: tag_stup_trend_shimmer 1.4s ease infinite;
}

.tag_stup_trend_logo_ph.is-loaded {
	background: none;
	animation: none;
}

@keyframes tag_stup_trend_shimmer {
	0% { background-position: 100% 0; }
	100% { background-position: 0 0; }
}

.tag_stup_trend_prnt img {
	width: 100%;
	height: 100%;
	object-fit: contain;
	opacity: 0;
	transition: opacity .25s ease;
}

.tag_stup_trend_prnt img.is-loaded {
	opacity: 1;
}

@media (prefers-reduced-motion: reduce) {
	.tag_stup_trend_logo_ph {
		animation: none;
	}
}

/* Dark mode: the partner and regulator marks are supplied as dark artwork on
 * transparent backgrounds, so most of them disappear on a dark page. Filtering
 * or inverting would wreck the multi-colour ones (Flouci, Zitouna, Mastercard),
 * so the row keeps its own light surface instead — a logo sheet laid on the
 * page. Light-scale tokens are referenced directly: radix-colors-dark.css adds
 * --slate-dark-*, it never redefines --slate-*. */
body.dark .tag_stup_trend_prnt {
	background: var(--slate-2);
	border: 1px solid var(--slate-6);
	border-radius: 20px;
	padding: 44px 36px;
}

/* The skeleton inherits dark tokens from the page, which would sit almost black
 * on that light sheet. Put it back on the light scale. */
body.dark .tag_stup_trend_logo_ph {
	background: linear-gradient(90deg, var(--slate-3) 25%, var(--slate-4) 37%, var(--slate-3) 63%);
	background-size: 400% 100%;
}

body.dark .tag_stup_trend_logo_ph.is-loaded {
	background: none;
}

@media (max-width: 640px) {
	body.dark .tag_stup_trend_prnt {
		padding: 28px 20px;
		border-radius: 16px;
	}
}

/* Discover — original 2.3.1 treatment: gradient squircles behind white glyphs,
 * on an unbordered panel with two soft decorative circles bleeding off the top. */
.tag_stup_explore_prnt {
	position: relative;
	overflow: hidden;
	margin: 88px auto 0;
	max-width: 900px;
	padding: 40px;
}

.tag_stup_explore_circle-1 {
	position: absolute;
	top: -315px;
	right: 0;
	width: 600px;
	height: 400px;
	background: radial-gradient(#b5e5ff, #0287f6);
	border-radius: 50%;
	opacity: 0.07;
}

.tag_stup_explore_circle-2 {
	position: absolute;
	top: -55px;
	right: -90px;
	width: 250px;
	height: 250px;
	background: radial-gradient(#c0fffb, #00bcb0);
	border-radius: 50%;
	opacity: 0.1;
}

.tag_stup_explore_prnt > h2 {
	position: relative;
	margin-bottom: 26px;
}

.tag_stup_explore {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
}

.tag_stup_explore > a {
	display: block;
	margin: 14px 14px 0;
	font-family: 'Readex Pro', sans-serif;
	font-size: 16px;
	font-weight: 500;
	line-height: normal;
	color: var(--wl-text);
}

.tag_stup_explore > a > div {
	position: relative;
	display: grid;
	place-items: center;
	width: 74px;
	height: 74px;
	margin: 0 auto 8px;
	transition: transform 200ms ease;
}

.tag_stup_explore > a:hover > div {
	transform: scale(1.1);
}

.tag_stup_explore > a > div svg:not(.squircle) {
	position: relative;
	z-index: 1;
	width: 30px;
	height: 30px;
	color: #fff;
}

.tag_stup_explore > a > div svg.squircle {
	position: absolute;
	width: 100%;
	height: 100%;
}

/* Closing call to action */
.tag_stup_cta {
	position: relative;
	overflow: hidden;
	margin: 88px 0 0;
	padding: 56px 32px;
	text-align: center;
	border: 1px solid var(--wl-accent-border);
	border-radius: 20px;
	background:
		radial-gradient(60% 120% at 50% 0%, var(--wl-accent-glow) 0%, transparent 70%),
		var(--wl-panel);
}

.tag_stup_cta h2 {
	margin: 0 0 28px;
	font-family: 'Readex Pro', sans-serif;
	font-size: clamp(23px, 2.6vw, 32px);
	font-weight: 600;
	letter-spacing: -.4px;
	color: var(--wl-text);
}

.tag_stup_cta .tag_stup_hero_cta {
	justify-content: center;
	margin: 0;
}

/* Footer */
.tag_stup_welcome .welcome-footer {
	/* Bottom padding clears the fixed cookie banner, which otherwise sits on top
	 * of the footer links for first-time visitors. */
	padding: 56px 0 96px;
	color: var(--wl-text-muted);
	border-top: 1px solid var(--wl-border);
	margin-top: 88px;
}

.tag_stup_welcome .welcome-footer a {
	color: var(--wl-text-muted);
}

.tag_stup_welcome .welcome-footer a:hover {
	color: var(--wl-text);
}

/* Scroll reveal — the hidden state only applies once the script has run, so the
 * cards stay readable if JS is unavailable. */
.tag_stup_js .tag_stup_reveal {
	opacity: 0;
	transform: translateY(16px);
	transition: opacity .5s cubic-bezier(.16, 1, .3, 1), transform .5s cubic-bezier(.16, 1, .3, 1);
}

.tag_stup_js .tag_stup_reveal:nth-child(2) {
	transition-delay: .06s;
}

.tag_stup_js .tag_stup_reveal:nth-child(3) {
	transition-delay: .12s;
}

.tag_stup_js .tag_stup_reveal:nth-child(4) {
	transition-delay: .18s;
}

.tag_stup_js .tag_stup_reveal.is-visible {
	opacity: 1;
	transform: none;
}

@media (prefers-reduced-motion: reduce) {
	.tag_stup_js .tag_stup_reveal {
		opacity: 1;
		transform: none;
		transition: none;
	}

	.tag_stup_feat_card:hover,
	.tag_stup_creator_card:hover,
	.tag_stup_explore > a:hover > div {
		transform: none;
	}

	/* Coins hold their starting positions rather than orbiting. */
	.tag_stup_orbit_track,
	.tag_stup_coin > span > i {
		animation: none;
	}
}

/* Responsive */
@media (max-width: 1023px) {
	.tag_stup_hero {
		grid-template-columns: minmax(0, 1fr);
		gap: 32px;
		padding-top: 32px;
	}

	.tag_stup_hero_sub {
		max-width: none;
	}

	.tag_stup_hero_art {
		--wl-orbit-outer: 218px;
		--wl-orbit-inner: 162px;
		--wl-coin-size: 34px;
	}

	.tag_stup_hero_phone {
		max-height: 420px;
	}

	.tag_stup_hero_notif {
		width: 184px !important;
		height: 184px !important;
	}

	.tag_stup_hash_title {
		margin-top: 64px;
	}

	.tag_stup_feats {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		padding-bottom: 64px;
	}

	.tag_stup_features_band .tag_stup_feats_3 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.tag_stup_feat_art {
		width: 86px;
		height: 86px;
	}

	.tag_stup_creator_grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.tag_stup_creators_band {
		padding: 64px 0;
	}

	.tag_stup_explore_prnt,
	.tag_stup_cta {
		margin-top: 64px;
	}

	.tag_stup_welcome .welcome-footer {
		margin-top: 64px;
	}
}

@media (max-width: 640px) {
	.tag_stup_hdr {
		padding-bottom: 32px;
	}

	/* Only one ring fits here. The outer is the one kept — the inner radius is
	 * narrower than the phone at this size, so its coins would never be seen. */
	.tag_stup_hero_art {
		--wl-orbit-outer: 165px;
		--wl-coin-size: 30px;
	}

	.tag_stup_orbit_path_inner,
	.tag_stup_orbit_track_inner {
		display: none;
	}

	.tag_stup_hero_notif {
		width: 152px !important;
		height: 152px !important;
	}

	.tag_stup_nav {
		padding: 16px 0;
	}

	.tag_stup_nav .loginbtns .btn {
		min-width: auto;
		padding: 0 14px;
	}

	.tag_stup_hero_cta .btn {
		flex: 1 1 100%;
	}

	.tag_stup_hash_title {
		margin: 48px 0 32px;
	}

	.tag_stup_feats {
		grid-template-columns: minmax(0, 1fr);
		gap: 16px;
		padding-bottom: 48px;
	}

	.tag_stup_features_band .tag_stup_feats_3 {
		grid-template-columns: minmax(0, 1fr);
	}

	.tag_stup_feat_card {
		align-items: center;
		text-align: center;
		padding: 28px 24px 24px;
	}

	.tag_stup_feat_art {
		width: 88px;
		height: 88px;
		margin-left: 0;
	}

	.tag_stup_creator_grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		gap: 12px;
	}

	.tag_stup_creators_band {
		padding: 48px 0;
	}

	.tag_stup_section_sub {
		margin-top: -16px;
	}

	.tag_stup_apps {
		margin-top: 40px;
	}

	.tag_stup_explore > a {
		margin: 12px 8px 0;
		font-size: 14px;
	}

	.tag_stup_explore > a > div {
		width: 62px;
		height: 62px;
	}

	.tag_stup_explore_prnt {
		padding: 15px;
	}

	.tag_stup_cta {
		padding: 40px 20px;
		border-radius: 16px;
	}

	.tag_stup_trend_widget {
		padding: 56px 0;
	}
}

/* Modals on the welcome/auth shell
 *
 * style.css is not linked on any page == 'welcome' (landing, /login, /register,
 * /forgot-password), so its modal theming — .modal.fade, .wow_mat_mdl and the
 * switch-account list — is ported across here. Deliberately unscoped: it restores
 * app-wide behaviour on the pages that were missing it, the #select-language
 * modal included. Colours go through --wl-* rather than style.css's light-only
 * values, so modals follow dark mode like the rest of the page.
 */
.modal-backdrop {
	display: none;
}

.modal.fade {
	padding: 15px !important;
	background: transparent;
	opacity: 0;
	visibility: hidden;
	transition: opacity .2s, visibility 0s .2s;
	display: flex !important;
	overscroll-behavior: contain;
}

.modal.fade.show {
	opacity: 1;
	visibility: visible;
	transition: opacity .2s, visibility 0s;
	background: rgba(0, 0, 0, .6);
	overflow-y: auto;
}

.modal.fade .modal-dialog {
	display: inline-block;
	text-align: left;
	vertical-align: middle;
	margin: auto;
	width: 100%;
	transform: scale(.95);
	will-change: transform;
	transition: transform .2s cubic-bezier(.215, .61, .355, 1);
}

.modal.fade.show .modal-dialog {
	transform: scale(1);
}

.modal-header .close {
	opacity: .6;
	padding: 4px 8px;
	margin-right: -8px;
	margin-top: -2px;
	background: none;
	border: 0;
	color: var(--wl-text);
	cursor: pointer;
}

.modal-header .close svg {
	width: 22px;
	height: 22px;
}

.modal-title {
	color: var(--wl-text);
	font-weight: 500;
}

.wow_mat_mdl .modal-content {
	box-shadow: 0 11px 15px -7px rgba(0, 0, 0, .2), 0 24px 38px 3px rgba(0, 0, 0, .14), 0 9px 46px 8px rgba(0, 0, 0, .12);
	padding: 24px;
	border-radius: 16px;
	border: 0;
	background-color: var(--wl-panel);
	color: var(--wl-text);
}

.wow_mat_mdl .modal-header {
	border: 0;
	background: transparent;
	padding: 0;
	margin: 0 0 20px;
}

.wow_mat_mdl .modal-header .modal-title {
	font-size: 20px;
	line-height: 32px;
	font-weight: 500;
}

.wow_mat_mdl .modal-body {
	padding: 0;
	font-size: 15px;
}

/* Switch-account list */
.dropdown-switch-account .btn-main {
	width: 100%;
	margin: 6px 0 0;
	color: #fff;
}

.dropdown-switch-account .user-avatar {
	display: flex;
	align-items: center;
	gap: 10px;
	border-radius: 10px;
	padding: 8px;
	line-height: normal;
	margin: 0 0 6px;
	color: var(--wl-text);
	transition: background-color .12s ease;
}

.dropdown-switch-account a.user-avatar:hover {
	background-color: var(--wl-panel-hover);
	text-decoration: none;
}

.dropdown-switch-account .user-avatar.active {
	color: var(--wl-accent-text);
	background: var(--wl-accent-subtle);
}

.dropdown-switch-account .user-avatar > img {
	margin: 0;
	box-shadow: none;
	flex: 0 0 auto;
	width: 35px;
	height: 35px;
	border-radius: 8px;
	object-fit: cover;
}

.dropdown-switch-account .user-avatar .info {
	flex: 1 1 auto;
	min-width: 0;
}

.dropdown-switch-account .user-avatar .info b {
	margin: 0;
	font-weight: 500;
	display: block;
	font-size: 15px;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.dropdown-switch-account .user-avatar .info p {
	margin: 0;
	font-size: 13px;
	color: var(--wl-text-muted);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.dropdown-switch-account .user-avatar > svg {
	margin: 0;
	flex: 0 0 auto;
	height: 20px;
	width: 20px;
}
