/*
 Theme Name:   Kios Merdeka
 Theme URI:    https://kiosmerdeka.com
 Description:  Child theme of Storefront for Kios Merdeka
 Author:       Kios Merdeka
 Author URI:   https://kiosmerdeka.com
 Template:     storefront
 Version:      1.4.4
 License:      GNU General Public License v3 or later
 License URI:  https://www.gnu.org/licenses/gpl-3.0.html
 Tags:         e-commerce, woocommerce, storefront, child-theme
 Text Domain:  kiosmerdeka
*/

/* Add your custom styles below */

/* ================================================
   Design tokens — The Hacker News palette
   Single source of truth. Every rule below reads
   from these variables, never from raw hex.
   ================================================ */

:root {
	/* Brand */
	--brand-primary: #3B35AE;      /* indigo — accents, hover underlines */
	--brand-dark: #2e298c;         /* deeper indigo — header gradient ends */

	/* Surfaces */
	--background: #F4F6FB;
	--surface: #fff;
	--surface-alt: #f9fbff;        /* blockquote / info panels */
	--surface-muted: #f8f9fa;

	/* Text */
	--text-heading: #34343D;
	--text-secondary: #525260;
	--articletext-color: #40404A;
	--text-on-brand: #9BB2FF;      /* secondary text on the brand gradient */
	--link-color: #4B5AEF;

	/* Lines & highlights */
	--border-color: #DCE2F1;
	--highlight: #ffdb4d;          /* text selection */

	/* Metrics */
	--shell-max: 1152px;           /* outer container */
	--content-max: 766px;          /* article / feed column */
	--gutter: 24px;
	--gutter-lg: 32px;

	/* Elevation */
	--shadow-menu: 0 2px 4px rgba(59, 53, 174, .06);

	/* Legacy aliases — remap the old charcoal/sky-blue system onto this
	   palette so rules written before the redesign inherit the new look. */
	--color-primary: var(--text-heading);
	--color-primary-dark: var(--brand-dark);
	--color-primary-light: var(--text-secondary);
	--color-accent: var(--link-color);
	--color-accent-hover: var(--brand-primary);
	--color-text-primary: var(--articletext-color);
	--color-text-secondary: var(--text-secondary);
	--color-text-muted: var(--text-secondary);
	--color-border: var(--border-color);
	--color-bg-subtle: var(--background);
}

/* Apply color system */
body,
.site {
	color: var(--color-text-primary);
}

h1, h2, h3, h4, h5, h6,
.entry-title,
.page-title {
	color: var(--color-primary);
}

a {
	color: var(--color-accent);
}

a:hover {
	color: var(--color-accent-hover);
}

.button,
button,
input[type="submit"],
.woocommerce #respond input#submit,
.woocommerce a.button,
.woocommerce button.button,
.woocommerce input.button {
	background-color: var(--color-primary);
	border-color: var(--color-primary);
}

.button:hover,
button:hover,
input[type="submit"]:hover,
.woocommerce #respond input#submit:hover,
.woocommerce a.button:hover,
.woocommerce button.button:hover,
.woocommerce input.button:hover {
	background-color: var(--color-primary-dark);
	border-color: var(--color-primary-dark);
}

.site-header {
	background-color: #ffffff;
	border-bottom: 1px solid var(--color-border);
}

/* Custom header layout */
.kiosmerdeka-header-wrapper {
	padding: 0.5em 0;
}

.kiosmerdeka-header-inner {
	display: flex;
	align-items: center;
	justify-content: flex-start;
	gap: 3em; 
}

.kiosmerdeka-header-right {
	display: flex;
	align-items: center;
	gap: 2em;
	margin-left: 4em !important;
}

/* Memaksa logo dan menu agar ukurannya menyesuaikan isi, tidak melar */
.site-header .site-branding,
.site-header .kiosmerdeka-header-right,
.site-header .storefront-primary-navigation {
	width: auto !important;
	flex: 0 0 auto !important;
	float: none !important;
}

/* Logo */
.site-branding {
	margin: 0 !important;
	padding: 0 !important;
}

/* Navigation */
.storefront-primary-navigation {
	background: transparent !important;
	border: none !important;
	margin: 0 !important;
	padding: 0 !important;
}

.storefront-primary-navigation .col-full {
	padding: 0 !important;
}

.main-navigation {
	display: block;
}

.main-navigation .primary-navigation {
	display: block !important;
}

.main-navigation ul.menu {
	display: flex;
	align-items: center;
	gap: 0.25em;
	margin: 0;
}

.main-navigation ul.menu li {
	margin: 0;
}

.main-navigation ul.menu li a {
	padding: 0.75em 1em;
	color: var(--color-text-secondary);
	font-weight: 500;
	transition: all 0.2s ease;
	display: block;
}

.main-navigation ul.menu li a:hover,
.main-navigation ul.menu li.current-menu-item a {
	color: var(--color-primary);
	background: var(--color-bg-subtle);
}

/* Hide menu toggle on desktop */
.menu-toggle {
	display: none;
}

/* Cart */
.site-header-cart {
	margin: 0;
	padding: 0;
	position: relative;
}

.site-header .cart-contents {
	position: relative;
	display: inline-flex;
	align-items: center;
	text-decoration: none;
	padding: 0.75em 1em;
	transition: all 0.2s ease;
}

/* Cart icon */
.site-header .cart-contents i.fas {
	font-size: 20px;
	color: var(--color-text-secondary);
	transition: color 0.2s ease;
}

.site-header .cart-contents:hover i.fas {
	color: var(--color-primary);
}

.site-header .cart-contents:hover {
	background: var(--color-bg-subtle);
}

/* Cart count badge */
.site-header .cart-contents .cart-count-badge {
	position: absolute;
	top: 0;
	right: 0;
	background-color: #ef4444;
	color: #ffffff;
	font-size: 11px;
	font-weight: 600;
	line-height: 1;
	padding: 4px;
	min-width: 18px;
	text-align: center;
	border-radius: 50%;
	box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

/* Hide default amount */
.site-header .cart-contents .amount {
	display: none !important;
}

/* Footer spacing is owned by the .thn-footer rules in the design layer —
   the old `2em !important` here was overriding them and opening a 32px
   gap above the link columns. */

.wa__btn_popup_txt {
	display: none;
}

/* Hide default Storefront cart icon (pseudo-element) */
.site-header .cart-contents:before,
.site-header .cart-contents:after {
	display: none !important;
}

/* Cart dropdown widget */
.site-header-cart .widget_shopping_cart {
	position: absolute;
	top: 100%;
	right: 0 !important;
	left: auto !important;
	min-width: 300px;
	margin-top: 15px;
	z-index: 99999;
	opacity: 0;
	visibility: hidden;
	transition: opacity 0.2s ease, visibility 0.2s ease;
	background-color: #ffffff;
	border-radius: 4px;
	box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
	padding: 15px;
}

/* Invisible Bridge - covers margin-top gap */
.site-header-cart .widget_shopping_cart::before {
	content: "";
	position: absolute;
	top: -15px;
	left: 0;
	right: 0;
	height: 15px;
	background: transparent;
}

/* Show dropdown on hover */
.site-header-cart:hover .widget_shopping_cart,
.site-header-cart .widget_shopping_cart:hover {
	opacity: 1;
	visibility: visible;
}

/* Breadcrumb spacing */
.storefront-breadcrumb,
.woocommerce-breadcrumb {
	margin-bottom: 0.5em !important;
}

/* Reduce storefront-sorting margin */
@media (min-width: 768px) {
	.storefront-sorting {
		margin-bottom: 1em !important;
	}
}

/* ================================================
   Footer Social Media Icons
   ================================================ */

/* Layout footer: copyright kiri, social icons kanan (inline) */
.kiosmerdeka-footer-credit {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 2rem;
	flex-wrap: wrap;
}


/* Logo size */
.site-branding img,
.custom-logo-link img {
	max-height: 45px !important;
	width: auto !important;
	height: auto !important;
}

/* Override browser default focus outline */
a:focus,
a:active {
	outline: none;
}

/* Custom subtle focus style for accessibility */
a:focus-visible {
	outline: 2px solid rgba(44, 45, 51, 0.3);
	outline-offset: 2px;
}

button:focus,
.button:focus,
input:focus,
select:focus,
textarea:focus {
	outline: none;
	box-shadow: 0 0 0 2px rgba(44, 45, 51, 0.1);
}

.site-info {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
}

.kiosmerdeka-social-media {
	flex: 0 0 auto;
	margin-left: auto;
	display: flex;
	align-items: center;
}

/* Remove default widget margins */
.kiosmerdeka-social-media .widget {
	margin: 0;
	padding: 0;
}

/* Social icons styling */
.social-icons {
	display: flex;
	gap: 1rem;
	align-items: center;
}

.social-icons a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: 50%;
	background-color: rgba(0, 0, 0, 0.05);
	color: #333;
	transition: all 0.3s ease;
	text-decoration: none;
}

.social-icons a:hover {
	background-color: var(--color-accent);
	color: #fff;
	transform: translateY(-2px);
}

.social-icons i {
	font-size: 18px;
}

/* Responsive: stack di mobile */
@media (max-width: 768px) {
	.kiosmerdeka-footer-credit {
		flex-direction: column;
		text-align: center;
		gap: 1rem;
	}

	.kiosmerdeka-social-media {
		margin-left: 0;
	}

	.social-icons {
		justify-content: center;
	}
}

/* ================================================
   Blog Grid Layout
   ================================================ */

/* Archive header */
.page-header {
	margin-bottom: 2.617924em;
	padding-bottom: 1.387em;
	border-bottom: 1px solid rgba(0, 0, 0, 0.05);
}

.page-header .page-title {
	margin: 0;
	font-size: 2.618em;
	font-weight: 400;
	color: #2c2d33;
}

/* Grid container */
.kiosmerdeka-blog-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 2.617924em;
	margin-bottom: 2.617924em;
}

/* Post card */
.kiosmerdeka-post-card {
	background: #ffffff;
	border: 1px solid var(--color-border);
	overflow: hidden;
	transition: all 0.2s ease;
	display: flex;
	flex-direction: column;
}

.kiosmerdeka-post-card:hover {
	border-color: var(--color-primary-light);
	box-shadow: 0 4px 12px rgba(15, 23, 42, 0.08);
}

/* Thumbnail */
.post-card-thumbnail {
	position: relative;
	overflow: hidden;
	background: #f8f8f8;
	padding-top: 66.67%; /* 3:2 aspect ratio */
}

.post-card-thumbnail a {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	display: block;
}

.post-card-thumbnail img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: opacity 0.2s ease;
}

.kiosmerdeka-post-card:hover .post-card-thumbnail img {
	opacity: 0.9;
}

/* Content */
.post-card-content {
	padding: 1.387em;
	display: flex;
	flex-direction: column;
	flex-grow: 1;
}

/* Meta */
.post-card-meta {
	display: flex;
	flex-wrap: wrap;
	gap: 1em;
	margin-bottom: 0.875em;
	font-size: 0.857em;
	color: var(--color-text-secondary);
}

.post-card-meta span {
	display: flex;
	align-items: center;
	gap: 0.4em;
}

.post-card-meta a {
	color: inherit;
	text-decoration: none;
	transition: color 0.2s ease;
}

.post-card-meta a:hover {
	color: var(--color-primary);
}

/* Title */
.post-card-content .entry-header {
	margin: 0;
	padding: 0;
	border: none;
}

.post-card-content .entry-title {
	margin: 0;
	font-size: 1.387em;
	line-height: 1.4;
	font-weight: 600;
}

.post-card-content .entry-title a {
	color: var(--color-primary);
	text-decoration: none;
	transition: color 0.2s ease;
}

.post-card-content .entry-title a:hover {
	color: var(--color-accent);
}

.post-card-content .entry-header {
	padding-bottom: 1em;
}

/* Stats footer (views + comments) */
.post-card-stats {
	display: flex;
	gap: 1.2em;
	margin-top: auto;
	padding-top: 0.6em;
	border-top: 1px solid rgba(0, 0, 0, 0.08);
	font-size: 0.857em;
	color: var(--color-text-secondary);
}

.stat-item {
	display: inline-flex;
	align-items: center;
	gap: 0.4em;
	color: inherit;
	text-decoration: none;
	transition: color 0.2s ease;
}

.stat-item i {
	color: #919191;
	font-size: 1em;
	line-height: 1;
}

.stat-item:hover {
	color: var(--color-primary);
}

.stat-item:hover i {
	color: var(--color-primary);
}

.stat-label {
	font-size: 0.857em;
	color: inherit;
	opacity: 0.7;
}

/* Full width content area for homepage template */
.page-template-template-homepage .content-area {
	width: 100%;
	max-width: 100%;
	margin: 0;
}

/* Full width content area for archive pages */
.blog .content-area,
.archive .content-area,
.search .content-area,
.page-template-template-blog .content-area,
.woocommerce-shop .content-area,
.tax-product_cat .content-area,
.single-product .content-area,
.woocommerce-cart .content-area,
.woocommerce-checkout .content-area,
.woocommerce-order-received .content-area,
.woocommerce-account .content-area {
	width: 100%;
	max-width: 100%;
	margin: 0;
}

/* ================================================
   WooCommerce Shop Layout
   ================================================ */

/* Hide default sidebar on shop pages */
.woocommerce-shop .storefront-sidebar,
.tax-product_cat .storefront-sidebar {
	display: none;
}

/* Category Navigation Bar */
.kiosmerdeka-category-bar {
	background-color: #f0f0f0;
	border-bottom: 1px solid rgba(0, 0, 0, 0.05);
	padding: 1em 0;
	margin-bottom: 2.617924em;
}

.category-bar-inner {
	display: flex;
	gap: 0.5em;
	align-items: center;
	overflow-x: auto;
	scrollbar-width: thin;
	-webkit-overflow-scrolling: touch;
}

.category-bar-inner::-webkit-scrollbar {
	height: 4px;
}

.category-bar-inner::-webkit-scrollbar-track {
	background: transparent;
}

.category-bar-inner::-webkit-scrollbar-thumb {
	background: rgba(0, 0, 0, 0.2);
	border-radius: 4px;
}

