/*
Theme Name: Fabian
Theme URI: https://fabianlopez.com
Author: Fabian Lopez
Author URI: https://fabianlopez.com
Description: Custom block theme for artist Fabian Lopez — minimal gallery-style portfolio. Cloned from Frost.
Requires at least: 6.4
Tested up to: 6.7
Requires PHP: 7.2
Version: 1.0
License: GNU General Public License v3
License URI: https://www.gnu.org/licenses/gpl-3.0.html
Text Domain: fabian
Tags: block-patterns, block-styles, custom-colors, custom-logo, custom-menu, editor-style, full-site-editing, one-column, template-editing, threaded-comments, translation-ready, wide-blocks

/* Defaults
---------------------------------------- */

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

html {
	scroll-behavior: smooth;
}

a,
button,
input:focus,
input[type="button"],
input[type="submit"],
textarea:focus,
.wp-element-button {
	transition: all 0.2s ease-in-out;
}

a,
a:focus,
a:hover,
a:not(.wp-element-button) {
	text-decoration-thickness: 1px;
}

b,
strong,
th {
	font-weight: var(--wp--custom--font-weight--medium);
}

mark {
	background: linear-gradient(90deg, var(--wp--preset--color--primary) 0%, var(--wp--preset--color--primary) 100%);
	background-position: 0 85%;
	background-repeat: repeat-x;
	background-size: 100% 15%;
}

/* -- Forms -- */

input,
select,
textarea {
	background-color: var(--wp--preset--color--base);
	border: 1px solid var(--wp--preset--color--contrast);
	border-radius: 0;
	color: var(--wp--preset--color--contrast);
	font-family: var(--wp--preset--font-family--primary);
	font-size: var(--wp--preset--font-size--medium);
	font-weight: var(--wp--custom--font-weight--light);
	line-height: var(--wp--custom--line-height--body);
	padding: 10px 20px;
	width: 100%;
}

input:focus,
textarea:focus {
	background-color: var(--wp--preset--color--neutral);
	outline: none;
}

input[type="checkbox"],
input[type="image"],
input[type="radio"] {
	width: auto;
}

input[type="button"],
input[type="email"],
input[type="search"],
input[type="submit"],
input[type="text"],
textarea {
	-webkit-appearance: none;
}

::placeholder {
	color: var(--wp--preset--color--contrast);
	font-size: var(--wp--preset--font-size--small);
	opacity: 0.5;
}

/* Blocks
---------------------------------------- */

/* -- Code -- */

*:not(.wp-block-code) > code {
	background-color: var(--wp--preset--color--neutral);
	font-size: var(--wp--preset--font-size--small);
	padding: 5px 8px;
}

/* -- Navigation -- */

.wp-block-navigation__responsive-container.is-menu-open {
	padding: var(--wp--custom--spacing--gap);
}

.wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content {
	padding-top: var(--wp--custom--spacing--gap);
}

.wp-block-navigation__responsive-container-close,
.wp-block-navigation__responsive-container-open {
	border: 1px solid currentColor;
	padding: 2px;
}

.has-background .wp-block-navigation__responsive-container-open:focus,
.has-background .wp-block-navigation__responsive-container-open:hover {
	color: var(--wp--preset--color--base);
}

/* -- Navigation Submenu -- */

.wp-block-navigation:not(.has-background) .wp-block-navigation__submenu-container {
	background-color: var(--wp--preset--color--contrast);
	border: var(--wp--preset--color--contrast);
	color: var(--wp--preset--color--base);
	padding: 10px;
}

.wp-block-navigation :where(.wp-block-navigation__submenu-container) a {
	padding: 2px 10px;
}

/* Media Queries
---------------------------------------- */

@media only screen and (max-width: 600px) {

	/* -- Utility -- */

	.is-style-hidden-mobile {
		display: none !important;
	}

}

