/* ============================================================
 * DROPE — Painel do cliente
 *
 * Mesmo sistema do resto do site: campo neutro, tinta quase preta, fios de
 * 1px, laranja da marca só onde marca posição (item ativo e ação principal).
 * Prefixo: .dsb-
 * ============================================================ */

.dsb {
	--d-ink: #14161a;
	--d-ink-2: #3d424a;
	--d-muted: #6b7076;
	--d-faint: #9aa0a6;
	--d-line: #e4e4e7;
	--d-line-soft: #f1f1f4;
	--d-surface: #fff;
	--d-canvas: #f7f7f8;
	--d-brand: #ff7e01;
	--d-brand-hover: #e86f00;
	--d-brand-ink: #a34700;
	--d-brand-tint: #fff4e8;
	--d-ok: #157f58;
	--d-ok-tint: #eef8f3;
	--d-warn: #9a5b00;
	--d-warn-tint: #fff8ec;
	--d-danger: #b4231c;
	--d-brand-line: #ffd9ad;
	--d-r: 12px;
	--d-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;

	/* Seta em máscara, para herdar a cor de quem a usa. */
	--d-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23000' stroke-width='1.9' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 8h9m0 0-3.5-3.5M12 8l-3.5 3.5'/%3E%3C/svg%3E");

	max-width: 1240px;
	margin: 0 auto;
	padding: 28px 20px 72px;
	color: var(--d-ink);
	font-size: 15px;
	line-height: 1.55;
	box-sizing: border-box;
}

.dsb *,
.dsb *::before,
.dsb *::after { box-sizing: border-box; }

/* Blocos que abrem por clique nascem com [hidden]; regras de layout como
   display:flex ganhariam do padrão do navegador e o bloco apareceria sozinho. */
.dsb [hidden] { display: none !important; }

.dsb-num {
	font-family: var(--d-mono);
	font-variant-numeric: tabular-nums;
	letter-spacing: -0.01em;
}

.dsb-ico { width: 18px; height: 18px; flex-shrink: 0; }

/* ---------- Estrutura ---------- */

.dsb-wrap {
	display: grid;
	grid-template-columns: 258px minmax(0, 1fr);
	gap: 26px;
	align-items: start;
}

/* ---------- Menu ---------- */

.dsb-side {
	position: sticky;
	top: 88px;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
	overflow: hidden;
}

.dsb-user {
	display: flex;
	align-items: center;
	gap: 11px;
	padding: 16px;
	border-bottom: 1px solid var(--d-line-soft);
	background: var(--d-canvas);
}

.dsb-user .dsb-user-pic {
	width: 40px;
	height: 40px;
	flex-shrink: 0;
	border-radius: 50%;
	border: 1px solid var(--d-line);
}

.dsb-user-txt { min-width: 0; display: flex; flex-direction: column; }