.category-item {
	display: inline-flex;
	align-items: center;
	gap: 0.5em;
	padding: 0.6em 1.2em;
	background-color: transparent;
	border: 0;
	color: var(--color-text-secondary);
	text-decoration: none !important;
	font-weight: 400;
	white-space: nowrap;
	transition: all 0.2s ease;
	font-size: 0.875em;
}

.category-item:hover {
	background-color: var(--color-bg-subtle);
	color: var(--color-primary);
}

.category-item.active {
	background-color: var(--color-primary);
	color: #fff;
	font-weight: 600;
}

.category-item .count {
	font-size: 0.875em;
	opacity: 0.7;
}

/* Filter Bar */
.kiosmerdeka-filter-bar {
	margin-bottom: 2.617924em;
	padding-bottom: 1em;
	border-bottom: 1px solid var(--color-border);
}

.filter-bar-inner {
	display: flex;
	justify-content: flex-end;
	align-items: center;
	gap: 1em;
	flex-wrap: wrap;
}

.filter-controls {
	display: flex;
	align-items: center;
	gap: 1em;
	flex-wrap: wrap;
}

/* Style untuk sort dropdown */
.woocommerce .woocommerce-ordering select.orderby {
	padding: 0.6em 2.5em 0.6em 1em;
	border: 1px solid rgba(0, 0, 0, 0.1);
	border-radius: 0;
	background-color: #fff;
	font-size: 1em;
	color: #2c2d33;
	cursor: pointer;
	appearance: none;
	background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23555%22%2F%3E%3C%2Fsvg%3E');
	background-repeat: no-repeat;
	background-position: right 0.7em top 50%;
	background-size: 1em auto;
}

.woocommerce .woocommerce-ordering select.orderby:hover,
.woocommerce .woocommerce-ordering select.orderby:focus {
	border-color: #2c2d33;
	outline: none;
}

/* ================================================
   WooCommerce Product Cards
   ================================================ */

/* Product card styling lives in the shop section of the design layer —
   see "17. Shop" near the end of this file. */

/* ================================================
   WooCommerce Cart, Checkout, Order Pages
   ================================================ */

/* Cart table */
.woocommerce table.cart,
.woocommerce-cart-form__contents {
	border-color: var(--color-border);
}

.woocommerce table.cart th,
.woocommerce-cart-form__contents th {
	color: var(--color-primary);
	font-weight: 600;
}

.woocommerce table.cart td,
.woocommerce-cart-form__contents td {
	border-color: var(--color-border);
}

/* Cart totals */
.cart_totals h2,
.woocommerce-checkout h3 {
	color: var(--color-primary);
}

/* Checkout form */
.woocommerce-checkout .form-row label {
	color: var(--color-primary);
}

.woocommerce-checkout input.input-text,
.woocommerce-checkout select,
.woocommerce-checkout textarea {
	border-color: var(--color-border);
	transition: border-color 0.2s ease;
}

.woocommerce-checkout input.input-text:focus,
.woocommerce-checkout select:focus,
.woocommerce-checkout textarea:focus {
	border-color: var(--color-primary);
	outline: none;
}

/* Order details */
.woocommerce-order-details,
.woocommerce-customer-details {
	border-color: var(--color-border);
}

.woocommerce-order-details__title,
.woocommerce-column__title {
	color: var(--color-primary);
}

/* Order received message */
.woocommerce-notice--success {
	border-top-color: var(--color-accent);
}

/* Responsive Design */
@media (max-width: 768px) {
	/* Show menu toggle on mobile */
	.menu-toggle {
		display: block !important;
	}

	/* Stack header on mobile */
	.site-header .col-full {
		flex-direction: column;
		gap: 1em;
	}

	.storefront-primary-navigation .col-full {
		flex-direction: column;
		align-items: stretch;
	}

	/* Hide menu by default on mobile */
	.main-navigation .primary-navigation {
		display: none !important;
	}

	.main-navigation .primary-navigation.toggled {
		display: block !important;
	}

	.main-navigation ul.menu {
		flex-direction: column;
		gap: 0;
	}

	.main-navigation ul.menu li {
		width: 100%;
	}

	.main-navigation ul.menu li a {
		display: block;
		padding: 1em;
		border-bottom: 1px solid var(--color-border);
	}

	.kiosmerdeka-category-bar {
		padding: 0.75em 0;
	}

	.category-item {
		padding: 0.5em 1em;
		font-size: 0.8em;
	}

	.filter-bar-inner {
		flex-direction: column;
		align-items: stretch;
	}

	.filter-search {
		max-width: 100%;
	}

	.filter-controls {
		justify-content: space-between;
	}
}

/* Two columns stay readable down to ~360px; only very narrow phones
   fall back to a single column. The column count itself is defined in
   the shop section at the end of this file. */
@media (max-width: 359px) {
	.woocommerce ul.products {
		grid-template-columns: 1fr;
	}
}

/* Responsive */
@media (max-width: 1024px) {
	.kiosmerdeka-blog-grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (max-width: 768px) {
	.kiosmerdeka-blog-grid {
		grid-template-columns: 1fr;
		gap: 1.5rem;
	}

	.page-header .page-title {
		font-size: 2rem;
	}

	.post-card-content {
		padding: 1.25rem;
	}

	.post-card-content .entry-title {
		font-size: 1.25rem;
	}
}

/* ================================================
   Featured Products Carousel
   ================================================ */

.kiosmerdeka-featured-carousel {
	margin: 3em 0;
	padding: 2em 0;
}

.carousel-header {
	text-align: center;
	margin-bottom: 2em;
}

.carousel-title {
	color: var(--color-primary);
	font-size: 2em;
	font-weight: 600;
	margin: 0;
}

/* Swiper container */
.featured-swiper {
	position: relative;
	padding: 0 3em 3em;
}

/* Product card */
.product-card {
	display: block;
	background: #ffffff;
	border: 1px solid var(--color-border);
	overflow: hidden;
	transition: all 0.3s ease;
	text-decoration: none;
	height: 100%;
	display: flex;
	flex-direction: column;
}

.product-card:hover {
	border-color: var(--color-primary-light);
	box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);
	transform: translateY(-4px);
}

/* Product image */
.product-image {
	position: relative;
	overflow: hidden;
	background: #f8f8f8;
	padding-top: 100%; /* 1:1 square ratio */
}

.product-image img {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: opacity 0.3s ease;
}

.product-card:hover .product-image img {
	opacity: 0.9;
}

/* Product info */
.product-info {
	padding: 1em;
	display: flex;
	flex-direction: column;
	gap: 0.5em;
}

.product-title {
	color: var(--color-primary);
	font-size: 1em;
	font-weight: 600;
	margin: 0;
	line-height: 1.4;
	overflow: hidden;
	text-overflow: ellipsis;
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
}

.product-price {
	color: var(--color-text-primary);
	font-size: 1.1em;
	font-weight: 700;
}

.product-price del {
	color: var(--color-text-muted);
	font-weight: 400;
	opacity: 0.7;
}

/* Swiper navigation buttons */
.featured-swiper .swiper-button-prev,
.featured-swiper .swiper-button-next {
	background: var(--color-primary);
	width: 44px;
	height: 44px;
	border-radius: 50%;
	color: #ffffff;
	transition: all 0.2s ease;
}

.featured-swiper .swiper-button-prev:after,
.featured-swiper .swiper-button-next:after {
	font-size: 20px;
	font-weight: 700;
}

.featured-swiper .swiper-button-prev:hover,
.featured-swiper .swiper-button-next:hover {
	background: var(--color-primary-dark);
	transform: scale(1.1);
}

/* Swiper pagination */
.featured-swiper .swiper-pagination {
	bottom: 0;
}

.featured-swiper .swiper-pagination-bullet {
	background: var(--color-primary);
	opacity: 0.3;
	width: 10px;
	height: 10px;
	transition: all 0.2s ease;
}

.featured-swiper .swiper-pagination-bullet-active {
	opacity: 1;
	width: 30px;
	border-radius: 5px;
}

/* Responsive adjustments */
@media (max-width: 768px) {
	.featured-swiper {
		padding: 0 2.5em 2.5em;
	}

	.carousel-title {
		font-size: 1.5em;
	}

	.featured-swiper .swiper-button-prev,
	.featured-swiper .swiper-button-next {
		width: 36px;
		height: 36px;
	}

	.featured-swiper .swiper-button-prev:after,
	.featured-swiper .swiper-button-next:after {
		font-size: 16px;
	}
}

/* Cart actions padding top */
.woocommerce-cart-form .actions {
	padding-top: 2em !important;
}

/* Cart/Checkout page title match blog style */
.woocommerce-cart .entry-header,
.woocommerce-checkout .entry-header {
	margin-bottom: 2em !important;
}

.woocommerce-cart .entry-header .entry-title,
.woocommerce-checkout .entry-header .entry-title {
	margin: 0;
	font-size: 2.618em;
	font-weight: 400;
	color: #2c2d33;
}

.single-product div.product .product_meta {
	margin-top: 1em;
}

/* ==========================================================================
   Single Post: php-scripts category
   GPL disclaimer + article source badge
   ========================================================================== */

/* Full width of the story column — no measure cap. */
.kiosmerdeka-gpl-disclaimer {
	display: block;
	width: 100%;
	max-width: none;
	margin: 1.5em 0 2.5em;
	padding: 0;
	background-color: #e7f5ff;
	border: 1px solid #b3dfff;
	border-left: 4px solid var(--color-accent);
	border-radius: 0.327em;
	overflow: hidden;
}

.kiosmerdeka-gpl-disclaimer__header {
	display: flex;
	align-items: center;
	gap: 0.45em;
	padding: 0.55em 0.85em;
	background-color: var(--color-accent);
	color: #fff;
}

.kiosmerdeka-gpl-disclaimer__icon {
	flex-shrink: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-size: 1.05em;
	line-height: 1;
}

.kiosmerdeka-gpl-disclaimer__title {
	margin: 0;
	font-size: 0.95em;
	font-weight: 700;
	color: #fff;
	letter-spacing: 0.03em;
	text-transform: uppercase;
	line-height: 1;
}

.kiosmerdeka-gpl-disclaimer__text {
	margin: 0;
	padding: 0.75em 0.85em;
	font-size: 0.9em;
	line-height: 1.6;
	color: #0c4a6e;
	font-style: italic;
}

/* Article Source Badge */
.kiosmerdeka-article-source {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 0.6em;
	margin: 2.5em 0 1.5em;
	padding-top: 1.5em;
	border-top: 1px solid var(--color-border);
}

.kiosmerdeka-article-source__label {
	font-size: 0.875em;
	font-weight: 600;
	color: var(--color-text-secondary);
	letter-spacing: 0.03em;
	text-transform: uppercase;
}

.kiosmerdeka-article-source__badge {
	display: inline-flex;
	align-items: center;
	gap: 0.5em;
	padding: 0.55em 1.2em;
	background-color: var(--color-primary);
	color: #fff;
	font-size: 0.9em;
	font-weight: 600;
	text-decoration: none;
	border-radius: 0.327em;
	transition: background-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease;
	box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}

.kiosmerdeka-article-source__badge:hover,
.kiosmerdeka-article-source__badge:focus {
	background-color: var(--color-primary-dark);
	color: #fff;
	transform: translateY(-1px);
	box-shadow: 0 4px 10px rgba(15, 23, 42, 0.12);
}

.kiosmerdeka-article-source__icon {
	font-size: 0.85em;
	line-height: 1;
}

.kiosmerdeka-article-source__text {
	line-height: 1;
}

/* Mobile responsiveness */
@media (max-width: 768px) {
	.kiosmerdeka-gpl-disclaimer {
		margin: 1em 0 2em;
	}

	.kiosmerdeka-gpl-disclaimer__header {
		padding: 0.5em 0.8em;
	}

	.kiosmerdeka-gpl-disclaimer__title {
		font-size: 0.85em;
	}

	.kiosmerdeka-gpl-disclaimer__text {
		padding: 0.7em 0.8em;
		font-size: 0.85em;
	}

	.kiosmerdeka-article-source {
		margin: 2em 0 1em;
		padding-top: 1em;
	}
}

/* Small mobile - align with Storefront 568px breakpoint */
@media (max-width: 568px) {
	.kiosmerdeka-gpl-disclaimer {
		margin: 0.75em 0 1.5em;
		border-left-width: 4px;
	}

	.kiosmerdeka-gpl-disclaimer__header {
		padding: 0.55em 0.85em;
		gap: 0.4em;
	}

	.kiosmerdeka-gpl-disclaimer__icon {
		font-size: 0.95em;
	}

	.kiosmerdeka-gpl-disclaimer__title {
		font-size: 0.8em;
		letter-spacing: 0.02em;
	}

	.kiosmerdeka-gpl-disclaimer__text {
		padding: 0.75em 0.85em;
		font-size: 0.8em;
		line-height: 1.55;
	}

	.kiosmerdeka-article-source {
		flex-direction: column;
		align-items: flex-start;
		gap: 0.5em;
		margin: 1.5em 0 0.75em;
		padding-top: 0.85em;
	}

	.kiosmerdeka-article-source__label {
		font-size: 0.8em;
	}

	.kiosmerdeka-article-source__badge {
		padding: 0.5em 1em;
		font-size: 0.85em;
	}
}

/* ==========================================================================
   Single Product: gratisan category disclaimer
   Green variant of the GPL disclaimer, rendered full-width below the
   woocommerce-notices-wrapper.
   ========================================================================== */

.kiosmerdeka-gratisan-disclaimer {
	background-color: #ecfdf5;
	border: 1px solid #a7f3d0;
	border-left: 5px solid #10b981;
}

.kiosmerdeka-gratisan-disclaimer .kiosmerdeka-gpl-disclaimer__header {
	background-color: #10b981;
}

.kiosmerdeka-gratisan-disclaimer .kiosmerdeka-gpl-disclaimer__text {
	color: #064e3b;
}

/* ==========================================================================
   AI Prompts category: [prompt] shortcode box
   ========================================================================== */

.kiosmerdeka-prompt-box {
	margin: 2em 0;
	background-color: var(--color-bg-subtle);
	border: 1px solid var(--color-border);
	border-radius: 0.327em;
	overflow: hidden;
}