/* ============================================================
   Custom styles — Fabian Lopez
   Overrides to Fabian's defaults live below this line.
   NOTE: a Fabian theme update can overwrite style.css. To make
   these permanent, move this section into a child theme.
   ============================================================ */

/* -- Buttons: outline / ghost (minimal gallery style) -- */

.wp-block-button__link.wp-element-button {
	background-color: transparent;
	border: 1px solid var(--wp--preset--color--contrast);
	border-radius: 0;
	color: var(--wp--preset--color--contrast);
}

.wp-block-button__link.wp-element-button:hover,
.wp-block-button__link.wp-element-button:focus {
	background-color: var(--wp--preset--color--contrast);
	border-color: var(--wp--preset--color--contrast);
	color: var(--wp--preset--color--base);
}

/* -- Buttons on dark backgrounds: inverted outline / ghost --
   Two ways to trigger the dark version:
   1. MANUAL — add the CSS class "is-on-dark" to a Button block
      (Button block > Advanced > Additional CSS class(es)).
      Works anywhere, including over dark images (e.g. the hero).
   2. AUTOMATIC — any button placed inside a black (contrast)
      background section inverts on its own, no class needed. */

.wp-block-button.is-on-dark .wp-element-button,
.wp-element-button.is-on-dark,
.has-contrast-background-color .wp-block-button__link.wp-element-button {
	background-color: transparent;
	border: 1px solid var(--wp--preset--color--base);
	color: var(--wp--preset--color--base);
}

.wp-block-button.is-on-dark .wp-element-button:hover,
.wp-block-button.is-on-dark .wp-element-button:focus,
.wp-element-button.is-on-dark:hover,
.wp-element-button.is-on-dark:focus,
.has-contrast-background-color .wp-block-button__link.wp-element-button:hover,
.has-contrast-background-color .wp-block-button__link.wp-element-button:focus {
	background-color: var(--wp--preset--color--base);
	border-color: var(--wp--preset--color--base);
	color: var(--wp--preset--color--contrast);
}

/* -- Works landing grid (tiles) -- */

.works-tile__media img {
	width: 100%;
	transition: opacity 0.2s ease-in-out;
}

.works-tile:hover .works-tile__media img,
.works-tile:focus-within .works-tile__media img {
	opacity: 0.85;
}

.works-tile__label {
	margin-top: 12px;
}

.works-tile__label a {
	text-decoration: none;
}

.works-tile:hover .works-tile__label a,
.works-tile:focus-within .works-tile__label a {
	text-decoration: underline;
	text-underline-offset: 3px;
}

/* -- Artwork cards (Selected Works) -- */

.artwork-card__media img {
	width: 100%;
	cursor: zoom-in;
}

.artwork-card__title {
	margin-top: 16px;
	margin-bottom: 4px;
}

.artwork-card__meta {
	margin-top: 0;
	color: var(--wp--preset--color--contrast);
	opacity: 0.6;
}

/* -- Navigation: sliding underline + active-page state -- */

.wp-block-navigation .wp-block-navigation-item__content {
	position: relative;
	text-decoration: none;
}

.wp-block-navigation .wp-block-navigation-item__content::after {
	content: "";
	position: absolute;
	left: 0;
	right: 0;
	bottom: -3px;
	height: 1px;
	background-color: #26232394;
	transform: scaleX(0);
	transform-origin: right center;
	transition: transform 0.25s ease-in-out;
}

.wp-block-navigation .wp-block-navigation-item__content:hover::after,
.wp-block-navigation .wp-block-navigation-item__content:focus::after,
.wp-block-navigation .wp-block-navigation-item__content[aria-current="page"]::after,
.wp-block-navigation .current-menu-item > .wp-block-navigation-item__content::after {
	transform: scaleX(1);
	transform-origin: left center;
}

/* -- Text style: Eyebrow --
   Apply via the block's Styles panel (Paragraph / Heading > Styles > Eyebrow),
   or add the class "is-style-eyebrow" manually.
   Spec: Oxygen Mono, 12px, 8% tracking. */

