/*
Theme Name:  ONEstar
Theme URI:   https://onesta.co.jp
Author:      ONEsta LLC
Author URI:  https://onesta.co.jp
Description: ONEsta LLC 製のブロックテーマ。サイト固有の設計を重ねるための軽量な土台。
Version:     1.6.7
Requires at least: 6.7
Tested up to: 7.0
Requires PHP: 8.1
License:     GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: onestar
Tags:        block-patterns, full-site-editing, custom-colors, custom-fonts, wide-blocks
*/

:root {
	--onestar-content-max: var(--wp--style--global--content-size);
	--onestar-wide-max: var(--wp--style--global--wide-size);
	--onestar-narrow-max: 48rem;
	--onestar-gutter: clamp(0.75rem, 2vi, var(--wp--preset--spacing--40, 1.5rem));
	--onestar-section-padding-block: clamp(var(--wp--preset--spacing--40, 1rem), 4vi, var(--wp--preset--spacing--60, 4rem));
	--onestar-section-padding-inline: var(--onestar-gutter);
	/* Contract v3: shell paddings move between two spacing tokens continuously instead of stepping at a viewport boundary. */
	--onestar-main-padding-block: clamp(var(--wp--preset--spacing--40, 1rem), 3vi, var(--wp--preset--spacing--50, 3rem));
	--onestar-hero-split-padding-block: clamp(var(--wp--preset--spacing--50, 1.5rem), 4vi, var(--wp--preset--spacing--60, 4rem));
	/* Sidebar primitive: main text keeps at least this measure, the sidebar keeps a bounded width. */
	--onestar-sidebar-content-min: 38rem;
	--onestar-sidebar-inline-size: clamp(20rem, 33.33cqi, 25rem);
	--onestar-border-color: var(--wp--preset--color--neutral-200);
	--onestar-card-radius: 0.25rem;
}

/* Public alignment bridge: the server adds this class to rendered full-width roots only. */
:where(.onestarViewportFull):where(:not(:is(.is-layout-flex:not(.is-vertical), .is-layout-grid, .wp-block-columns, .wp-block-media-text, .onestarSidebarLayout, .onestar-sidebar-layout) *)) {
	box-sizing: border-box;
	inline-size: 100%;
	max-inline-size: none;
}

:where(.onestarViewportFull.wp-block-image) > img {
	display: block;
	inline-size: 100%;
	block-size: auto;
}

@supports (inline-size: 100dvi) {
	.is-layout-constrained > .onestarViewportFull:where(:not(:is(.is-layout-flex:not(.is-vertical), .is-layout-grid, .wp-block-columns, .wp-block-media-text, .onestarSidebarLayout, .onestar-sidebar-layout) *)) {
		inline-size: 100dvi;
		max-inline-size: none;
		margin-inline: calc(50% - 50dvi);
	}
}

@supports (scrollbar-gutter: stable) {
	:root {
		scrollbar-gutter: stable;
		container-name: onestarViewport;
		container-type: inline-size;
	}

	@container onestarViewport (inline-size > 0px) {
		.is-layout-constrained > .onestarViewportFull:where(:not(:is(.is-layout-flex:not(.is-vertical), .is-layout-grid, .wp-block-columns, .wp-block-media-text, .onestarSidebarLayout, .onestar-sidebar-layout) *)) {
			inline-size: 100cqi;
			margin-inline: calc(50% - 50cqi);
		}
	}
}

/* Vertical stacks remain eligible for centred viewport alignment.
   In side-by-side contexts, omit the bridge (including its base width) so core
   alignfull can cancel parent padding with its own negative margins. */

/* WordPress runtime context. */
.admin-bar {
	--onestar-admin-bar-offset: 46px;
}
@media (min-width: 783px) {
.admin-bar {
		--onestar-admin-bar-offset: 32px;
}
	}

/* Page shell. Compatibility classes stay in the same zero-specificity root. */
:where(
	.onestarSiteHeader, .onestar-site-header,
	.onestarSiteFooter, .onestar-site-footer,
	.onestarTemplateMain, .onestar-template-main,
	.onestarPatternHeader, .onestar-pattern-header,
	.onestarPatternHeaderBar, .onestar-pattern-header-bar,
	.onestarPatternFooter, .onestar-pattern-footer,
	.onestarPatternSection, .onestar-pattern-section,
	.onestarPatternPage, .onestar-pattern-page
) {
	box-sizing: border-box;
	inline-size: 100%;
	padding-inline: var(--onestar-gutter);
}
:where(.onestarSiteHeader,.onestar-site-header,.onestarSiteFooter,.onestar-site-footer,.onestarTemplateMain,.onestar-template-main,.onestarPatternHeader,.onestar-pattern-header,.onestarPatternHeaderBar,.onestar-pattern-header-bar,.onestarPatternFooter,.onestar-pattern-footer,.onestarPatternSection,.onestar-pattern-section,.onestarPatternPage,.onestar-pattern-page)  > :first-child {
		margin-block-start: 0;
	}