.kiosmerdeka-prompt-box__header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1em;
	padding: 0.65em 1em;
	background-color: var(--color-primary);
	color: #fff;
}

.kiosmerdeka-prompt-box__label {
	display: inline-flex;
	align-items: center;
	gap: 0.5em;
	font-size: 0.85em;
	font-weight: 700;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	line-height: 1;
}

.kiosmerdeka-prompt-box__label i {
	font-size: 1em;
	color: var(--color-accent);
}

.kiosmerdeka-prompt-box__copy {
	display: inline-flex;
	align-items: center;
	gap: 0.4em;
	padding: 0.4em 0.9em;
	font-size: 0.8em;
	font-weight: 600;
	color: var(--color-primary);
	background-color: #fff;
	border: 1px solid var(--color-border);
	border-radius: 0.25em;
	cursor: pointer;
	transition: background-color 0.2s ease, color 0.2s ease, transform 0.15s ease;
	line-height: 1;
}

.kiosmerdeka-prompt-box__copy:hover,
.kiosmerdeka-prompt-box__copy:focus {
	background-color: var(--color-accent);
	color: #fff;
	border-color: var(--color-accent);
	transform: translateY(-1px);
}

.kiosmerdeka-prompt-box__copy.is-copied {
	background-color: var(--color-accent);
	color: #fff;
	border-color: var(--color-accent);
}

.kiosmerdeka-prompt-box__copy i {
	font-size: 0.95em;
	line-height: 1;
}

.kiosmerdeka-prompt-box__text {
	margin: 0;
	padding: 1em 1.25em;
	font-family: 'Courier New', Consolas, Monaco, monospace;
	font-size: 0.9em;
	line-height: 1.6;
	color: var(--color-text-primary);
	white-space: pre-wrap;
	word-wrap: break-word;
	overflow-wrap: break-word;
	background-color: #fff;
}

/* Mobile responsiveness for prompt box */
@media (max-width: 768px) {
	.kiosmerdeka-prompt-box {
		margin: 1.5em 0;
	}

	.kiosmerdeka-prompt-box__header {
		padding: 0.55em 0.85em;
	}

	.kiosmerdeka-prompt-box__text {
		padding: 0.85em 1em;
		font-size: 0.85em;
	}
}

@media (max-width: 568px) {
	.kiosmerdeka-prompt-box {
		margin: 1.25em 0;
	}

	.kiosmerdeka-prompt-box__header {
		padding: 0.5em 0.75em;
		gap: 0.6em;
	}

	.kiosmerdeka-prompt-box__label {
		font-size: 0.75em;
	}

	.kiosmerdeka-prompt-box__copy {
		padding: 0.35em 0.75em;
		font-size: 0.75em;
	}

	.kiosmerdeka-prompt-box__text {
		padding: 0.75em;
		font-size: 0.8em;
		line-height: 1.5;
	}
}

/* ==========================================================================
   AdBlock Detector Modal
   ========================================================================== */

.kiosmerdeka-adblock-overlay {
	position: fixed;
	inset: 0;
	z-index: 99999;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 1.5em;
	background-color: rgba(15, 23, 42, 0);
	opacity: 0;
	transition: opacity 0.25s ease, background-color 0.25s ease;
}

.kiosmerdeka-adblock-overlay.is-visible {
	opacity: 1;
	background-color: rgba(15, 23, 42, 0.65);
	backdrop-filter: blur(2px);
	-webkit-backdrop-filter: blur(2px);
}

.kiosmerdeka-adblock-modal {
	position: relative;
	width: 100%;
	max-width: 480px;
	padding: 2.25em 2em 1.75em;
	background-color: #fff;
	border-radius: 0.618em;
	box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.35);
	transform: translateY(20px) scale(0.98);
	transition: transform 0.25s ease;
	font-family: inherit;
	color: var(--color-text-primary, #1e293b);
}

.kiosmerdeka-adblock-overlay.is-visible .kiosmerdeka-adblock-modal {
	transform: translateY(0) scale(1);
}