.is-style-eyebrow {
	font-family: var(--wp--preset--font-family--oxygen-mono);
	font-size: 12px;
	font-weight: 400;
	line-height: normal;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}

/* -- Social icon hover (GhostKit icons, e.g. Instagram) -- */

.ghostkit-icon-inner .ghostkit-svg-icon {
	display: inline-block;
	transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;
}

.ghostkit-icon-inner:hover .ghostkit-svg-icon,
.ghostkit-icon-inner:focus .ghostkit-svg-icon {
	transform: translateY(-3px);
	opacity: 0.7;
}

/* ============================================================
   Button styles — icon buttons (arrow right / left, download)
   Registered as core/button block styles in functions.php.
   Pick one from the Button block > Styles panel. Borderless,
   mono, uppercase — a text-link look with a currentColor icon
   that slides on hover. Add "is-on-dark" in dark sections.
   ============================================================ */

.wp-block-button.is-style-arrow-right .wp-element-button,
.wp-block-button.is-style-arrow-left .wp-element-button,
.wp-block-button.is-style-download .wp-element-button {
	background-color: transparent;
	border: 0;
	border-radius: 0;
	padding: 0;
	color: var(--wp--preset--color--contrast);
	font-family: var(--wp--preset--font-family--oxygen-mono);
	font-size: 12px;
	font-weight: 400;
	line-height: normal;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	text-decoration: none;
	display: inline-flex;
	align-items: center;
}

.wp-block-button.is-style-arrow-right .wp-element-button:hover,
.wp-block-button.is-style-arrow-right .wp-element-button:focus,
.wp-block-button.is-style-arrow-left .wp-element-button:hover,
.wp-block-button.is-style-arrow-left .wp-element-button:focus,
.wp-block-button.is-style-download .wp-element-button:hover,
.wp-block-button.is-style-download .wp-element-button:focus {
	background-color: transparent;
	color: var(--wp--preset--color--contrast);
}

/* shared icon box */
.wp-block-button.is-style-arrow-right .wp-element-button::after,
.wp-block-button.is-style-download .wp-element-button::after,
.wp-block-button.is-style-arrow-left .wp-element-button::before {
	content: "";
	display: inline-block;
	width: 0.9em;
	height: 0.9em;
	vertical-align: middle;
	background-color: currentColor;
	transition: transform 0.2s ease-in-out;
}

/* arrow right (after the text) */
.wp-block-button.is-style-arrow-right .wp-element-button::after {
	margin-left: 0.45em;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3Cpath d='m13 6 6 6-6 6'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3Cpath d='m13 6 6 6-6 6'/%3E%3C/svg%3E") center / contain no-repeat;
}
.wp-block-button.is-style-arrow-right .wp-element-button:hover::after,
.wp-block-button.is-style-arrow-right .wp-element-button:focus::after {
	transform: translateX(3px);
}

/* arrow left (before the text) */
.wp-block-button.is-style-arrow-left .wp-element-button::before {
	margin-right: 0.45em;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 12H5'/%3E%3Cpath d='m12 19-7-7 7-7'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 12H5'/%3E%3Cpath d='m12 19-7-7 7-7'/%3E%3C/svg%3E") center / contain no-repeat;
}
.wp-block-button.is-style-arrow-left .wp-element-button:hover::before,
.wp-block-button.is-style-arrow-left .wp-element-button:focus::before {
	transform: translateX(-3px);
}

/* download (icon to the right) */
.wp-block-button.is-style-download .wp-element-button::after {
	margin-left: 0.45em;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2'/%3E%3Cpath d='M7 10l5 5 5-5'/%3E%3Cpath d='M12 15V3'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2'/%3E%3Cpath d='M7 10l5 5 5-5'/%3E%3Cpath d='M12 15V3'/%3E%3C/svg%3E") center / contain no-repeat;
}
.wp-block-button.is-style-download .wp-element-button:hover::after,
.wp-block-button.is-style-download .wp-element-button:focus::after {
	transform: translateY(2px);
}