/* Region onestarSiteHeader: each header row is the container the Navigation Shell reacts to.
   One alignment at every width: WordPress flex layouts (.is-layout-flex) already center items at class specificity. */
:where(.onestarSiteHeader, .onestar-site-header),
:where(.onestarPatternHeader, .onestar-pattern-header) {
	container: onestarSiteHeader / inline-size;
	align-items: center;
	padding-block: var(--wp--preset--spacing--20);
}

:where(.onestarSiteHeader, .onestar-site-header) {
	position: relative;
	z-index: 10;
}

/* Region onestarSiteFooter. */
:where(.onestarSiteFooter, .onestar-site-footer),
:where(.onestarPatternFooter, .onestar-pattern-footer) {
	--onestar-pattern-column-min: 14rem;

	container: onestarSiteFooter / inline-size;

	padding-block: var(--wp--preset--spacing--40);
	border-block-start: 1px solid var(--onestar-border-color);
}

:where(.onestarSiteFooterCredit, .onestar-site-footer__credit) {
	gap: 0.25em;
	color: var(--wp--preset--color--neutral-600);
	font-size: var(--wp--preset--font-size--small);
}

:where(.onestarSiteFooterCredit,.onestar-site-footer__credit) :where(p,.wp-block-site-title) {
		font-family: var(--wp--preset--font-family--body);
		font-size: inherit;
		font-weight: 400;
		line-height: inherit;
		margin: 0;
	}

/* Only sidebar shells need a main size container. A centred page/single keeps its
   gutter, while full alignment resolves cqi against the viewport or a nearer block container. */
:where(.onestarTemplateMain, .onestar-template-main):where(:has(.onestarSidebarLayout, .onestar-sidebar-layout)) {
	container: onestarTemplateMain / inline-size;
}

:where(.onestarTemplateMain, .onestar-template-main) {
	padding-block: var(--onestar-main-padding-block);
}

:where(.onestarTemplateMain,.onestar-template-main)  > :where(:not(.alignfull):not(.wp-block-post-content)) {
		inline-size: min(100%, var(--onestar-content-max));
		max-inline-size: var(--onestar-content-max);
		margin-inline: auto;
	}

/* These core blocks zero their own inline margin at class specificity on the block root, which
	   beats the zero-specificity shell above and pins a template-level block to the inline start.
	   The list is explicit on purpose: everything else stays at zero specificity so a site layer can
	   still override the shell with a single class. Add a block here when core ships the same kind of
	   declaration for it. Core keeps owning the float alignments. */

:where(.onestarTemplateMain,.onestar-template-main)  > :is(.wp-block-post-featured-image,.wp-block-social-links,.wp-block-pullquote,.wp-block-latest-comments):not(.alignfull,.alignleft,.alignright) {
		margin-inline: auto;
	}

/* The legacy gallery (saved before core moved to nested image blocks) carries the same kind of
	   reset on its block root at two classes, so it needs one more class than the list above to win
	   without a load-order tie. Galleries with nested images declare no inline margin on the root. */

:where(.onestarTemplateMain,.onestar-template-main)  > .wp-block-gallery:not(.has-nested-images):not(.alignfull,.alignleft,.alignright) {
		margin-inline: auto;
	}

:where(.onestarTemplateMain,.onestar-template-main)  > * + * {
		margin-block-start: var(--wp--preset--spacing--40);
	}

:where(.onestarTemplateMainFront, .onestar-template-main--front) {
	padding: 0;
}

:where(.onestarTemplateMainWide,.onestar-template-main--wide)  > :where(:not(.alignfull):not(.wp-block-post-content)) {
		inline-size: min(100%, var(--onestar-wide-max));
		max-inline-size: var(--onestar-wide-max);
	}

:where(.onestarTemplateMainCentered, .onestar-template-main--centered) {
	display: grid;
	min-block-size: 56vh;
	align-items: center;
}

:where(.onestarPageMain, .onestar-page-main) {
	padding-block-end: var(--wp--preset--spacing--60);
}

:where(.onestarPageTitle, .onestar-page-title) {
	margin-block-end: var(--wp--preset--spacing--50);
}

/* Template content components. */
:where(.onestarPostMeta, .onestar-post-meta),
:where(.onestarCommentMeta, .onestar-comment-meta) {
	gap: var(--wp--preset--spacing--20);
	color: var(--wp--preset--color--neutral-600);
	font-size: var(--wp--preset--font-size--small);
}

:where(.onestarCommentMeta, .onestar-comment-meta) {
	gap: var(--wp--preset--spacing--10);
}

