:root {
	--aio-primary: #10b335;
	--aio-on-primary: #ffffff;
	--aio-bg: #f4fbf6;
	--aio-surface: #ffffff;
	--aio-surface-soft: #eff9f2;
	--aio-outline: #c9dfce;
	--aio-outline-strong: #90c59c;
	--aio-text: #153122;
	--aio-text-muted: #54715e;
	--aio-success-soft: #d8f3df;
	--aio-shadow-1: 0 1px 2px rgba(16, 179, 53, 0.08), 0 8px 24px rgba(16, 179, 53, 0.06);
	--aio-shadow-2: 0 4px 14px rgba(16, 179, 53, 0.14), 0 20px 36px rgba(16, 179, 53, 0.12);
	--aio-radius-xl: 18px;
	--aio-radius-lg: 14px;
	--aio-radius-sm: 10px;
}

.aio-page-shell {
	padding: 22px 30px 14px;
	box-sizing: border-box;
	background: linear-gradient(180deg, var(--aio-bg) 0%, #ffffff 34%);
	min-height: calc(100vh - 130px);
}

.aio-module-grid {
	display: grid;
	gap: 20px;
	grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
	margin: 0;
}

.aio-module-card {
	display: block;
	padding: 22px;
	border: 1px solid var(--aio-outline);
	border-radius: var(--aio-radius-xl);
	text-decoration: none;
	background: linear-gradient(180deg, var(--aio-surface) 0%, var(--aio-surface-soft) 100%);
	box-shadow: var(--aio-shadow-1);
	transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}

.aio-module-card,
.aio-module-card * {
	text-decoration: none !important;
}

.aio-module-card:hover,
.aio-module-card:focus {
	outline: none;
	transform: translateY(-2px);
	border-color: var(--aio-outline-strong);
	box-shadow: var(--aio-shadow-2);
}

.aio-module-title {
	font-size: 32px;
	line-height: 1.08;
	font-weight: 600;
	color: var(--aio-primary);
	margin-bottom: 12px;
	letter-spacing: -0.3px;
}

.aio-module-description {
	font-size: 15px;
	line-height: 1.5;
	color: var(--aio-text-muted);
	margin-bottom: 14px;
}

.aio-status-chip {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding: 6px 10px;
	border-radius: 999px;
	font-size: 12px;
	font-weight: 500;
	color: #0b6d24;
	background: var(--aio-success-soft);
	border: 1px solid #bcecc8;
}

.aio-empty-state {
	min-height: calc(100vh - 270px);
	display: flex;
	align-items: center;
	justify-content: center;
	text-align: center;
	padding: 18px;
}

.aio-empty-card {
	display: inline-flex;
	align-items: center;
	gap: 12px;
	padding: 16px 20px;
	border-radius: var(--aio-radius-lg);
	background: var(--aio-surface-soft);
	border: 1px solid var(--aio-outline);
	color: var(--aio-text);
	font-size: 15px;
	font-weight: 500;
}

.aio-icon {
	width: 16px;
	height: 16px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	color: var(--aio-primary);
	flex: 0 0 auto;
}

.aio-icon svg {
	width: 16px;
	height: 16px;
	stroke: currentColor;
	fill: none;
	stroke-width: 1.8;
	stroke-linecap: round;
	stroke-linejoin: round;
}

/* IoT legacy mount fallback: render old full-width notice as a compact title chip. */
.aio-iot-main {
	position: relative;
}

.aio-iot-topbar + [data-ref="notice"] {
	position: absolute;
	top: 20px;
	left: 124px;
	z-index: 2;
	width: max-content;
	max-width: min(360px, calc(100% - 260px));
}

.aio-iot-topbar + [data-ref="notice"]:empty {
	display: none;
}

.aio-iot-topbar + [data-ref="notice"] .aio-iot-notice {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	min-height: 24px;
	width: auto;
	margin: 0;
	padding: 3px 9px;
	border-radius: 999px;
	font-size: 12px;
	font-weight: 600;
	line-height: 1.2;
	white-space: nowrap;
}

.aio-iot-topbar + [data-ref="notice"] .aio-iot-notice.success::before {
	content: "✓";
	font-weight: 700;
}

@media (max-width: 768px) {
	.aio-page-shell {
		padding: 14px 16px 10px;
	}

	.aio-module-grid {
		grid-template-columns: 1fr;
	}
}