/* dark sections: flip text + icon to the light color, stay borderless */
.wp-block-button.is-style-arrow-right.is-on-dark .wp-element-button,
.wp-block-button.is-style-arrow-left.is-on-dark .wp-element-button,
.wp-block-button.is-style-download.is-on-dark .wp-element-button,
.has-contrast-background-color .wp-block-button.is-style-arrow-right .wp-element-button,
.has-contrast-background-color .wp-block-button.is-style-arrow-left .wp-element-button,
.has-contrast-background-color .wp-block-button.is-style-download .wp-element-button {
	background-color: transparent;
	border: 0;
	color: var(--wp--preset--color--base);
}

/* -- Button style: Outbound (leaves the site) — diagonal ↗ arrow -- */
.wp-block-button.is-style-outbound .wp-element-button {
	background-color: transparent;
	border: 0;
	border-radius: 0;
	padding: 0;
	color: var(--wp--preset--color--contrast);
	font-family: var(--wp--preset--font-family--oxygen-mono);
	font-size: 12px;
	font-weight: 400;
	line-height: normal;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	text-decoration: none;
	display: inline-flex;
	align-items: center;
}

.wp-block-button.is-style-outbound .wp-element-button:hover,
.wp-block-button.is-style-outbound .wp-element-button:focus {
	background-color: transparent;
	color: var(--wp--preset--color--contrast);
}

.wp-block-button.is-style-outbound .wp-element-button::after {
	content: "";
	display: inline-block;
	width: 0.9em;
	height: 0.9em;
	margin-left: 0.45em;
	vertical-align: middle;
	background-color: currentColor;
	transition: transform 0.2s ease-in-out;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 17 17 7'/%3E%3Cpath d='M7 7h10v10'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 17 17 7'/%3E%3Cpath d='M7 7h10v10'/%3E%3C/svg%3E") center / contain no-repeat;
}

.wp-block-button.is-style-outbound .wp-element-button:hover::after,
.wp-block-button.is-style-outbound .wp-element-button:focus::after {
	transform: translate(2px, -2px);
}

.wp-block-button.is-style-outbound.is-on-dark .wp-element-button,
.has-contrast-background-color .wp-block-button.is-style-outbound .wp-element-button {
	background-color: transparent;
	border: 0;
	color: var(--wp--preset--color--base);
}

/* -- Button styles: Outline + icon (keeps the bordered box) --
   Same outline/ghost box as the default button, plus an icon that
   follows the text color (dark → light on hover-fill automatically). */
.wp-block-button.is-style-outline-arrow .wp-element-button::after,
.wp-block-button.is-style-outline-download .wp-element-button::after {
	content: "";
	display: inline-block;
	width: 0.9em;
	height: 0.9em;
	margin-left: 0.6em;
	vertical-align: middle;
	background-color: currentColor;
	transition: transform 0.2s ease-in-out;
}

.wp-block-button.is-style-outline-arrow .wp-element-button::after {
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3Cpath d='m13 6 6 6-6 6'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14'/%3E%3Cpath d='m13 6 6 6-6 6'/%3E%3C/svg%3E") center / contain no-repeat;
}
.wp-block-button.is-style-outline-arrow .wp-element-button:hover::after,
.wp-block-button.is-style-outline-arrow .wp-element-button:focus::after {
	transform: translateX(3px);
}

.wp-block-button.is-style-outline-download .wp-element-button::after {
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2'/%3E%3Cpath d='M7 10l5 5 5-5'/%3E%3Cpath d='M12 15V3'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2'/%3E%3Cpath d='M7 10l5 5 5-5'/%3E%3Cpath d='M12 15V3'/%3E%3C/svg%3E") center / contain no-repeat;
}
.wp-block-button.is-style-outline-download .wp-element-button:hover::after,
.wp-block-button.is-style-outline-download .wp-element-button:focus::after {
	transform: translateY(2px);
}