.kiosmerdeka-adblock-close {
	position: absolute;
	top: 0.75em;
	right: 0.75em;
	width: 2em;
	height: 2em;
	padding: 0;
	border: none;
	background-color: transparent;
	font-size: 1.5em;
	line-height: 1;
	color: var(--color-text-secondary, #475569);
	cursor: pointer;
	border-radius: 50%;
	transition: background-color 0.2s ease, color 0.2s ease;
}

.kiosmerdeka-adblock-close:hover,
.kiosmerdeka-adblock-close:focus {
	background-color: var(--color-bg-subtle, #f8fafc);
	color: var(--color-primary, #1e293b);
}

.kiosmerdeka-adblock-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 3.5em;
	height: 3.5em;
	margin: 0 auto 1em;
	font-size: 1.6em;
	color: #fff;
	background-color: var(--color-accent, #0ea5e9);
	border-radius: 50%;
}

.kiosmerdeka-adblock-title {
	margin: 0 0 0.75em;
	font-size: 1.5em;
	font-weight: 700;
	text-align: center;
	color: var(--color-primary, #1e293b);
}

.kiosmerdeka-adblock-text {
	margin: 0 0 1em;
	font-size: 0.95em;
	line-height: 1.65;
	color: var(--color-text-secondary, #475569);
	text-align: center;
}

.kiosmerdeka-adblock-text strong {
	color: var(--color-primary, #1e293b);
}

.kiosmerdeka-adblock-actions {
	display: flex;
	flex-direction: column;
	gap: 0.6em;
	margin-top: 1.5em;
}

.kiosmerdeka-adblock-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 0.5em;
	padding: 0.75em 1.25em;
	font-size: 0.95em;
	font-weight: 600;
	font-family: inherit;
	border: 1px solid transparent;
	border-radius: 0.327em;
	cursor: pointer;
	transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, transform 0.15s ease;
	line-height: 1.3;
}

.kiosmerdeka-adblock-btn:hover,
.kiosmerdeka-adblock-btn:focus {
	transform: translateY(-1px);
}

.kiosmerdeka-adblock-btn--primary {
	background-color: var(--color-primary, #1e293b);
	color: #fff;
}

.kiosmerdeka-adblock-btn--primary:hover,
.kiosmerdeka-adblock-btn--primary:focus {
	background-color: var(--color-primary-dark, #0f172a);
	color: #fff;
}

.kiosmerdeka-adblock-btn--secondary {
	background-color: transparent;
	color: var(--color-text-secondary, #475569);
	border-color: var(--color-border, #e2e8f0);
}

.kiosmerdeka-adblock-btn--secondary:hover,
.kiosmerdeka-adblock-btn--secondary:focus {
	background-color: var(--color-bg-subtle, #f8fafc);
	color: var(--color-primary, #1e293b);
	border-color: var(--color-primary, #1e293b);
}

/* Mobile */
@media (max-width: 568px) {
	.kiosmerdeka-adblock-modal {
		padding: 2em 1.25em 1.25em;
	}

	.kiosmerdeka-adblock-icon {
		width: 3em;
		height: 3em;
		font-size: 1.4em;
	}

	.kiosmerdeka-adblock-title {
		font-size: 1.3em;
	}

	.kiosmerdeka-adblock-text {
		font-size: 0.9em;
	}

	.kiosmerdeka-adblock-btn {
		padding: 0.7em 1em;
		font-size: 0.9em;
	}
}


/* ═══════════════════════════════════════════════════════════════════
   DESIGN LAYER — layout language of thehackernews.com
   -------------------------------------------------------------------
   brand-gradient masthead → white menu bar → 766px feed with a
   34.51 / 65.49 thumbnail split → flat footer.

   Breakpoints mirror the reference: 350 / 600 / 768 / 889 / 1220.
   Every value reads from the tokens declared in :root.
   ═══════════════════════════════════════════════════════════════════ */


/* ── 1. Base ────────────────────────────────────────────────────── */

body,
html {
	font-family: "Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
	/* The reference fades a pale tint across the viewport rather than
	   painting a flat colour: white at both edges, #F4F6FB through the
	   middle. It only shows outside the white content column. */
	background: linear-gradient(90deg, #fff 0%, var(--background) 35%, #f5f7fb 65%, #fff 100%);
	color: var(--articletext-color);
	-webkit-tap-highlight-color: transparent;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

* {
	-webkit-font-feature-settings: "kern";
	font-feature-settings: "kern";
}

::-moz-selection {
	background: var(--highlight);
	color: var(--text-heading);
}
::selection {
	background: var(--highlight);
	color: var(--text-heading);
}

/* Slim themed scrollbar */
html {
	scrollbar-width: thin;
	scrollbar-color: #e0e0f0 var(--surface);
}
html::-webkit-scrollbar {
	width: 15px;
}
html::-webkit-scrollbar-track {
	background: var(--surface);
}
html::-webkit-scrollbar-thumb {
	background: #e0e0f0;
	border-radius: 15px;
	border: 2px solid var(--surface);
}

b,
strong {
	font-weight: 600;
}

img {
	transition: transform .3s ease;
}

/* Storefront ships a 1064px column; the reference shell is 1152px.
   Keeping .col-full means every stock template inherits the new shell. */
/* The shell must line up with the masthead and footer, which are both
   `max-width: 1152px; padding: 0 24px`. Storefront instead gives .col-full
   side *margins* (~22.65px) plus padding, so content sat 23px to the right
   of the logo on every page where that margin survived. Normalise it once
   here: no side margins, full width, border-box, same gutter as the header. */
.col-full {
	max-width: var(--shell-max);
	width: 100%;
	box-sizing: border-box;
	margin-left: auto;
	margin-right: auto;
	padding-left: var(--gutter);
	padding-right: var(--gutter);
}

@media only screen and (min-width: 768px) {
	.col-full {
		padding-left: var(--gutter-lg);
		padding-right: var(--gutter-lg);
	}
}

/* On the blog and article templates the gutter is owned by .main-box /
   .main-left-right, so .col-full must not add a second one. */
.home .col-full,
.blog .col-full,
.archive:not(.post-type-archive-product):not(.tax-product_cat):not(.tax-product_tag) .col-full,
.search .col-full,
.single-post .col-full,
.page-template-template-static-page .col-full {
	padding-left: 0;
	padding-right: 0;
}

/* The breadcrumb is a direct child of .col-full, so zeroing that gutter
   left it flush against the viewport edge while the heading and cards
   start 24px in. Give it the same gutter back. */
.home .woocommerce-breadcrumb,
.blog .woocommerce-breadcrumb,
.archive:not(.post-type-archive-product):not(.tax-product_cat):not(.tax-product_tag) .woocommerce-breadcrumb,
.search .woocommerce-breadcrumb,
.single-post .woocommerce-breadcrumb,
.page-template-template-static-page .woocommerce-breadcrumb {
	padding-left: var(--gutter);
	padding-right: var(--gutter);
}

/* Reference `.main` carries `padding: 32px 0 0` at ≥768px — that is what
   separates the menu bar from the first story. Storefront zeroes it out,
   so the feed ended up flush against the menu. */
.site-content {
	background: var(--surface);
	padding: 24px 0 0;
	/* The full-bleed bands inside use 100vw, which includes the scrollbar
	   width; clip keeps that overshoot from creating a horizontal
	   scrollbar. `clip` (not `hidden`) avoids making a scroll container,
	   so sticky positioning inside still works. */
	overflow-x: clip;
}

@media only screen and (min-width: 768px) {
	.site-content {
		padding: 32px 0 0;
	}
}

a,
a:visited {
	color: var(--link-color);
	text-decoration: none;
	transition: opacity .2s ease-in-out, color .2s ease-in-out;
}

a:hover,
a:focus {
	color: var(--brand-primary);
}

/* Reference uses a 4px radius on every media/panel corner. */
.home-img img,
.post-card-thumbnail img,
.woocommerce ul.products li.product img,
.separator img {
	border-radius: 4px;
}

@media (prefers-reduced-motion: reduce) {
	*,
	*::before,
	*::after {
		animation-duration: .01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: .01ms !important;
		scroll-behavior: auto !important;
	}
}


/* ── 2. Top bar (social) ────────────────────────────────────────── */

.thn-topbar {
	background: var(--brand-dark);
	font-size: 12px;
}

.thn-topbar-inner {
	max-width: var(--shell-max);
	margin: 0 auto;
	padding: 0 var(--gutter);
	display: flex;
	align-items: center;
	justify-content: space-between;
	min-height: 32px;
}

.thn-topbar-follow {
	display: none;
	color: var(--text-on-brand);
	white-space: nowrap;
	/* The slogan was removed, so this is now the bar's only child —
	   margin-left pushes it to the right edge. */
	margin-left: auto;
}

.thn-topbar-follow a {
	color: var(--text-on-brand);
	padding: 0 5px;
	display: inline-block;
}

.thn-topbar-follow a:last-child {
	padding-right: 0;
}

.thn-topbar-follow a:hover {
	color: var(--surface);
}

/* The Social Media widget ships 36px grey circles meant for the footer.
   On the brand gradient the bar needs small, flat, on-brand glyphs, so
   these selectors out-specify `.social-icons a`. */
.thn-topbar-follow .social-icons {
	display: flex;
	align-items: center;
	gap: 2px;
}

.thn-topbar-follow .social-icons a,
.thn-topbar-follow a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: auto;
	height: auto;
	border-radius: 0;
	background: none;
	color: var(--text-on-brand);
	font-size: 14px;
	transform: none;
}

.thn-topbar-follow .social-icons a:hover,
.thn-topbar-follow a:hover {
	background: none;
	color: var(--surface);
	transform: none;
}

.thn-topbar-follow .social-icons i,
.thn-topbar-follow i {
	font-size: 14px;
}

@media only screen and (min-width: 350px) {
	.thn-topbar-follow { display: block; }
}

@media only screen and (min-width: 768px) {
	.thn-topbar-inner { padding: 0 var(--gutter-lg); }
	.thn-topbar { font-size: 13px; }
	.thn-topbar-follow a { padding: 0 8px; }
}


/* ── 3. Masthead ────────────────────────────────────────────────── */

/* Storefront pads the masthead and hangs a 4.2em gap under it on the blog
   home; the reference has neither. The extra selectors match its
   specificity so these resets actually land. */
.site-header,
.home.blog .site-header,
.home.page:not(.page-template-template-homepage) .site-header,
.no-wc-breadcrumb .site-header {
	background: var(--brand-dark);
	background: linear-gradient(45deg, var(--brand-dark) 10%, var(--brand-primary) 35%, var(--brand-dark) 90%);
	border: 0;
	margin: 0;
	padding: 0;
}

.thn-masthead {
	max-width: var(--shell-max);
	margin: 0 auto;
	padding: 0 var(--gutter);
	display: flex;
	align-items: center;
	justify-content: space-between;
	min-height: 60px;
}

.thn-logo {
	display: inline-flex;
	align-items: baseline;
	gap: 7px;
	line-height: 1;
	text-decoration: none;
}

.thn-logo:hover .thn-logo-main {
	color: var(--surface);
}

.thn-logo-the {
	font-size: 17px;
	font-weight: 300;
	color: var(--text-on-brand);
	letter-spacing: .4px;
}

.thn-logo-main {
	font-size: 26px;
	font-weight: 900;
	color: var(--surface);
	letter-spacing: -.4px;
	text-transform: uppercase;
}

/* Matches Storefront's `.site-header .custom-logo-link img` so an uploaded
   logo is not stretched to its 210px max-width. */
.thn-logo img,
.custom-logo-link img,
.site-header .custom-logo-link img,
.site-header .site-logo-link img {
	max-height: 40px;
	max-width: 260px;
	width: auto;
	height: auto;
	border-radius: 0;
}

.thn-masthead-actions {
	display: flex;
	align-items: center;
	gap: 14px;
}

.thn-masthead-actions a,
.thn-masthead-actions button {
	background: none;
	border: 0;
	padding: 0;
	color: var(--surface);
	font-size: 19px;
	line-height: 1;
	cursor: pointer;
	transition: opacity .1s ease-in-out;
}

.thn-masthead-actions a:hover,
.thn-masthead-actions button:hover {
	opacity: .75;
	color: var(--surface);
}

@media only screen and (min-width: 600px) {
	.thn-masthead { min-height: 66px; }
	.thn-logo-the { font-size: 19px; }
	.thn-logo-main { font-size: 30px; }
}

@media only screen and (min-width: 768px) {
	.thn-masthead {
		padding: 0 var(--gutter-lg);
		min-height: 72px;
	}
	/* Desktop menu lives in the bar below, so the masthead icons go away. */
	.thn-masthead-actions { display: none; }
}


/* ── 4. Menu bar ────────────────────────────────────────────────── */

.thn-menu {
	background: var(--surface);
	font-size: 14px;
	color: var(--text-secondary);
	border-bottom: 1px solid var(--border-color);
	box-shadow: var(--shadow-menu);
	min-height: 46px;
}

/* Same shell and gutter as .thn-masthead and .col-full, so the first menu
   item lines up with the logo and with the content below. Previously the
   alignment was faked with a padding-left on the first <li>, which broke
   as soon as the gutter changed. */
.thn-menu-inner {
	max-width: var(--shell-max);
	margin: 0 auto;
	padding: 0 var(--gutter);
}

@media only screen and (min-width: 768px) {
	.thn-menu-inner {
		padding: 0 var(--gutter-lg);
	}
}

.thn-menu-list {
	list-style: none;
	margin: 0;
	padding: 0;
	float: left;
}

.thn-menu-list li {
	float: left;
	position: relative;
	letter-spacing: .3px;
	border-bottom: 4px solid transparent;
	transition: border-color .1s ease-in-out;
	white-space: nowrap;
	line-height: 46px;
	height: 46px;
	padding: 0 20px;
}

/* The gutter now lives on .thn-menu-inner, so the first item needs none. */
.thn-menu-list li:first-child {
	padding-left: 0;
}

.thn-menu-list li:hover,
.thn-menu-list li.current-menu-item,
.thn-menu-list li.current-menu-ancestor,
.thn-menu-list li.current_page_item {
	border-bottom-color: var(--brand-primary);
}

.thn-menu-list li a {
	color: var(--text-secondary);
	display: inline-block;
	font-weight: 500;
	text-decoration: none;
}

.thn-menu-list li a:hover {
	color: var(--brand-primary);
}

/* Dropdowns */
.thn-menu-list ul.sub-menu {
	position: absolute;
	top: 46px;
	left: 0;
	min-width: 210px;
	background: var(--surface);
	border: 1px solid var(--border-color);
	box-shadow: 0 8px 20px rgba(59, 53, 174, .10);
	list-style: none;
	margin: 0;
	padding: 6px 0;
	z-index: 50;
	display: none;
}

.thn-menu-list li:hover > ul.sub-menu,
.thn-menu-list li:focus-within > ul.sub-menu {
	display: block;
}

.thn-menu-list ul.sub-menu li {
	float: none;
	height: auto;
	line-height: 1.4;
	padding: 0;
	border: 0;
}

.thn-menu-list ul.sub-menu li a {
	display: block;
	padding: 9px 18px;
	font-weight: 400;
}

.thn-menu-list ul.sub-menu li a:hover {
	background: var(--background);
}

.thn-menu-more {
	float: right;
	line-height: 46px;
	height: 46px;
	/* Right gutter comes from .thn-menu-inner now. */
	padding: 0 0 0 25px;
}

.thn-menu-more button {
	background: none;
	border: 0;
	padding: 0;
	cursor: pointer;
	color: var(--text-secondary);
	line-height: inherit;
}

.thn-menu-more i {
	margin-left: 10px;
	font-size: 18px;
	color: var(--text-secondary);
}

.thn-menu-more:hover i {
	color: var(--brand-primary);
}

@media only screen and (min-width: 768px) {
	.thn-menu-more { padding-right: 0; }
}


/* ── 5. Slide-down search ───────────────────────────────────────── */

.thn-search-box {
	background: var(--surface-muted);
	display: none;
	border-bottom: 1px solid var(--border-color);
}

.thn-search-box.is-open {
	display: block;
}

.thn-search-inner {
	max-width: var(--shell-max);
	margin: 0 auto;
	padding: 16px var(--gutter-lg) 20px;
}

.thn-search-inner input[type="search"] {
	width: 100%;
	border: 2px solid var(--border-color);
	outline: 0;
	background: var(--surface);
	padding: 10px 12px;
	border-radius: 4px;
	color: var(--text-secondary);
	font-size: 14px;
}

.thn-search-inner input[type="search"]:focus {
	border-color: var(--brand-primary);
}

.thn-search-inner ::-webkit-input-placeholder { color: var(--text-secondary); }
.thn-search-inner ::placeholder { color: var(--text-secondary); }


/* ── 6. Feed layout ─────────────────────────────────────────────── */

/* Reference .main-box: 766px on phones, 1152px from 768px up. */
.main-box {
	max-width: 766px;
	margin: 0 auto;
}

@media only screen and (min-width: 768px) {
	.main-box {
		max-width: var(--shell-max);
	}
}

.main-left-right {
	padding: 0 var(--gutter);
	position: relative;
}

.left-box {
	width: 100%;
	float: none;
	margin: 0 auto;
	padding: 0;
}

.rightbx {
	width: 100%;
	float: none;
	padding: 15px 0;
	position: relative;
	display: none;
}

@media only screen and (min-width: 768px) {
	.main-left-right { padding: 0 var(--gutter-lg); }
}

@media only screen and (min-width: 889px) {
	.left-box {
		width: calc(100% - 300px);
		float: left;
		padding: 0 24px 0 0;
	}
	.rightbx {
		width: 300px;
		float: left;
		padding: 0;
		display: block;
	}
	/* On an article the rail sits in the same band as the title, which is
	   full-width — so the widget started flush against the headline. The
	   reference avoids that with a 250px ad slot above the widget; pushing
	   the rail past the meta row gives the same breathing room without
	   reserving space for an ad that may never load. */
	.single-post .rightbx {
		padding-top: 48px;
	}
}

@media only screen and (min-width: 1220px) {
	.left-box {
		width: 768px;
		padding: 0 var(--gutter-lg) 0 0;
	}
	.rightbx {
		width: 320px;
		float: right;
	}
}


/* ── 7. Post card ───────────────────────────────────────────────── */

/* No top padding — the 32px now comes from .site-content, so adding it
   here would double the gap the reference has. */
.blog-posts {
	list-style: none;
	margin: 0;
	padding: 0;
}

.body-post {
	border-radius: 4px;
	background: linear-gradient(0deg, #f2f6fc 0%, var(--surface) 8%);
	margin-bottom: 24px;
	padding: 0 0 16px;
}

.story-link,
.story-link:hover,
.story-link:focus {
	text-decoration: none;
	display: block;
	color: inherit;
}

.home-post-box {
	display: block;
}

.home-post-box::after {
	content: '';
	display: block;
	clear: both;
}

.home-img {
	width: 100%;
	float: left;
	overflow: hidden;
}

/* Fixed aspect box keeps the feed from shifting as images decode. */
.img-ratio {
	padding-bottom: 52.2875817%;
	position: relative;
	background: linear-gradient(rgb(242, 242, 242) 66%, rgba(242, 242, 242, 0));
	border-radius: 10px;
}

.home-img img {
	max-width: 100%;
	border-radius: 4px;
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	z-index: 2;
	transition: transform .8s cubic-bezier(.165, .84, .44, 1) 0s;
}

.story-link:hover .home-img img,
.story-link:focus .home-img img {
	transform: scale(1.05);
}

.home-right {
	float: left;
	padding: 16px 8px 0;
	width: 100%;
}

.home-title {
	color: var(--text-heading);
	font-weight: 700;
	line-height: 27px;
	font-size: 17px;
	margin: 0;
	letter-spacing: -.1px;
}

.story-link:hover .home-title {
	text-decoration: underline;
}

.item-label {
	color: var(--text-secondary);
	font-size: 11px;
	padding: 4px 0;
	display: flex;
	align-items: center;
	line-height: 24px;
	flex-wrap: wrap;
}

.item-label i {
	margin-right: 7px;
}

.item-label .h-tags {
	margin-left: 20px;
}

.item-label .h-tags a {
	color: var(--text-secondary);
}

.item-label .h-tags a:hover {
	color: var(--brand-primary);
	text-decoration: underline;
}

.home-desc {
	font-size: 13px;
	line-height: 21px;
	color: var(--text-secondary);
	padding: 0;
	display: -webkit-box;
	-webkit-line-clamp: 3;
	line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
	text-overflow: ellipsis;
}

@media only screen and (min-width: 600px) {
	.body-post {
		box-shadow: none;
		border-radius: 0;
		background: none;
		padding: 0;
	}
	.home-img { width: 34.51%; }
	.home-right {
		width: 65.49%;
		padding: 0 0 0 24px;
	}
	.home-desc {
		-webkit-line-clamp: 2;
		line-clamp: 2;
		padding-right: 6%;
	}
}

@media only screen and (min-width: 768px) {
	.home-right { padding: 0 0 0 24px; }
}

@media only screen and (min-width: 889px) {
	/* Reference hides the meta row on tablet widths. */
	.item-label { display: none; }
	.home-desc { margin-top: 10px; }
}

@media only screen and (min-width: 1220px) {
	.item-label { display: flex; }
	.home-desc { margin-top: 0; }
}

/* Section heading above a feed (category / archive view).
   The gutter comes from .main-left-right, so the heading must not add
   side margins of its own — that pushed it 24px right of the story
   thumbnails, which is where the reference aligns it. */
.label-name {
	text-transform: capitalize;
	font-size: 20px;
	font-weight: 900;
	border-bottom: 1px solid var(--border-color);
	color: var(--text-heading);
	margin: 0 0 24px;
	padding: 0 0 8px;
}

@media only screen and (min-width: 768px) {
	.label-name {
		font-size: 22px;
		margin: 0 0 24px;
	}
}

/* Empty state */
.thn-no-results {
	padding: 48px 0 56px;
	text-align: center;
	color: var(--text-secondary);
}

.thn-no-results i {
	font-size: 34px;
	color: var(--border-color);
	display: block;
	margin-bottom: 14px;
}

.thn-no-results h2 {
	color: var(--text-heading);
	font-size: 20px;
	font-weight: 700;
	margin: 0 0 8px;
}

.thn-no-results p {
	margin: 0;
	font-size: 14px;
}


/* ── 8. Pagination ──────────────────────────────────────────────── */

.thn-pagination {
	margin: 8px 0 32px;
	clear: both;
}

.thn-pagination ul.page-numbers,
.navigation.pagination ul.page-numbers,
.storefront-pagination ul.page-numbers {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	justify-content: center;
	align-items: center;
	gap: 5px;
	flex-wrap: wrap;
}

.thn-pagination ul.page-numbers li,
.navigation.pagination ul.page-numbers li,
.storefront-pagination ul.page-numbers li {
	float: none;
	margin: 0;
	padding: 0;
	border: 0;
	list-style: none;
}

/* Storefront's icons.css injects a folder glyph into list items — the
   pager is a <li> list, so it has to be cleared here too. */
.thn-pagination ul.page-numbers li::before,
.thn-pagination ul.page-numbers li::after,
.navigation.pagination ul.page-numbers li::before,
.navigation.pagination ul.page-numbers li::after {
	content: none;
	display: none;
}

/* `a`/`span` qualified so the wrapper <ul class="page-numbers"> is not
   matched — it shares the class with its own children. */
.thn-pagination a.page-numbers,
.thn-pagination span.page-numbers,
.navigation.pagination a.page-numbers,
.navigation.pagination span.page-numbers,
.storefront-pagination a.page-numbers,
.storefront-pagination span.page-numbers {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 34px;
	height: 34px;
	padding: 0 9px;
	border: 1px solid var(--border-color);
	border-radius: 4px;
	color: var(--text-secondary);
	font-size: 13px;
	font-weight: 500;
	background: var(--surface);
	transition: border-color .2s ease, color .2s ease, background .2s ease;
}

.thn-pagination .page-numbers i,
.navigation.pagination .page-numbers i {
	font-size: 10px;
}

.thn-pagination a.page-numbers:hover,
.navigation.pagination a.page-numbers:hover,
.storefront-pagination a.page-numbers:hover {
	border-color: var(--brand-primary);
	color: var(--brand-primary);
}

.thn-pagination span.page-numbers.current,
.navigation.pagination span.page-numbers.current,
.storefront-pagination span.page-numbers.current {
	background: var(--brand-primary);
	border-color: var(--brand-primary);
	color: var(--surface);
	font-weight: 600;
}

.thn-pagination span.page-numbers.dots,
.navigation.pagination span.page-numbers.dots {
	border-color: transparent;
	background: none;
	color: var(--text-secondary);
	min-width: 20px;
	padding: 0 3px;
}


/* ── 9. Single article ──────────────────────────────────────────── */

.single-post .site-content,
.archive .site-content,
.blog .site-content,
.home .site-content {
	background: var(--surface);
}

/* The reference puts the title above .main-left-right, so it carries its
   own gutter instead of inheriting the column's padding. */
.story-title {
	line-height: 34px;
	font-size: 22px;
	font-weight: 700;
	letter-spacing: -.1px;
	color: var(--text-heading);
	margin: 0;
	padding: 0 var(--gutter);
}

.story-title a {
	color: var(--text-heading);
}

/* Reference .postmeta is a plain inline row on a 40px line — author and
   date share .p-author, the section sits in .p-tags.
   No side padding: the meta row already sits inside the padded column,
   and the reference lines its text up with the title and body copy. */
.postmeta {
	line-height: 40px;
	color: var(--text-secondary);
	font-size: 12px;
	padding: 0 0 8px;
}

.postmeta i {
	margin-right: 6px;
}

.postmeta .author {
	color: var(--text-secondary);
	margin-right: 15px;
}

.postmeta a.author:hover {
	color: var(--brand-primary);
}

.postmeta .p-tags {
	padding: 0 5px;
	margin-left: 20px;
}

/* Hero image bleeds past the column gutter, matching the reference
   `.separator { margin: 0 -24px 24px }` (reset to 0 from 600px up). */
.separator,
#articlebody > img:first-child {
	display: block;
	width: calc(100% + var(--gutter) * 2);
	max-width: none;
	height: auto;
	margin: 0 calc(var(--gutter) * -1) 24px;
	border-radius: 0;
}

.separator img,
#articlebody > img:first-child {
	display: block;
	width: 100%;
	height: auto;
	border-radius: 0;
}

.separator img {
	width: 100%;
	height: auto;
	display: block;
	border-radius: 0;
}

.tr-caption {
	font-size: 13px;
	color: var(--text-secondary);
	letter-spacing: .2px;
	text-align: left;
}

/* Measured on the reference: 15px on a 26px line, no horizontal padding
   (the gutter comes from .main-left-right). */
#articlebody {
	color: var(--articletext-color);
	font-size: 15px;
	line-height: 26px;
	padding: 0 0 8px;
}

#articlebody p,
#articlebody br {
	max-width: 80ch;
	margin: 24px 0;
	display: block;
}

/* Padding/margin geometry follows the reference; the weight is set to 600
   for every heading level by request (the reference uses 900). The
   margin-top reset matters — Storefront's global heading rule adds ~50px,
   which collapsed with the paragraph's 24px bottom margin and left a huge
   gap before every heading. */
#articlebody h2,
#articlebody h3,
#articlebody h4,
#articlebody h5,
#articlebody h6 {
	font-weight: 600;
	color: var(--text-heading);
	padding-top: 10px;
	margin-top: 0;
	margin-bottom: -10px;
}

#articlebody h2 { font-size: 22px; line-height: 34px; }
#articlebody h3 { font-size: 20px; line-height: 32px; }
#articlebody h4 { font-size: 18px; line-height: 30px; }

#articlebody a,
#articlebody a:link,
#articlebody a:visited {
	color: var(--link-color);
	font-weight: 500;
	transition: all .2s linear;
}

#articlebody a:hover {
	text-decoration: underline;
}

#articlebody ul {
	list-style-type: circle;
	margin: 24px 40px;
	padding: 0;
}

#articlebody ol {
	list-style-type: decimal;
	margin: 25px 10px 25px 30px;
	padding: 0;
}

#articlebody ol li,
#articlebody ul li {
	margin-bottom: 8px;
}

#articlebody blockquote {
	padding: 28px;
	background: var(--surface-alt);
	border: 1px solid #d9deff;
	margin: 24px 0;
}

#articlebody blockquote p {
	margin: 0 0 12px;
}

#articlebody blockquote p:last-child {
	margin-bottom: 0;
}

#articlebody img {
	max-width: 100%;
	height: auto;
	border-radius: 4px;
}