.dsb-user-txt strong {
	font-size: 13.5px;
	font-weight: 650;
	color: var(--d-ink);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.dsb-user-mail {
	font-size: 11.5px;
	color: var(--d-faint);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.dsb-nav { padding: 8px 8px 12px; }

.dsb-nav-group {
	display: block;
	padding: 14px 10px 6px;
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--d-faint);
}

.dsb-nav ul { list-style: none; margin: 0; padding: 0; }
.dsb-nav li { margin: 0; }

.dsb .dsb-nav-link {
	position: relative;
	display: flex;
	align-items: center;
	gap: 10px;
	padding: 9px 10px;
	border-radius: 8px;
	font-size: 13.5px;
	font-weight: 500;
	color: var(--d-ink-2);
	text-decoration: none;
	transition: background 0.14s ease, color 0.14s ease;
}

.dsb .dsb-nav-link .dsb-ico { color: var(--d-faint); transition: color 0.14s ease; }

.dsb .dsb-nav-link:hover {
	background: var(--d-canvas);
	color: var(--d-ink);
}

.dsb .dsb-nav-link:hover .dsb-ico { color: var(--d-ink-2); }

.dsb .dsb-nav-link.is-active {
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
	font-weight: 650;
}

.dsb .dsb-nav-link.is-active .dsb-ico { color: var(--d-brand); }

/* Marca de posição à esquerda do item ativo. */
.dsb .dsb-nav-link.is-active::before {
	content: '';
	position: absolute;
	left: -8px;
	top: 50%;
	width: 3px;
	height: 20px;
	margin-top: -10px;
	border-radius: 0 3px 3px 0;
	background: var(--d-brand);
}

.dsb .dsb-nav-out { color: var(--d-danger); }
.dsb .dsb-nav-out .dsb-ico { color: var(--d-danger); }
.dsb .dsb-nav-out:hover { background: #fdf3f2; color: var(--d-danger); }

/* ---------- Cabeçalho da página ---------- */

.dsb-head {
	display: flex;
	align-items: center;
	gap: 14px;
	margin-bottom: 20px;
	padding-bottom: 18px;
	border-bottom: 1px solid var(--d-line);
}

.dsb-head-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 42px;
	height: 42px;
	flex-shrink: 0;
	border-radius: 11px;
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
	line-height: 0;
}

.dsb-head-ico .dsb-ico { width: 20px; height: 20px; }

.dsb-head-title {
	margin: 0;
	font-size: clamp(21px, 2.4vw, 26px);
	font-weight: 650;
	letter-spacing: -0.02em;
	line-height: 1.15;
	color: var(--d-ink);
}

.dsb-head-sub {
	margin: 3px 0 0;
	font-size: 13.5px;
	color: var(--d-muted);
}

/* Terceira coluna do cabeçalho: contagem, situação, etc. */
.dsb-head-txt { min-width: 0; flex: 1; }

.dsb-head-chip {
	display: inline-flex;
	align-items: baseline;
	gap: 5px;
	flex-shrink: 0;
	padding: 7px 12px;
	border: 1px solid var(--d-line);
	border-radius: 999px;
	background: var(--d-canvas);
	font-size: 12.5px;
	color: var(--d-muted);
	white-space: nowrap;
}

.dsb-head-chip strong {
	font-size: 14px;
	font-weight: 700;
	color: var(--d-ink);
}

/* ============================================================
 * Convite para avaliar — topo da visão geral
 * ============================================================ */

/*
 * É um pedido, não um anúncio: mesmo desenho dos outros blocos do painel —
 * superfície branca, fio de 1px — e o laranja reservado ao botão. Um cartão
 * escuro aqui roubava a leitura dos números logo abaixo, que são o motivo de
 * a pessoa ter aberto a página.
 */
.dsb-promo {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 22px;
	padding: 20px 22px;
	margin-bottom: 20px;
	border: 1px solid var(--d-brand-line, #ffd9ad);
	border-radius: 14px;
	background:
		radial-gradient(120% 150% at 100% 0%, rgba(255, 171, 5, 0.16) 0%, rgba(255, 126, 1, 0) 58%),
		#fffcf8;
	overflow: hidden;
	animation: dsb-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) both 0.02s;
	transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.18s cubic-bezier(0.16, 1, 0.3, 1);
}

/* Fio da marca no topo — o mesmo recurso do bloco de cota. */
.dsb-promo::before {
	content: '';
	position: absolute;
	inset: 0 0 auto 0;
	height: 3px;
	background: linear-gradient(90deg, #ff7e01, #ffab05 55%, #ffd400);
}

.dsb-promo:hover {
	border-color: var(--d-brand);
	box-shadow: 0 8px 24px rgba(255, 126, 1, 0.13);
	transform: translateY(-1px);
}

/* Respiro de cor no canto, que pulsa de leve para o bloco não morrer parado. */
.dsb-promo-glow {
	position: absolute;
	right: -50px;
	top: -80px;
	width: 240px;
	height: 240px;
	border-radius: 50%;
	background: radial-gradient(circle, rgba(255, 126, 1, 0.16) 0%, transparent 68%);
	pointer-events: none;
	animation: dsb-glow 7s ease-in-out infinite;
}

@keyframes dsb-glow {
	0%, 100% { transform: scale(1); opacity: 0.8; }
	50%      { transform: scale(1.12); opacity: 1; }
}

/* ---------- Botão de ocultar ---------- */

.dsb .dsb-promo-x {
	position: absolute;
	top: 9px;
	right: 9px;
	z-index: 2;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	padding: 0;
	border: none;
	border-radius: 7px;
	background: transparent;
	color: var(--d-faint);
	cursor: pointer;
	opacity: 0.6;
	transition: background 0.14s ease, color 0.14s ease, opacity 0.14s ease;
}

.dsb .dsb-promo-x svg { width: 13px; height: 13px; }

.dsb .dsb-promo-x:hover {
	background: rgba(20, 22, 26, 0.06);
	color: var(--d-ink-2);
	opacity: 1;
}

/* No cartão escuro da lateral, o mesmo botão precisa da cor invertida. */
.dsb .dsb-plug .dsb-promo-x { color: rgba(255, 255, 255, 0.55); }

.dsb .dsb-plug .dsb-promo-x:hover {
	background: rgba(255, 255, 255, 0.12);
	color: #fff;
}

.dsb-promo-body { position: relative; z-index: 1; min-width: 0; }

.dsb-promo-stars {
	display: inline-flex;
	gap: 2px;
	margin-bottom: 7px;
	color: var(--d-brand);
	line-height: 0;
}

.dsb-promo-stars svg {
	width: 14px;
	height: 14px;
	/* Uma estrela depois da outra, como quem avalia de verdade. */
	animation: dsb-star 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) both;
	animation-delay: calc(var(--i) * 0.07s + 0.12s);
}

@keyframes dsb-star {
	from { opacity: 0; transform: scale(0.5); }
	to   { opacity: 1; transform: none; }
}

.dsb .dsb-promo h2 {
	margin: 0 0 4px;
	font-size: clamp(16px, 1.7vw, 18px);
	font-weight: 650;
	letter-spacing: -0.02em;
	line-height: 1.28;
	color: var(--d-ink);
}

.dsb .dsb-promo p {
	margin: 0;
	max-width: 56ch;
	font-size: 13px;
	line-height: 1.5;
	color: var(--d-muted);
}

.dsb-promo-actions {
	position: relative;
	z-index: 1;
	display: flex;
	align-items: center;
	gap: 12px;
	flex-shrink: 0;
}

.dsb .dsb-promo-btn {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 9px 16px;
	border: 1px solid var(--d-brand);
	border-radius: 9px;
	background: var(--d-brand);
	font-size: 13px;
	font-weight: 650;
	color: #fff;
	text-decoration: none;
	white-space: nowrap;
	transition: background 0.16s ease, border-color 0.16s ease, transform 0.16s ease;
}

.dsb .dsb-promo-btn svg {
	width: 14px;
	height: 14px;
	transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb .dsb-promo-btn:hover {
	background: var(--d-brand-hover);
	border-color: var(--d-brand-hover);
	color: #fff;
	transform: translateY(-1px);
}

.dsb .dsb-promo-btn:hover svg { transform: translateX(3px); }

.dsb-promo.is-out {
	opacity: 0;
	transform: translateY(-8px);
	transition: opacity 0.24s ease, transform 0.24s ease;
}

@media (max-width: 780px) {
	.dsb-promo {
		flex-direction: column;
		align-items: flex-start;
		gap: 16px;
		padding: 20px 18px;
	}

	/* O botão ocupa a linha; o "×" continua no canto, fora do fluxo. */
	.dsb-promo-actions { width: 100%; }
	.dsb .dsb-promo-btn { flex: 1; justify-content: center; }
	.dsb .dsb-promo p { padding-right: 26px; }
}

/* ============================================================
 * Convite para assinar — barra lateral
 * ============================================================ */

/*
 * Espaço em cima e nada embaixo: o grupo do menu logo abaixo já tem 14px de
 * respiro próprio, e somar os dois abria um vão bem maior que o de cima.
 */
.dsb-plug {
	position: relative;
	margin: 14px 12px -6px;
	padding: 15px 15px 14px;
	border: 1px solid rgba(255, 255, 255, 0.08);
	border-radius: 13px;
	background: linear-gradient(155deg, #1c1f24 0%, #24272d 48%, #30251b 100%);
	color: #fff;
	overflow: hidden;
	animation: dsb-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) both 0.12s;
	transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.2s ease, border-color 0.2s ease;
}

.dsb-plug:hover {
	border-color: rgba(255, 126, 1, 0.35);
	transform: translateY(-2px);
	box-shadow: 0 12px 26px rgba(20, 22, 26, 0.28);
}

/* Brilho no alto, atrás da etiqueta — embaixo ele empastava o botão. */
.dsb-plug-glow {
	position: absolute;
	right: -55px;
	top: -75px;
	width: 180px;
	height: 180px;
	border-radius: 50%;
	background: radial-gradient(circle, rgba(255, 126, 1, 0.55) 0%, rgba(255, 212, 0, 0.14) 48%, transparent 72%);
	pointer-events: none;
	animation: dsb-glow 6s ease-in-out infinite;
}

/*
 * O :not() precisa excluir também o botão de fechar: sem isso o position:
 * relative daqui vencia o absolute dele, e o "×" caía no meio do conteúdo.
 */
.dsb-plug > *:not(.dsb-plug-glow):not(.dsb-promo-x) {
	position: relative;
	z-index: 1;
}

.dsb-plug-k {
	display: inline-block;
	margin-bottom: 9px;
	padding: 3px 9px;
	border: 1px solid rgba(255, 176, 78, 0.28);
	border-radius: 999px;
	background: rgba(255, 126, 1, 0.14);
	font-size: 9.5px;
	font-weight: 700;
	letter-spacing: 0.09em;
	text-transform: uppercase;
	color: #ffc061;
}

.dsb-plug-title {
	display: block;
	font-size: 15.5px;
	font-weight: 650;
	letter-spacing: -0.02em;
	line-height: 1.25;
	color: #fff;
}

.dsb .dsb-plug-txt {
	margin: 6px 0 14px;
	font-size: 12.5px;
	line-height: 1.5;
	color: rgba(255, 255, 255, 0.58);
}

.dsb .dsb-plug-btn {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 7px;
	padding: 11px 14px;
	border-radius: 9px;
	background: var(--d-brand);
	font-size: 13px;
	font-weight: 650;
	color: #fff;
	text-align: center;
	text-decoration: none;
	box-shadow: 0 4px 14px rgba(255, 126, 1, 0.28);
	transition: background 0.16s ease, transform 0.16s ease, box-shadow 0.16s ease;
}

.dsb .dsb-plug-btn::after {
	content: '';
	width: 13px;
	height: 13px;
	background: currentColor;
	-webkit-mask: var(--d-arrow) center / contain no-repeat;
	mask: var(--d-arrow) center / contain no-repeat;
	transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb .dsb-plug-btn:hover {
	background: var(--d-brand-hover);
	color: #fff;
	transform: translateY(-1px);
	box-shadow: 0 8px 20px rgba(255, 126, 1, 0.38);
}

.dsb .dsb-plug-btn:hover::after { transform: translateX(3px); }

.dsb .dsb-plug-btn:active { transform: none; }

/* Espaço para o "×" não encostar na etiqueta. */
.dsb-plug .dsb-plug-k { max-width: calc(100% - 30px); }

@media (prefers-reduced-motion: reduce) {
	.dsb-promo,
	.dsb-plug,
	.dsb-promo-glow,
	.dsb-plug-glow,
	.dsb-promo-stars svg { animation: none !important; }

	.dsb-promo:hover,
	.dsb-plug:hover { transform: none; }
	.dsb-promo:hover::after { animation: none; }
}

/* ---------- Cartões de números ---------- */

.dsb-cards {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
	gap: 14px;
	margin-bottom: 26px;
}

.dsb-card {
	padding: 17px 18px;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
	transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;
}

.dsb-card:hover {
	border-color: #d8d8dc;
	box-shadow: 0 4px 16px rgba(20, 22, 26, 0.06);
	transform: translateY(-1px);
}

.dsb-card.is-on { border-top: 2px solid var(--d-brand); }

.dsb-card-k {
	display: block;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: var(--d-faint);
}

.dsb-card-v {
	display: block;
	margin: 7px 0 3px;
	font-size: 25px;
	font-weight: 700;
	letter-spacing: -0.02em;
	line-height: 1.1;
	color: var(--d-ink);
}

.dsb-card-v--sm { font-size: 16px; font-weight: 650; letter-spacing: -0.01em; }

.dsb-card-s { font-size: 12px; color: var(--d-muted); }
.dsb-card-s a { color: var(--d-brand-ink); }

/* ---------- Blocos de conteúdo ---------- */

.dsb-block {
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
	overflow: hidden;
}

.dsb-block + .dsb-block { margin-top: 18px; }

.dsb-block-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 15px 18px;
	border-bottom: 1px solid var(--d-line);
	background: var(--d-canvas);
}

.dsb-block-head h2 {
	margin: 0;
	font-size: 14.5px;
	font-weight: 650;
	letter-spacing: -0.01em;
	color: var(--d-ink);
}

.dsb .dsb-link {
	font-size: 13px;
	font-weight: 600;
	color: var(--d-brand-ink);
	text-decoration: none;
}

.dsb .dsb-link:hover { text-decoration: underline; }

/* ---------- Listas ---------- */

.dsb-list { list-style: none; margin: 0; padding: 0; }

.dsb-list-row {
	display: grid;
	grid-template-columns: minmax(0, 1fr) auto auto auto;
	align-items: center;
	gap: 14px;
	padding: 14px 18px;
	border-bottom: 1px solid var(--d-line-soft);
	transition: background 0.14s ease;
}

.dsb-list-row:last-child { border-bottom: none; }
.dsb-list-row:hover { background: var(--d-canvas); }

.dsb-list-main { min-width: 0; display: flex; flex-direction: column; }

.dsb-list-title {
	font-size: 13.5px;
	font-weight: 650;
	color: var(--d-ink);
}

.dsb-list-sub {
	font-size: 12.5px;
	color: var(--d-muted);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.dsb-list-date { font-size: 12.5px; color: var(--d-faint); white-space: nowrap; }

.dsb-list-val {
	font-size: 13.5px;
	font-weight: 650;
	color: var(--d-ink);
	white-space: nowrap;
}

/* ---------- Etiquetas de status ---------- */

.dsb-tag {
	padding: 3px 10px;
	border-radius: 999px;
	background: var(--d-canvas);
	font-size: 11.5px;
	font-weight: 650;
	color: var(--d-muted);
	white-space: nowrap;
}

.dsb-tag--complete,
.dsb-tag--publish,
.dsb-tag--edd_subscription,
.dsb-tag--active { background: var(--d-ok-tint); color: var(--d-ok); }

.dsb-tag--pending,
.dsb-tag--on_hold,
.dsb-tag--partially_refunded,
.dsb-tag--processing { background: var(--d-warn-tint); color: var(--d-warn); }

.dsb-tag--failed,
.dsb-tag--refunded,
.dsb-tag--revoked,
.dsb-tag--abandoned,
.dsb-tag--cancelled { background: #fdf3f2; color: var(--d-danger); }

/* ---------- Vazio ---------- */

.dsb-empty {
	padding: 44px 20px;
	text-align: center;
}

.dsb-empty-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 52px;
	height: 52px;
	margin-bottom: 14px;
	border-radius: 50%;
	background: var(--d-canvas);
	color: var(--d-faint);
	line-height: 0;
}

.dsb-empty-ico .dsb-ico { width: 22px; height: 22px; }

.dsb-empty strong {
	display: block;
	font-size: 15.5px;
	font-weight: 650;
	color: var(--d-ink);
}

.dsb-empty p {
	margin: 5px 0 16px;
	font-size: 13.5px;
	color: var(--d-muted);
}

/* ---------- Botão ---------- */

.dsb .dsb-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	padding: 11px 22px;
	border: 1px solid var(--d-brand);
	border-radius: 9px;
	background: var(--d-brand);
	color: #fff;
	font-size: 14px;
	font-weight: 650;
	text-decoration: none;
	cursor: pointer;
	transition: background 0.14s ease, transform 0.14s ease, box-shadow 0.14s ease;
	box-shadow: 0 2px 8px rgba(255, 126, 1, 0.26);
}

.dsb .dsb-btn:hover {
	background: var(--d-brand-hover);
	border-color: var(--d-brand-hover);
	color: #fff;
	transform: translateY(-1px);
	box-shadow: 0 6px 18px rgba(255, 126, 1, 0.34);
}

/* ---------- Área do conteúdo (shortcodes existentes) ---------- */

.dsb-body > *:first-child { margin-top: 0; }

/* Tabelas dos shortcodes do EDD entram no mesmo desenho. */
.dsb-body table {
	width: 100%;
	border-collapse: collapse;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	overflow: hidden;
	background: var(--d-surface);
	font-size: 14px;
}

.dsb-body thead th {
	padding: 12px 16px;
	border-bottom: 1px solid var(--d-line);
	background: var(--d-canvas);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	text-align: left;
	color: var(--d-faint);
}

.dsb-body tbody td {
	padding: 13px 16px;
	border-bottom: 1px solid var(--d-line-soft);
	vertical-align: middle;
}

.dsb-body tbody tr:last-child td { border-bottom: none; }
.dsb-body tbody tr:hover { background: var(--d-canvas); }

.dsb-body a { color: var(--d-brand-ink); }

/* ---------- Bloqueio para deslogado ---------- */

.dsb-guard {
	max-width: 460px;
	margin: 40px auto;
	padding: 44px 24px;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
	text-align: center;
}

.dsb-guard-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 54px;
	height: 54px;
	margin-bottom: 14px;
	border-radius: 50%;
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
	line-height: 0;
}

.dsb-guard h1 { margin: 0 0 6px; font-size: 20px; font-weight: 650; }
.dsb-guard p { margin: 0 0 18px; font-size: 14px; color: var(--d-muted); }

/* ---------- Botão de menu (mobile) ---------- */

.dsb-toggle { display: none; }

/* ---------- Responsivo ---------- */

@media (max-width: 900px) {
	.dsb { padding: 18px 16px 56px; }

	.dsb-wrap { grid-template-columns: 1fr; gap: 16px; }

	.dsb .dsb-toggle {
		display: flex;
		align-items: center;
		gap: 10px;
		width: 100%;
		padding: 13px 15px;
		border: 1px solid var(--d-line);
		border-radius: 10px;
		background: var(--d-surface);
		font-family: inherit;
		font-size: 14px;
		font-weight: 650;
		color: var(--d-ink);
		cursor: pointer;
	}

	.dsb .dsb-toggle .dsb-ico { color: var(--d-brand); }

	.dsb-toggle-chev {
		width: 15px;
		height: 15px;
		margin-left: auto;
		transition: transform 0.2s ease;
	}

	.dsb-toggle[aria-expanded="true"] .dsb-toggle-chev { transform: rotate(180deg); }

	.dsb-side {
		position: static;
		display: none;
	}

	.dsb-side.is-open { display: block; }

	.dsb-head { margin-bottom: 16px; padding-bottom: 14px; }
	.dsb-head-ico { width: 38px; height: 38px; }

	.dsb-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
	.dsb-card { padding: 14px; }
	.dsb-card-v { font-size: 21px; }

	.dsb-list-row {
		grid-template-columns: minmax(0, 1fr) auto;
		gap: 6px 12px;
		padding: 13px 15px;
	}

	.dsb-list-date { grid-column: 1; font-size: 12px; }
	.dsb-list-val { grid-column: 2; grid-row: 1; }
	.dsb-tag { grid-column: 2; grid-row: 2; justify-self: end; }

	.dsb-body table { font-size: 13px; }
	.dsb-body thead th,
	.dsb-body tbody td { padding: 10px 12px; }
}

@media (max-width: 420px) {
	.dsb-cards { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
	.dsb * { transition: none !important; }
}

/* ============================================================
 * Vida: entrada, hover e microinterações
 *
 * Uma sequência de entrada em cascata quando a página abre, e reações curtas
 * ao ponteiro. Nada pisca nem repete — movimento só onde ajuda a ler.
 * ============================================================ */

@keyframes dsb-in {
	from { opacity: 0; transform: translateY(12px); }
	to   { opacity: 1; transform: none; }
}

@keyframes dsb-in-left {
	from { opacity: 0; transform: translateX(-10px); }
	to   { opacity: 1; transform: none; }
}

.dsb-side  { animation: dsb-in-left 0.45s cubic-bezier(0.16, 1, 0.3, 1) both; }
.dsb-head  { animation: dsb-in 0.45s cubic-bezier(0.16, 1, 0.3, 1) both 0.05s; }

/* Cartões entram em cascata. */
.dsb-cards .dsb-card {
	animation: dsb-in 0.45s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-cards .dsb-card:nth-child(1) { animation-delay: 0.10s; }
.dsb-cards .dsb-card:nth-child(2) { animation-delay: 0.16s; }
.dsb-cards .dsb-card:nth-child(3) { animation-delay: 0.22s; }
.dsb-cards .dsb-card:nth-child(4) { animation-delay: 0.28s; }

.dsb-block { animation: dsb-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) both 0.32s; }

/* Linhas da lista entram uma após a outra. */
.dsb-list-row { animation: dsb-in 0.4s cubic-bezier(0.16, 1, 0.3, 1) both; }
.dsb-list-row:nth-child(1) { animation-delay: 0.38s; }
.dsb-list-row:nth-child(2) { animation-delay: 0.44s; }
.dsb-list-row:nth-child(3) { animation-delay: 0.50s; }
.dsb-list-row:nth-child(4) { animation-delay: 0.56s; }
.dsb-list-row:nth-child(5) { animation-delay: 0.62s; }

/* ---------- Menu ---------- */

/* O ícone avança um pouco ao passar o ponteiro. */
.dsb .dsb-nav-link .dsb-ico { transition: color 0.14s ease, transform 0.18s cubic-bezier(0.16, 1, 0.3, 1); }
.dsb .dsb-nav-link:hover .dsb-ico { transform: translateX(2px); }

/* A marca do item ativo cresce a partir do centro. */
.dsb .dsb-nav-link.is-active::before {
	animation: dsb-mark 0.35s cubic-bezier(0.16, 1, 0.3, 1) both 0.2s;
}

@keyframes dsb-mark {
	from { transform: scaleY(0); }
	to   { transform: scaleY(1); }
}

.dsb .dsb-nav-link:active { transform: scale(0.99); }

/* ---------- Cartões ---------- */

.dsb-card {
	position: relative;
	overflow: hidden;
}

/* Fio de cor que cresce da esquerda no hover. */
.dsb-card::after {
	content: '';
	position: absolute;
	left: 0;
	bottom: 0;
	width: 100%;
	height: 2px;
	background: var(--d-brand);
	transform: scaleX(0);
	transform-origin: left;
	transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb-card:hover::after { transform: scaleX(1); }

.dsb-card:hover {
	transform: translateY(-3px);
	box-shadow: 0 10px 26px rgba(20, 22, 26, 0.08);
}

/* ---------- Bloco de usuário ---------- */

.dsb-user-avatar {
	position: relative;
	display: inline-flex;
	flex-shrink: 0;
	line-height: 0;
}

/* Ponto verde de "plano ativo", com halo que pulsa devagar. */
.dsb-user-dot {
	position: absolute;
	right: -1px;
	bottom: -1px;
	width: 11px;
	height: 11px;
	border: 2px solid var(--d-surface);
	border-radius: 50%;
	background: var(--d-ok);
}

.dsb-user-dot::before {
	content: '';
	position: absolute;
	inset: -3px;
	border-radius: 50%;
	background: var(--d-ok);
	opacity: 0.4;
	animation: dsb-pulse 2.6s ease-out infinite;
}

@keyframes dsb-pulse {
	0%   { transform: scale(0.7); opacity: 0.45; }
	70%  { transform: scale(1.7); opacity: 0; }
	100% { transform: scale(1.7); opacity: 0; }
}

/* Etiqueta do plano ativo — discreta, na linguagem dos demais chips.
   O ponto verde no avatar já sinaliza que está ativo; a etiqueta só nomeia. */
.dsb-plan {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	align-self: flex-start;
	max-width: 100%;
	margin-top: 5px;
	padding: 2px 8px;
	border: 1px solid var(--d-brand-line, #ffd9ad);
	border-radius: 5px;
	background: var(--d-brand-tint);
	font-size: 10.5px;
	font-weight: 650;
	letter-spacing: 0.01em;
	color: var(--d-brand-ink);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* Ponto discreto antes do nome do plano. */
.dsb-plan::before {
	content: "";
	width: 5px;
	height: 5px;
	flex-shrink: 0;
	border-radius: 50%;
	background: var(--d-brand);
}

/* ---------- Linhas da lista ---------- */

.dsb-list-row {
	position: relative;
	transition: background 0.14s ease, padding-left 0.18s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb-list-row::before {
	content: '';
	position: absolute;
	left: 0;
	top: 8px;
	bottom: 8px;
	width: 2px;
	border-radius: 0 2px 2px 0;
	background: var(--d-brand);
	transform: scaleY(0);
	transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb-list-row:hover::before { transform: scaleY(1); }
.dsb-list-row:hover { padding-left: 22px; }

.dsb-list-row:hover .dsb-list-title { color: var(--d-brand-ink); }
.dsb-list-title { transition: color 0.14s ease; }

/* ---------- Botões e links ---------- */

.dsb .dsb-btn:active { transform: translateY(0); }

.dsb .dsb-link {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	transition: gap 0.18s cubic-bezier(0.16, 1, 0.3, 1), color 0.14s ease;
}

.dsb .dsb-link::after {
	content: '→';
	font-size: 12px;
	transition: transform 0.18s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb .dsb-link:hover { text-decoration: none; }
.dsb .dsb-link:hover::after { transform: translateX(3px); }

/* ---------- Etiquetas ---------- */

.dsb-tag { transition: transform 0.16s cubic-bezier(0.34, 1.56, 0.64, 1); }
.dsb-list-row:hover .dsb-tag { transform: translateY(-1px); }

/* ---------- Vazio ---------- */

.dsb-empty-ico {
	animation: dsb-float 3.2s ease-in-out infinite;
}

@keyframes dsb-float {
	0%, 100% { transform: translateY(0); }
	50%      { transform: translateY(-5px); }
}

/* ---------- Respeito a quem prefere menos movimento ---------- */

@media (prefers-reduced-motion: reduce) {
	.dsb-side,
	.dsb-head,
	.dsb-cards .dsb-card,
	.dsb-block,
	.dsb-list-row,
	.dsb .dsb-nav-link.is-active::before,
	.dsb-user-dot::before,
	.dsb-empty-ico {
		animation: none !important;
	}

	.dsb-list-row:hover { padding-left: 18px; }
}

/* ============================================================
 * Meus pedidos — [purchase_history]
 * (template em edd_templates/history-purchases.php)
 * ============================================================ */

/* Só para leitores de tela — os botões de ação são apenas ícones. */
.dsb-sr {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

/* Enquanto a próxima página não chega. */
.dsb-orders {
	transition: opacity 0.18s ease;
}

.dsb-orders.is-loading {
	opacity: 0.45;
	pointer-events: none;
}

.dsb-order {
	position: relative;
	padding: 16px 18px;
	margin-bottom: 10px;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
	overflow: hidden;
	animation: dsb-in 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
	transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease;
}

.dsb-order:nth-child(2)  { animation-delay: 0.06s; }
.dsb-order:nth-child(3)  { animation-delay: 0.10s; }
.dsb-order:nth-child(4)  { animation-delay: 0.14s; }
.dsb-order:nth-child(5)  { animation-delay: 0.18s; }
.dsb-order:nth-child(6)  { animation-delay: 0.22s; }
.dsb-order:nth-child(7)  { animation-delay: 0.26s; }
.dsb-order:nth-child(8)  { animation-delay: 0.30s; }
.dsb-order:nth-child(9)  { animation-delay: 0.34s; }
.dsb-order:nth-child(10) { animation-delay: 0.38s; }

/* Fio laranja que cresce na lateral, como nas linhas da visão geral.
   De borda a borda: o overflow:hidden do cartão arredonda as pontas. */
.dsb-order::before {
	content: '';
	position: absolute;
	left: 0;
	top: 0;
	bottom: 0;
	width: 3px;
	background: var(--d-brand);
	transform: scaleY(0);
	transition: transform 0.22s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb-order:hover::before { transform: scaleY(1); }

.dsb-order:hover,
.dsb-order.is-open {
	border-color: #d8d8dc;
	box-shadow: 0 6px 20px rgba(20, 22, 26, 0.07);
}

.dsb-order:hover { transform: translateY(-2px); }
.dsb-order.is-open::before { transform: scaleY(1); }

.dsb-order-top {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 18px;
}

.dsb-order-main { min-width: 0; flex: 1; }

.dsb-order-id {
	display: flex;
	align-items: center;
	gap: 9px;
	flex-wrap: wrap;
}

.dsb-order-num {
	font-size: 14px;
	font-weight: 700;
	color: var(--d-ink);
}

.dsb-order-items {
	margin: 5px 0 8px;
	font-size: 13.5px;
	line-height: 1.4;
	color: var(--d-ink-2);
	overflow: hidden;
	text-overflow: ellipsis;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
}

.dsb-order-more {
	padding: 1px 6px;
	border-radius: 4px;
	background: var(--d-canvas);
	font-size: 11.5px;
	font-weight: 650;
	color: var(--d-muted);
}

.dsb-order-meta {
	display: flex;
	align-items: center;
	gap: 16px;
	flex-wrap: wrap;
	font-size: 12.5px;
	color: var(--d-faint);
}

.dsb-order-meta > span {
	display: inline-flex;
	align-items: center;
	gap: 6px;
}

.dsb-order-meta .dsb-ico { width: 13px; height: 13px; }

.dsb-order-total {
	font-size: 14px;
	font-weight: 700;
	color: var(--d-ink);
}

.dsb-order-actions {
	display: flex;
	align-items: center;
	gap: 8px;
	flex-shrink: 0;
	flex-wrap: wrap;
	justify-content: flex-end;
}

.dsb .dsb-act,
.dsb .dsb-act-extra a {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 9px 15px;
	border: 1px solid var(--d-line);
	border-radius: 8px;
	background: var(--d-surface);
	font-size: 13px;
	font-weight: 600;
	color: var(--d-ink-2);
	text-decoration: none;
	white-space: nowrap;
	transition: border-color 0.14s ease, background 0.14s ease, color 0.14s ease, transform 0.14s ease;
}

.dsb .dsb-act .dsb-ico { width: 15px; height: 15px; }

.dsb .dsb-act:hover,
.dsb .dsb-act-extra a:hover {
	border-color: var(--d-brand);
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
	transform: translateY(-1px);
}

.dsb .dsb-act--main {
	border-color: var(--d-brand);
	background: var(--d-brand);
	color: #fff;
	box-shadow: 0 2px 8px rgba(255, 126, 1, 0.24);
}

.dsb .dsb-act--main:hover {
	background: var(--d-brand-hover);
	border-color: var(--d-brand-hover);
	color: #fff;
	box-shadow: 0 6px 16px rgba(255, 126, 1, 0.32);
}

/* Ação em ícone: quadrada, sem rótulo visível. */
.dsb .dsb-act--icon {
	width: 38px;
	height: 38px;
	padding: 0;
	justify-content: center;
	cursor: pointer;
}

.dsb .dsb-act--icon .dsb-ico { width: 17px; height: 17px; }

.dsb .dsb-act--icon.is-on {
	border-color: var(--d-brand);
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
}

.dsb .dsb-act--icon.is-on .dsb-ico { transform: scale(0.94); }

/* ---------- Detalhes do pedido ---------- */

.dsb-order-det {
	margin-top: 15px;
	padding-top: 15px;
	border-top: 1px dashed var(--d-line);
	animation: dsb-det-in 0.26s cubic-bezier(0.16, 1, 0.3, 1) both;
}

@keyframes dsb-det-in {
	from { opacity: 0; transform: translateY(-4px); }
	to   { opacity: 1; transform: none; }
}

.dsb-det-items {
	list-style: none;
	margin: 0 0 12px;
	padding: 0;
}

.dsb-det-items li {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 14px;
	padding: 7px 0;
	border-bottom: 1px solid var(--d-line);
	font-size: 13.5px;
}

.dsb-det-items li:last-child { border-bottom: none; }

.dsb-det-name { min-width: 0; color: var(--d-ink-2); }

.dsb-det-qty {
	margin-left: 6px;
	font-size: 12px;
	color: var(--d-faint);
}

.dsb-det-val { flex-shrink: 0; font-weight: 600; color: var(--d-ink); }

.dsb-det-sum { margin: 0; }

.dsb-det-sum > div {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 14px;
	padding: 5px 0;
	font-size: 13px;
}

.dsb-det-sum dt { color: var(--d-muted); }
.dsb-det-sum dd { margin: 0; color: var(--d-ink-2); }

.dsb-det-total {
	margin-top: 4px;
	padding-top: 9px !important;
	border-top: 1px solid var(--d-line);
}

.dsb-det-total dt { font-weight: 650; color: var(--d-ink); }

.dsb-det-total dd {
	font-size: 15px;
	font-weight: 700;
	color: var(--d-ink);
}

/* ---------- Paginação ---------- */

.dsb-pager {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
	gap: 6px;
	margin-top: 22px;
}

.dsb .dsb-page {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 36px;
	height: 36px;
	padding: 0 11px;
	border: 1px solid var(--d-line);
	border-radius: 9px;
	background: var(--d-surface);
	font-family: var(--d-mono);
	font-size: 13px;
	font-weight: 600;
	color: var(--d-ink-2);
	text-decoration: none;
	transition: border-color 0.14s ease, background 0.14s ease, color 0.14s ease, transform 0.14s ease;
}

.dsb .dsb-page svg { width: 15px; height: 15px; }

.dsb a.dsb-page:hover {
	border-color: var(--d-brand);
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
	transform: translateY(-1px);
}

.dsb .dsb-page.is-on {
	border-color: var(--d-brand);
	background: var(--d-brand);
	color: #fff;
	box-shadow: 0 2px 8px rgba(255, 126, 1, 0.24);
}

.dsb .dsb-page.is-off {
	color: var(--d-line);
	background: var(--d-canvas);
}

.dsb .dsb-page--gap {
	min-width: 22px;
	padding: 0;
	border-color: transparent;
	background: none;
	color: var(--d-faint);
}

/* ---------- Avisos ---------- */

.dsb-notice {
	padding: 12px 15px;
	margin-bottom: 14px;
	border: 1px solid var(--d-line);
	border-radius: 10px;
	font-size: 13.5px;
}

.dsb-notice--ok {
	border-color: #cfe9de;
	background: var(--d-ok-tint);
	color: var(--d-ok);
}

@media (max-width: 700px) {
	.dsb-order-top {
		flex-direction: column;
		align-items: stretch;
		gap: 12px;
	}

	.dsb-order-actions { justify-content: flex-start; }

	/* O botão de texto ("Concluir compra") ocupa a linha; os de ícone não. */
	.dsb .dsb-act { flex: 1; justify-content: center; }
	.dsb .dsb-act--icon { flex: 0 0 38px; }

	.dsb-head { flex-wrap: wrap; }
	.dsb-head-chip { order: 3; margin-left: 56px; }
}

@media (prefers-reduced-motion: reduce) {
	.dsb-order,
	.dsb-order-det { animation: none !important; }
}

/* ============================================================
 * Downloads — [drope_downloads]
 * (includes/dashboard/downloads.php)
 * ============================================================ */

/* ---------- Cota do plano ---------- */

.dsb-quota {
	position: relative;
	display: flex;
	align-items: center;
	gap: 28px;
	padding: 26px 28px;
	margin-bottom: 22px;
	border: 1px solid var(--d-line);
	border-radius: 16px;
	background:
		radial-gradient(120% 140% at 100% 0%, rgba(255, 171, 5, 0.10) 0%, rgba(255, 126, 1, 0) 55%),
		var(--d-surface);
	overflow: hidden;
	animation: dsb-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) both 0.04s;
}

/* Fio de marca no topo, do laranja ao amarelo da logo. */
.dsb-quota::before {
	content: '';
	position: absolute;
	inset: 0 0 auto 0;
	height: 3px;
	background: linear-gradient(90deg, #ff7e01, #ffab05 55%, #ffd400);
}

.dsb-quota.is-low::before   { background: linear-gradient(90deg, #ffab05, #ffd400); }
.dsb-quota.is-empty::before { background: linear-gradient(90deg, #d9534f, #e8837f); }

/* ---------- Anel ---------- */

.dsb-quota-ring {
	position: relative;
	display: grid;
	place-items: center;
	width: 128px;
	height: 128px;
	flex-shrink: 0;
}

/*
 * O número e o "de N" formam um bloco só: assim ficam colados um ao outro e
 * centralizados juntos no círculo, em vez de cada um se centralizar por conta
 * própria e abrir um vão no meio.
 */
.dsb-quota-num {
	display: flex;
	flex-direction: column;
	align-items: center;
	line-height: 1;
}

.dsb-quota-ring svg {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	transform: rotate(-90deg);
}

.dsb-ring-bg,
.dsb-ring-fg {
	fill: none;
	stroke-width: 10;
	stroke-linecap: round;
}

.dsb-ring-bg { stroke: var(--d-canvas); }

.dsb-ring-fg {
	stroke: var(--d-brand);
	transition: stroke-dashoffset 0.9s cubic-bezier(0.16, 1, 0.3, 1);
	animation: dsb-ring-in 1.1s cubic-bezier(0.16, 1, 0.3, 1) both 0.18s;
}

.dsb-quota.is-low .dsb-ring-fg   { stroke: var(--d-warn); }
.dsb-quota.is-empty .dsb-ring-fg { stroke: var(--d-danger); }

/* O anel se desenha do vazio até o valor real. */
@keyframes dsb-ring-in {
	from { stroke-dashoffset: 340; }
}

.dsb-quota-big {
	font-size: 38px;
	font-weight: 700;
	letter-spacing: -0.03em;
	line-height: 1;
	color: var(--d-ink);
}

.dsb-quota-of {
	margin-top: 4px;
	font-size: 11.5px;
	font-weight: 600;
	line-height: 1;
	color: var(--d-faint);
}

.dsb-quota-ring--free {
	border: 2px dashed var(--d-brand-line, #ffd9ad);
	border-radius: 50%;
	background: var(--d-brand-tint);
}

.dsb-quota-inf {
	font-size: 46px;
	line-height: 1;
	font-weight: 700;
	color: var(--d-brand-ink);
}

/* ---------- Texto ---------- */

.dsb-quota-txt { min-width: 0; flex: 1; }

.dsb-quota-k {
	display: inline-block;
	margin-bottom: 8px;
	padding: 4px 10px;
	border-radius: 999px;
	background: var(--d-brand-tint);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--d-brand-ink);
}

.dsb .dsb-quota-txt h2 {
	margin: 0 0 6px;
	font-size: clamp(19px, 2.1vw, 23px);
	font-weight: 650;
	letter-spacing: -0.02em;
	line-height: 1.25;
	color: var(--d-ink);
}

.dsb .dsb-quota-txt p {
	margin: 0;
	font-size: 13.5px;
	line-height: 1.5;
	color: var(--d-muted);
}

.dsb .dsb-quota-txt p strong { color: var(--d-ink-2); }

.dsb-quota-foot {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-top: 14px;
}

.dsb-quota-chip {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	padding: 7px 12px;
	border: 1px solid var(--d-line);
	border-radius: 999px;
	background: var(--d-canvas);
	font-size: 12.5px;
	color: var(--d-muted);
}

.dsb-quota-chip .dsb-ico { width: 14px; height: 14px; color: var(--d-faint); }
.dsb-quota-chip strong { color: var(--d-ink); font-weight: 650; }

.dsb-quota-chip.is-live {
	border-color: var(--d-brand-line, #ffd9ad);
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
}

.dsb-quota-chip.is-live .dsb-ico { color: var(--d-brand); }
.dsb-quota-chip.is-live strong { color: var(--d-brand-ink); }

/* O número muda a cada segundo: largura fixa por dígito para nada dançar. */
.dsb-quota-chip [data-dsb-countdown] { font-variant-numeric: tabular-nums; }

/* Sem plano: convite, sem anel. */
.dsb-quota--none { background: var(--d-surface); }
.dsb-quota--none::before { background: linear-gradient(90deg, var(--d-line), transparent); }
.dsb-quota--none .dsb-btn { margin-top: 14px; }

.dsb-card-of {
	font-size: 16px;
	font-weight: 600;
	color: var(--d-faint);
}

/* ---------- Filtros ---------- */

/* Os filtros moram na faixa do título do bloco, alinhados à direita. */
.dsb-block-head--filters { flex-wrap: wrap; padding: 12px 18px; }

.dsb-filters {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0;
}

.dsb-field {
	display: flex;
	align-items: center;
	gap: 7px;
	min-width: 0;
}

.dsb-field > span {
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--d-faint);
	white-space: nowrap;
}

.dsb .dsb-field select {
	height: 36px;
	min-width: 104px;
	padding: 0 32px 0 12px;
	border: 1px solid var(--d-line);
	border-radius: 9px;
	background: var(--d-surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%2371717a' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4 6 4 4 4-4'/%3E%3C/svg%3E") no-repeat right 10px center / 14px;
	font-size: 13.5px;
	font-weight: 600;
	color: var(--d-ink-2);
	appearance: none;
	cursor: pointer;
	transition: border-color 0.14s ease, box-shadow 0.14s ease;
}

.dsb .dsb-field select:hover { border-color: #d8d8dc; }

.dsb .dsb-field select:focus {
	outline: none;
	border-color: var(--d-brand);
	box-shadow: 0 0 0 3px rgba(255, 126, 1, 0.14);
}

.dsb .dsb-filters-clear {
	margin-left: 2px;
	font-size: 12.5px;
	font-weight: 600;
	color: var(--d-brand-ink);
	text-decoration: none;
	white-space: nowrap;
}

.dsb .dsb-filters-clear:hover { text-decoration: underline; }

/* ---------- Histórico ---------- */

.dsb-dl.is-loading [data-dsb-list] {
	opacity: 0.45;
	pointer-events: none;
	transition: opacity 0.18s ease;
}

.dsb-dl-count {
	margin: 0;
	padding: 14px 18px 0;
	font-size: 13px;
	color: var(--d-muted);
}

.dsb-dl-count strong {
	font-size: 15px;
	font-weight: 700;
	color: var(--d-ink);
}

.dsb-dl-list {
	list-style: none;
	margin: 8px 0 0;
	padding: 0;
}

.dsb-dl-row {
	position: relative;
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 12px 18px;
	border-bottom: 1px solid var(--d-line);
	animation: dsb-in 0.36s cubic-bezier(0.16, 1, 0.3, 1) both;
	transition: background 0.14s ease, padding-left 0.18s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb-dl-row:nth-child(1) { animation-delay: 0.02s; }
.dsb-dl-row:nth-child(2) { animation-delay: 0.05s; }
.dsb-dl-row:nth-child(3) { animation-delay: 0.08s; }
.dsb-dl-row:nth-child(4) { animation-delay: 0.11s; }
.dsb-dl-row:nth-child(5) { animation-delay: 0.14s; }
.dsb-dl-row:nth-child(6) { animation-delay: 0.17s; }
.dsb-dl-row:nth-child(n+7) { animation-delay: 0.20s; }

.dsb-dl-row:last-child { border-bottom: none; }

.dsb-dl-row::before {
	content: '';
	position: absolute;
	left: 0;
	top: 8px;
	bottom: 8px;
	width: 2px;
	border-radius: 0 2px 2px 0;
	background: var(--d-brand);
	transform: scaleY(0);
	transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb-dl-row:hover::before { transform: scaleY(1); }

.dsb-dl-row:hover {
	background: var(--d-canvas);
	padding-left: 22px;
}

.dsb .dsb-dl-thumb {
	display: grid;
	place-items: center;
	width: 46px;
	height: 46px;
	flex-shrink: 0;
	border: 1px solid var(--d-line);
	border-radius: 9px;
	background: var(--d-canvas);
	overflow: hidden;
	color: var(--d-faint);
}

.dsb-dl-thumb img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.dsb-dl-main { min-width: 0; flex: 1; }

.dsb .dsb-dl-name {
	display: -webkit-box;
	font-size: 14px;
	font-weight: 600;
	line-height: 1.35;
	color: var(--d-ink);
	text-decoration: none;
	overflow: hidden;
	text-overflow: ellipsis;
	-webkit-line-clamp: 1;
	-webkit-box-orient: vertical;
	transition: color 0.14s ease;
}

.dsb-dl-row:hover .dsb-dl-name { color: var(--d-brand-ink); }

.dsb-dl-meta {
	display: flex;
	align-items: center;
	gap: 10px;
	flex-wrap: wrap;
	margin-top: 3px;
	font-size: 12.5px;
	color: var(--d-faint);
}

.dsb-dl-file {
	max-width: 260px;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.dsb-dl-badge {
	flex-shrink: 0;
	padding: 3px 9px;
	border-radius: 999px;
	background: var(--d-canvas);
	font-size: 11px;
	font-weight: 650;
	letter-spacing: 0.02em;
	color: var(--d-muted);
}

.dsb-dl-badge.is-plan {
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
}

/* ============================================================
 * Meu plano — [drope_plans]
 * ============================================================ */

/* O que o plano libera, em fichas — a lista de categorias é o argumento. */
.dsb-pl-cats {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 6px;
	margin-top: 14px;
}

.dsb-pl-cats-k {
	margin-right: 2px;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--d-faint);
}

.dsb-pl-cat {
	padding: 4px 10px;
	border: 1px solid var(--d-line);
	border-radius: 999px;
	background: var(--d-surface);
	font-size: 12px;
	font-weight: 600;
	color: var(--d-ink-2);
}

.dsb-pl-actions {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 9px;
	margin-top: 18px;
}

/* Quando a validade aperta, o chip da data muda de tom. */
.dsb-quota-chip.is-warn {
	border-color: #f2ddb4;
	background: var(--d-warn-tint);
	color: var(--d-warn);
}

.dsb-quota-chip.is-warn .dsb-ico,
.dsb-quota-chip.is-warn strong { color: var(--d-warn); }

.dsb-pl .dsb-block { margin-top: 20px; }

@media (max-width: 700px) {
	.dsb-pl-actions { flex-direction: column; align-items: stretch; }
	.dsb-pl-actions .dsb-btn,
	.dsb-pl-actions .dsb-act { justify-content: center; }
}

/* ============================================================
 * Solicitações — [drope_requests]
 * ============================================================ */

/* ---------- Pedir um produto ---------- */

.dsb-ask { margin-bottom: 18px; }

.dsb-ask-count {
	font-size: 12.5px;
	color: var(--d-muted);
	white-space: nowrap;
}

.dsb-ask-count strong { color: var(--d-ink); font-weight: 700; }

.dsb-ask-body { padding: 20px 20px 22px; }

.dsb .dsb-ask-intro {
	margin: 0 0 18px;
	max-width: 68ch;
	font-size: 13.5px;
	line-height: 1.55;
	color: var(--d-muted);
}

.dsb .dsb-ask-intro strong { color: var(--d-ink-2); font-weight: 650; }

/* Dois campos e o botão numa linha só; empilham quando não cabem. */
.dsb-ask-form {
	display: flex;
	align-items: flex-end;
	flex-wrap: wrap;
	gap: 14px;
}

/*
 * No formulário o rótulo fica ACIMA do campo. O .dsb-field base é em linha
 * porque nasceu para a barra de filtros, onde "Ano [select]" faz sentido; aqui
 * empurraria o campo para um canto estreito.
 */
.dsb-ask-form .dsb-field {
	flex-direction: column;
	align-items: stretch;
	gap: 7px;
}

.dsb-ask-form .dsb-field > span {
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--d-faint);
}

.dsb-ask-form .dsb-field--grow { flex: 1 1 240px; min-width: 200px; }

.dsb .dsb-field input[type="text"],
.dsb .dsb-field input[type="url"] {
	height: 42px;
	width: 100%;
	padding: 0 13px;
	border: 1px solid var(--d-line);
	border-radius: 9px;
	background: var(--d-surface);
	font-family: inherit;
	font-size: 14px;
	color: var(--d-ink);
	transition: border-color 0.14s ease, box-shadow 0.14s ease;
}

.dsb .dsb-field input[type="text"]:focus,
.dsb .dsb-field input[type="url"]:focus {
	outline: none;
	border-color: var(--d-brand);
	box-shadow: 0 0 0 3px rgba(255, 126, 1, 0.14);
}

.dsb .dsb-ask-send {
	height: 42px;
	flex-shrink: 0;
	gap: 8px;
	padding: 0 22px;
	font-size: 14px;
}

.dsb .dsb-ask-send .dsb-ico { width: 16px; height: 16px; }

.dsb .dsb-ask-send:disabled {
	opacity: 0.55;
	pointer-events: none;
}

.dsb .dsb-ask-msg {
	margin: 14px 0 0;
	padding: 11px 14px;
	border: 1px solid #cfe9de;
	border-radius: 9px;
	background: var(--d-ok-tint);
	font-size: 13px;
	line-height: 1.5;
	color: var(--d-ok);
	animation: dsb-in 0.3s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb .dsb-ask-msg.is-error {
	border-color: #f2c9c7;
	background: #fdf3f2;
	color: #9d2f2b;
}

/* ---------- Sem acesso ao formulário ---------- */

.dsb-ask-locked {
	display: flex;
	align-items: flex-start;
	gap: 13px;
}

.dsb-ask-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	flex-shrink: 0;
	border-radius: 10px;
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
}

.dsb-ask-ico .dsb-ico { width: 18px; height: 18px; }

.dsb-ask-locked > div { min-width: 0; flex: 1; }

.dsb-ask-locked strong {
	display: block;
	margin-bottom: 5px;
	font-size: 14.5px;
	font-weight: 650;
	letter-spacing: -0.01em;
	color: var(--d-ink);
}

.dsb .dsb-ask-locked p {
	margin: 0;
	font-size: 13.5px;
	line-height: 1.55;
	color: var(--d-muted);
}

.dsb-ask-locked ul {
	margin: 8px 0 0;
	padding-left: 18px;
	font-size: 13.5px;
	line-height: 1.7;
	color: var(--d-ink-2);
}

.dsb-ask-locked li::marker { color: var(--d-brand); }

.dsb .dsb-ask-note {
	margin-top: 10px;
	font-size: 12.5px;
	color: var(--d-faint);
}

.dsb-ask-locked .dsb-btn { margin-top: 14px; }

@media (max-width: 700px) {
	.dsb-ask-form { flex-direction: column; align-items: stretch; }
	.dsb .dsb-ask-send { width: 100%; justify-content: center; }
	.dsb-ask-body { padding: 16px 14px; }
}

.dsb-rq-list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.dsb-rq {
	position: relative;
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 14px 18px;
	border-bottom: 1px solid var(--d-line-soft);
	animation: dsb-in 0.36s cubic-bezier(0.16, 1, 0.3, 1) both;
	transition: background 0.14s ease, padding-left 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}

/* Fio que cresce na lateral no hover — mesma linguagem das outras listas. */
.dsb-rq::after {
	content: '';
	position: absolute;
	left: 0;
	top: 10px;
	bottom: 10px;
	width: 2px;
	border-radius: 0 2px 2px 0;
	background: var(--d-line);
	transform: scaleY(0);
	transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb-rq:hover::after { transform: scaleY(1); }
.dsb-rq:hover { padding-left: 22px; }

/* Aprovado é a boa notícia da lista — ganha um fundo próprio, discreto. */
.dsb-rq.is-complete { background: linear-gradient(90deg, #f4fbf7 0%, transparent 60%); }
.dsb-rq.is-complete:hover { background: var(--d-ok-tint); }

.dsb-rq:nth-child(1) { animation-delay: 0.02s; }
.dsb-rq:nth-child(2) { animation-delay: 0.05s; }
.dsb-rq:nth-child(3) { animation-delay: 0.08s; }
.dsb-rq:nth-child(4) { animation-delay: 0.11s; }
.dsb-rq:nth-child(n+5) { animation-delay: 0.14s; }

.dsb-rq:last-child { border-bottom: none; }
.dsb-rq:hover { background: var(--d-canvas); }

/* A própria solicitação ganha um fio na lateral, para achar de relance. */
.dsb-rq.is-mine::before {
	content: '';
	position: absolute;
	left: 0;
	top: 8px;
	bottom: 8px;
	width: 2px;
	border-radius: 0 2px 2px 0;
	background: var(--d-brand);
}

/* ---------- Selo com a inicial ---------- */

.dsb-rq-badge {
	display: grid;
	place-items: center;
	width: 36px;
	height: 36px;
	flex-shrink: 0;
	border-radius: 10px;
	background: var(--d-canvas);
	font-size: 15px;
	font-weight: 700;
	color: var(--d-faint);
	user-select: none;
}

/* A cor do selo repete a situação: dá para varrer a lista sem ler as etiquetas. */
.dsb-rq.is-complete   .dsb-rq-badge { background: var(--d-ok-tint);    color: var(--d-ok); }
.dsb-rq.is-processing .dsb-rq-badge { background: var(--d-warn-tint);  color: var(--d-warn); }
.dsb-rq.is-cancelled  .dsb-rq-badge { background: #fdf3f2;             color: #b4231c; }

.dsb-rq-main { min-width: 0; flex: 1; }

.dsb-rq-line {
	display: flex;
	align-items: baseline;
	gap: 8px;
	flex-wrap: wrap;
}

.dsb-rq-name {
	font-size: 14.5px;
	font-weight: 650;
	line-height: 1.35;
	letter-spacing: -0.01em;
	color: var(--d-ink);
	overflow-wrap: anywhere;
}

.dsb-rq-mine {
	padding: 1px 7px;
	border-radius: 999px;
	background: var(--d-brand-tint);
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--d-brand-ink);
}

.dsb .dsb-rq-src {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	margin-top: 3px;
	font-size: 12.5px;
	color: var(--d-faint);
	text-decoration: none;
	transition: color 0.14s ease;
}

.dsb .dsb-rq-src .dsb-ico { width: 12px; height: 12px; }
.dsb .dsb-rq-src:hover { color: var(--d-brand-ink); }

/* ---------- Situação e data, à direita ---------- */

.dsb-rq-side {
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 6px;
	flex-shrink: 0;
}

.dsb-rq-when {
	font-size: 11.5px;
	color: var(--d-faint);
	white-space: nowrap;
}

/* ---------- Resposta da equipe ---------- */

/* Fio à esquerda em vez de caixa: a resposta pertence à linha, não é um bloco
   solto embaixo dela. */
.dsb-rq-answer {
	display: flex;
	align-items: center;
	gap: 12px;
	flex-wrap: wrap;
	margin-top: 9px;
	padding-left: 11px;
	border-left: 2px solid var(--d-line);
	font-size: 12.5px;
	line-height: 1.5;
}

.dsb-rq.is-complete .dsb-rq-answer { border-left-color: var(--d-ok); }
.dsb-rq.is-cancelled .dsb-rq-answer { border-left-color: #e8b4b0; }

.dsb-rq-answer-txt { color: var(--d-muted); }

.dsb .dsb-rq-link {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 5px 12px;
	border: 1px solid var(--d-brand-line, #ffd9ad);
	border-radius: 999px;
	background: var(--d-brand-tint);
	font-size: 12px;
	font-weight: 650;
	color: var(--d-brand-ink);
	text-decoration: none;
	white-space: nowrap;
	transition: background 0.14s ease, border-color 0.14s ease, color 0.14s ease;
}

.dsb .dsb-rq-link .dsb-ico { width: 13px; height: 13px; }

.dsb .dsb-rq-link:hover {
	border-color: var(--d-brand);
	background: var(--d-brand);
	color: #fff;
}

.dsb-rq-filtered { color: var(--d-faint); }

/* ---------- Campos extras do filtro ---------- */

.dsb-field--grow { flex: 1 1 190px; min-width: 150px; }

.dsb .dsb-field input[type="search"] {
	height: 36px;
	width: 100%;
	padding: 0 12px;
	border: 1px solid var(--d-line);
	border-radius: 9px;
	background: var(--d-surface);
	font-family: inherit;
	font-size: 13.5px;
	color: var(--d-ink-2);
	transition: border-color 0.14s ease, box-shadow 0.14s ease;
}

.dsb .dsb-field input[type="search"]:focus {
	outline: none;
	border-color: var(--d-brand);
	box-shadow: 0 0 0 3px rgba(255, 126, 1, 0.14);
}

.dsb-check {
	display: inline-flex;
	align-items: center;
	gap: 7px;
	font-size: 13px;
	font-weight: 600;
	color: var(--d-ink-2);
	white-space: nowrap;
	cursor: pointer;
}

.dsb-check input {
	width: 16px;
	height: 16px;
	margin: 0;
	accent-color: var(--d-brand);
	cursor: pointer;
}

@media (max-width: 700px) {
	.dsb-rq { padding: 13px 14px; gap: 11px; }
	.dsb-rq:hover { padding-left: 18px; }
	.dsb-rq-side { align-self: flex-start; }
	.dsb-rq-when { display: none; }
	.dsb-field--grow { flex: 1 1 100%; }
}

@media (prefers-reduced-motion: reduce) {
	.dsb-rq { animation: none !important; }
}

/* ---------- Acompanhando ---------- */

.dsb-bm-ver {
	margin-left: 6px;
	font-size: 12px;
	font-weight: 600;
	color: var(--d-faint);
}

/* A linha some antes de a lista voltar do servidor. */
.dsb-dl-row.is-going {
	opacity: 0.4;
	pointer-events: none;
	transition: opacity 0.16s ease;
}

.dsb .dsb-act--icon[data-dsb-unfollow]:hover {
	border-color: #f2c9c7;
	background: #fdf3f2;
	color: #9d2f2b;
}

.dsb-dl .dsb-pager { padding-bottom: 18px; }

@media (max-width: 860px) {
	.dsb-quota {
		flex-direction: column;
		align-items: flex-start;
		gap: 20px;
	}
}

@media (max-width: 700px) {
	.dsb-filters { padding: 0 14px 14px; }
	.dsb-field { flex: 1 1 96px; }
	.dsb .dsb-field select { min-width: 0; width: 100%; }

	.dsb-dl-row { flex-wrap: wrap; padding: 12px 14px; }
	.dsb-dl-main { flex: 1 1 60%; }
	.dsb-dl-file { max-width: 100%; }
	.dsb-dl-count { padding: 14px 14px 0; }
	.dsb-dl-row:hover { padding-left: 18px; }
}

@media (prefers-reduced-motion: reduce) {
	.dsb-quota,
	.dsb-dl-row,
	.dsb-ring-fg { animation: none !important; }
}

/* ============================================================
 * Assinaturas — [drope_subscriptions]
 * (includes/dashboard/subscriptions.php)
 * ============================================================ */

/* ---------- Aviso de cobrança pendente ---------- */

.dsb-sub-alert {
	display: flex;
	align-items: center;
	gap: 16px;
	padding: 16px 18px;
	margin-bottom: 18px;
	border: 1px solid #f0cdca;
	border-radius: var(--d-r);
	background: linear-gradient(90deg, #fdf3f2 0%, var(--d-surface) 72%);
	animation: dsb-in 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-sub-alert-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	flex-shrink: 0;
	border-radius: 10px;
	background: #fae3e1;
	color: var(--d-danger);
}

.dsb-sub-alert-ico .dsb-ico { width: 19px; height: 19px; }

.dsb-sub-alert-txt { min-width: 0; flex: 1; }

.dsb-sub-alert-txt strong {
	display: block;
	font-size: 14.5px;
	font-weight: 650;
	color: #8f1c16;
	letter-spacing: -0.01em;
}

.dsb .dsb-sub-alert-txt p {
	margin: 3px 0 0;
	font-size: 13px;
	line-height: 1.5;
	color: var(--d-muted);
}

.dsb .dsb-sub-alert .dsb-btn { flex-shrink: 0; }

/* ---------- Aviso de retorno ---------- */

.dsb-notice--bad {
	border-color: #f0cdca;
	background: #fdf3f2;
	color: #8f1c16;
}

/* ---------- Grupos ---------- */

.dsb-sub-group { margin-top: 22px; }

.dsb .dsb-sub-group-title {
	display: flex;
	align-items: center;
	gap: 9px;
	margin: 0 0 12px;
	padding: 0 2px;
	font-size: 12px;
	font-weight: 650;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--d-faint);
}

.dsb-sub-group-n {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 20px;
	height: 20px;
	padding: 0 6px;
	border-radius: 999px;
	background: var(--d-line-soft);
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0;
	color: var(--d-ink-2);
}

.dsb-sub-list {
	display: flex;
	flex-direction: column;
	gap: 12px;
}

/* ---------- Cartão da assinatura ---------- */

.dsb-sub-card { display: block; }

/*
 * Três pesos: o que está rodando, o que precisa de ação e o que já acabou.
 * Uma assinatura ativa e uma cancelada com a mesma cara é o que fazia a lista
 * não dizer nada de longe.
 */

/* Rodando: fio verde fixo, papel branco, um pouco mais de ar. */
.dsb-sub-card.is-live {
	padding: 18px 20px;
	border-color: #dcdce0;
	box-shadow: 0 1px 2px rgba(20, 22, 26, 0.04);
}

.dsb-sub-card.is-live::before {
	transform: scaleY(1);
	background: var(--d-ok);
}

.dsb-sub-card.is-live:hover::before { background: var(--d-brand); }

.dsb-sub-card.is-live .dsb-order-items {
	font-size: 16px;
	font-weight: 650;
	letter-spacing: -0.01em;
	color: var(--d-ink);
}

.dsb-sub-card.is-live .dsb-sub-price strong { font-size: 20px; }

/* Precisa de ação: o vermelho fala antes do texto. */
.dsb-sub-card.is-alert {
	padding: 18px 20px;
	border-color: #f0cdca;
	box-shadow: 0 1px 2px rgba(180, 35, 28, 0.06);
}

.dsb-sub-card.is-alert::before {
	transform: scaleY(1);
	background: var(--d-danger);
}

.dsb-sub-card.is-alert:hover::before { background: var(--d-danger); }

.dsb-sub-card.is-alert .dsb-order-items {
	font-size: 16px;
	font-weight: 650;
	color: var(--d-ink);
}

/* Histórico: presente, mas sem competir. */
.dsb-sub-card.is-past {
	background: #fbfbfc;
	border-color: #eaeaee;
}

.dsb-sub-card.is-past .dsb-order-items { color: var(--d-ink-2); }
.dsb-sub-card.is-past .dsb-sub-price strong { font-size: 16px; color: var(--d-ink-2); }
.dsb-sub-card.is-past .dsb-order-num { opacity: 0.7; }
.dsb-sub-card.is-past:hover { background: var(--d-surface); }

/* Pontinho que pulsa no rótulo "Ativa". */
.dsb-tag-dot {
	width: 6px;
	height: 6px;
	margin-right: 1px;
	border-radius: 50%;
	background: currentColor;
	animation: dsb-pulse 2.2s ease-in-out infinite;
}

@keyframes dsb-pulse {
	0%, 100% { opacity: 1; transform: scale(1); }
	50%      { opacity: 0.45; transform: scale(0.8); }
}

.dsb-sub-card .dsb-tag {
	display: inline-flex;
	align-items: center;
	gap: 6px;
}

/* ---------- Ciclo atual ---------- */

.dsb-sub-cycle {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-top: 13px;
}

.dsb-sub-cycle-bar {
	position: relative;
	flex: 1;
	height: 5px;
	border-radius: 999px;
	background: var(--d-line-soft);
	overflow: hidden;
}

/* A largura vem de --dsb-fill, calculada no PHP: é geometria, não estilo. */
.dsb-sub-cycle-bar > span {
	display: block;
	width: var(--dsb-fill, 0%);
	height: 100%;
	border-radius: 999px;
	background: linear-gradient(90deg, var(--d-brand), #ffab4d);
	animation: dsb-cycle 0.9s cubic-bezier(0.16, 1, 0.3, 1) both 0.15s;
	transform-origin: left center;
}

@keyframes dsb-cycle {
	from { transform: scaleX(0); }
	to   { transform: scaleX(1); }
}

.dsb-sub-cycle-txt {
	flex-shrink: 0;
	font-size: 12px;
	color: var(--d-faint);
}

.dsb-sub-price {
	flex-shrink: 0;
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 1px;
	padding-left: 16px;
	text-align: right;
}

.dsb-sub-price strong {
	font-size: 18px;
	font-weight: 700;
	letter-spacing: -0.02em;
	color: var(--d-ink);
	line-height: 1.2;
}

.dsb-sub-price span {
	font-size: 12px;
	color: var(--d-faint);
}

.dsb-sub-actions {
	margin-top: 14px;
	padding-top: 13px;
	border-top: 1px solid var(--d-line-soft);
	justify-content: flex-start;
}

.dsb .dsb-act--quiet {
	border-color: transparent;
	background: transparent;
	color: var(--d-faint);
	margin-left: auto;
	cursor: pointer;
}

.dsb .dsb-act--quiet:hover {
	border-color: #f0cdca;
	background: #fdf3f2;
	color: var(--d-danger);
	transform: none;
}

.dsb .dsb-act--danger {
	border-color: var(--d-danger);
	background: var(--d-danger);
	color: #fff;
}

.dsb .dsb-act--danger:hover {
	border-color: #9c1e18;
	background: #9c1e18;
	color: #fff;
}

/* ---------- Confirmação de cancelamento ---------- */

.dsb-sub-confirm {
	display: flex;
	align-items: center;
	gap: 16px;
	flex-wrap: wrap;
	margin-top: 13px;
	padding: 14px 16px;
	border: 1px solid #f0cdca;
	border-radius: 10px;
	background: #fdf3f2;
	animation: dsb-det-in 0.24s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-sub-confirm-txt { min-width: 0; flex: 1 1 260px; }

.dsb-sub-confirm-txt > strong {
	display: block;
	font-size: 14px;
	font-weight: 650;
	color: #8f1c16;
}

.dsb .dsb-sub-confirm-txt p {
	margin: 3px 0 0;
	font-size: 13px;
	line-height: 1.5;
	color: var(--d-muted);
}

.dsb .dsb-sub-confirm-txt p strong { color: var(--d-ink-2); }

.dsb-sub-confirm-acts {
	display: flex;
	align-items: center;
	gap: 8px;
	flex-shrink: 0;
}

/* ---------- Vínculo com assinatura, na lista de pedidos ---------- */

.dsb-order-kind {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	padding: 3px 9px 3px 7px;
	border: 1px solid var(--d-brand-line);
	border-radius: 999px;
	background: var(--d-brand-tint);
	font-size: 11.5px;
	font-weight: 650;
	color: var(--d-brand-ink);
	white-space: nowrap;
}

.dsb-order-kind .dsb-ico { width: 12px; height: 12px; }

/* A primeira compra da assinatura é um marco, não uma repetição. */
.dsb-order-kind.is-first {
	border-color: #cfe9de;
	background: var(--d-ok-tint);
	color: var(--d-ok);
}

.dsb .dsb-act--sub {
	border-color: var(--d-brand-line);
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
}

.dsb .dsb-act--sub:hover {
	border-color: var(--d-brand);
	background: var(--d-brand);
	color: #fff;
}

/* ---------- Extrato: linha do tempo das cobranças ---------- */

.dsb-tl-head {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 14px;
	flex-wrap: wrap;
	margin-bottom: 4px;
}

.dsb-tl-head-k {
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--d-faint);
}

.dsb-tl-head-v {
	font-size: 12.5px;
	color: var(--d-muted);
}

.dsb-tl-head-v strong { color: var(--d-ink-2); font-weight: 650; }

.dsb-tl {
	list-style: none;
	margin: 0;
	padding: 0;
	counter-reset: none;
}

.dsb-tl-item {
	position: relative;
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 11px 0 11px 26px;
	animation: dsb-in 0.34s cubic-bezier(0.16, 1, 0.3, 1) both;
	animation-delay: calc(var(--dsb-tl-i, 0) * 0.045s);
}

/* O fio que costura uma cobrança na outra. */
.dsb-tl-item::before {
	content: '';
	position: absolute;
	left: 5px;
	top: 0;
	bottom: 0;
	width: 2px;
	background: var(--d-line);
}

.dsb-tl-item:first-child::before { top: 50%; }
.dsb-tl-item:last-child::before  { bottom: 50%; }

/* Só uma cobrança: o fio não tem o que ligar. */
.dsb-tl-item:only-child::before { display: none; }

.dsb-tl-mark {
	position: absolute;
	left: 0;
	top: 50%;
	width: 12px;
	height: 12px;
	margin-top: -6px;
	border: 2px solid var(--d-line);
	border-radius: 50%;
	background: var(--d-surface);
	transition: border-color 0.16s ease, transform 0.16s ease, box-shadow 0.16s ease;
}

/* A mais recente é a que interessa. */
.dsb-tl-item.is-last .dsb-tl-mark {
	border-color: var(--d-brand);
	background: var(--d-brand);
	box-shadow: 0 0 0 4px var(--d-brand-tint);
}

.dsb-tl-item.is-first .dsb-tl-mark {
	border-color: var(--d-ok);
	background: var(--d-ok);
}

.dsb-tl-item:hover .dsb-tl-mark { transform: scale(1.18); }

.dsb-tl-body { min-width: 0; flex: 1; }

.dsb-tl-line {
	display: flex;
	align-items: center;
	gap: 9px;
	flex-wrap: wrap;
}

.dsb-tl-val {
	font-size: 14.5px;
	font-weight: 700;
	letter-spacing: -0.01em;
	color: var(--d-ink);
}

.dsb-tl-kind {
	padding: 2px 8px;
	border-radius: 999px;
	background: var(--d-line-soft);
	font-size: 11px;
	font-weight: 650;
	color: var(--d-muted);
}

.dsb-tl-item.is-first .dsb-tl-kind {
	background: var(--d-ok-tint);
	color: var(--d-ok);
}

.dsb-tl-meta {
	display: block;
	margin-top: 2px;
	font-size: 12.5px;
	color: var(--d-faint);
}

.dsb-tl-meta .dsb-num { color: var(--d-muted); }

.dsb .dsb-tl .dsb-act--icon {
	width: 32px;
	height: 32px;
	flex-shrink: 0;
	opacity: 0;
	transition: opacity 0.16s ease, border-color 0.14s ease, background 0.14s ease, color 0.14s ease;
}

.dsb .dsb-tl .dsb-act--icon .dsb-ico { width: 15px; height: 15px; }

/* O recibo aparece quando a linha recebe atenção — e sempre no toque. */
.dsb-tl-item:hover .dsb-act--icon,
.dsb .dsb-tl .dsb-act--icon:focus-visible { opacity: 1; }

@media (hover: none) {
	.dsb .dsb-tl .dsb-act--icon { opacity: 1; }
}

.dsb .dsb-sub-loading {
	margin: 0;
	padding: 6px 0;
	font-size: 13px;
	color: var(--d-faint);
}

/* ---------- Troca de cartão ---------- */

.dsb-sub-update {
	margin-top: 15px;
	padding: 18px;
	border: 1px solid var(--d-brand-line);
	border-radius: 10px;
	background: var(--d-brand-tint);
	animation: dsb-det-in 0.26s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-sub-update-head {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: 16px;
	margin-bottom: 15px;
}

.dsb-sub-update-head strong {
	display: block;
	font-size: 14.5px;
	font-weight: 650;
	letter-spacing: -0.01em;
	color: var(--d-ink);
}

.dsb .dsb-sub-update-head p {
	margin: 3px 0 0;
	font-size: 12.5px;
	line-height: 1.5;
	color: var(--d-muted);
}

.dsb .dsb-sub-update-close {
	flex-shrink: 0;
	font-size: 12.5px;
	font-weight: 600;
	color: var(--d-brand-ink);
	text-decoration: none;
}

.dsb .dsb-sub-update-close:hover { text-decoration: underline; }

/* Onde o gateway monta os próprios campos — só damos a moldura. */
.dsb-sub-gateway {
	padding: 16px;
	border: 1px solid var(--d-line);
	border-radius: 10px;
	background: var(--d-surface);
}

.dsb-sub-gateway > *:last-child { margin-bottom: 0; }

.dsb-sub-gateway .edd-alert {
	margin: 12px 0 0;
	padding: 10px 12px;
	border-radius: 8px;
	font-size: 13px;
}

.dsb-sub-gateway .edd-alert-error {
	border: 1px solid #f0cdca;
	background: #fdf3f2;
	color: #8f1c16;
}

.dsb-sub-gateway .edd-alert p { margin: 0; }

.dsb .dsb-sub-save {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	margin-top: 14px;
	padding: 11px 22px;
	border: 1px solid var(--d-brand);
	border-radius: 9px;
	background: var(--d-brand);
	font-size: 13.5px;
	font-weight: 650;
	color: #fff;
	cursor: pointer;
	box-shadow: 0 2px 8px rgba(255, 126, 1, 0.24);
	transition: background 0.14s ease, box-shadow 0.14s ease, transform 0.14s ease;
	-webkit-appearance: none;
	appearance: none;
}

.dsb .dsb-sub-save:hover {
	background: var(--d-brand-hover);
	border-color: var(--d-brand-hover);
	box-shadow: 0 6px 16px rgba(255, 126, 1, 0.32);
	transform: translateY(-1px);
}

.dsb .dsb-sub-save:disabled {
	opacity: 0.6;
	cursor: default;
	transform: none;
	box-shadow: none;
}

@media (max-width: 700px) {
	.dsb-sub-alert { flex-wrap: wrap; }
	.dsb-sub-alert .dsb-btn { width: 100%; justify-content: center; }

	.dsb-sub-price {
		align-items: flex-start;
		padding-left: 0;
		text-align: left;
	}

	.dsb .dsb-act--quiet { margin-left: 0; }

	.dsb-sub-confirm-acts { width: 100%; }
	.dsb-sub-confirm-acts .dsb-act { flex: 1; justify-content: center; }

	.dsb-tl-item { flex-wrap: wrap; }
	
	
}

@media (prefers-reduced-motion: reduce) {
	.dsb-sub-alert,
	.dsb-sub-confirm,
	.dsb-sub-update { animation: none !important; }
}

/* ============================================================
 * Licenças — [drope_licenses]
 * (includes/dashboard/licenses.php)
 * ============================================================ */

/* Aviso ambarelo: vencendo, mas ainda não venceu. */
.dsb-sub-alert.is-warn {
	border-color: #f0dcb4;
	background: linear-gradient(90deg, var(--d-warn-tint) 0%, var(--d-surface) 72%);
}

.dsb-sub-alert.is-warn .dsb-sub-alert-ico {
	background: #fbeccd;
	color: var(--d-warn);
}

.dsb-sub-alert.is-warn .dsb-sub-alert-txt strong { color: #7a4800; }

/* ---------- Cabeçalho da lista, com os filtros ---------- */

.dsb-lic-bar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	flex-wrap: wrap;
	margin-bottom: 12px;
}

.dsb .dsb-lic-bar .dsb-sub-group-title { margin: 0; }

.dsb-lic-bar .dsb-filters {
	margin: 0;
	flex-wrap: wrap;
	justify-content: flex-end;
}

.dsb-lic-group.is-loading [data-dsb-list] {
	opacity: 0.45;
	pointer-events: none;
	transition: opacity 0.16s ease;
}

.dsb-empty--inline {
	border: 1px dashed var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
}

/* ---------- Cartão ---------- */

/* Perto de vencer não é erro: o cartão avisa em âmbar, não em vermelho. */
.dsb-lic.is-alert {
	border-color: #f0dcb4;
	box-shadow: 0 1px 2px rgba(154, 91, 0, 0.06);
}

.dsb-lic.is-alert::before,
.dsb-lic.is-alert:hover::before { background: var(--d-warn); }

.dsb-lic-head {
	display: flex;
	align-items: flex-start;
	gap: 14px;
}

/* Quadrado com a inicial: dá rosto ao produto e ritmo à lista. */
.dsb-lic-mono {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	flex-shrink: 0;
	border-radius: 11px;
	font-size: 18px;
	font-weight: 700;
	letter-spacing: -0.02em;
	transition: transform 0.22s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.dsb-lic:hover .dsb-lic-mono { transform: rotate(-4deg) scale(1.06); }

.dsb-lic-mono--1 { background: #eef2ff; color: #4553b8; }
.dsb-lic-mono--2 { background: var(--d-ok-tint); color: var(--d-ok); }
.dsb-lic-mono--3 { background: var(--d-brand-tint); color: var(--d-brand-ink); }
.dsb-lic-mono--4 { background: #f3eefc; color: #6b3fa8; }
.dsb-lic-mono--5 { background: #e9f5fb; color: #1f6d94; }
.dsb-lic-mono--6 { background: #fdeef1; color: #a8324c; }

/* Encerrada perde a cor: o histórico não precisa chamar atenção. */
.dsb-lic.is-past .dsb-lic-mono {
	background: var(--d-line-soft);
	color: var(--d-faint);
}

.dsb-lic-main { min-width: 0; flex: 1; }

/* Rótulos à esquerda, chave à direita, na mesma linha. */
.dsb-lic-line {
	display: flex;
	align-items: center;
	gap: 8px;
	flex-wrap: wrap;
}

.dsb-lic-plan {
	padding: 3px 9px;
	border-radius: 999px;
	background: var(--d-line-soft);
	font-size: 11.5px;
	font-weight: 600;
	color: var(--d-muted);
}

.dsb .dsb-lic-name {
	margin: 7px 0 6px;
	font-size: 17px;
	font-weight: 700;
	letter-spacing: -0.015em;
	line-height: 1.25;
	color: var(--d-ink);
}

.dsb-lic.is-past .dsb-lic-name { color: var(--d-ink-2); }

/* ---------- Chave ---------- */

.dsb-lic-key {
	display: inline-flex;
	align-items: center;
	gap: 2px;
	margin-left: auto;
	padding: 3px 4px 3px 10px;
	border: 1px solid var(--d-line);
	border-radius: 8px;
	background: var(--d-canvas);
	transition: border-color 0.16s ease, background 0.16s ease;
}

.dsb-lic-key:hover,
.dsb-lic-key.is-open {
	border-color: #d8d8dc;
	background: var(--d-surface);
}

.dsb-lic-key-v {
	padding: 0;
	background: none;
	font-family: var(--d-mono);
	font-size: 12px;
	letter-spacing: 0.02em;
	color: var(--d-ink-2);
	white-space: nowrap;
	-webkit-user-select: all;
	user-select: all;
}

.dsb-lic-key.is-open .dsb-lic-key-v { color: var(--d-ink); }

.dsb .dsb-lic-key-btn {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	padding: 0;
	border: none;
	border-radius: 6px;
	background: transparent;
	color: var(--d-faint);
	cursor: pointer;
	transition: background 0.14s ease, color 0.14s ease;
}

.dsb .dsb-lic-key-btn .dsb-ico { width: 14px; height: 14px; }

.dsb .dsb-lic-key-btn:hover {
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
}

.dsb .dsb-lic-key-btn[aria-pressed="true"] {
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
}

/* O "copiado" toma o lugar do ícone, sem mexer no tamanho do botão. */
.dsb-lic-key-ok {
	position: absolute;
	inset: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: 6px;
	background: var(--d-ok-tint);
	color: var(--d-ok);
	opacity: 0;
	transform: scale(0.6);
	transition: opacity 0.16s ease, transform 0.16s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.dsb .dsb-lic-key-btn.is-copied .dsb-ico:first-child { opacity: 0; }

.dsb-lic-key-btn.is-copied .dsb-lic-key-ok {
	opacity: 1;
	transform: scale(1);
}

/* ---------- Rodapé: vagas + ações ---------- */

.dsb-lic-foot {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
	margin-top: 14px;
	padding-top: 13px;
	border-top: 1px solid var(--d-line-soft);
}

.dsb-lic-actions { margin: 0; padding: 0; border: none; }

/* ---------- Medidor de vagas ---------- */

.dsb-lic-slots {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	min-width: 0;
}

.dsb-lic-slots-bar {
	display: inline-flex;
	align-items: center;
	gap: 4px;
}

.dsb-lic-slot {
	width: 16px;
	height: 8px;
	border-radius: 3px;
	background: var(--d-line);
	transition: background 0.2s ease, transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.dsb-lic-slot.is-on {
	background: var(--d-ok);
	animation: dsb-slot 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-lic-slot.is-on:nth-child(2) { animation-delay: 0.05s; }
.dsb-lic-slot.is-on:nth-child(3) { animation-delay: 0.1s; }
.dsb-lic-slot.is-on:nth-child(4) { animation-delay: 0.15s; }
.dsb-lic-slot.is-on:nth-child(n+5) { animation-delay: 0.2s; }

@keyframes dsb-slot {
	from { transform: scaleX(0.2); opacity: 0; }
	to   { transform: none; opacity: 1; }
}

/* Sem vaga sobrando: o medidor inteiro vira aviso. */
.dsb-lic-slots.is-full .dsb-lic-slot.is-on { background: var(--d-warn); }
.dsb-lic-slots.is-full .dsb-lic-slots-txt strong { color: var(--d-warn); }

.dsb-lic.is-past .dsb-lic-slot.is-on { background: var(--d-faint); }

.dsb-lic-slots-txt {
	font-size: 12.5px;
	color: var(--d-muted);
}

.dsb-lic-slots-txt strong {
	font-weight: 700;
	color: var(--d-ink);
}

.dsb-lic-slots-inf {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 22px;
	border-radius: 6px;
	background: var(--d-ok-tint);
	font-size: 15px;
	font-weight: 700;
	color: var(--d-ok);
}

.dsb .dsb-lic-full {
	display: flex;
	align-items: center;
	gap: 8px;
	margin: 12px 0 0;
	padding: 10px 13px;
	border-radius: 9px;
	background: var(--d-warn-tint);
	font-size: 12.5px;
	color: #7a4800;
}

.dsb .dsb-lic-full .dsb-ico {
	width: 15px;
	height: 15px;
	flex-shrink: 0;
	color: var(--d-warn);
}

/* ---------- Sites ativados ---------- */

.dsb-lic-sites {
	list-style: none;
	margin: 0;
	padding: 0;
}

.dsb-lic-site {
	display: flex;
	align-items: center;
	gap: 12px;
	flex-wrap: wrap;
	padding: 9px 0;
	border-bottom: 1px solid var(--d-line-soft);
	animation: dsb-in 0.34s cubic-bezier(0.16, 1, 0.3, 1) both;
	animation-delay: calc(var(--dsb-tl-i, 0) * 0.05s);
	transition: opacity 0.2s ease;
}

.dsb-lic-site:last-child { border-bottom: none; }
.dsb-lic-site.is-going { opacity: 0.35; }

.dsb-lic-site-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	flex-shrink: 0;
	border-radius: 8px;
	background: var(--d-line-soft);
	color: var(--d-muted);
}

.dsb-lic-site-ico .dsb-ico { width: 15px; height: 15px; }

/* https ganha o verde; http fica neutro. */
.dsb-lic-site-ico.is-safe {
	background: var(--d-ok-tint);
	color: var(--d-ok);
}

.dsb-lic-site.is-waiting .dsb-lic-site-ico {
	background: var(--d-warn-tint);
	color: var(--d-warn);
}

.dsb-lic-site-name {
	min-width: 0;
	flex: 1;
	overflow: hidden;
	font-size: 14px;
	font-weight: 600;
	color: var(--d-ink);
	text-overflow: ellipsis;
	white-space: nowrap;
}

.dsb-lic-site-tag {
	flex-shrink: 0;
	padding: 3px 9px;
	border-radius: 999px;
	background: var(--d-warn-tint);
	font-size: 11.5px;
	font-weight: 650;
	color: var(--d-warn);
}

/* "Liberar vaga" só aparece quando a linha recebe atenção. */
.dsb .dsb-lic-drop {
	opacity: 0;
	transition: opacity 0.16s ease, border-color 0.14s ease, background 0.14s ease, color 0.14s ease;
}

.dsb-lic-site:hover .dsb-lic-drop,
.dsb .dsb-lic-drop:focus-visible { opacity: 1; }

@media (hover: none) {
	.dsb .dsb-lic-drop { opacity: 1; }
}

/* A confirmação ocupa a linha inteira, embaixo do site em questão. */
.dsb-lic-confirm {
	flex: 1 1 100%;
	margin-top: 4px;
	margin-bottom: 4px;
}

.dsb-lic-none {
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 16px;
	border: 1px dashed var(--d-line);
	border-radius: 10px;
	background: var(--d-canvas);
}

.dsb-lic-none-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	flex-shrink: 0;
	border-radius: 10px;
	background: var(--d-surface);
	color: var(--d-faint);
}

.dsb-lic-none-ico .dsb-ico { width: 18px; height: 18px; }

.dsb-lic-none strong {
	display: block;
	font-size: 14px;
	font-weight: 650;
	color: var(--d-ink);
}

.dsb .dsb-lic-none p {
	margin: 3px 0 0;
	font-size: 12.5px;
	line-height: 1.5;
	color: var(--d-muted);
}

.dsb .dsb-lic-erro {
	margin: 10px 0 0;
	padding: 10px 12px;
	border: 1px solid #f0cdca;
	border-radius: 8px;
	background: #fdf3f2;
	font-size: 13px;
	color: #8f1c16;
}

@media (max-width: 820px) {
	.dsb-lic-key {
		order: 3;
		margin-left: 0;
		flex: 1 1 100%;
	}

	.dsb-lic-key-v {
		min-width: 0;
		flex: 1;
		overflow: hidden;
		text-overflow: ellipsis;
	}
}

@media (max-width: 700px) {
	.dsb-lic-bar { flex-direction: column; align-items: stretch; }
	.dsb-lic-bar .dsb-filters { justify-content: flex-start; }

	.dsb-lic-mono { width: 38px; height: 38px; font-size: 16px; }
	.dsb .dsb-lic-name { font-size: 16px; }

	.dsb-lic-foot { align-items: flex-start; }
	.dsb-lic-actions { width: 100%; }

	.dsb-lic-site-name { flex: 1 1 100%; order: 3; }
}

@media (prefers-reduced-motion: reduce) {
	.dsb-lic-slot,
	.dsb-lic-site { animation: none !important; }
	.dsb-lic:hover .dsb-lic-mono { transform: none; }
}

/* ============================================================
 * Meus domínios — [drope_domains]
 * (includes/dashboard/domains.php)
 * ============================================================ */

/* ---------- Aviso do topo ---------- */

.dsb-dom-note {
	display: flex;
	align-items: flex-start;
	gap: 13px;
	padding: 14px 16px;
	margin-bottom: 16px;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
	animation: dsb-in 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-dom-note-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 30px;
	flex-shrink: 0;
	border-radius: 8px;
	background: var(--d-brand-tint);
	color: var(--d-brand-ink);
}

.dsb-dom-note-ico .dsb-ico { width: 15px; height: 15px; }

.dsb-dom-note-txt { min-width: 0; flex: 1; }

.dsb .dsb-dom-note-txt p {
	margin: 0;
	font-size: 12.5px;
	line-height: 1.55;
	color: var(--d-muted);
}

.dsb .dsb-dom-note-txt p strong { color: var(--d-ink); font-weight: 650; }

/* A segunda linha é a que muda de vida: fica em âmbar. */
.dsb .dsb-dom-note-warn {
	display: flex;
	align-items: flex-start;
	gap: 7px;
	margin-top: 8px;
	padding-top: 8px;
	border-top: 1px dashed var(--d-line);
	color: #7a4800;
}

.dsb .dsb-dom-note-warn .dsb-ico {
	width: 13px;
	height: 13px;
	flex-shrink: 0;
	margin-top: 2px;
	color: var(--d-warn);
}

/* ---------- Topo: anel + distribuição ---------- */

.dsb-dom-hero { margin-bottom: 20px; }

.dsb-dom-hero .dsb-quota { margin-bottom: 0; }

/* O anel e a distribuição são um bloco só: o fio some entre eles. */
.dsb-dom-hero .dsb-quota {
	border-bottom-left-radius: 0;
	border-bottom-right-radius: 0;
	border-bottom: none;
}

.dsb-alloc {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
	gap: 1px;
	padding: 1px;
	border: 1px solid var(--d-line);
	border-top: none;
	border-radius: 0 0 var(--d-r) var(--d-r);
	background: var(--d-line);
	overflow: hidden;
}

.dsb .dsb-alloc-item {
	display: flex;
	flex-direction: column;
	gap: 8px;
	padding: 14px 16px;
	background: var(--d-surface);
	text-decoration: none;
	cursor: pointer;
	transition: background 0.16s ease;
}

.dsb .dsb-alloc-item:hover { background: var(--d-canvas); }

.dsb-alloc-top {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 10px;
}

.dsb-alloc-name {
	min-width: 0;
	overflow: hidden;
	font-size: 12.5px;
	font-weight: 600;
	line-height: 1.3;
	color: var(--d-ink-2);
	text-overflow: ellipsis;
	white-space: nowrap;
}

.dsb-alloc-n {
	flex-shrink: 0;
	font-size: 12px;
	color: var(--d-faint);
}

.dsb-alloc-n strong {
	font-size: 16px;
	font-weight: 700;
	letter-spacing: -0.02em;
	color: var(--d-ink);
}

.dsb-alloc-bar {
	display: block;
	height: 4px;
	border-radius: 999px;
	background: var(--d-line-soft);
	overflow: hidden;
}

.dsb-alloc-bar > span {
	display: block;
	width: var(--dsb-fill, 0%);
	height: 100%;
	border-radius: 999px;
	background: var(--d-ok);
	transform-origin: left center;
	animation: dsb-cycle 0.8s cubic-bezier(0.16, 1, 0.3, 1) both 0.2s;
}

.dsb-alloc-hint {
	font-size: 11.5px;
	color: var(--d-faint);
}

/* Lotado: a barra e o texto avisam antes de a pessoa tentar. */
.dsb-alloc-item.is-full .dsb-alloc-bar > span { background: var(--d-warn); }
.dsb-alloc-item.is-full .dsb-alloc-hint { color: var(--d-warn); }

/* O produto que está filtrando. */
.dsb .dsb-alloc-item.is-on {
	background: var(--d-brand-tint);
	box-shadow: inset 0 2px 0 var(--d-brand);
}

.dsb .dsb-alloc-item.is-on:hover { background: #ffeeda; }
.dsb-alloc-item.is-on .dsb-alloc-name { color: var(--d-brand-ink); }
.dsb-alloc-item.is-on .dsb-alloc-bar { background: #f6ddc0; }

/* Chip que leva para os bloqueados. */
.dsb .dsb-quota-chip.is-warn { text-decoration: none; }
.dsb a.dsb-quota-chip.is-warn:hover { border-color: var(--d-warn); }

/* ---------- Barra da seção ---------- */

.dsb-dom-bar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	flex-wrap: wrap;
	margin-bottom: 12px;
}

.dsb .dsb-dom-bar-title {
	display: flex;
	align-items: center;
	gap: 8px;
	margin: 0;
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--d-faint);
}

.dsb .dsb-dom-bar-title .dsb-ico { width: 14px; height: 14px; }

.dsb-dom-filters {
	display: flex;
	align-items: center;
	gap: 8px;
	margin: 0;
	flex-wrap: nowrap;
}

/* Busca com a lupa dentro, altura igual à do select. */
.dsb-dom-search {
	position: relative;
	display: inline-flex;
	align-items: center;
	min-width: 220px;
}

.dsb-dom-search .dsb-ico {
	position: absolute;
	left: 11px;
	width: 15px;
	height: 15px;
	color: var(--d-faint);
	pointer-events: none;
}

.dsb .dsb-dom-search input[type="search"] {
	width: 100%;
	height: 38px;
	padding: 0 12px 0 34px;
	border: 1px solid var(--d-line);
	border-radius: 9px;
	background: var(--d-surface);
	font-size: 13.5px;
	color: var(--d-ink);
	-webkit-appearance: none;
	appearance: none;
	transition: border-color 0.14s ease, box-shadow 0.14s ease;
}

.dsb .dsb-dom-search input[type="search"]::placeholder { color: var(--d-faint); }

.dsb .dsb-dom-search input[type="search"]:focus {
	outline: none;
	border-color: var(--d-brand);
	box-shadow: 0 0 0 3px var(--d-brand-tint);
}

.dsb-dom-pick { display: inline-flex; }

.dsb .dsb-dom-pick select {
	height: 38px;
	max-width: 230px;
	padding: 0 34px 0 12px;
	border: 1px solid var(--d-line);
	border-radius: 9px;
	background: var(--d-surface) var(--d-arrow) no-repeat right 11px center / 15px;
	background-image: none;
	font-size: 13.5px;
	font-weight: 600;
	color: var(--d-ink-2);
	cursor: pointer;
	-webkit-appearance: none;
	appearance: none;
	background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%239aa0a6' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4 6.5 4 4 4-4'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 11px center;
	background-size: 15px;
	transition: border-color 0.14s ease, box-shadow 0.14s ease;
}

.dsb .dsb-dom-pick select:hover { border-color: #d8d8dc; }

.dsb .dsb-dom-pick select:focus {
	outline: none;
	border-color: var(--d-brand);
	box-shadow: 0 0 0 3px var(--d-brand-tint);
}

.dsb .dsb-dom-clear {
	width: 38px;
	height: 38px;
	flex-shrink: 0;
}

.dsb .dsb-dom-clear .dsb-ico { width: 14px; height: 14px; }

.dsb-dom-group.is-loading [data-dsb-list] {
	opacity: 0.45;
	pointer-events: none;
	transition: opacity 0.16s ease;
}

/* ---------- Lista ---------- */

/*
 * Um cartão só, com os sites separados por fio: uma pilha de cartõezinhos
 * soltos é o que fazia a lista parecer desmontada.
 */
.dsb-dom-list {
	list-style: none;
	margin: 0;
	padding: 0;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
	overflow: hidden;
}

.dsb-dom {
	position: relative;
	display: flex;
	align-items: center;
	gap: 14px;
	flex-wrap: wrap;
	padding: 14px 18px;
	border-bottom: 1px solid var(--d-line-soft);
	animation: dsb-in 0.34s cubic-bezier(0.16, 1, 0.3, 1) both;
	animation-delay: calc(var(--dsb-tl-i, 0) * 0.04s);
	transition: background 0.16s ease, opacity 0.2s ease;
}

.dsb-dom:last-child { border-bottom: none; }

.dsb-dom::before {
	content: '';
	position: absolute;
	left: 0;
	top: 0;
	bottom: 0;
	width: 3px;
	background: var(--d-brand);
	transform: scaleY(0);
	transition: transform 0.22s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb-dom:hover::before,
.dsb-dom.is-open::before { transform: scaleY(1); }

.dsb-dom:hover { background: var(--d-canvas); }
.dsb-dom.is-going { opacity: 0.35; }

/* Quadrado com a inicial do domínio: dá rosto a cada site. */
.dsb-dom-mono {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 38px;
	height: 38px;
	flex-shrink: 0;
	border-radius: 10px;
	font-size: 16px;
	font-weight: 700;
	letter-spacing: -0.02em;
	transition: transform 0.22s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.dsb-dom:hover .dsb-dom-mono { transform: rotate(-4deg) scale(1.06); }

.dsb-dom-mono--1 { background: #eef2ff; color: #4553b8; }
.dsb-dom-mono--2 { background: var(--d-ok-tint); color: var(--d-ok); }
.dsb-dom-mono--3 { background: var(--d-brand-tint); color: var(--d-brand-ink); }
.dsb-dom-mono--4 { background: #f3eefc; color: #6b3fa8; }
.dsb-dom-mono--5 { background: #e9f5fb; color: #1f6d94; }
.dsb-dom-mono--6 { background: #fdeef1; color: #a8324c; }

.dsb-dom-mono--ban {
	background: #fdf3f2;
	color: var(--d-danger);
}

.dsb-dom-mono--ban .dsb-ico { width: 17px; height: 17px; }

.dsb-dom-main { min-width: 0; flex: 1; }

.dsb-dom-line {
	display: flex;
	align-items: center;
	gap: 9px;
	flex-wrap: wrap;
}

.dsb .dsb-dom-name {
	min-width: 0;
	overflow: hidden;
	font-size: 15px;
	font-weight: 650;
	letter-spacing: -0.01em;
	color: var(--d-ink);
	text-decoration: none;
	text-overflow: ellipsis;
	white-space: nowrap;
	transition: color 0.14s ease;
}

.dsb a.dsb-dom-name:hover {
	color: var(--d-brand-ink);
	text-decoration: underline;
}

/* Sinal de vida: o plugin deu as caras nas últimas 48 h. */
.dsb-dom-live {
	display: inline-flex;
	align-items: center;
	gap: 5px;
	padding: 2px 9px 2px 7px;
	border-radius: 999px;
	background: var(--d-ok-tint);
	font-size: 11px;
	font-weight: 650;
	color: var(--d-ok);
}

.dsb-dom-flag {
	padding: 2px 8px;
	border-radius: 999px;
	background: var(--d-warn-tint);
	font-size: 11px;
	font-weight: 650;
	color: var(--d-warn);
}

.dsb-dom-meta {
	display: flex;
	align-items: center;
	gap: 6px 12px;
	flex-wrap: wrap;
	margin-top: 5px;
	font-size: 12.5px;
	color: var(--d-faint);
}

.dsb-dom-meta > span { display: inline-flex; align-items: center; gap: 5px; }
.dsb-dom-meta .dsb-ico { width: 13px; height: 13px; }

/* O produto é o dado que mais se procura na linha: ganha corpo. */
.dsb-dom-prod {
	padding: 2px 9px;
	border-radius: 999px;
	background: var(--d-line-soft);
	font-size: 11.5px;
	font-weight: 650;
	color: var(--d-ink-2);
}

.dsb-dom-ver {
	padding: 1px 7px;
	border-radius: 5px;
	background: var(--d-line-soft);
	font-family: var(--d-mono);
	font-size: 11px;
	color: var(--d-muted);
}

/* ---------- Ações ---------- */

.dsb-dom-acts {
	display: flex;
	align-items: center;
	gap: 7px;
	flex-shrink: 0;
}

.dsb .dsb-dom-acts .dsb-act {
	padding: 7px 13px;
	font-size: 12.5px;
}

.dsb .dsb-dom-acts .dsb-act .dsb-ico { width: 13px; height: 13px; }

/* Bloquear é a ação pesada: fica marcada mesmo parada, sem gritar. */
.dsb .dsb-act--ban {
	border-color: #f0cdca;
	background: #fefafa;
	color: #a3352e;
}

.dsb .dsb-act--ban .dsb-ico { color: var(--d-danger); }

.dsb .dsb-act--ban:hover {
	border-color: var(--d-danger);
	background: var(--d-danger);
	color: #fff;
	transform: translateY(-1px);
}

.dsb .dsb-act--ban:hover .dsb-ico { color: #fff; }

/* O botão que abriu a confirmação fica marcado enquanto ela está na tela. */
.dsb .dsb-dom-acts .dsb-act.is-on {
	border-color: var(--d-ink);
	background: var(--d-ink);
	color: #fff;
}

.dsb .dsb-dom-acts .dsb-act.is-on .dsb-ico { color: #fff; }

.dsb-dom-confirm {
	flex: 1 1 100%;
	margin: 4px 0 0;
	border-color: var(--d-line);
	background: var(--d-canvas);
}

.dsb-dom-confirm .dsb-sub-confirm-txt > strong { color: var(--d-ink); }
.dsb-dom-confirm .dsb-sub-confirm-txt p strong { color: var(--d-ink-2); font-weight: 650; }

/* ---------- Bloqueados ---------- */

.dsb-dom-blocked {
	margin-top: 28px;
	padding-top: 22px;
	border-top: 1px solid var(--d-line);
	scroll-margin-top: 90px;
}

.dsb .dsb-dom-blocked .dsb-dom-bar-title { margin-bottom: 10px; }

.dsb .dsb-dom-blocked-note {
	margin: 0 0 12px;
	padding: 0 2px;
	font-size: 12.5px;
	line-height: 1.5;
	color: var(--d-muted);
}

/* Vazio é boa notícia aqui: verde discreto, não um buraco na página. */
.dsb-dom-blocked-none {
	display: flex;
	align-items: center;
	gap: 14px;
	padding: 16px 18px;
	border: 1px dashed var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-canvas);
}

.dsb-dom-blocked-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	flex-shrink: 0;
	border-radius: 9px;
	background: var(--d-ok-tint);
	color: var(--d-ok);
}

.dsb-dom-blocked-ico .dsb-ico { width: 16px; height: 16px; }

.dsb-dom-blocked-none strong {
	display: block;
	font-size: 14px;
	font-weight: 650;
	color: var(--d-ink);
}

.dsb .dsb-dom-blocked-none p {
	margin: 3px 0 0;
	font-size: 12.5px;
	line-height: 1.5;
	color: var(--d-muted);
}

.dsb-dom.is-blocked { background: #fefafa; }
.dsb-dom.is-blocked::before { transform: scaleY(1); background: var(--d-danger); }
.dsb-dom.is-blocked .dsb-dom-name { color: var(--d-ink-2); }
.dsb-dom.is-blocked:hover { background: #fdf3f2; }

/* ---------- Estado vazio da lista ---------- */

.dsb-doms .dsb-empty--inline {
	border: 1px dashed var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
}

.dsb-doms .dsb-pager { margin-top: 14px; }

@media (max-width: 860px) {
	.dsb-dom-bar { align-items: stretch; }
	.dsb-dom-filters { flex-wrap: wrap; width: 100%; }
	.dsb-dom-search { flex: 1 1 200px; min-width: 0; }
	.dsb .dsb-dom-pick select { max-width: none; }
	.dsb-dom-pick { flex: 1 1 180px; }
	.dsb .dsb-dom-pick select { width: 100%; }
}

@media (max-width: 700px) {
	.dsb-dom { padding: 13px 14px; gap: 11px; }
	.dsb-dom-mono { width: 34px; height: 34px; font-size: 14px; }
	.dsb .dsb-dom-name { font-size: 14px; }

	.dsb-dom-acts { width: 100%; }
	.dsb .dsb-dom-acts .dsb-act { flex: 1; justify-content: center; }
}

@media (prefers-reduced-motion: reduce) {
	.dsb-dom,
	.dsb-alloc-bar > span { animation: none !important; }
	.dsb-dom:hover .dsb-dom-mono { transform: none; }
}

/* ---------- Chips de produto (legado do topo) ---------- */

.dsb .dsb-dom-chip {
	text-decoration: none;
	cursor: pointer;
}

/* ============================================================
 * Bônus do plano — [drope_bonus]
 * (includes/dashboard/bonus.php)
 * ============================================================ */

/* ---------- Faixa de resumo ---------- */

.dsb-bonus-hero {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 24px;
	flex-wrap: wrap;
	position: relative;
	padding: 22px 26px;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: linear-gradient(115deg, var(--d-brand-tint) 0%, var(--d-surface) 55%);
	overflow: hidden;
	animation: dsb-in 0.42s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-bonus-hero::before {
	content: '';
	position: absolute;
	inset: 0 0 auto 0;
	height: 3px;
	background: linear-gradient(90deg, var(--d-brand), #ffc06a 60%, transparent);
}

.dsb-bonus-hero-main { min-width: 0; flex: 1 1 320px; }

.dsb .dsb-bonus-hero-main h2 {
	margin: 6px 0 0;
	font-size: 22px;
	font-weight: 700;
	letter-spacing: -0.025em;
	line-height: 1.2;
	color: var(--d-ink);
}

.dsb .dsb-bonus-hero-main p {
	margin: 7px 0 0;
	max-width: 62ch;
	font-size: 13px;
	line-height: 1.55;
	color: var(--d-muted);
}

.dsb .dsb-bonus-hero-main p strong { color: var(--d-ink-2); font-weight: 650; }

.dsb-bonus-hero-nums {
	display: flex;
	gap: 10px;
	flex-shrink: 0;
}

.dsb-bonus-hero-nums > div {
	min-width: 108px;
	padding: 12px 16px;
	border: 1px solid var(--d-line);
	border-radius: 11px;
	background: var(--d-surface);
	text-align: center;
}

.dsb-bonus-hero-n {
	display: block;
	font-size: 26px;
	font-weight: 700;
	letter-spacing: -0.03em;
	line-height: 1.1;
	color: var(--d-ink);
}

.dsb-bonus-hero-k {
	display: block;
	margin-top: 2px;
	font-size: 11.5px;
	color: var(--d-faint);
}

.dsb .dsb-bonus-tip {
	display: flex;
	align-items: flex-start;
	gap: 8px;
	margin: 12px 2px 18px;
	font-size: 12.5px;
	line-height: 1.55;
	color: var(--d-muted);
}

.dsb .dsb-bonus-tip .dsb-ico {
	width: 14px;
	height: 14px;
	flex-shrink: 0;
	margin-top: 3px;
	color: var(--d-faint);
}

.dsb .dsb-bonus-tip strong { color: var(--d-ink-2); font-weight: 650; }
.dsb .dsb-bonus-tip a { color: var(--d-brand-ink); font-weight: 650; }

/* ---------- Grade ---------- */

/*
 * Duas colunas, não auto-fit: com quatro produtos, três colunas deixavam um
 * cartão órfão na segunda linha e espremiam o rodapé a ponto de quebrar os
 * botões em duas linhas. Em 2x2 cada cartão respira e o rodapé cabe inteiro.
 */
.dsb-bonus-grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 16px;
}

@media (max-width: 780px) {
	.dsb-bonus-grid { grid-template-columns: minmax(0, 1fr); }
}

.dsb-bonus {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
	overflow: hidden;
	animation: dsb-in 0.42s cubic-bezier(0.16, 1, 0.3, 1) both;
	transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
}

.dsb-bonus-grid .dsb-bonus:nth-child(2) { animation-delay: 0.07s; }
.dsb-bonus-grid .dsb-bonus:nth-child(3) { animation-delay: 0.14s; }
.dsb-bonus-grid .dsb-bonus:nth-child(4) { animation-delay: 0.21s; }

.dsb-bonus:hover {
	border-color: #d5d5da;
	box-shadow: 0 12px 30px rgba(20, 22, 26, 0.09);
	transform: translateY(-3px);
}

/* ---------- Capa ---------- */

.dsb-bonus-cover {
	position: relative;
	aspect-ratio: 16 / 9;
	background: var(--d-canvas);
	border-bottom: 1px solid var(--d-line);
	overflow: hidden;
}

.dsb-bonus-cover img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb-bonus:hover .dsb-bonus-cover img { transform: scale(1.045); }

/* Véu de baixo para cima: as etiquetas ficam legíveis sobre qualquer imagem. */
.dsb-bonus-cover::after {
	content: '';
	position: absolute;
	inset: auto 0 0 0;
	height: 55%;
	background: linear-gradient(180deg, transparent, rgba(15, 17, 20, 0.42));
	pointer-events: none;
}

.dsb-bonus-cover .dsb-bonus-mono {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 100%;
	font-size: 44px;
	font-weight: 700;
	letter-spacing: -0.03em;
}

.dsb-bonus-tag {
	position: absolute;
	top: 10px;
	left: 10px;
	z-index: 2;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 5px 11px;
	border-radius: 999px;
	background: rgba(255, 255, 255, 0.94);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	font-size: 11.5px;
	font-weight: 700;
	color: var(--d-ok);
	box-shadow: 0 2px 8px rgba(20, 22, 26, 0.12);
}

.dsb-bonus-tag .dsb-ico { width: 12px; height: 12px; }
.dsb-bonus-tag.is-out { color: var(--d-muted); }

.dsb-bonus-ver {
	position: absolute;
	right: 10px;
	bottom: 10px;
	z-index: 2;
	padding: 3px 9px;
	border-radius: 6px;
	background: rgba(15, 17, 20, 0.62);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	font-family: var(--d-mono);
	font-size: 11px;
	font-weight: 600;
	color: #fff;
}

/* Fora do plano: a capa perde a cor e o cartão se apaga. */
.dsb-bonus.is-out .dsb-bonus-cover img {
	filter: grayscale(1) contrast(0.92);
	opacity: 0.62;
}

.dsb-bonus.is-out:hover .dsb-bonus-cover img { filter: grayscale(0.65); opacity: 0.78; }
.dsb-bonus.is-out .dsb-bonus-name { color: var(--d-ink-2); }

/* ---------- Corpo ---------- */

.dsb-bonus-body {
	display: flex;
	flex-direction: column;
	flex: 1;
	padding: 16px 18px 0;
}

.dsb .dsb-bonus-name {
	margin: 0;
	font-size: 16.5px;
	font-weight: 700;
	letter-spacing: -0.02em;
	line-height: 1.25;
	color: var(--d-ink);
}

.dsb .dsb-bonus-name a {
	color: inherit;
	text-decoration: none;
	transition: color 0.14s ease;
}

.dsb .dsb-bonus-name a:hover { color: var(--d-brand-ink); }

/*
 * Três linhas fixas: sem isso, um resumo curto e um longo empurravam a barra
 * de sites para alturas diferentes e os quatro cartões perdiam o alinhamento.
 */
.dsb .dsb-bonus-resume {
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
	min-height: calc(3 * 1.55 * 12.5px);
	margin: 6px 0 0;
	font-size: 12.5px;
	line-height: 1.55;
	color: var(--d-muted);
}

/* ---------- Vagas ---------- */

.dsb-bonus-slots {
	display: flex;
	flex-direction: column;
	gap: 6px;
	margin-top: 14px;
	padding: 11px 13px;
	border-radius: 9px;
	background: var(--d-canvas);
}

.dsb-bonus-slots-top {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 10px;
}

.dsb-bonus-slots-k {
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--d-faint);
}

.dsb-bonus-slots-v { font-size: 12px; color: var(--d-faint); }

.dsb-bonus-slots-v strong {
	font-size: 15px;
	font-weight: 700;
	letter-spacing: -0.02em;
	color: var(--d-ink);
}

.dsb-bonus-slots-foot {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: 10px;
}

.dsb-bonus-slots-hint {
	font-size: 11.5px;
	color: var(--d-faint);
}

.dsb .dsb-bonus-slots-link {
	flex-shrink: 0;
	font-size: 11.5px;
	font-weight: 650;
	color: var(--d-brand-ink);
	text-decoration: none;
}

.dsb .dsb-bonus-slots-link:hover { text-decoration: underline; }

.dsb-bonus-slots.is-full .dsb-alloc-bar > span { background: var(--d-warn); }
.dsb-bonus-slots.is-full .dsb-bonus-slots-hint { color: var(--d-warn); font-weight: 600; }

/* Fora do plano: mesma caixa, mesma altura, sem barra. */
.dsb-bonus-slots.is-locked {
	flex-direction: row;
	align-items: center;
	justify-content: space-between;
	gap: 10px;
	min-height: 62px;
	background: #fbfbfc;
	border: 1px dashed var(--d-line);
}

/* ---------- Aviso, aberto por clique ---------- */

.dsb .dsb-bonus-note-btn {
	display: flex;
	align-items: center;
	gap: 8px;
	width: 100%;
	margin-top: 12px;
	padding: 9px 12px;
	border: 1px solid #f2e2c4;
	border-radius: 9px;
	background: var(--d-warn-tint);
	font-size: 12px;
	font-weight: 650;
	text-align: left;
	color: #7a4800;
	cursor: pointer;
	transition: background 0.14s ease, border-color 0.14s ease;
}

.dsb .dsb-bonus-note-btn.is-requisito {
	border-color: #d6e4f2;
	background: #eef4fb;
	color: #1f4f7a;
}

.dsb .dsb-bonus-note-btn .dsb-ico { width: 14px; height: 14px; flex-shrink: 0; }
.dsb .dsb-bonus-note-btn > span:first-of-type { flex: 1; min-width: 0; }

.dsb-bonus-note-caret {
	width: 0;
	height: 0;
	flex-shrink: 0;
	border-left: 4px solid transparent;
	border-right: 4px solid transparent;
	border-top: 5px solid currentColor;
	opacity: 0.7;
	transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1);
}

.dsb .dsb-bonus-note-btn.is-on .dsb-bonus-note-caret { transform: rotate(180deg); }

.dsb-bonus-warn {
	margin-top: 8px;
	padding: 12px 14px;
	border-radius: 9px;
	background: var(--d-warn-tint);
	animation: dsb-det-in 0.24s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-bonus-warn.is-requisito { background: #eef4fb; }

.dsb-bonus-warn ul {
	margin: 0;
	padding-left: 17px;
	font-size: 12px;
	line-height: 1.6;
	color: var(--d-ink-2);
}

.dsb-bonus-warn li::marker { color: var(--d-warn); }
.dsb-bonus-warn.is-requisito li::marker { color: #3d7cb5; }

.dsb .dsb-bonus-warn-cta {
	margin: 9px 0 0;
	padding-top: 9px;
	border-top: 1px dashed rgba(122, 72, 0, 0.22);
	font-size: 12px;
	line-height: 1.5;
	color: var(--d-muted);
}

.dsb .dsb-bonus-warn.is-requisito .dsb-bonus-warn-cta { border-top-color: rgba(31, 79, 122, 0.2); }

.dsb .dsb-bonus-warn-cta a {
	display: inline-block;
	margin-top: 2px;
	font-weight: 700;
	color: #7a4800;
}

.dsb .dsb-bonus-warn.is-requisito .dsb-bonus-warn-cta a { color: #1f4f7a; }

/* ---------- Rodapé ---------- */

/* Dois botões, uma linha, sempre — nada de quebrar e deixar um sozinho. */
.dsb-bonus-foot {
	display: flex;
	align-items: center;
	gap: 8px;
	flex-wrap: nowrap;
	margin-top: auto;
	padding: 14px 18px 16px;
}

.dsb .dsb-bonus-foot .dsb-act {
	min-width: 0;
	padding: 9px 14px;
	font-size: 12.5px;
	justify-content: center;
	white-space: nowrap;
}

.dsb .dsb-bonus-foot .dsb-act--main { flex: 1 1 auto; }
.dsb .dsb-bonus-foot .dsb-act:not(.dsb-act--main) { flex: 0 1 auto; }
.dsb .dsb-bonus-foot .dsb-act .dsb-ico { width: 14px; height: 14px; }

/* Espaço curto: o rótulo secundário some e sobra o ícone. */
@media (max-width: 420px) {
	.dsb .dsb-bonus-foot .dsb-act:not(.dsb-act--main) { padding: 9px 12px; }
}

/* ---------- Etiqueta de bônus no histórico de downloads ---------- */

.dsb-dl-badge.is-bonus {
	background: #f3eefc;
	color: #6b3fa8;
}

@media (max-width: 700px) {
	.dsb-bonus-hero { padding: 18px; gap: 16px; }
	.dsb .dsb-bonus-hero-main h2 { font-size: 19px; }
	.dsb-bonus-hero-nums { width: 100%; }
	.dsb-bonus-hero-nums > div { flex: 1; min-width: 0; }

	.dsb-bonus-grid { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
	.dsb-bonus,
	.dsb-bonus-hero,
	.dsb-bonus-warn { animation: none !important; }
	.dsb-bonus:hover { transform: none; }
	.dsb-bonus:hover .dsb-bonus-cover img { transform: none; }
}

/* ============================================================
 * Meus dados — [edd_profile_editor]
 * (edd_templates/shortcode-profile-editor.php)
 * ============================================================ */

/* ---------- Avisos do EDD ---------- */

.dsb-me .edd-alert {
	display: flex;
	align-items: flex-start;
	gap: 11px;
	padding: 13px 16px;
	margin-bottom: 16px;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
	font-size: 13.5px;
	line-height: 1.5;
	animation: dsb-in 0.34s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-me .edd-alert p { margin: 0; }
.dsb-me .edd-alert p + p { margin-top: 6px; }

.dsb-me .edd-alert-success {
	border-color: #cfe9de;
	background: var(--d-ok-tint);
	color: var(--d-ok);
}

.dsb-me .edd-alert-error {
	border-color: #f0cdca;
	background: #fdf3f2;
	color: #8f1c16;
}

.dsb-me .edd-alert strong { font-weight: 700; }

/* ---------- Identidade ---------- */

.dsb-me-id {
	position: relative;
	display: flex;
	align-items: center;
	gap: 18px;
	padding: 20px 24px;
	margin-bottom: 18px;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: linear-gradient(115deg, var(--d-brand-tint) 0%, var(--d-surface) 58%);
	overflow: hidden;
	animation: dsb-in 0.42s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-me-id::before {
	content: '';
	position: absolute;
	inset: 0 0 auto 0;
	height: 3px;
	background: linear-gradient(90deg, var(--d-brand), #ffc06a 60%, transparent);
}

.dsb-me-avatar {
	display: inline-flex;
	flex-shrink: 0;
	width: 66px;
	height: 66px;
	border-radius: 50%;
	overflow: hidden;
	background: var(--d-canvas);
	box-shadow: 0 0 0 3px var(--d-surface), 0 2px 10px rgba(20, 22, 26, 0.1);
}

.dsb-me-avatar img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.dsb-me-id-txt { min-width: 0; flex: 1; }

.dsb .dsb-me-id-txt h2 {
	margin: 0;
	font-size: 20px;
	font-weight: 700;
	letter-spacing: -0.025em;
	line-height: 1.2;
	color: var(--d-ink);
}

.dsb .dsb-me-mail {
	margin: 3px 0 0;
	font-size: 13px;
	color: var(--d-muted);
	word-break: break-all;
}

.dsb-me-chips {
	display: flex;
	align-items: center;
	gap: 8px;
	flex-wrap: wrap;
	margin-top: 11px;
}

.dsb a.dsb-quota-chip { text-decoration: none; transition: border-color 0.14s ease, color 0.14s ease; }
.dsb a.dsb-quota-chip:hover { border-color: var(--d-brand); color: var(--d-brand-ink); }

/* ---------- Cartões do formulário ---------- */

.dsb-me-form {
	display: flex;
	flex-direction: column;
	gap: 14px;
}

.dsb-me-card {
	padding: 20px 22px 22px;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: var(--d-surface);
	animation: dsb-in 0.42s cubic-bezier(0.16, 1, 0.3, 1) both;
}

.dsb-me-form .dsb-me-card:nth-of-type(2) { animation-delay: 0.06s; }
.dsb-me-form .dsb-me-card:nth-of-type(3) { animation-delay: 0.12s; }
.dsb-me-form .dsb-me-card:nth-of-type(4) { animation-delay: 0.18s; }

.dsb-me-card-head {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	padding-bottom: 16px;
	margin-bottom: 18px;
	border-bottom: 1px solid var(--d-line-soft);
}

.dsb-me-card-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	flex-shrink: 0;
	border-radius: 9px;
	background: var(--d-canvas);
	color: var(--d-ink-2);
}

.dsb-me-card-ico .dsb-ico { width: 16px; height: 16px; }

.dsb .dsb-me-card-head h3 {
	margin: 0;
	font-size: 15.5px;
	font-weight: 700;
	letter-spacing: -0.015em;
	color: var(--d-ink);
}

.dsb .dsb-me-card-head p {
	margin: 2px 0 0;
	font-size: 12.5px;
	line-height: 1.5;
	color: var(--d-muted);
}

/* ---------- Campos ---------- */

.dsb-me-grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 16px 18px;
}

.dsb-me-field--wide { grid-column: 1 / -1; }

.dsb-me-field {
	display: flex;
	flex-direction: column;
	gap: 9px;
	min-width: 0;
}

/* O CSS do EDD traz #edd_profile_editor_form label{display:inline-block} —
   id ganha de classe, então o rótulo precisa voltar a ser bloco por aqui. */
#edd_profile_editor_form .dsb-me-field > label,
#edd_profile_editor_form .cfm-el > label {
	display: block;
	font-size: 12px;
	font-weight: 650;
	line-height: 1.2;
	letter-spacing: 0.01em;
	color: var(--d-ink-2);
}

#edd_profile_editor_form .dsb-me-field > label em {
	font-style: normal;
	font-weight: 500;
	color: var(--d-faint);
}

.dsb .dsb-me-field input[type="text"],
.dsb .dsb-me-field input[type="email"],
.dsb .dsb-me-field input[type="tel"],
.dsb .dsb-me-field input[type="password"],
.dsb .dsb-me-field select {
	width: 100%;
	height: 42px;
	padding: 0 13px;
	border: 1px solid var(--d-line);
	border-radius: 9px;
	background: var(--d-surface);
	font-size: 14px;
	font-family: inherit;
	color: var(--d-ink);
	-webkit-appearance: none;
	appearance: none;
	transition: border-color 0.14s ease, box-shadow 0.14s ease, background 0.14s ease;
}

.dsb .dsb-me-field select {
	padding-right: 36px;
	cursor: pointer;
	background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%239aa0a6' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m4 6.5 4 4 4-4'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 12px center;
	background-size: 15px;
}

.dsb .dsb-me-field input::placeholder { color: var(--d-faint); }

.dsb .dsb-me-field input:hover,
.dsb .dsb-me-field select:hover { border-color: #d8d8dc; }

.dsb .dsb-me-field input:focus,
.dsb .dsb-me-field select:focus {
	outline: none;
	border-color: var(--d-brand);
	box-shadow: 0 0 0 3px var(--d-brand-tint);
}

.dsb-me-field small {
	margin-top: -2px;
	font-size: 11.5px;
	line-height: 1.45;
	color: var(--d-faint);
}

/* ---------- Campos vindos do formulário de checkout (CFM) ---------- */

/*
 * O plugin desenha label + input com as classes dele. Em vez de reescrever a
 * marcação — que é gerada a partir do formulário configurado no admin — a
 * grade e o visual do painel são aplicados por cima.
 */
.dsb-me-card .cfm-form {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 16px 18px;
}

.dsb-me-card .cfm-el {
	display: flex;
	flex-direction: column;
	gap: 9px;
	min-width: 0;
}

.dsb-me-card .cfm-el .edd-required-indicator {
	margin-left: 2px;
	color: var(--d-danger);
}

.dsb .dsb-me-card .cfm-el input[type="text"],
.dsb .dsb-me-card .cfm-el input[type="email"],
.dsb .dsb-me-card .cfm-el input[type="tel"],
.dsb .dsb-me-card .cfm-el select,
.dsb .dsb-me-card .cfm-el textarea {
	width: 100%;
	max-width: 100%;
	height: 42px;
	padding: 0 13px;
	border: 1px solid var(--d-line);
	border-radius: 9px;
	background: var(--d-surface);
	font-size: 14px;
	font-family: inherit;
	color: var(--d-ink);
	-webkit-appearance: none;
	appearance: none;
	transition: border-color 0.14s ease, box-shadow 0.14s ease;
}

.dsb .dsb-me-card .cfm-el textarea {
	height: auto;
	min-height: 90px;
	padding: 11px 13px;
	line-height: 1.55;
}

.dsb .dsb-me-card .cfm-el input:hover,
.dsb .dsb-me-card .cfm-el select:hover,
.dsb .dsb-me-card .cfm-el textarea:hover { border-color: #d8d8dc; }

.dsb .dsb-me-card .cfm-el input:focus,
.dsb .dsb-me-card .cfm-el select:focus,
.dsb .dsb-me-card .cfm-el textarea:focus {
	outline: none;
	border-color: var(--d-brand);
	box-shadow: 0 0 0 3px var(--d-brand-tint);
}

/* Campos largos (endereço, observações) ocupam a linha. */
.dsb-me-card .cfm-el.textarea,
.dsb-me-card .cfm-el.address,
.dsb-me-card .cfm-el.multiple_checkbox,
.dsb-me-card .cfm-el.radio { grid-column: 1 / -1; }

.dsb-me-card .cfm-el .description,
.dsb-me-card .cfm-el small {
	margin-top: -2px;
	font-size: 11.5px;
	line-height: 1.45;
	color: var(--d-faint);
}

/* ---------- E-mails secundários ---------- */

.dsb-me-mails {
	margin-top: 18px;
	padding-top: 16px;
	border-top: 1px dashed var(--d-line);
}

.dsb-me-mails-k {
	display: block;
	margin-bottom: 9px;
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--d-faint);
}

.dsb-me-mails ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 7px;
}

.dsb-me-mails li {
	display: flex;
	align-items: center;
	gap: 11px;
	padding: 9px 12px;
	border: 1px solid var(--d-line);
	border-radius: 9px;
	background: var(--d-canvas);
}

.dsb-me-mail-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	flex-shrink: 0;
	border-radius: 7px;
	background: var(--d-surface);
	color: var(--d-faint);
}

.dsb-me-mail-ico .dsb-ico { width: 14px; height: 14px; }

.dsb-me-mail-v {
	min-width: 0;
	flex: 1;
	overflow: hidden;
	font-size: 13.5px;
	color: var(--d-ink-2);
	text-overflow: ellipsis;
	white-space: nowrap;
}

.dsb-me-mails .dsb-act--quiet { margin-left: 0; }

/* ---------- Salvar ---------- */

.dsb-me-save {
	position: sticky;
	bottom: 12px;
	z-index: 5;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
	padding: 14px 18px;
	border: 1px solid var(--d-line);
	border-radius: var(--d-r);
	background: rgba(255, 255, 255, 0.92);
	-webkit-backdrop-filter: blur(10px);
	backdrop-filter: blur(10px);
	box-shadow: 0 8px 24px rgba(20, 22, 26, 0.08);
}

.dsb-me-save-txt {
	min-width: 0;
	flex: 1 1 200px;
	font-size: 12.5px;
	color: var(--d-muted);
}

.dsb .dsb-me-submit {
	flex-shrink: 0;
	gap: 8px;
	border: none;
	cursor: pointer;
	font-family: inherit;
}

.dsb .dsb-me-submit .dsb-ico { width: 15px; height: 15px; }

@media (max-width: 700px) {
	.dsb-me-id { padding: 16px; gap: 14px; }
	.dsb-me-avatar { width: 54px; height: 54px; }
	.dsb .dsb-me-id-txt h2 { font-size: 17px; }

	.dsb-me-card { padding: 16px 16px 18px; }
	.dsb-me-grid,
	.dsb-me-card .cfm-form { grid-template-columns: minmax(0, 1fr); }

	.dsb-me-save { position: static; }
	.dsb .dsb-me-submit { width: 100%; justify-content: center; }
}

@media (prefers-reduced-motion: reduce) {
	.dsb-me-id,
	.dsb-me-card,
	.dsb-me .edd-alert { animation: none !important; }
}