:where(.onestarPostNav, .onestar-post-nav) {
	gap: var(--wp--preset--spacing--30);
	padding-block-start: var(--wp--preset--spacing--40);
	border-block-start: 1px solid var(--onestar-border-color);
}

:where(.onestarTemplateSection, .onestar-template-section) {
	padding-block-start: var(--wp--preset--spacing--50);
}

/*
 * Related posts list: at most three columns, dropping to two and one as the list narrows.
 * The template grid sets only columnCount, and core emits repeat(3, minmax(0, 1fr)) at class
 * specificity (WordPress 6.7-6.9 also ignore minimumColumnWidth next to columnCount), so the
 * cards kept three columns down to phone widths. Two classes outrank that single container class.
 * The column formula reads the same gap, so change the spacing through --onestar-related-posts-gap
 * (with a unit, e.g. 0px rather than 0) instead of overriding gap alone.
 */
:where(.onestarRelatedPosts) .wp-block-post-template.is-layout-grid {
	--onestar-related-posts-gap: var(--wp--preset--spacing--30);
	gap: var(--onestar-related-posts-gap);
	grid-template-columns: repeat(auto-fill, minmax(max(min(15rem, 100%), calc((100% - 2 * var(--onestar-related-posts-gap)) / 3)), 1fr));
}

/* Card titles would otherwise inherit the xx-large post title size meant for the article heading. */
.onestarRelatedPosts .wp-block-post-title {
	font-size: var(--wp--preset--font-size--large);
}

:where(.onestarArchiveCard, .onestar-archive-card) {
	padding-block: var(--wp--preset--spacing--40);
	border-block-end: 1px solid var(--onestar-border-color);
}

:where(.onestarArchiveCard,.onestar-archive-card) :where(.wp-block-post-title,.wp-block-post-excerpt) {
		margin-block-start: var(--wp--preset--spacing--20);
	}

:where(.onestarArchiveCard, .onestar-archive-card):first-child {
	padding-block-start: 0;
}

:where(.onestarEmptyState, .onestar-empty-state) {
	text-align: center;
}

:where(.onestarEmptyState,.onestar-empty-state)  > * {
		margin-inline: auto;
	}

:where(.onestarSearchForm, .onestar-search-form) {
	max-inline-size: var(--onestar-narrow-max);
}

/* Region onestarSidebar: widgets react to the sidebar width, not to the page. */
:where(.onestarSidebar, .onestar-sidebar) {
	container: onestarSidebar / inline-size;
	padding: var(--wp--preset--spacing--30);
	border: 1px solid var(--onestar-border-color);
	border-radius: var(--onestar-card-radius);
	background: transparent;
}
:where(.onestarSidebar,.onestar-sidebar)  > * + * {
		margin-block-start: var(--wp--preset--spacing--30);
	}

/* Sidebar primitive: the template main region is the container, the layout children react.
   --onesta-cq-sidebar = --onestar-sidebar-content-min (38rem) + sidebar minimum (20rem) + block gap (up to 1.5rem). */
:where(.onestarSidebarLayout, .onestar-sidebar-layout) {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	gap: var(--wp--style--block-gap, var(--wp--preset--spacing--30));
}

:where(.onestarSidebarContent, .onestar-sidebar-content),
:where(.onestarSidebarColumn, .onestar-sidebar-column) {
	flex: 1 1 100%;
	min-inline-size: 0;
}

:where(.onestarSidebarContent,.onestar-sidebar-content)  > * + * {
		margin-block-start: var(--wp--preset--spacing--40);
	}

@container onestarTemplateMain (inline-size >= 60rem) {
	:where(.onestarSidebarContent, .onestar-sidebar-content) {
		flex: 1 1 var(--onestar-sidebar-content-min);
	}

	:where(.onestarSidebarColumn, .onestar-sidebar-column) {
		flex: 0 0 var(--onestar-sidebar-inline-size);
		position: sticky;
		inset-block-start: calc(var(--onestar-admin-bar-offset, 0px) + var(--wp--preset--spacing--40));
		align-self: flex-start;
	}
}

:where(.onestarCoverHero, .onestar-cover-hero) {
	min-block-size: 60vh;
}

/* Insertable pattern components. */
:where(.onestarPatternHeaderBar, .onestar-pattern-header-bar) {
	padding-block: var(--wp--preset--spacing--20);
	font-size: var(--wp--preset--font-size--small);
}

:where(.onestarPatternHeaderCentered, .onestar-pattern-header--centered),
:where(.onestarPatternMobileMenu, .onestar-pattern-mobile-menu) {
	text-align: center;
}

:where(.onestarPatternHeaderActions, .onestar-pattern-header-actions) {
	gap: var(--wp--preset--spacing--20);
}