#articlebody table {
	display: block;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	width: 100%;
	border-collapse: collapse;
	margin: 20px 0;
}

#articlebody td,
#articlebody th {
	padding: 6px 12px;
	text-align: left;
	border: 1px solid var(--border-color);
}

#articlebody tbody tr:first-child {
	font-weight: 500;
}

#articlebody code {
	background: var(--background);
	border: 1px solid var(--border-color);
	border-radius: 3px;
	padding: 2px 6px;
	font-size: .92em;
}

#articlebody pre {
	background: var(--surface-alt);
	border: 1px solid var(--border-color);
	border-radius: 4px;
	padding: 16px 18px;
	overflow-x: auto;
	margin: 24px 0;
}

#articlebody pre code {
	background: none;
	border: 0;
	padding: 0;
}

@media only screen and (min-width: 768px) {
	.story-title {
		line-height: 43px;
		font-size: 30px;
		padding: 0 var(--gutter-lg);
	}
	.postmeta {
		font-size: 13px;
		padding: 0 0 8px;
	}
	/* Reference resets the bleed at this breakpoint: the hero sits flush
	   with the column content instead of spanning the full box. */
	.separator,
	#articlebody > img:first-child {
		width: auto;
		margin-left: 0;
		margin-right: 0;
	}
	#articlebody table {
		display: table;
		overflow-x: visible;
		white-space: normal;
	}
}

@media only screen and (min-width: 1220px) {
	.story-title {
		line-height: 48px;
		font-size: 32px;
	}
}

/* Static pages reuse the article typography without the meta row. */
.static_title {
	padding-bottom: 10px;
	margin-bottom: 10px;
	font-weight: 900;
	line-height: 45px;
	font-size: 35px;
	color: var(--text-heading);
}

/* ── 9b. Article tags ───────────────────────────────────────────── */
/* The reference ships this block but hides it (`.tags { display:none }`);
   here it is shown, using the same class names so the markup matches. */

/* Bottom margin matters: the comments band starts immediately after
   .left-box, so without it the pills sit flush against the band edge. */
.tags {
	display: block;
	clear: both;
	margin: 28px 0 32px;
	padding: 0;
}

.tags .categ {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
}

.tags .tags-list {
	display: inline-block;
	padding: 5px 12px;
	border: 1px solid var(--border-color);
	border-radius: 4px;
	background: var(--surface-alt);
	font-size: 12px;
	font-weight: 500;
	line-height: 1.4;
	letter-spacing: .2px;
	color: var(--text-secondary);
	text-transform: capitalize;
	text-decoration: none;
	transition: border-color .2s ease, color .2s ease, background .2s ease;
}

.tags .tags-list:hover {
	background: var(--brand-primary);
	border-color: var(--brand-primary);
	color: var(--surface);
	text-decoration: none;
}


/* ── 9c. Latest News band (reference .below-post) ───────────────── */
/* Full-width white band under the article, outside <main>. The reference
   uses floats at 47% / 23.345% with a ~24px gutter; a grid gives the same
   geometry without the nth-child margin resets. */

.below-post {
	background: var(--surface);
	clear: both;
}

.below-post-box {
	max-width: var(--shell-max);
	margin: 0 auto;
	padding: 0 var(--gutter) var(--gutter);
}

.latest-box {
	padding-top: var(--gutter);
}

.below-post .latest-title {
	display: flex;
	align-items: center;
	gap: 8px;
	margin: 0 0 16px;
	font-size: 18px;
	font-weight: 600;
	line-height: 26px;
	color: var(--text-heading);
}

.below-post .latest-title i {
	font-size: 15px;
	color: var(--brand-primary);
}

.latest-grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 24px;
}

.latest {
	margin: 0;
	padding: 0;
	background: none;
	border: 0;
}

.latest-link {
	display: block;
	text-decoration: none;
	color: inherit;
}

.latest-link:hover {
	text-decoration: none;
}

/* Fixed 16:10 box so every card is the same height regardless of the
   uploaded image ratio — without it, portrait screenshots made one card
   tower over its neighbours. `cover` crops instead of stretching. */
.latest-thumb {
	overflow: hidden;
	border-radius: 4px;
	aspect-ratio: 16 / 10;
	background: var(--surface-muted);
}

.latest-thumb img {
	display: block;
	width: 100%;
	max-width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 4px;
	transition: transform .3s ease;
}

.latest-link:hover .latest-thumb img {
	transform: scale(1.03);
}

/* Reference .latest-h3: 13px/21px at 500, 15px/24px from 768px. */
.latest-h3 {
	padding: 15px 0 10px;
	font-size: 13px;
	font-weight: 500;
	line-height: 21px;
	color: var(--text-heading);
}

.latest-link:hover .latest-h3 {
	text-decoration: underline;
}

/* Reference hides the standfirst below 889px (see the media query below). */
.latest-desc {
	display: none;
	font-size: 13px;
	line-height: 22px;
	color: var(--text-secondary);
	overflow: hidden;
	-webkit-line-clamp: 3;
	line-clamp: 3;
	-webkit-box-orient: vertical;
}

@media only screen and (min-width: 768px) {
	.below-post-box {
		padding: 0 var(--gutter-lg) var(--gutter-lg);
	}

	.latest-box {
		padding-top: var(--gutter-lg);
	}

	.latest-grid {
		grid-template-columns: repeat(4, 1fr);
	}

	.latest-h3 {
		font-size: 15px;
		line-height: 24px;
		min-height: 60px;
	}
}

@media only screen and (min-width: 889px) {
	.latest-desc {
		display: -webkit-box;
	}
}


/* ── 10. Comments ───────────────────────────────────────────────── */

/* Comments band — gradient strip across the whole viewport, same colours
   as the page background behind the footer.
   The band itself stays at the normal column width; only its ::before is
   blown out to 100vw. Doing it this way keeps the layout box untouched,
   so the form still lines up with the article — a 100vw box would shift
   everything by half the scrollbar width. */
.comments-band {
	position: relative;
	padding: 40px 0;
	clear: both;
	background: none;
}

.comments-band::before {
	content: '';
	position: absolute;
	top: 0;
	bottom: 0;
	left: 50%;
	width: 100vw;
	transform: translateX(-50%);
	background: linear-gradient(90deg, #fff 0%, var(--background) 35%, #f5f7fb 65%, #fff 100%);
	pointer-events: none;
}

/* Content lines up with the article column, not centred on the page:
   same shell, same gutter, same 768px story measure. */
.comments-band-inner {
	position: relative;
	z-index: 1;
	max-width: var(--shell-max);
	margin: 0 auto;
	padding: 0 var(--gutter);
}

@media only screen and (min-width: 768px) {
	.comments-band-inner {
		padding: 0 var(--gutter-lg);
	}
}

#comments,
.comments-area {
	max-width: 768px;
	margin: 0;
	background: none;
	padding: 0;
	border-radius: 0;
}

/* The reply form is the white card inside the band. Storefront styles it
   with the ID selector `#respond`, so the class alone would lose. */
.comment-respond,
#respond {
	background: var(--surface);
	border: 1px solid var(--border-color);
	border-radius: 3px;
	padding: 24px;
	margin-top: 0;
}

/* Centred heading with a rule either side, as in the reference. */
#comments .comments-title,
.comment-respond .comment-reply-title {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 24px;
	margin: 0 0 24px;
	padding: 0;
	border: 0;
	font-size: 20px;
	font-weight: 900;
	line-height: 27px;
	letter-spacing: 1px;
	text-transform: uppercase;
	text-align: center;
	color: var(--text-heading);
}

#comments .comments-title::before,
#comments .comments-title::after,
.comment-respond .comment-reply-title::before,
.comment-respond .comment-reply-title::after {
	content: '';
	display: block;
	flex: 1 1 0;
	height: 0;
	border-bottom: 1px solid #d9deff;
}

/* WordPress always prints the cancel-reply wrapper and hides only the
   anchor inside it (style="display:none"). Left in the flex row, that
   empty item adds a gap and shifts the heading 12px off centre. */
.comment-reply-title small:empty,
.comment-reply-title small:has(a[style*="display:none"]) {
	display: none;
}

.comment-reply-title small a {
	font-size: 12px;
	font-weight: 400;
	letter-spacing: normal;
	text-transform: none;
	color: var(--link-color);
}

/* Comment cards inside the band stay white so they read as cards. */
#comments .comment-body {
	background: var(--surface);
}

.comment-respond #comment {
	background: var(--surface);
	border: 1px solid var(--border-color);
	border-radius: 4px;
	padding: 10px 12px;
	font-size: 14px;
	color: var(--articletext-color);
}

.comment-respond #comment:focus {
	border-color: var(--brand-primary);
	outline: 0;
}

.comment-respond .submit {
	background: var(--brand-primary);
	color: var(--surface);
	border: 0;
	border-radius: 4px;
	padding: 10px 20px;
	font-size: 14px;
	font-weight: 500;
	cursor: pointer;
	transition: background .2s ease;
}

.comment-respond .submit:hover {
	background: var(--brand-dark);
}

#comments ol.comment-list {
	list-style: none;
	margin: 0;
	padding: 0;
}

#comments .comment {
	margin: 0 0 20px;
	padding: 0;
	border: 0;
}

#comments .comment-body {
	background: var(--surface-alt);
	border: 1px solid var(--border-color);
	border-radius: 4px;
	padding: 16px 18px;
}

#comments .comment-meta {
	font-size: 13px;
	color: var(--text-secondary);
	margin-bottom: 8px;
}

#comments .comment-author {
	display: flex;
	align-items: center;
	gap: 8px;
	font-weight: 600;
	color: var(--text-heading);
}

#comments .comment-author .avatar {
	border-radius: 50%;
	width: 32px;
	height: 32px;
}

#comments .comment-metadata a {
	color: var(--text-secondary);
	font-size: 12px;
}

#comments .children {
	list-style: none;
	margin: 16px 0 0 24px;
	padding: 0;
}

