/**
 * CDSWerx Table of Contents Widget Styles
 *
 * Includes container, header (title/subtitle/text), body/list,
 * marker views (numbers/bullets/icon), underline animation via ::after,
 * collapse subitems, word-wrap/ellipsis, active indicators,
 * toggle icon expand/collapse visibility, and breakpoint-responsive minimise.
 *
 * @package CDSWerx_Widget_Library
 * @since   2.12.0
 */

/* ============================================
   Container (Box)
   ============================================ */

.cdswerx-toc {
	border: 1px solid #e0e0e0;
	border-radius: 4px;
	overflow: hidden;
}

/* ============================================
   Header
   ============================================ */

.cdswerx-toc__header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 15px 20px;
	font-weight: 600;
	font-size: 16px;
	gap: 10px;
}

/* Collapse header padding when it only contains the toggle button */
.cdswerx-toc__header--toggle-only {
	padding-block: 4px;
}

.cdswerx-toc__header-text {
	flex: 1;
	min-width: 0;
	display: flex;
	flex-direction: column;
}

.cdswerx-toc__title {
	margin: 0;
	font: inherit;
}

.cdswerx-toc__subtitle {
	margin: 4px 0 0;
	font-size: 0.85em;
	font-weight: 400;
	opacity: 0.8;
}

/* ============================================
   Text (intro / WYSIWYG)
   ============================================ */

.cdswerx-toc__text {
	padding: 0 20px;
	font-size: 0.9em;
}

.cdswerx-toc__text > *:first-child {
	margin-top: 0;
}

.cdswerx-toc__text > *:last-child {
	margin-bottom: 0;
}

/* ============================================
   Toggle (minimize / expand)
   ============================================ */

.cdswerx-toc__toggle {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	background: none;
	border: none;
	cursor: pointer;
	padding: 4px;
	color: inherit;
	font-size: 14px;
	transition: transform 0.3s, background 0.3s, color 0.3s, border-color 0.3s;
	flex-shrink: 0;
	box-sizing: border-box;
}

.cdswerx-toc__toggle:hover,
.cdswerx-toc__toggle:focus {
	outline: none;
}

/* Show expand icon when minimized, collapse icon when expanded */
.cdswerx-toc__toggle-icon--collapse {
	display: inline-flex;
}

.cdswerx-toc__toggle-icon--expand {
	display: none;
}

.cdswerx-toc--minimized .cdswerx-toc__toggle-icon--collapse {
	display: none;
}

.cdswerx-toc--minimized .cdswerx-toc__toggle-icon--expand {
	display: inline-flex;
}

/* ============================================
   Body
   ============================================ */

.cdswerx-toc__body {
	padding: 10px 20px 20px;
	transition: max-height 0.4s ease, opacity 0.3s ease, padding 0.3s ease;
	overflow: hidden;
}

.cdswerx-toc--minimized .cdswerx-toc__body {
	max-height: 0 !important;
	opacity: 0;
	padding-top: 0;
	padding-bottom: 0;
}

/* Also hide intro text when minimized */
.cdswerx-toc--minimized .cdswerx-toc__text {
	display: none;
}

.cdswerx-toc__loading {
	color: #999;
	font-style: italic;
	font-size: 13px;
}

/* ============================================
   List — Base
   ============================================ */

.cdswerx-toc__list {
	margin: 0;
	padding: 0;
}

.cdswerx-toc__list .cdswerx-toc__list {
	padding-left: 15px;
}

.cdswerx-toc__item {
	padding-block: 3px;
	display: flex;
	align-items: baseline;
	flex-wrap: wrap;
}

/* ============================================
   List — Marker Views
   ============================================ */

/* Numbers: use ordered list counter */
.cdswerx-toc--marker-numbers .cdswerx-toc__list {
	list-style: decimal;
	padding-left: 1.5em;
}

.cdswerx-toc--marker-numbers .cdswerx-toc__list .cdswerx-toc__list {
	list-style: decimal;
}

.cdswerx-toc--marker-numbers .cdswerx-toc__item {
	display: list-item;
}

.cdswerx-toc--marker-numbers .cdswerx-toc__item::marker {
	color: var(--cdswerx-toc-marker-color, inherit);
}

/* Bullets: native CSS list markers (disc/circle/square via Elementor selector) */
.cdswerx-toc--marker-bullets .cdswerx-toc__list {
	list-style-type: disc;
	padding-left: 1.5em;
}

.cdswerx-toc--marker-bullets .cdswerx-toc__list .cdswerx-toc__list {
	list-style-type: inherit;
}

.cdswerx-toc--marker-bullets .cdswerx-toc__item {
	display: list-item;
}

.cdswerx-toc--marker-bullets .cdswerx-toc__item::marker {
	color: var(--cdswerx-toc-marker-color, inherit);
}

/* Icon: custom icon rendered by JS into .cdswerx-toc__marker span */
.cdswerx-toc--marker-icon .cdswerx-toc__list {
	list-style: none;
	padding-left: 0;
}

/* None: no markers; only reset padding on root list so nested indent is preserved */
.cdswerx-toc--marker-none .cdswerx-toc__list {
	list-style: none;
}

.cdswerx-toc--marker-none .cdswerx-toc__body > .cdswerx-toc__list {
	padding-left: 0;
}

.cdswerx-toc--marker-none .cdswerx-toc__item {
	display: list-item;
}