:where(.onestarPatternSection, .onestar-pattern-section),
:where(.onestarPatternPage, .onestar-pattern-page) {
	padding-block: var(--onestar-section-padding-block);
}

:is(:where(.onestarPatternSection,.onestar-pattern-section),:where(.onestarPatternPage,.onestar-pattern-page))  > :where(:not(.alignfull)) {
		inline-size: min(100%, var(--onestar-wide-max));
		max-inline-size: var(--onestar-wide-max);
		margin-inline: auto;
	}

/* Region onestarPatternSection: inserted pattern roots are the container for the parts inside them. */
:where(.onestarPatternSection, .onestar-pattern-section) {
	container: onestarPatternSection / inline-size;
}

:where(.onestarPatternSectionNarrow,.onestar-pattern-section--narrow)  > :where(:not(.alignfull)) {
		inline-size: min(100%, var(--onestar-narrow-max));
		max-inline-size: var(--onestar-narrow-max);
	}

:where(.onestarPatternHero, .onestar-pattern-hero) {
	box-sizing: border-box;
	inline-size: 100%;
	padding-inline: var(--onestar-gutter);
}

:where(.onestarPatternHeroSplit, .onestar-pattern-hero--split) {
	--onestar-pattern-column-min: 20rem;

	padding-block: var(--onestar-hero-split-padding-block);
}

:where(.onestarPatternHeroFullscreen, .onestar-pattern-hero--fullscreen) {
	min-block-size: 80svh;
}

:where(.onestarPatternCta, .onestar-pattern-cta) {
	text-align: center;
}

:where(.onestarPatternCtaSplit, .onestar-pattern-cta--split) {
	--onestar-pattern-column-min: 14rem;

	text-align: start;
}

:where(.onestarPatternCtaSplit,.onestar-pattern-cta--split)  > .onestarPatternColumns > :first-child {
		flex-grow: 2;
		flex-basis: 20rem;
	}

/* Pattern columns (contract v3): equal columns that wrap when the row cannot hold them.
   WordPress renders them as flex groups; the same layout is declared here for non-core markup. */
:where(.onestarPatternColumns) {
	display: flex;
	flex-wrap: wrap;
	gap: var(--wp--style--block-gap, var(--wp--preset--spacing--30));
}
:where(.onestarPatternColumns)  > * {
		flex: 1 1 var(--onestar-pattern-column-min, 16rem);
		min-inline-size: 0;
	}

:where(.onestarPatternFeaturesHorizontal) {
	--onestar-pattern-column-min: 20rem;
}

:where(.onestarPatternCtaCover, .onestar-pattern-cta--cover) {
	min-block-size: 25rem;
}

:is(:where(.onestarPatternCardGrid,.onestar-pattern-card-grid),:where(.onestarPatternPricing,.onestar-pattern-pricing),:where(.onestarPatternTeam,.onestar-pattern-team),:where(.onestarPatternTestimonials,.onestar-pattern-testimonials)) .wp-block-columns {
		gap: var(--wp--preset--spacing--30);
	}

/* Cards: grid items (current patterns) and column children (saved legacy markup). */

:is(:where(.onestarPatternCardGrid,.onestar-pattern-card-grid),:where(.onestarPatternPricing,.onestar-pattern-pricing),:where(.onestarPatternTeam,.onestar-pattern-team),:where(.onestarPatternTestimonials,.onestar-pattern-testimonials)) .onesta-grid__items > .wp-block-group,:is(:where(.onestarPatternCardGrid,.onestar-pattern-card-grid),:where(.onestarPatternPricing,.onestar-pattern-pricing),:where(.onestarPatternTeam,.onestar-pattern-team),:where(.onestarPatternTestimonials,.onestar-pattern-testimonials)) .wp-block-column > .wp-block-group {
		block-size: 100%;
		padding: var(--wp--preset--spacing--30);
		border: 1px solid var(--onestar-border-color);
		border-radius: var(--onestar-card-radius);
	}

:is(:where(.onestarPatternLogoCloud,.onestar-pattern-logo-cloud),:where(.onestarPatternStats,.onestar-pattern-stats)) .wp-block-columns {
		gap: var(--wp--preset--spacing--40);
	}

:where(.onestarPatternSectionInverse, .onestar-pattern-section--inverse) {
	color: var(--wp--preset--color--neutral-50);
}

:where(.onestarPatternMegaMenu, .onestar-pattern-mega-menu) {
	gap: var(--wp--preset--spacing--40);
	padding: var(--wp--preset--spacing--40);
}

/* Mega menu columns (contract v3): three ~14rem tracks in the inline panel, stacked inside the drawer. */
:where(.onestarPatternMegaMenu3Col) {
	--onestar-pattern-column-min: 14rem;
}