#comments .reply a {
	font-size: 13px;
	font-weight: 500;
	color: var(--link-color);
}

/* The rail is already hidden below 889px by .rightbx's own rules. */


/* ── 11. Sidebar rail ───────────────────────────────────────────── */
/* The reference rail is unboxed: a heading, then a flat list. No card,
   no border, no panel background. These rules target stock WordPress
   widgets (Categories, Recent Posts, …) so whatever is dropped into
   the Sidebar widget area inherits the reference look automatically. */

.rightbx .widget,
.rightbx .latest-widget {
	background: none;
	border: 0;
	border-radius: 0;
	padding: 0;
	margin: 0 0 28px;
}

/* Storefront renders widget titles as `span.gamma.widget-title`; themes
   and plugins may emit h3/h4 instead, so all of them are covered. */
.rightbx .widget-title,
.rightbx .widgettitle,
.rightbx .widget-title.gamma,
.rightbx .latest-title {
	display: block;
	margin: 0 0 16px;
	padding: 0;
	border: 0;
	font-size: 18px;
	font-weight: 600;
	line-height: 26px;
	color: var(--text-heading);
	text-transform: none;
	letter-spacing: normal;
}

.rightbx .widget ul {
	list-style: none;
	margin: 0;
	padding: 0;
}

/* Storefront's icons.css injects a folder glyph into every category /
   archive / menu list item, positioned with margin-left:-1.618em. Inside
   the rail that pushes it ~21px outside the column, so it reads as a
   stray grey square hanging off the left edge. The reference rail has no
   item icons — remove it rather than re-position it. */
.rightbx .widget ul li::before,
.rightbx .widget ul li::after {
	content: none;
	display: none;
}

/* Storefront also sets margin-bottom:1em on these items, which stacked
   on top of the padding below and opened a ~25px gap per row. */
.rightbx .widget ul li {
	display: block;
	margin: 0;
	padding: 4px 0;
	font-size: 13px;
	line-height: 1.5;
	color: var(--text-secondary);
}

/* Categories ship a trailing "(12)" count as a bare text node. */
.rightbx .widget ul li a {
	color: var(--text-secondary);
	font-weight: 500;
}

.rightbx .widget ul li a:hover {
	color: var(--brand-primary);
	text-decoration: underline;
}

.rightbx .widget ul li.current-cat > a,
.rightbx .widget ul li.current-menu-item > a {
	color: var(--brand-primary);
	font-weight: 600;
}

.rightbx .widget ul ul {
	margin: 4px 0 4px 14px;
}

/* ── Thumb + title row (reference .pop-article) ── */

.pop-article {
	margin-bottom: 16px;
	overflow: hidden;
}

.pop-article::after {
	content: '';
	display: block;
	clear: both;
}

.side-pop-image {
	float: left;
	width: 60px;
	overflow: hidden;
	border-radius: 4px;
}

.pop-image {
	margin: 0;
}

.pop-image img {
	display: block;
	width: 60px;
	height: 60px;
	object-fit: cover;
	border-radius: 4px;
}

.pop-desc {
	float: left;
	width: calc(100% - 60px);
	padding-left: 16px;
	overflow: hidden;
	line-height: 21px;
	font-weight: 500;
	font-size: 13px;
	margin-top: -2px;
}

.pop-title {
	color: var(--text-secondary);
	display: -webkit-box;
	-webkit-line-clamp: 3;
	line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
	margin: -1px 0 0;
}

.pop-link {
	text-decoration: none;
	display: block;
}

.pop-link:hover .pop-title {
	text-decoration: underline;
}


/* ── 12. Footer ─────────────────────────────────────────────────── */

/* Transparent on purpose — the reference footer lets the body gradient
   show through instead of painting its own flat panel.
   The top hairline fades out at both ends via border-image, which a plain
   `border-top` cannot do. */
.thn-footer {
	background: transparent;
	border-top: 1px solid transparent;
	border-image: linear-gradient(
		to right,
		transparent 5%,
		var(--border-color) 50%,
		transparent 95%
	) 1;
	border-image-slice: 1 0 0 0;
}

.thn-footer-gap {
	height: var(--gutter-lg);
	background: var(--surface);
}

/* Bottom padding is 0 — the copyright note owns the space beneath itself
   so its own padding can stay symmetric. */
.thn-footer-stuff {
	max-width: var(--shell-max);
	margin: 0 auto;
	padding: var(--gutter) var(--gutter) 0;
}

/* WordPress prints this as a <p>, so Storefront's global
   `p { margin-bottom: 1.41575em }` adds ~14px under the line and pushed
   the text up inside its band. Zero the bottom margin and pad evenly so
   the line sits optically centred between the rule and the footer edge. */
.thn-footer-note {
	margin: 20px 0 0;
	padding: 12px 0;
	font-size: 10px;
	line-height: 1.6;
	color: var(--text-secondary);
	border-top: 1px solid var(--border-color);
	text-align: center;
}

.thn-footer-note a {
	color: var(--text-secondary);
}

.thn-footer-note a:hover {
	color: var(--brand-primary);
}

@media only screen and (min-width: 768px) {
	.thn-footer-stuff { padding: var(--gutter-lg) var(--gutter-lg) 0; }
}


/* ── 13. WooCommerce bridge ─────────────────────────────────────── */
/* The shop keeps its behaviour; only the surface adopts the palette. */

.woocommerce .woocommerce-breadcrumb {
	font-size: 12px;
	color: var(--text-secondary);
	padding: 0 0 8px;
	margin: 0 0 16px;
	border-bottom: 1px solid var(--border-color);
}

.woocommerce .woocommerce-breadcrumb a {
	color: var(--text-secondary);
}

.post-type-archive-product .page-title,
.tax-product_cat .page-title {
	font-size: 20px;
	font-weight: 900;
	color: var(--text-heading);
	border-bottom: 1px solid var(--border-color);
	padding-bottom: 8px;
	margin-bottom: 24px;
}

.woocommerce ul.products li.product {
	background: var(--surface);
	border: 1px solid var(--border-color);
	border-radius: 4px;
	overflow: hidden;
	transition: border-color .2s ease, transform .2s ease;
}

.woocommerce ul.products li.product:hover {
	border-color: var(--brand-primary);
	transform: translateY(-2px);
}

.woocommerce ul.products li.product .woocommerce-loop-product__title {
	color: var(--text-heading);
	font-size: 15px;
	font-weight: 700;
	line-height: 1.45;
	padding: 12px 14px 0;
}

.woocommerce ul.products li.product .price {
	color: var(--brand-primary);
	font-weight: 700;
	padding: 0 14px;
}

.woocommerce ul.products li.product .button,
.woocommerce a.button.alt,
.woocommerce button.button.alt,
.woocommerce input.button.alt,
.woocommerce #respond input#submit.alt {
	background: var(--brand-primary);
	color: var(--surface);
	border-radius: 4px;
	font-weight: 500;
	transition: background .2s ease;
}

.woocommerce ul.products li.product .button:hover,
.woocommerce a.button.alt:hover,
.woocommerce button.button.alt:hover,
.woocommerce input.button.alt:hover {
	background: var(--brand-dark);
	color: var(--surface);
}

.woocommerce .star-rating span::before,
.woocommerce .star-rating::before {
	color: var(--highlight);
}


/* ── 14. Legacy grid neutralised ────────────────────────────────── */
/* The old 3-column card grid is superseded by the single-column feed. */

.kiosmerdeka-blog-grid {
	display: block;
}

.kiosmerdeka-blog-grid .kiosmerdeka-post-card {
	width: 100%;
	float: none;
	margin: 0 0 24px;
}

/* The feed renders its own .label-name heading. A legacy .page-header is
   neutralised rather than hidden, so any template still using it stays
   readable. */
.page-header {
	border: 0;
	margin: 0 0 16px;
	padding: 0;
}

.page-header .page-title {
	margin: 0;
	padding-bottom: 8px;
	font-size: 20px;
	font-weight: 900;
	color: var(--text-heading);
	border-bottom: 1px solid var(--border-color);
}

/* Cards without a thumbnail use the full column width. */
.body-post.no-thumb .home-right {
	width: 100%;
	padding: 0;
}


/* ── 15. Mobile menu panel ──────────────────────────────────────── */
/* The reference swaps its tab bar for a full-screen overlay; a
   disclosure panel keeps the same header weight with none of the
   focus-trap and scroll-lock machinery that overlay would need. */

@media only screen and (max-width: 767px) {
	.thn-menu {
		display: none;
		box-shadow: none;
	}

	.thn-menu.is-open {
		display: block;
		padding-bottom: 8px;
	}

	.thn-menu-list {
		float: none;
	}

	/* The active marker is an inset shadow, not a border: a 4px left border
	   shifted every label 4px right of the logo and the content below. */
	.thn-menu-list li {
		float: none;
		width: 100%;
		height: auto;
		line-height: 1.4;
		padding: 0;
		border-bottom: 1px solid var(--border-color);
		border-left: 0;
		box-shadow: inset 4px 0 0 transparent;
	}

	.thn-menu-list li:first-child {
		padding-left: 0;
	}

	.thn-menu-list li:hover,
	.thn-menu-list li.current-menu-item,
	.thn-menu-list li.current-menu-ancestor,
	.thn-menu-list li.current_page_item {
		border-bottom-color: var(--border-color);
		box-shadow: inset 4px 0 0 var(--brand-primary);
	}

	.thn-menu-list li a {
		display: block;
		width: 100%;
		padding: 13px var(--gutter);
	}

	.thn-menu-list ul.sub-menu {
		position: static;
		display: block;
		min-width: 0;
		border: 0;
		box-shadow: none;
		background: transparent;
		padding: 0 0 6px 16px;
	}

	.thn-menu-list ul.sub-menu li {
		border-bottom: 0;
	}

	.thn-menu-list ul.sub-menu li a {
		padding: 8px var(--gutter);
	}

	.thn-menu-more {
		display: none;
	}
}


/* ── 16. Top-bar social widget ──────────────────────────────────── */

.thn-topbar-follow .widget {
	margin: 0;
	padding: 0;
	background: none;
	border: 0;
}

.thn-topbar-follow .widget-title {
	display: none;
}

/* Footer link columns — the reference's .f-menu-box / .f-menu-cl-* /
   .f-menu-list. Column widths step 2 → 3 → 4 tracks, headings are
   16px/900 and links are 13px on a 25px line. */
.thn-footer-stuff .footer-widgets {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 24px;
	border: 0;
	padding: 0;
	margin: 0 0 8px;
	text-align: left;
}

/* Storefront floats .block and forces percentage widths; the grid owns
   layout here. */
.thn-footer-stuff .footer-widgets .block,
.thn-footer-stuff .footer-widgets .block.footer-widget-2,
.thn-footer-stuff .footer-widgets .block.footer-widget-3,
.thn-footer-stuff .footer-widgets .block.footer-widget-4 {
	float: none;
	width: auto;
	margin-right: 0;
}

/* Reference .footer-box-h5 */
.thn-footer-stuff .footer-widgets .widget-title {
	display: inline-block;
	margin: 0 0 5px;
	font-size: 16px;
	font-weight: 900;
	line-height: 20px;
	color: var(--text-heading);
}

.thn-footer-stuff .footer-widgets ul,
.thn-footer-stuff .footer-widgets ul.menu {
	list-style: none;
	margin: 0;
	padding: 0;
}

/* Reference .f-menu-list li — 13px on 25px. Storefront's icons.css also
   adds `padding-left:1.618em` plus a floating glyph to nav-menu items,
   which is what pushed these links 26px right. Neither belongs here. */
.thn-footer-stuff .footer-widgets ul li,
.thn-footer-stuff .footer-widgets ul.menu li {
	margin: 0;
	padding: 0;
	border: 0;
	font-size: 13px;
	line-height: 25px;
}

.thn-footer-stuff .footer-widgets ul li::before,
.thn-footer-stuff .footer-widgets ul li::after {
	content: none;
	display: none;
}

.thn-footer-stuff .footer-widgets ul li a,
.thn-footer-stuff .footer-widgets ul.menu li a {
	display: inline;
	padding: 0;
	font-size: 13px;
	line-height: 25px;
	font-weight: 400;
	color: var(--text-secondary);
	text-decoration: none;
}

.thn-footer-stuff .footer-widgets ul li a:hover {
	color: var(--brand-primary);
	text-decoration: underline;
}

/* The footer has four widget areas (footer-1 … footer-4), so the grid
   always reserves four tracks at desktop width — empty areas simply stay
   empty, exactly like the reference's .f-menu-cl-1…4 at 25% each. */
@media only screen and (min-width: 768px) {
	.thn-footer-stuff .footer-widgets {
		grid-template-columns: repeat(3, 1fr);
	}
}

@media only screen and (min-width: 1220px) {
	.thn-footer-stuff .footer-widgets {
		grid-template-columns: repeat(4, 1fr);
		gap: 32px;
	}
}

/* The footer template prints its own note, so the legacy credit row
   must not reappear if the override is ever re-hooked. */
.kiosmerdeka-footer-credit {
	display: none;
}


/* ═══════════════════════════════════════════════════════════════════
   17. SHOP — product archive
   -------------------------------------------------------------------
   Same visual language as the story feed: hairline-bordered white
   cards on a white field, a 46px tab bar for categories, a single
   compact filter row, and brand-coloured prices.

   Every existing behaviour is preserved — category tabs, result
   count, sort dropdown, sale flash, Eksplor button, pagination.
   ═══════════════════════════════════════════════════════════════════ */


/* ── Category tabs (reference .menu bar) ────────────────────────── */

.kiosmerdeka-category-bar {
	background: var(--surface);
	border-bottom: 1px solid var(--border-color);
	padding: 0;
	margin: 0 0 20px;
}

.category-bar-inner {
	display: flex;
	align-items: stretch;
	gap: 0;
	overflow-x: auto;
	scrollbar-width: none;
	-ms-overflow-style: none;
	-webkit-overflow-scrolling: touch;
}

.category-bar-inner::-webkit-scrollbar {
	display: none;
}

.category-item {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	height: 46px;
	padding: 0 18px;
	border: 0;
	border-bottom: 4px solid transparent;
	background: none;
	color: var(--text-secondary);
	font-size: 14px;
	font-weight: 500;
	line-height: 46px;
	white-space: nowrap;
	text-decoration: none !important;
	transition: color .15s ease, border-color .15s ease;
}