/* Marker element (icon/bullet icon rendered by JS) */
.cdswerx-toc__marker {
	display: inline-flex;
	align-items: center;
	flex-shrink: 0;
	margin-right: 6px;
	font-size: 0.7em;
	line-height: 1;
}

.cdswerx-toc__marker svg {
	width: 1em;
	height: 1em;
	fill: currentColor;
}

/* ============================================
   Links
   ============================================ */

.cdswerx-toc__link {
	flex: 1;
	min-width: 0;
	color: inherit;
	text-decoration: none;
	position: relative;
	display: inline;
	transition: color 0.3s;
}

.cdswerx-toc__link:hover {
	text-decoration: none;
}

.cdswerx-toc__link.is-active {
	font-weight: 600;
}

/* ============================================
   Word Wrap / Ellipsis
   ============================================ */

.cdswerx-toc--ellipsis .cdswerx-toc__link {
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	display: block;
	max-width: 100%;
}

.cdswerx-toc--ellipsis .cdswerx-toc__item {
	overflow: hidden;
}

/* ============================================
   Collapse Subitems
   ============================================ */

.cdswerx-toc--collapse-subitems .cdswerx-toc__list--collapsed {
	max-height: 0;
	overflow: hidden;
	opacity: 0;
	transition: max-height 0.3s ease, opacity 0.2s ease;
}

.cdswerx-toc--collapse-subitems .cdswerx-toc__list:not(.cdswerx-toc__list--collapsed) {
	max-height: 2000px;
	opacity: 1;
	transition: max-height 0.4s ease, opacity 0.3s ease;
}

/* Nested lists take full width inside flex item */
.cdswerx-toc__item > .cdswerx-toc__list {
	flex-basis: 100%;
}

/* ============================================
   Active Indicator: Underline
   ============================================ */

.cdswerx-toc--indicator-underline .cdswerx-toc__link::after {
	content: '';
	position: absolute;
	left: 0;
	bottom: -2px;
	width: 0;
	height: 2px;
	background-color: currentColor;
	transition: width 0.3s ease;
}

.cdswerx-toc--indicator-underline .cdswerx-toc__link.is-active::after {
	width: 100%;
}

/* ============================================
   Active Indicator: Left Bar
   ============================================ */

.cdswerx-toc--indicator-left-bar .cdswerx-toc__link::before {
	content: '';
	position: absolute;
	left: -10px;
	top: 0;
	bottom: 0;
	width: 3px;
	background-color: transparent;
	transition: background-color 0.3s;
}

.cdswerx-toc--indicator-left-bar .cdswerx-toc__link.is-active::before {
	background-color: currentColor;
}

/* ============================================
   Active Indicator: Dot
   ============================================ */

.cdswerx-toc--indicator-dot .cdswerx-toc__link::before {
	content: '';
	position: absolute;
	left: -12px;
	top: 50%;
	transform: translateY(-50%);
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background-color: transparent;
	transition: background-color 0.3s;
}

.cdswerx-toc--indicator-dot .cdswerx-toc__link.is-active::before {
	background-color: currentColor;
}

/* ============================================
   Underline Animation (::after, button widget pattern)
   Enabled via .cdswerx-toc--underline class
   ============================================ */

.cdswerx-toc--underline .cdswerx-toc__link {
	position: relative;
	display: inline;
}

.cdswerx-toc--underline .cdswerx-toc__link::after {
	content: '';
	position: absolute;
	bottom: 0;
	height: 2px;
	background-color: currentColor;
	transition: transform 0.3s ease, background-color 0.3s ease;
}

/* Position: left (default) — origin left */
.cdswerx-toc--underline-left .cdswerx-toc__link::after {
	left: 0;
	width: 100%;
	transform: scaleX(0);
	transform-origin: left center;
}

.cdswerx-toc--underline-left .cdswerx-toc__link:hover::after,
.cdswerx-toc--underline-left .cdswerx-toc__link.is-active::after {
	transform: scaleX(1);
}

/* Position: right — origin right */
.cdswerx-toc--underline-right .cdswerx-toc__link::after {
	right: 0;
	width: 100%;
	transform: scaleX(0);
	transform-origin: right center;
}

.cdswerx-toc--underline-right .cdswerx-toc__link:hover::after,
.cdswerx-toc--underline-right .cdswerx-toc__link.is-active::after {
	transform: scaleX(1);
}

/* Position: center — origin center */
.cdswerx-toc--underline-center .cdswerx-toc__link::after {
	left: 0;
	width: 100%;
	transform: scaleX(0);
	transform-origin: center center;
}

.cdswerx-toc--underline-center .cdswerx-toc__link:hover::after,
.cdswerx-toc--underline-center .cdswerx-toc__link.is-active::after {
	transform: scaleX(1);
}

/* Draw effect: hidden normally, drawn on hover/active */
.cdswerx-toc--underline-draw .cdswerx-toc__link::after {
	transform: scaleX(0);
}

.cdswerx-toc--underline-draw .cdswerx-toc__link:hover::after,
.cdswerx-toc--underline-draw .cdswerx-toc__link.is-active::after {
	transform: scaleX(1);
}

/* ============================================
   Empty / No Headings Found
   ============================================ */

.cdswerx-toc__empty {
	color: #999;
	font-style: italic;
	font-size: 13px;
	padding: 5px 0;
}