.category-item:first-child {
	padding-left: 0;
}

.category-item:hover {
	background: none;
	color: var(--brand-primary);
	border-bottom-color: rgba(59, 53, 174, .3);
}

.category-item.active {
	background: none;
	color: var(--brand-primary);
	font-weight: 600;
	border-bottom-color: var(--brand-primary);
}

.category-item .count {
	font-size: 11px;
	font-weight: 400;
	opacity: .65;
}


/* ── Filter row ─────────────────────────────────────────────────── */

.kiosmerdeka-filter-bar {
	margin: 0 0 20px;
	padding: 0 0 12px;
	border-bottom: 1px solid var(--border-color);
}

.filter-bar-inner,
.filter-controls {
	display: block;
}

/* Storefront wraps the count and the sort select in .storefront-sorting
   and stacks them with a 36px bottom margin. One row reads better and
   keeps the filter strip a single line. */
.woocommerce .storefront-sorting {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
	margin: 0;
	padding: 0;
}

/* Storefront prints an empty notices div as the first child. As a flex
   item it took the left slot, so space-between pushed the sort select
   into the middle and the result count to the right. Drop it from the
   flow and pin the two real children in order. */
.woocommerce .storefront-sorting .woocommerce-notices-wrapper:empty {
	display: none;
}

.woocommerce .storefront-sorting .woocommerce-result-count {
	order: 1;
	float: none;
	margin: 0;
}

/* Allow the select to shrink so count + sort share one row even on a
   narrow phone instead of wrapping into two stacked lines. The select
   itself needs width:100% — a <select> sizes to its widest option and
   would otherwise hold the form at ~225px. */
/* Phones: the select takes its own full-width row under the count, so
   both controls sit flush with the grid edges instead of leaving a
   half-width control stranded mid-row. */
.woocommerce .storefront-sorting .woocommerce-ordering {
	order: 2;
	margin: 0;
	flex: 0 0 100%;
	min-width: 0;
}

@media only screen and (min-width: 600px) {
	.woocommerce .storefront-sorting .woocommerce-ordering {
		/* Fixed basis, may shrink, never grows; space-between pushes it
		   to the right edge. */
		flex: 0 1 225px;
	}
}

.woocommerce .storefront-sorting .woocommerce-ordering select.orderby {
	width: 100%;
	min-width: 0;
	text-overflow: ellipsis;
}

/* The select must not stretch: WooCommerce ships `width: 100%` on it, so
   inside a flex row it ate the whole line and pushed the count underneath,
   leaving the dropdown flush against the right edge. */
.woocommerce .woocommerce-ordering,
.woocommerce .woocommerce-ordering select.orderby {
	width: auto;
	flex: 0 0 auto;
	max-width: 100%;
}

.woocommerce .woocommerce-ordering {
	margin-left: auto;
}

.woocommerce-result-count {
	margin: 0;
	font-size: 13px;
	line-height: 1.5;
	color: var(--text-secondary);
}

.woocommerce .woocommerce-ordering {
	float: none;
	margin: 0;
}

.woocommerce .woocommerce-ordering select.orderby {
	height: 36px;
	padding: 0 32px 0 12px;
	border: 1px solid var(--border-color);
	border-radius: 4px;
	background-color: var(--surface);
	font-size: 13px;
	line-height: 34px;
	color: var(--text-secondary);
	cursor: pointer;
	appearance: none;
	background-image: url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M5%206l5%205%205-5%202%201-7%207-7-7%202-1z%22%20fill%3D%22%23525a60%22%2F%3E%3C%2Fsvg%3E');
	background-repeat: no-repeat;
	background-position: right 10px top 50%;
	background-size: 14px auto;
	transition: border-color .2s ease;
}

.woocommerce .woocommerce-ordering select.orderby:hover,
.woocommerce .woocommerce-ordering select.orderby:focus {
	border-color: var(--brand-primary);
	outline: 0;
}


/* ── Product grid ───────────────────────────────────────────────── */

.woocommerce ul.products {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 20px;
	margin: 0 0 32px;
	padding: 0;
	list-style: none;
}

/* Storefront's float clearfix is unnecessary once this is a grid. */
.woocommerce ul.products::before,
.woocommerce ul.products::after {
	display: none;
}

.woocommerce ul.products li.product,
.woocommerce-page ul.products li.product {
	position: relative;
	display: flex;
	flex-direction: column;
	width: 100% !important;
	float: none !important;
	margin: 0 !important;
	padding: 0;
	background: var(--surface);
	border: 1px solid var(--border-color);
	border-radius: 4px;
	overflow: hidden;
	transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}

.woocommerce ul.products li.product:hover {
	border-color: var(--brand-primary);
	box-shadow: 0 6px 18px rgba(59, 53, 174, .10);
	transform: translateY(-2px);
}

/* Keyboard parity with the hover state. */
.woocommerce ul.products li.product:focus-within {
	border-color: var(--brand-primary);
	box-shadow: 0 0 0 2px rgba(59, 53, 174, .18);
}

.woocommerce ul.products li.product a.woocommerce-LoopProduct-link {
	display: block;
	overflow: hidden;
	text-decoration: none;
}


/* ── Card media ─────────────────────────────────────────────────── */

.woocommerce ul.products li.product a.woocommerce-LoopProduct-link > img,
.woocommerce ul.products li.product img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	margin: 0;
	border-radius: 0;
	background: var(--surface-muted);
	transition: transform .4s cubic-bezier(.165, .84, .44, 1);
}

.woocommerce ul.products li.product:hover img {
	transform: scale(1.04);
}


/* ── Card text ──────────────────────────────────────────────────── */

.woocommerce ul.products li.product .woocommerce-loop-product__title {
	margin: 0;
	padding: 14px 16px 0 !important;
	font-size: 15px;
	font-weight: 700;
	line-height: 1.45;
	color: var(--text-heading);
	transition: color .2s ease;
}

.woocommerce ul.products li.product:hover .woocommerce-loop-product__title {
	color: var(--brand-primary);
}

.woocommerce ul.products li.product .price {
	display: block;
	margin: 0 !important;
	padding: 6px 16px 0 !important;
	font-size: 16px;
	font-weight: 700;
	line-height: 1.4;
	color: var(--brand-primary) !important;
}

.woocommerce ul.products li.product .price del {
	color: var(--text-secondary);
	opacity: .6;
	font-weight: 400;
	font-size: 13px;
}

.woocommerce ul.products li.product .price ins {
	text-decoration: none;
	font-weight: 700;
}

/* Free items read as a badge rather than a price. */
.woocommerce ul.products li.product .price .woocommerce-Price-amount:only-child {
	letter-spacing: .2px;
}


/* ── Eksplor button ─────────────────────────────────────────────── */

.woocommerce ul.products li.product .button,
.woocommerce ul.products li.product .button.alt {
	margin: auto 16px 16px !important;
	padding: 10px 14px;
	background: var(--brand-primary);
	color: var(--surface);
	border: 0;
	border-radius: 4px;
	font-size: 13px;
	font-weight: 500;
	line-height: 1.4;
	text-align: center;
	text-decoration: none;
	transition: background .2s ease;
}

.woocommerce ul.products li.product .button:hover,
.woocommerce ul.products li.product .button.alt:hover {
	background: var(--brand-dark);
	color: var(--surface);
}


/* ── Sale flash ─────────────────────────────────────────────────── */

.woocommerce ul.products li.product .onsale {
	position: absolute;
	top: 10px;
	right: 10px;
	left: auto;
	z-index: 3;
	display: inline-flex;
	align-items: center;
	min-height: 0;
	min-width: 0;
	height: 22px;
	margin: 0;
	padding: 0 8px;
	background: var(--brand-primary);
	color: var(--surface);
	border-radius: 3px;
	font-size: 11px;
	font-weight: 700;
	line-height: 22px;
	letter-spacing: .3px;
	text-transform: uppercase;
}


/* ── No results ─────────────────────────────────────────────────── */

.woocommerce ul.products + .woocommerce-info,
.woocommerce .woocommerce-info {
	background: var(--surface-alt);
	border: 1px solid var(--border-color);
	border-radius: 4px;
	color: var(--text-secondary);
	font-size: 14px;
}


/* ── Responsive ─────────────────────────────────────────────────── */

@media only screen and (min-width: 600px) {
	.woocommerce ul.products {
		gap: 24px;
	}
}

@media only screen and (min-width: 768px) {
	.woocommerce ul.products {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}

	.category-item {
		padding: 0 20px;
	}

	.category-item:first-child {
		padding-left: 0;
	}
}

@media only screen and (min-width: 1024px) {
	.woocommerce ul.products {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}

	.kiosmerdeka-category-bar {
		margin-bottom: 24px;
	}

	.kiosmerdeka-filter-bar {
		margin-bottom: 24px;
	}
}


/* ═══════════════════════════════════════════════════════════════════
   18. PRODUCT — single product page
   -------------------------------------------------------------------
   Editorial product page: image and buy panel side by side, then the
   description as article copy, then related items in the same card
   grid as the shop.

   Preserved: breadcrumb, category tabs, gratisan disclaimer, gallery
   (zoom + lightbox), title, price, download group, product meta,
   description/review tabs, reviews form, related products.
   ═══════════════════════════════════════════════════════════════════ */


/* ── Shell ──────────────────────────────────────────────────────── */

.single-product div.product {
	display: block;
	margin: 0;
	padding: 0;
}


/* ── Gallery ────────────────────────────────────────────────────── */

.woocommerce div.product div.images,
.woocommerce div.product div.images.woocommerce-product-gallery {
	float: none;
	width: 100%;
	margin: 0 0 24px;
	background: var(--surface);
	border: 1px solid var(--border-color);
	border-radius: 4px;
	overflow: hidden;
}

.woocommerce div.product div.images img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: 0;
}

/* Zoom / lightbox trigger, restyled as a quiet control. */
.woocommerce div.product div.images .woocommerce-product-gallery__trigger {
	top: 12px;
	right: 12px;
	width: 36px;
	height: 36px;
	background: rgba(255, 255, 255, .94);
	border: 1px solid var(--border-color);
	border-radius: 4px;
	color: var(--text-heading);
	text-indent: -9999px;
	box-shadow: 0 2px 6px rgba(52, 52, 61, .10);
	transition: border-color .2s ease, color .2s ease;
}

.woocommerce div.product div.images .woocommerce-product-gallery__trigger::before {
	border-color: var(--text-heading);
}

.woocommerce div.product div.images .woocommerce-product-gallery__trigger::after {
	background: var(--text-heading);
}

.woocommerce div.product div.images .woocommerce-product-gallery__trigger:hover {
	border-color: var(--brand-primary);
}

.woocommerce div.product div.images .woocommerce-product-gallery__trigger:hover::before {
	border-color: var(--brand-primary);
}

.woocommerce div.product div.images .woocommerce-product-gallery__trigger:hover::after {
	background: var(--brand-primary);
}

/* Thumbnail strip */
.woocommerce div.product div.images .flex-control-thumbs {
	display: flex;
	gap: 8px;
	margin: 8px;
	padding: 0;
}

.woocommerce div.product div.images .flex-control-thumbs li {
	float: none;
	width: 64px;
	margin: 0;
}

.woocommerce div.product div.images .flex-control-thumbs img {
	border: 1px solid var(--border-color);
	border-radius: 3px;
	opacity: .65;
	transition: opacity .2s ease, border-color .2s ease;
}

.woocommerce div.product div.images .flex-control-thumbs img.flex-active,
.woocommerce div.product div.images .flex-control-thumbs img:hover {
	opacity: 1;
	border-color: var(--brand-primary);
}


/* ── Summary panel ──────────────────────────────────────────────── */

.woocommerce div.product div.summary {
	float: none;
	width: 100%;
	margin: 0 0 32px;
}

/* Reference headline scale: 22 → 30 → 32px, weight 700. Storefront ships
   2.618em at weight 300, which is far larger and far lighter. */
.woocommerce div.product .product_title {
	margin: 0 0 12px;
	padding: 0;
	font-size: 22px;
	font-weight: 700;
	line-height: 34px;
	letter-spacing: -.1px;
	color: var(--text-heading);
}

.woocommerce div.product p.price,
.woocommerce div.product span.price {
	margin: 0 0 20px;
	font-size: 22px;
	font-weight: 700;
	line-height: 1.3;
	color: var(--brand-primary);
}

.woocommerce div.product p.price del,
.woocommerce div.product span.price del {
	color: var(--text-secondary);
	font-weight: 400;
	font-size: 15px;
	opacity: .65;
}

.woocommerce div.product p.price ins,
.woocommerce div.product span.price ins {
	text-decoration: none;
	font-weight: 700;
}

/* Standfirst / short description */
.woocommerce div.product .woocommerce-product-details__short-description {
	margin: 0 0 20px;
	font-size: 15px;
	line-height: 26px;
	color: var(--text-secondary);
}

.woocommerce div.product .woocommerce-product-details__short-description p {
	margin: 0 0 12px;
}


/* ── Download / buy actions ─────────────────────────────────────── */

.kiosmerdeka-download-group {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin: 0 0 20px;
}

.kiosmerdeka-download-group .button,
.woocommerce div.product form.cart .button,
.woocommerce div.product .single_add_to_cart_button {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	min-height: 42px;
	margin: 0;
	padding: 11px 20px;
	background: var(--brand-primary);
	color: var(--surface);
	border: 0;
	border-radius: 4px;
	font-size: 14px;
	font-weight: 500;
	line-height: 1.3;
	text-decoration: none;
	text-align: center;
	transition: background .2s ease;
}

.kiosmerdeka-download-group .button:hover,
.woocommerce div.product form.cart .button:hover,
.woocommerce div.product .single_add_to_cart_button:hover {
	background: var(--brand-dark);
	color: var(--surface);
}

/* Secondary actions (WhatsApp, external link) stay outlined. */
.kiosmerdeka-download-group .button:not(.alt),
.woocommerce div.product .button.wa-button {
	background: var(--surface);
	border: 1px solid var(--border-color);
	color: var(--text-heading);
}

.kiosmerdeka-download-group .button:not(.alt):hover,
.woocommerce div.product .button.wa-button:hover {
	background: var(--surface-alt);
	border-color: var(--brand-primary);
	color: var(--brand-primary);
}

/* Quantity input, when a paid product shows the cart form. */
.woocommerce div.product form.cart div.quantity {
	margin: 0 10px 0 0;
}

.woocommerce div.product form.cart div.quantity .qty {
	width: 64px;
	height: 42px;
	padding: 0 8px;
	border: 1px solid var(--border-color);
	border-radius: 4px;
	font-size: 14px;
	color: var(--text-heading);
}

/* Variations */
.woocommerce div.product form.cart .variations {
	margin: 0 0 16px;
	border: 0;
}

.woocommerce div.product form.cart .variations th,
.woocommerce div.product form.cart .variations td {
	border: 0;
	padding: 0 0 10px;
	background: none;
}

.woocommerce div.product form.cart .variations label {
	font-size: 13px;
	font-weight: 600;
	color: var(--text-heading);
}

.woocommerce div.product form.cart .variations select {
	height: 40px;
	padding: 0 30px 0 10px;
	border: 1px solid var(--border-color);
	border-radius: 4px;
	font-size: 14px;
	color: var(--text-secondary);
	background: var(--surface);
}


/* ── Product meta ───────────────────────────────────────────────── */

.woocommerce div.product .product_meta {
	margin: 0;
	padding: 14px 0 0;
	border-top: 1px solid var(--border-color);
	font-size: 13px;
	line-height: 1.7;
	color: var(--text-secondary);
}

.woocommerce div.product .product_meta > span {
	display: block;
}

.woocommerce div.product .product_meta a {
	color: var(--brand-primary);
	font-weight: 500;
}

.woocommerce div.product .product_meta a:hover {
	text-decoration: underline;
}


/* ── Tabs (menu-bar treatment) ──────────────────────────────────── */

.woocommerce div.product .woocommerce-tabs {
	margin: 0 0 32px;
	padding: 0;
	clear: both;
}

.woocommerce div.product .woocommerce-tabs ul.tabs {
	margin: 0 0 20px;
	padding: 0;
	border-bottom: 1px solid var(--border-color);
	overflow: visible;
}

.woocommerce div.product .woocommerce-tabs ul.tabs::before,
.woocommerce div.product .woocommerce-tabs ul.tabs::after {
	display: none;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li {
	margin: 0;
	padding: 0;
	background: none;
	border: 0;
	border-bottom: 4px solid transparent;
	border-radius: 0;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li::before,
.woocommerce div.product .woocommerce-tabs ul.tabs li::after {
	display: none;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li a {
	display: inline-block;
	padding: 12px 18px;
	font-size: 14px;
	font-weight: 500;
	line-height: 1.4;
	color: var(--text-secondary);
	text-decoration: none;
	transition: color .15s ease;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li:first-child a {
	padding-left: 0;
}

.woocommerce div.product .woocommerce-tabs ul.tabs li a:hover {
	color: var(--brand-primary);
}

.woocommerce div.product .woocommerce-tabs ul.tabs li.active {
	background: none;
	border-bottom-color: var(--brand-primary);
}

.woocommerce div.product .woocommerce-tabs ul.tabs li.active a {
	color: var(--brand-primary);
	font-weight: 600;
}

.woocommerce div.product .woocommerce-tabs .panel {
	margin: 0;
	padding: 0;
}

/* Description reads as article copy. */
.woocommerce div.product .woocommerce-tabs .panel > h2:first-child,
.woocommerce div.product .woocommerce-tabs .panel .woocommerce-Tabs-panel--description > h2:first-child {
	margin: 0 0 16px;
	font-size: 18px;
	font-weight: 600;
	line-height: 1.35;
	color: var(--text-heading);
}

.woocommerce div.product .woocommerce-Tabs-panel {
	font-size: 15px;
	line-height: 26px;
	color: var(--articletext-color);
}

.woocommerce div.product .woocommerce-Tabs-panel p {
	max-width: 80ch;
	margin: 0 0 16px;
}

.woocommerce div.product .woocommerce-Tabs-panel h2,
.woocommerce div.product .woocommerce-Tabs-panel h3 {
	margin: 24px 0 8px;
	font-weight: 600;
	color: var(--text-heading);
}

.woocommerce div.product .woocommerce-Tabs-panel h2 { font-size: 20px; line-height: 30px; }
.woocommerce div.product .woocommerce-Tabs-panel h3 { font-size: 18px; line-height: 28px; }

.woocommerce div.product .woocommerce-Tabs-panel img {
	max-width: 100%;
	height: auto;
	border-radius: 4px;
}

.woocommerce div.product .woocommerce-Tabs-panel ul,
.woocommerce div.product .woocommerce-Tabs-panel ol {
	margin: 0 0 16px 20px;
	padding: 0;
}

.woocommerce div.product .woocommerce-Tabs-panel li {
	margin-bottom: 6px;
}


/* ── Reviews ────────────────────────────────────────────────────── */

.woocommerce #reviews #comments ol.commentlist {
	margin: 0;
	padding: 0;
	list-style: none;
}

.woocommerce #reviews #comments ol.commentlist li {
	margin: 0 0 16px;
	padding: 16px 18px;
	background: var(--surface-alt);
	border: 1px solid var(--border-color);
	border-radius: 4px;
}

.woocommerce #reviews #comments ol.commentlist li img.avatar {
	float: left;
	width: 40px;
	height: 40px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: none;
}

.woocommerce #reviews #comments ol.commentlist li .comment-text {
	margin: 0 0 0 56px;
	padding: 0;
	border: 0;
}

.woocommerce #reviews #comments ol.commentlist li .comment-text p.meta {
	margin: 0 0 6px;
	font-size: 13px;
	color: var(--text-secondary);
}

.woocommerce #reviews #comments ol.commentlist li .comment-text p.meta strong {
	color: var(--text-heading);
	font-weight: 600;
}

.woocommerce #reviews .star-rating span::before,
.woocommerce #reviews .star-rating::before {
	color: #f5a623;
}

/* Review form */
.woocommerce #review_form #respond {
	margin: 0;
	padding: 20px;
	background: var(--surface);
	border: 1px solid var(--border-color);
	border-radius: 4px;
}

.woocommerce #review_form #respond p {
	margin: 0 0 14px;
}

.woocommerce #review_form #respond label {
	font-size: 13px;
	font-weight: 600;
	color: var(--text-heading);
}

.woocommerce #review_form #respond input[type="text"],
.woocommerce #review_form #respond input[type="email"],
.woocommerce #review_form #respond textarea {
	width: 100%;
	padding: 9px 12px;
	border: 1px solid var(--border-color);
	border-radius: 4px;
	background: var(--surface);
	font-size: 14px;
	color: var(--articletext-color);
}

.woocommerce #review_form #respond input:focus,
.woocommerce #review_form #respond textarea:focus {
	border-color: var(--brand-primary);
	outline: 0;
}

.woocommerce #review_form #respond .form-submit input {
	background: var(--brand-primary);
	border: 0;
	border-radius: 4px;
	padding: 10px 20px;
	font-size: 14px;
	font-weight: 500;
	color: var(--surface);
}

.woocommerce #review_form #respond .form-submit input:hover {
	background: var(--brand-dark);
}


/* ── Related products ───────────────────────────────────────────── */

.woocommerce div.product .related.products,
.woocommerce div.product .upsells.products {
	margin: 0;
	padding: 0;
	clear: both;
}

.woocommerce div.product .related.products > h2,
.woocommerce div.product .upsells.products > h2 {
	margin: 0 0 16px;
	padding: 0 0 8px;
	border-bottom: 1px solid var(--border-color);
	font-size: 20px;
	font-weight: 900;
	line-height: 1.3;
	color: var(--text-heading);
	text-transform: none;
}

.woocommerce div.product .related.products ul.products,
.woocommerce div.product .upsells.products ul.products {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 20px;
	margin: 0;
}

.woocommerce div.product .related.products ul.products li.product,
.woocommerce div.product .upsells.products ul.products li.product {
	width: 100% !important;
	float: none !important;
	margin: 0 !important;
}


/* ── Gratisan copyright notice ──────────────────────────────────── */

.kiosmerdeka-gratisan-disclaimer {
	margin: 0 0 24px;
	border-radius: 4px;
	font-size: 13px;
	line-height: 1.65;
}

.kiosmerdeka-gratisan-disclaimer .kiosmerdeka-gpl-disclaimer__text {
	font-size: 13px;
	line-height: 1.65;
}


/* ── Responsive ─────────────────────────────────────────────────── */

@media only screen and (min-width: 600px) {
	.woocommerce div.product .related.products ul.products,
	.woocommerce div.product .upsells.products ul.products {
		grid-template-columns: repeat(3, minmax(0, 1fr));
		gap: 24px;
	}
}

@media only screen and (min-width: 768px) {
	/* Two-column product layout: image left, buy panel right. */
	.woocommerce div.product div.images,
	.woocommerce div.product div.images.woocommerce-product-gallery {
		float: left;
		width: 48%;
		margin: 0 0 32px;
	}

	.woocommerce div.product div.summary {
		float: right;
		width: 48%;
		margin: 0 0 32px;
	}

	.woocommerce div.product .product_title {
		font-size: 30px;
		line-height: 43px;
	}

	.woocommerce div.product p.price,
	.woocommerce div.product span.price {
		font-size: 26px;
	}

	.woocommerce div.product .woocommerce-tabs ul.tabs li a {
		padding: 14px 22px;
	}
}

@media only screen and (min-width: 1024px) {
	.woocommerce div.product .related.products ul.products,
	.woocommerce div.product .upsells.products ul.products {
		grid-template-columns: repeat(4, minmax(0, 1fr));
	}
}

@media only screen and (min-width: 1220px) {
	.woocommerce div.product .product_title {
		font-size: 32px;
		line-height: 48px;
	}
}


/* ═══════════════════════════════════════════════════════════════════
   19. STATIC PAGE — legal / informational pages
   -------------------------------------------------------------------
   Mirrors the reference's static page: one column of article copy with
   no rail, and a title inside the body carrying a short yellow rule.

   Used by template-static-page.php (Privacy Policy, Terms, DMCA,
   About, Contact …).
   ═══════════════════════════════════════════════════════════════════ */

/* One readable column: no rail to reserve space for, so the shell caps
   at the article measure instead of the full 1152px. */
.page-template-template-static-page .main-box {
	max-width: var(--content-max);
	margin: 0 auto;
}

.page-template-template-static-page .left-box {
	width: 100%;
	float: none;
	padding: 0;
}

.page-template-template-static-page .main-left-right {
	padding: 0 var(--gutter);
}

@media only screen and (min-width: 768px) {
	.page-template-template-static-page .main-left-right {
		padding: 0 var(--gutter-lg);
	}
}

/* Reference h1.static-title: 22px/33px, inline-block so the 5px rule
   spans only the words, not the column. */
/* Same treatment as the article headline (.story-title): 22px / 34px at
   weight 700, heading colour, no underline. The static page has its own
   gutter (from .main-left-right), so no side padding here. */
.static-title {
	display: block;
	margin: 0;
	padding: 0;
	font-size: 22px;
	font-weight: 700;
	line-height: 34px;
	letter-spacing: -.1px;
	color: var(--text-heading);
	border: 0;
}

@media only screen and (min-width: 768px) {
	.static-title {
		font-size: 30px;
		line-height: 43px;
	}
}

@media only screen and (min-width: 1220px) {
	.static-title {
		font-size: 32px;
		line-height: 48px;
	}
}

/* Body copy — same measure and rhythm as an article. */
.static-wrapper {
	font-size: 15px;
	line-height: 26px;
	color: var(--articletext-color);
}

.static-wrapper p {
	max-width: 80ch;
	margin: 24px 0;
}

.static-wrapper ul {
	list-style-type: circle;
	margin: 24px 40px;
	padding: 0;
}

.static-wrapper ol {
	list-style-type: decimal;
	margin: 25px 10px 25px 30px;
	padding: 0;
}

.static-wrapper li {
	margin-bottom: 8px;
	line-height: 26px;
}

.static-wrapper li > ul,
.static-wrapper li > ol {
	margin-top: 8px;
	margin-bottom: 0;
}

.static-wrapper strong,
.static-wrapper b {
	font-weight: 600;
	color: var(--text-heading);
}

/* Same heading geometry as the article: 10px of padding against a -10px
   bottom margin keeps the 24px paragraph gap from doubling. */
.static-wrapper h2,
.static-wrapper h3,
.static-wrapper h4,
.static-wrapper h5,
.static-wrapper h6 {
	padding-top: 10px;
	margin-top: 0;
	margin-bottom: -10px;
	font-weight: 600;
	color: var(--text-heading);
}

.static-wrapper h2 { font-size: 22px; line-height: 34px; }
.static-wrapper h3 { font-size: 20px; line-height: 32px; }
.static-wrapper h4 { font-size: 18px; line-height: 30px; }

.static-wrapper a {
	color: var(--link-color);
	font-weight: 500;
	text-decoration: none;
}

.static-wrapper a:hover {
	text-decoration: underline;
}

.static-wrapper img {
	max-width: 100%;
	height: auto;
	border-radius: 4px;
}

.static-wrapper blockquote {
	margin: 24px 0;
	padding: 28px;
	background: var(--surface-alt);
	border: 1px solid #d9deff;
}

.static-wrapper blockquote p {
	margin: 0 0 12px;
	max-width: none;
}

.static-wrapper blockquote p:last-child {
	margin-bottom: 0;
}

.static-wrapper table {
	display: block;
	overflow-x: auto;
	-webkit-overflow-scrolling: touch;
	width: 100%;
	margin: 20px 0;
	border-collapse: collapse;
}

.static-wrapper td,
.static-wrapper th {
	padding: 6px 12px;
	text-align: left;
	border: 1px solid var(--border-color);
}

.static-wrapper code {
	padding: 2px 6px;
	background: var(--background);
	border: 1px solid var(--border-color);
	border-radius: 3px;
	font-size: .92em;
}

@media only screen and (min-width: 768px) {
	.static-wrapper table {
		display: table;
		overflow-x: visible;
	}
}