diff --git a/assets/css/frontend/header-cards.css b/assets/css/frontend/header-cards.css new file mode 100644 index 00000000..ea17c149 --- /dev/null +++ b/assets/css/frontend/header-cards.css @@ -0,0 +1,143 @@ +/* ============================================================ + * Header icon cards — unified geometry (zibll 1:1) + * + * The top multi-function component ("顶部多功能组件") renders its icon + * cards through one path: aksrt_header_slide() → + * aksrt_icon_cover_card() (see inc/helpers/homepage/header-components.php + * and inc/helpers/aksrt-icon-cards.php). This file is the single source of + * truth for their size/layout, loaded after Zibll main.min.css on every + * page so cards stay identical across home / archive / single / search. + * + * DOM: .header-slider-card.container + * > (.zib-widget.padding-10 | div) + * > .flex.jse.flex-row.gutters-5.flex-col-sm-2 + * > (.flex1 | .relative-h) + * > [.main-color] .icon-cover-card.aksrt-icon-cover-card.flex.ac.(zib-widget|padding-10) + * > .icon-cover-icon.badg.cir.(c-*|jb-*)[.radius4] (the badge) + * > .icon-cover-desc.ml10.flex1.px12-sm + * ============================================================ */ + +/* --- Equal-width cells + zibll gutters (both header wrapper aliases) --- */ +.header-slider-card .flex, +.header-components-card .flex { + display: flex; +} +.header-slider-card .flex.jse, +.header-components-card .flex.jse, +.header-slider-card .jse, +.header-components-card .jse { + justify-content: space-evenly; +} +.header-slider-card .flex-row, +.header-components-card .flex-row { + flex-direction: row; +} +.header-slider-card .flex.ac, +.header-components-card .flex.ac, +.header-slider-card .ac, +.header-components-card .ac { + align-items: center; +} + +.header-slider-card .gutters-5, +.header-components-card .gutters-5, +.header-slider-card .flex.jse.flex-row, +.header-components-card .flex.jse.flex-row { + margin: -5px; +} +.header-slider-card .gutters-5 > *, +.header-components-card .gutters-5 > *, +.header-slider-card .flex.jse.flex-row > *, +.header-components-card .flex.jse.flex-row > * { + padding: 5px !important; + box-sizing: border-box; +} + +/* Higher-specificity scope selector wins over the single-post-only + * zibll-utilities.css `.flex1{flex:1 1 auto}` so every card is equal-width: + * zibll uses `flex:1; overflow:hidden`. */ +.header-slider-card .flex1, +.header-components-card .flex1, +.header-slider-card .flex .flex1, +.header-components-card .flex .flex1 { + flex: 1 1 0; + overflow: hidden; + min-width: 0; +} +.header-slider-card .relative-h, +.header-components-card .relative-h { + position: relative; + height: 100%; +} + +.header-slider-card, +.header-components-card { + position: relative; + margin-top: -40px; + z-index: 1; + width: 100%; +} + +.header-slider-card .zib-widget, +.header-components-card .zib-widget { + margin-bottom: 0; +} + +/* --- Card box: compact zibll proportions in every context --- */ +.icon-cover-card.aksrt-icon-cover-card { + padding: 10px; + font-size: 16px; + line-height: 1.6; + height: 100%; + box-sizing: border-box; +} + +/* --- Icon badge: fixed size so a custom (non-FA) icon cannot stretch it --- */ +.icon-cover-card .icon-cover-icon { + display: flex; + align-items: center; + justify-content: center; + width: 45px; + height: 45px; + min-width: 45px; + font-size: 25px; + flex: 0 0 auto; + box-sizing: border-box; +} +.icon-cover-card .icon-cover-icon > img, +.icon-cover-card .icon-cover-icon > svg { + width: 1.6em; + height: 1.6em; + max-width: 1.6em; + max-height: 1.6em; + object-fit: contain; +} + +/* --- Text column: equal truncation --- */ +.icon-cover-card .icon-cover-desc { + min-width: 0; +} + +/* --- Mobile: two columns + zibll padding overrides --- */ +@media (max-width: 767px) { + .header-slider-card, + .header-components-card { + margin-top: -35px; + } + .header-slider-card .flex.flex-row.flex-col-sm-2, + .header-components-card .flex.flex-row.flex-col-sm-2 { + flex-wrap: wrap; + } + .header-slider-card .flex.flex-row.flex-col-sm-2 > *, + .header-components-card .flex.flex-row.flex-col-sm-2 > * { + flex-basis: 50%; + } + .header-slider-card .icon-cover-card.zib-widget, + .header-components-card .icon-cover-card.zib-widget { + padding: 10px; + } + .header-slider-card .icon-cover-card.padding-10, + .header-components-card .icon-cover-card.padding-10 { + padding: 2px; + } +} \ No newline at end of file diff --git a/assets/css/frontend/header-components.css b/assets/css/frontend/header-components.css deleted file mode 100644 index a779178c..00000000 --- a/assets/css/frontend/header-components.css +++ /dev/null @@ -1,64 +0,0 @@ -@import url("header-components/base.css"); -@import url("header-components/widget-device-visibility.css"); -@import url("header-components/admin-hint.css"); -@import url("header-components/dark-theme.css"); -@import url("header-components/card-device-visibility.css"); -@import url("header-components/search-keywords-row.css"); - -/* === homepage icon-card seams (must not rely solely on @import cache) === */ -.header-slider-card .flex, -.header-components-card .flex { display: flex; } -.header-slider-card .flex.jse, -.header-components-card .flex.jse, -.header-slider-card .jse, -.header-components-card .jse { justify-content: space-evenly; } -.header-slider-card .flex-row, -.header-components-card .flex-row { flex-direction: row; } -.header-slider-card .flex.ac, -.header-components-card .flex.ac, -.header-slider-card .ac, -.header-components-card .ac { align-items: center; } -.header-slider-card .gutters-5, -.header-components-card .gutters-5, -.header-slider-card .flex.jse.flex-row, -.header-components-card .flex.jse.flex-row { - margin: -5px; -} -.header-slider-card .gutters-5 > *, -.header-components-card .gutters-5 > *, -.header-slider-card .flex.jse.flex-row > *, -.header-components-card .flex.jse.flex-row > * { - padding: 5px !important; - box-sizing: border-box; -} -.header-slider-card .flex1, -.header-components-card .flex1, -.header-slider-card .flex .flex1, -.header-components-card .flex .flex1 { - flex: 1 1 0; - overflow: hidden; - min-width: 0; -} -.header-slider-card, -.header-components-card { - position: relative; - margin-top: -40px; - z-index: 1; - width: 100%; -} -.header-slider-card.container, -.header-components-card.container { - width: 100%; - max-width: var(--container, var(--mian-max-width, 1200px)); - margin-left: auto; - margin-right: auto; - padding-left: 15px; - padding-right: 15px; - box-sizing: border-box; -} -.filter-blur .header-slider-card .zib-widget, -.filter-blur .header-components-card .zib-widget { - -webkit-backdrop-filter: saturate(5) blur(20px); - backdrop-filter: saturate(5) blur(20px); - background: var(--blur-bg, rgba(255, 255, 255, 0.75)); -} diff --git a/assets/css/frontend/header-components/admin-hint.css b/assets/css/frontend/header-components/admin-hint.css deleted file mode 100644 index 03628843..00000000 --- a/assets/css/frontend/header-components/admin-hint.css +++ /dev/null @@ -1,76 +0,0 @@ -/* Admin hint */ -.header-components__admin-hint { - margin: 16px auto 0; - padding: 8px 14px; - border-radius: var(--radius-pill, 999px); - background: rgba(0, 0, 0, 0.32); - color: rgba(255, 255, 255, 0.95); - font: 500 13px/1.4 var(--font-ui); - display: inline-flex; - align-items: center; - gap: 8px; - flex-wrap: wrap; - justify-content: center; -} - -.header-components__admin-link { - color: #fff; - text-decoration: underline; - text-decoration-thickness: 1px; - text-underline-offset: 2px; - font-weight: 600; -} - -.header-components__admin-link:hover { - color: #ffe082; -} - -/* Legacy form-class helpers (unused by zibll-aligned search; kept for admin-only markup) */ -.header-components-search__form { - display: flex; - align-items: center; - background: rgba(255, 255, 255, 0.95); - border-radius: 50px; - padding: 4px 4px 4px 20px; - box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); - backdrop-filter: blur(10px); - transition: box-shadow 0.3s ease, transform 0.2s ease; -} - -.header-components-search__form:focus-within { - box-shadow: 0 6px 30px rgba(0, 0, 0, 0.2); - transform: translateY(-1px); -} - -.header-components-search__icon { - color: var(--color-ink-3, #999); - font-size: 16px; - margin-right: 12px; - flex-shrink: 0; -} - -.header-components-search__input { - flex: 1; - border: none !important; - background: transparent !important; - box-shadow: none !important; - font-size: 15px; - padding: 10px 0; - color: var(--color-ink); -} - -.header-components-search__input:focus { - outline: none; -} - -.header-components-search__input::placeholder { - color: var(--color-ink-4, #aaa); -} - -.header-components-search__btn { - border-radius: 50px; - padding: 10px 24px; - font-size: 14px; - font-weight: 500; - flex-shrink: 0; -} diff --git a/assets/css/frontend/header-components/base.css b/assets/css/frontend/header-components/base.css deleted file mode 100644 index 6073bded..00000000 --- a/assets/css/frontend/header-components/base.css +++ /dev/null @@ -1,192 +0,0 @@ -/* ============================================================ - * AKSRT Header Slider — v6.0 Zibll-Aligned - * - * Three layers: - * - Layer 1: Swiper full-bleed background - * - Layer 2: Search overlay (before_html + form + after_html) - * - Layer 3: Icon cards (negative margin) - * - * Title/subtitle for the hero live in .header-slider-search-more.before - * (document flow with the search form). .slide-text is decorative only. - * ============================================================ */ - -/* ============================================================ - * .new-swiper base (zibll) - * ============================================================ */ -.aksrt-slider-wrapper { - position: relative; - margin-bottom: 20px; - border-radius: var(--main-radius, var(--radius, 8px)); - overflow: hidden; - box-shadow: 0 0 10px var(--main-shadow, rgba(116, 116, 116, 0.08)); -} - -.new-swiper { - position: relative; - overflow: hidden; - --pc-height: auto; - --m-height: auto; -} - -.new-swiper .swiper-wrapper { - height: var(--pc-height); -} - -.new-swiper .swiper-slide { - position: relative; - overflow: hidden; -} - -.new-swiper .swiper-slide img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.new-swiper .pagination-thumbnail-item { - width: 60px; - height: 40px; - border-radius: 4px; - overflow: hidden; - opacity: 0.5; - transition: opacity 0.3s, border-color 0.3s; - border: 2px solid transparent; - cursor: pointer; - display: inline-block; -} - -.new-swiper .pagination-thumbnail-item img { - width: 100%; - height: 100%; - object-fit: cover; -} - -.new-swiper .pagination-thumbnail-item-active { - opacity: 1; - border-color: #fff; -} - -.new-swiper [data-swiper-parallax] { - transition: none; -} - -.new-swiper.scale-height .swiper-wrapper { - height: 0; - padding-bottom: var(--scale-ratio, 45%); -} - -/* ============================================================ - * Slide text — decorative layer (zibll .s-desc / .slide-text) - * Main hero title is NOT here; it is search before_html. - * ============================================================ */ -.aksrt-slide-text, -.s-desc, -.slide-text { - position: absolute; - color: #fff; - bottom: 0; - padding: 1.8em 2.5em; - background: linear-gradient(0deg, rgba(0, 0, 0, 0.2), transparent); - width: 100%; - font-size: 16px; - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); - z-index: 1; - border-radius: 0 0 var(--main-radius, 8px) var(--main-radius, 8px); -} - -/* zibll: .slide-text unsets bottom bar, uses abs-center placement */ -.aksrt-slide-text, -.slide-text:not(.s-desc) { - background: unset; - bottom: unset; - --text-size-pc: 20px; - font-size: var(--text-size-pc); - opacity: 1; - transition: opacity 1s; -} - -.aksrt-slide-text__title, -.slide-title { - font-family: var(--font-ui); - font-size: inherit; - font-weight: 600; - margin: 0; - line-height: 1.35; - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); -} - -.s-desc .aksrt-slide-text__title, -.s-desc .slide-title { - font-size: 16px; - font-weight: normal; -} - -.aksrt-slide-text__desc, -.slide-desc { - margin: 0.6em 0 0; - line-height: 1.5; - font-size: 60%; - color: rgba(255, 255, 255, 0.95); - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); -} - -.scale-height { - --scale-height: 40%; - --pc-height: 100%; - --m-height: 100%; - width: 100%; - height: auto; - aspect-ratio: 5 / 2; - padding-bottom: 0; -} - -@supports not (aspect-ratio: 1 / 1) { - .scale-height { - height: 0; - padding-bottom: var(--scale-height); - box-sizing: content-box; - aspect-ratio: auto; - } -} - -.scale-height .swiper-wrapper, -.scale-height .swiper-slide img { - position: absolute; -} - -@media (max-width: 767px) { - .new-swiper .swiper-wrapper { - height: var(--m-height); - } - - .slide-text:not(.s-desc) { - --text-size-m: 13px; - font-size: var(--text-size-m); - } -} - -/* ============================================================ - * Container - * ============================================================ */ -.header-slider-container, -.header-components-container { - position: relative; - isolation: isolate; - width: 100%; - margin-bottom: 20px; -} - -/* Device visibility for hero/banner slides */ -@media (max-width: 767.98px) { - .hero-slide--pc-only, - .banner-slide--pc-only { - display: none !important; - } -} - -@media (min-width: 768px) { - .hero-slide--mobile-only, - .banner-slide--mobile-only { - display: none !important; - } -} diff --git a/assets/css/frontend/header-components/card-device-visibility.css b/assets/css/frontend/header-components/card-device-visibility.css deleted file mode 100644 index c6ac6eef..00000000 --- a/assets/css/frontend/header-components/card-device-visibility.css +++ /dev/null @@ -1,175 +0,0 @@ -/* ===== Card device visibility ===== */ -@media (min-width: 768px) { - .hide-cards-pc .header-components-card { display: none; } -} -@media (max-width: 767px) { - .hide-cards-mobile .header-components-card { display: none; } -} - -.theme-dark .header-components-search .line-form, -html.dark .header-components-search .line-form { - background: rgba(30, 30, 30, 0.86); - color: #ddd; -} - -/* zibll base padding; leave room for abs-right submit */ -.header-components-search .search-input-text, -.header-slider-search .search-input-text { - position: relative; - padding: 5px 42px 5px 10px; -} - -.header-components-search .line-form-input { - width: 100%; - padding: 0.65em 0 0.2em 0; - font-size: 16px; - border: none !important; - outline: 0 !important; - background: transparent !important; - box-shadow: none !important; - opacity: 0.92; - color: var(--color-ink); -} - -.theme-dark .header-components-search .line-form-input, -html.dark .header-components-search .line-form-input { - color: #f2f2f2; -} - -.header-components-search .line-form-input::placeholder { - color: transparent; -} - -.header-components-search .line-form-line, -.header-components-search .line-form-line::before { - position: absolute; - left: 0; - bottom: 0; - width: 100%; - height: 1px; - transition: 0.4s; - background: rgba(255, 255, 255, 0.34); -} - -.header-components-search .line-form-line::before { - content: ""; - width: 0; - background: rgba(255, 255, 255, 0.92); -} - -.header-components-search .line-form-input:focus ~ .line-form-line::before, -.header-components-search .line-form-input:not(:placeholder-shown) ~ .line-form-line::before { - width: 100%; -} - -.header-components-search .scale-placeholder { - position: absolute; - left: 0; - bottom: 0.72em; - opacity: 0.68; - transition: transform 0.2s, font-size 0.2s, color 0.2s, opacity 0.2s; - pointer-events: none; - transform-origin: left top; -} - -.header-components-search .scale-placeholder.is-focus, -.header-components-search .line-form-input:focus ~ .scale-placeholder, -.header-components-search .line-form-input:not(:placeholder-shown) ~ .scale-placeholder { - transform: translateY(-1.45em); - font-size: 12px; - color: #fff; - opacity: 0.92; -} - -/* zibll: .header-slider-search .line-form .abs-right { margin-top:0; margin-right:-6px; } */ -.header-components-search .line-form .abs-right, -.header-slider-search .line-form .abs-right { - position: absolute; - right: 0.7em; - top: 50%; - transform: translateY(-50%); - margin-top: 0; - margin-right: -6px; - z-index: 1; -} - -.header-components-search__submit { - width: 34px; - height: 34px; - border: none; - border-radius: 999px; - background: var(--color-primary, var(--color-primary)); - color: #fff; - display: inline-flex; - align-items: center; - justify-content: center; - cursor: pointer; -} - -.header-components-search__submit svg { - width: 15px; - height: 15px; -} - -/* Search add-ons: category dropdown */ -.header-components-search__cat { - appearance: none; - -webkit-appearance: none; - background: transparent; - border: none; - border-right: 1px solid rgba(255, 255, 255, 0.25); - color: inherit; - font-size: 13px; - padding: 0 12px; - min-width: 90px; - max-width: 140px; - cursor: pointer; - outline: none; - height: 40px; -} - -.header-components-search__cat option { - color: #333; - background: #fff; -} - -/* Search add-ons: type switcher */ -.header-components-search__types { - display: flex; - align-items: center; - gap: 4px; - padding: 0 8px; - border-right: 1px solid rgba(255, 255, 255, 0.25); -} - -.header-components-search__type-label { - display: inline-flex; - align-items: center; - cursor: pointer; - font-size: 12px; - padding: 3px 8px; - border-radius: 100px; - transition: background 0.2s, color 0.2s; - white-space: nowrap; -} - -.header-components-search__type-radio { - display: none; -} - -.header-components-search__type-radio:checked + .header-components-search__type-text { - color: var(--color-primary, #4a90d9); - font-weight: 600; -} - -/* has-addons: pill adjustments */ -.line-form.has-addons { - display: flex; - align-items: center; -} - -.line-form.has-addons .search-input-text { - flex: 1; - min-width: 0; -} - diff --git a/assets/css/frontend/header-components/dark-theme.css b/assets/css/frontend/header-components/dark-theme.css deleted file mode 100644 index 24ac644b..00000000 --- a/assets/css/frontend/header-components/dark-theme.css +++ /dev/null @@ -1,174 +0,0 @@ -/* Dark theme */ -.theme-dark .header-components-search__form, -html.dark .header-components-search__form, -body.dark-theme .header-components-search__form { - background: rgba(30, 30, 30, 0.9); -} - - -.theme-dark .header-components-search__input, -html.dark .header-components-search__input, -body.dark-theme .header-components-search__input { - color: #eee; -} - -/* ============================================================ - * Layer 3: Icon cards — 1:1 zibll header-slider-card - * DOM: .header-slider-card.container > (.zib-widget.padding-10|div) - * > .flex.jse.flex-row.gutters-5.flex-col-sm-2 - * > (.flex1|.relative-h) > [.main-color >] .icon-cover-card.flex.ac.(zib-widget|padding-10) - * - * IMPORTANT: gutters/flex helpers must live here (not only zibll-utilities.css). - * zibll-utilities was single-post-only, so homepage cards stuck together while - * other pages that load utilities showed 10px gaps — exact user screenshot bug. - * ============================================================ */ - -/* Self-contained zibll flex + gutters for header cards (page-type independent) */ -.header-slider-card .flex, -.header-components-card .flex { - display: flex; -} -.header-slider-card .flex.jse, -.header-components-card .flex.jse, -.header-slider-card .jse, -.header-components-card .jse { - justify-content: space-evenly; -} -.header-slider-card .flex-row, -.header-components-card .flex-row { - flex-direction: row; -} -.header-slider-card .flex.ac, -.header-components-card .flex.ac, -.header-slider-card .ac, -.header-components-card .ac { - align-items: center; -} -/* zibll: .gutters-5 { margin:-5px } > * { padding:5px } → 10px visual gap. - * Use both gutters model AND flex gap so homepage (which used to miss - * zibll-utilities) and any future cascade zero-padding still show seams. */ -.header-slider-card .gutters-5, -.header-components-card .gutters-5, -.header-slider-card .flex.jse.flex-row, -.header-components-card .flex.jse.flex-row { - margin: -5px; - gap: 0; /* spacing comes from child padding to match zibll exactly */ -} -.header-slider-card .gutters-5 > *, -.header-components-card .gutters-5 > *, -.header-slider-card .flex.jse.flex-row > *, -.header-components-card .flex.jse.flex-row > * { - padding: 5px !important; - box-sizing: border-box; -} -.header-slider-card .flex1, -.header-components-card .flex1, -.header-slider-card .flex .flex1, -.header-components-card .flex .flex1 { - flex: 1 1 0; - overflow: hidden; - min-width: 0; -} -.header-slider-card .relative-h, -.header-components-card .relative-h { - position: relative; - height: 100%; -} - -.header-slider-card, -.header-components-card { - position: relative; - margin-top: -40px; - z-index: 1; - /* Sit in normal flow after the slide shell; container is full-bleed */ - width: 100%; -} - -/* Ensure .container max-width + horizontal padding match site main (zibll .container) */ -.header-slider-card.container, -.header-components-card.container { - width: 100%; - max-width: var(--container, var(--mian-max-width, 1200px)); - margin-left: auto; - margin-right: auto; - padding-left: 15px; - padding-right: 15px; - box-sizing: border-box; -} - -.header-slider-card .zib-widget, -.header-components-card .zib-widget { - margin-bottom: 0; -} - -/* zibll filter-blur glass on card surfaces + search form */ -.filter-blur .header-slider-search .line-form, -.filter-blur .header-components-search .line-form, -.filter-blur .header-slider-card .zib-widget, -.filter-blur .header-components-card .zib-widget { - -webkit-backdrop-filter: saturate(5) blur(20px); - backdrop-filter: saturate(5) blur(20px); -} - -.filter-blur .header-slider-card .zib-widget, -.filter-blur .header-components-card .zib-widget { - background: var(--blur-bg, rgba(255, 255, 255, 0.75)); -} - -.theme-dark .filter-blur .header-slider-card .zib-widget, -html.dark .filter-blur .header-slider-card .zib-widget, -body.dark-theme .filter-blur .header-slider-card .zib-widget, -.theme-dark .filter-blur .header-components-card .zib-widget, -html.dark .filter-blur .header-components-card .zib-widget, -body.dark-theme .filter-blur .header-components-card .zib-widget { - background: var(--blur-bg, rgba(30, 30, 30, 0.75)); -} - -/* Device-split blur (AKSRT extension of zibll filter-blur) */ -@media (min-width: 768px) { - .has-blur-pc .header-slider-card .zib-widget, - .has-blur-pc .header-components-card .zib-widget { - -webkit-backdrop-filter: saturate(5) blur(20px); - backdrop-filter: saturate(5) blur(20px); - background: var(--blur-bg, rgba(255, 255, 255, 0.75)); - } - .has-blur-pc .header-components-search .line-form, - .has-blur-pc .header-slider-search .line-form { - background: rgba(255, 255, 255, 0.75); - } - .theme-dark .has-blur-pc .header-slider-card .zib-widget, - html.dark .has-blur-pc .header-slider-card .zib-widget, - .theme-dark .has-blur-pc .header-components-card .zib-widget, - html.dark .has-blur-pc .header-components-card .zib-widget { - background: var(--blur-bg, rgba(30, 30, 30, 0.75)); - } -} -@media (max-width: 767px) { - .has-blur-mobile .header-slider-card .zib-widget, - .has-blur-mobile .header-components-card .zib-widget { - -webkit-backdrop-filter: saturate(5) blur(20px); - backdrop-filter: saturate(5) blur(20px); - background: var(--blur-bg, rgba(255, 255, 255, 0.75)); - } - .has-blur-mobile .header-components-search .line-form, - .has-blur-mobile .header-slider-search .line-form { - background: rgba(255, 255, 255, 0.75); - } - .theme-dark .has-blur-mobile .header-slider-card .zib-widget, - html.dark .has-blur-mobile .header-slider-card .zib-widget, - .theme-dark .has-blur-mobile .header-components-card .zib-widget, - html.dark .has-blur-mobile .header-components-card .zib-widget { - background: var(--blur-bg, rgba(30, 30, 30, 0.75)); - } - - .header-slider-card .icon-cover-card.zib-widget { - padding: 10px; - } - .header-slider-card .icon-cover-card.padding-10 { - padding: 2px; - } - .header-slider-card, - .header-components-card { - margin-top: -35px; - } -} diff --git a/assets/css/frontend/header-components/search-keywords-row.css b/assets/css/frontend/header-components/search-keywords-row.css deleted file mode 100644 index cf3ef36b..00000000 --- a/assets/css/frontend/header-components/search-keywords-row.css +++ /dev/null @@ -1,463 +0,0 @@ -/* Search keywords row + zibll mobile search top offsets */ - -.header-components-search__keywords, -.header-slider-search .search-keywords { - display: flex; - flex-wrap: wrap; - gap: 6px; - margin-top: 10px; - justify-content: center; - text-align: center; -} - -/* zibll: .header-slider-search .search_keywords, .header-slider-search .search-type-but-average .but */ -.header-components-search__kw-tag, -.header-slider-search .search_keywords, -.header-slider-search .search-keywords .but, -.header-slider-search .search-type-but-average .but { - --this-bg: rgba(255, 255, 255, 0.8); - --this-color: #888; - display: inline-block; - padding: 3px 5px; - font-size: 0.85em; - line-height: 1.4; - border-radius: 100px; - background: var(--this-bg); - color: var(--this-color); - text-decoration: none; - transition: background 0.2s; -} - -.header-slider-search .search-type-but-average .but.active { - --this-bg: var(--focus-color, var(--color-primary)); - --this-color: #fff; -} - -.filter-blur .header-slider-search .search_keywords, -.filter-blur .header-slider-search .search-keywords .but, -.filter-blur .header-slider-search .search-type-but-average .but, -.filter-blur .header-components-search__kw-tag { - -webkit-backdrop-filter: saturate(5) blur(20px); - backdrop-filter: saturate(5) blur(20px); -} - -.header-components-search__kw-tag:hover, -.header-slider-search .search_keywords:hover, -.header-slider-search .search-keywords .but:hover { - background: rgba(255, 255, 255, 0.95); -} - -/* Hide default keywords title row inside hero overlay (zibll header search has no title line). */ -.header-slider-search .search-keywords > p { - display: none; -} - -.header-slider-search .search-keywords { - text-align: center; -} - -/* zibll mobile (max-width: 767px) search / card offsets */ -@media (max-width: 767px) { - - .header-slider-container .new-swiper.slide-header .swiper-wrapper, - .new-swiper.slide-index.slide-header .swiper-wrapper { - height: var(--m-height); - } - - .header-components:not(.new-swiper) { - height: var(--m-height); - } - - .header-components--gradient { - height: var(--m-height); - } - - .header-slider-search, - .header-components-search, - .header-slider-search.abs-center, - .header-components-search.abs-center { - font-size: 12px; - top: calc(50% - 40px); - width: 100%; - max-width: 840px; - padding: 0 20px; - } - - .card-1 .header-slider-search, - .card-1 .header-components-search, - .card-2 .header-slider-search, - .card-2 .header-components-search { - top: calc(50% - 1px); - } - - .card-5 .header-slider-search, - .card-5 .header-components-search, - .card-6 .header-slider-search, - .card-6 .header-components-search { - top: calc(50% - 83px); - } - - .card-7 .header-slider-search, - .card-7 .header-components-search, - .card-8 .header-slider-search, - .card-8 .header-components-search { - top: calc(50% - 120px); - } - - .header-slider-search-more.before { - margin-bottom: 1em; - } - - .header-slider-search .line-form, - .header-components-search .line-form { - font-size: 14px; - padding: 4px 12px; - } - - .header-slider-search .scale-placeholder.is-focus, - .header-slider-search .line-form-input:focus ~ .scale-placeholder, - .header-components-search .scale-placeholder.is-focus, - .header-components-search .line-form-input:focus ~ .scale-placeholder { - transform: translateY(-32px); - font-size: 12px; - color: #fff; - } - - .header-slider-card, - .header-components-card { - margin-top: -35px; - } - - - .header-slider-card .icon-cover-card.zib-widget { - padding: 10px; - } - .header-slider-card .icon-cover-card.padding-10 { - padding: 2px; - } - - - /* zibll ~640px: slide-header text padding 52px */ - .header-components.slide-header .slide-text, - .header-components.slide-header .header-components__content.slide-text { - padding-top: 52px; - } - - .s-desc, - .slide-text { - padding: 0.7em; - } -} - -@media (max-width: 640px) { - .header-components.slide-header .slide-text, - .header-components.slide-header .header-components__content.slide-text { - padding-top: 52px; - } -} - -/* Nav transparent helpers (when hero is present) */ -.site-nav.nav-transparent { - background-color: transparent; - border-bottom-color: transparent; - color: #fff; -} - -.site-nav.nav-transparent .site-brand, -.site-nav.nav-transparent .site-brand__name { - color: #fff; -} - -.site-nav.nav-transparent .icon-btn { - color: rgba(255, 255, 255, 0.9); -} - -.site-nav.nav-transparent .icon-btn:hover { - background: rgba(255, 255, 255, 0.15); - color: #fff; -} - -.site-nav.nav-transparent ul.nav-desktop a { - color: rgba(255, 255, 255, 0.85); -} - -.site-nav.nav-transparent ul.nav-desktop a:hover { - color: #fff; - background: rgba(255, 255, 255, 0.15); -} - -.site-nav.nav-transparent ul.nav-desktop .current-menu-item > a, -.site-nav.nav-transparent ul.nav-desktop .current_page_item > a { - background: rgba(255, 255, 255, 0.2); - color: #fff; -} - -.site-nav.nav-transparent .nav-auth .btn-outline { - border-color: rgba(255, 255, 255, 0.6); - color: #fff; -} - -.site-nav.nav-transparent .nav-auth .btn-outline:hover { - background: rgba(255, 255, 255, 0.15); - border-color: #fff; -} - -.site-nav.nav-transparent .nav-user__toggle { - border-color: rgba(255, 255, 255, 0.5); -} - -.site-nav.nav-transparent.is-scrolled { - background-color: var(--surface-page); - border-bottom-color: var(--color-line); - color: var(--color-ink); -} - -.site-nav.nav-transparent.is-scrolled .site-brand, -.site-nav.nav-transparent.is-scrolled .site-brand__name { - color: var(--color-ink); -} - -.site-nav.nav-transparent.is-scrolled .icon-btn { - color: var(--color-ink-3); -} - -.site-nav.nav-transparent.is-scrolled ul.nav-desktop a { - color: var(--color-ink-3); -} - -.site-nav.nav-transparent.is-scrolled .nav-auth .btn-outline { - border-color: var(--color-line); - color: var(--color-ink); -} - -.site-nav.nav-transparent.is-scrolled .nav-user__toggle { - border-color: var(--color-line); -} - -/* Swiper nav / pagination (header) */ -.header-components .swiper-button-prev, -.header-components .swiper-button-next { - width: 30px; - height: 40px; - color: #fff; - text-shadow: 0 0 6px #444; - opacity: 0; - transition: opacity 0.3s, background-color 0.3s; - z-index: 10; -} - -.header-components .swiper-button-prev::after, -.header-components .swiper-button-next::after { - font-size: 16px; - font-weight: 700; -} - -.header-components:hover .swiper-button-prev, -.header-components:hover .swiper-button-next { - opacity: 0.8; -} - -.header-components .swiper-button-prev:hover, -.header-components .swiper-button-next:hover { - opacity: 1; - background-color: rgba(0, 0, 0, 0.3); -} - -.header-components .swiper-pagination-bullet { - width: 10px; - height: 10px; - background: transparent; - border: 2px solid rgba(255, 255, 255, 0.6); - opacity: 0.7; - border-radius: 20px; - transition: 0.4s; -} - -.header-components .swiper-pagination-bullet-active { - background: #fff; - border-color: #fff; - opacity: 1; -} - -@media (max-width: 640px) { - .header-components .swiper-button-prev, - .header-components .swiper-button-next { - display: none; - } -} - -/* ============================================================ - * Banner Module — zibll .s-desc style (unchanged geometry) - * ============================================================ */ -.banner-module { - position: relative; - width: 100%; - border-radius: var(--main-radius, var(--radius, 8px)); - overflow: hidden; - box-shadow: 0 0 10px var(--main-shadow, rgba(116, 116, 116, 0.08)); - margin-bottom: 20px; - background: var(--main-bg-color, var(--surface-1)); -} - -.banner-module__swiper { - position: relative; - width: 100%; - height: auto; - aspect-ratio: 5 / 2; - overflow: hidden; -} - -@supports not (aspect-ratio: 1 / 1) { - .banner-module__swiper { - height: 0; - padding-bottom: 40%; - box-sizing: content-box; - } -} - -.banner-module__swiper .swiper-wrapper { - position: absolute; - inset: 0; - width: 100%; - height: 100% !important; -} - -.banner-module__swiper .swiper-slide { - position: relative; - overflow: hidden; - cursor: pointer; - width: 100%; - height: 100% !important; -} - -.banner-module__slide-bg { - position: absolute; - inset: 0; - width: 100%; - height: 100%; -} - -.banner-module__slide-bg img, -.banner-module__slide-bg .fit-cover { - display: block; - width: 100%; - height: 100%; - max-width: none; - object-fit: cover; - border-radius: 0; -} - -.banner-module__slide-fallback { - width: 100%; - height: 100%; - background: linear-gradient(135deg, var(--color-primary), var(--color-primary-active, var(--color-primary-dark))); -} - -.banner-module__slide-overlay { - position: absolute; - left: 0; - right: 0; - bottom: 0; - top: auto; - height: 45%; - background: linear-gradient(0deg, rgba(0, 0, 0, 0.2), transparent); - pointer-events: none; - border-radius: 0 0 var(--main-radius, 8px) var(--main-radius, 8px); - z-index: 1; -} - -.banner-module__content { - position: absolute; - bottom: 0; - left: 0; - right: 0; - z-index: 2; - color: #fff; - max-width: none; - padding: 1.8em 2.5em; - font-size: 16px; - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); -} - -.banner-module__title { - font-family: var(--font-ui); - font-size: 16px; - font-weight: normal; - margin: 0 0 4px; - line-height: 1.4; - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); -} - -.banner-module__subtitle { - font-size: 14px; - margin: 0; - opacity: 0.95; - line-height: 1.5; - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); -} - -.banner-module .swiper-button-prev, -.banner-module .swiper-button-next { - width: 30px; - height: 40px; - border-radius: 0; - background: transparent; - color: #fff; - text-shadow: 0 0 6px #444; - opacity: 0; - pointer-events: none; - z-index: 10; - transition: opacity 0.3s, background-color 0.3s; -} - -.banner-module .swiper-button-prev::after, -.banner-module .swiper-button-next::after { - font-size: 16px; - font-weight: 700; -} - -.banner-module:hover .swiper-button-prev, -.banner-module:hover .swiper-button-next { - opacity: 0.8; - pointer-events: auto; -} - -.banner-module .swiper-button-prev:hover, -.banner-module .swiper-button-next:hover { - opacity: 1; - background-color: rgba(0, 0, 0, 0.3); - transform: none; -} - -@media (max-width: 767px) { - .banner-module { - border-radius: var(--main-radius, 8px); - } - - .banner-module__swiper { - aspect-ratio: 2 / 1; - height: auto; - } - - @supports not (aspect-ratio: 1 / 1) { - .banner-module__swiper { - height: 0; - padding-bottom: 50%; - box-sizing: content-box; - } - } - - .banner-module__content { - padding: 1em 1.2em; - font-size: 14px; - } - - .banner-module__title { - font-size: 14px; - } - - .banner-module .swiper-button-prev, - .banner-module .swiper-button-next { - display: none; - } -} diff --git a/assets/css/frontend/header-components/widget-device-visibility.css b/assets/css/frontend/header-components/widget-device-visibility.css deleted file mode 100644 index 8dea9eb1..00000000 --- a/assets/css/frontend/header-components/widget-device-visibility.css +++ /dev/null @@ -1,393 +0,0 @@ -/* Widget device visibility */ -@media (max-width: 767.98px) { - .aksrt-widget--mobile-only { - display: none !important; - } -} - -@media (min-width: 768px) { - .aksrt-widget--pc-only { - display: none !important; - } -} - -/* Fixed homepage hero under-nav is owned by Zibll main.css. */ - -/* ============================================================ - * Layer 1: Swiper shell — zibll .new-swiper.slide-header - * Height lives on CSS vars of .new-swiper; wrapper height = --pc-height / --m-height - * ============================================================ */ -.header-slider-container .new-swiper.slide-header, -.new-swiper.slide-index.slide-header { - position: relative; - width: 100%; - overflow: hidden; - padding-top: 0; - border-radius: 0; - background: #111; - /* Defaults if PHP did not set style vars */ - --pc-height: 550px; - --m-height: 280px; -} - -.header-slider-container .new-swiper.slide-header .swiper-wrapper, -.new-swiper.slide-index.slide-header .swiper-wrapper { - height: var(--pc-height); - display: flex; -} - -.header-slider-container .new-swiper.slide-header .swiper-slide, -.new-swiper.slide-index.slide-header .swiper-slide { - position: relative; - height: 100%; - overflow: hidden; - width: 100%; - flex-shrink: 0; -} - -/* zibll: slide media fill wrapper height */ -.header-slider-container .new-swiper.slide-header .swiper-slide img, -.header-slider-container .new-swiper.slide-header .swiper-slide video, -.new-swiper.slide-index.slide-header .swiper-slide img, -.new-swiper.slide-index.slide-header .swiper-slide video { - width: 100%; - height: 100%; - object-fit: cover; - border-radius: 0 !important; - display: block; -} - -.header-slider-container .new-swiper.slide-header .swiper-slide > a, -.header-slider-container .new-swiper.slide-header .swiper-slide > span, -.new-swiper.slide-index.slide-header .swiper-slide > a, -.new-swiper.slide-index.slide-header .swiper-slide > span { - display: block; - width: 100%; - height: 100%; - position: relative; -} - -/* Keep legacy .header-components shell for gradient fallback only */ -.header-components:not(.new-swiper) { - position: relative; - width: 100%; - --pc-height: 550px; - --m-height: 280px; - height: var(--pc-height); - max-height: none; - overflow: hidden; - background: #111; -} - -.header-components.slide-header:not(.new-swiper) { - padding-top: 0; - border-radius: 0; -} - -/* zibll: .slide-header .slide-text { padding-top: 70px; } — nav clearance only */ -.header-components.slide-header .slide-text, -.header-components.slide-header .header-components__content.slide-text { - padding-top: 70px; -} - -/* Gradient fallback */ -.header-components--gradient { - background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-active, var(--color-primary-dark)) 100%); - display: block; - position: relative; - height: var(--pc-height); -} - -.header-components--gradient::before { - content: ""; - position: absolute; - inset: 0; - background: radial-gradient(ellipse 80% 60% at 20% 20%, rgba(255, 255, 255, 0.15), transparent), - radial-gradient(ellipse 50% 50% at 80% 80%, rgba(0, 0, 0, 0.2), transparent); - pointer-events: none; -} - -.header-components:not(.new-swiper) .swiper-wrapper { - position: absolute; - inset: 0; - height: 100%; - width: 100%; -} - -.header-components:not(.new-swiper) .swiper-slide { - position: relative; - height: 100%; - overflow: hidden; - cursor: pointer; -} - -/* Legacy BEM slide bg — only when old markup still present */ -.header-components__slide-bg { - position: absolute; - inset: 0; - overflow: hidden; -} - -.header-components__slide-bg img, -.header-components__slide-bg .fit-cover { - width: 100%; - height: 100%; - object-fit: cover; -} - -.header-components__slide-fallback { - width: 100%; - height: 100%; - background: linear-gradient(135deg, var(--color-primary), var(--color-primary-dark)); -} - -.header-components__video { - position: absolute; - inset: 0; - width: 100%; - height: 100%; - object-fit: cover; - z-index: 0; -} - -.header-components__layer { - position: absolute; - inset: 0; - background-size: cover; - background-repeat: no-repeat; - background-position: center; - pointer-events: none; -} - -.header-components__layer--free-size { - background-size: auto; -} - -.header-components__layer--parallax { - will-change: transform, opacity; - opacity: var(--layer-parallax-opacity, 0.6); - transform: translateY(calc(var(--scroll-y, 0) * var(--layer-parallax-scale, 0.3) * 1px)); -} - -/* Text parallax — keep abs-center vertical model (translateY only when abs-center is full-width) */ -.has-text-parallax { - will-change: transform; -} - -.header-components__content[style*="--hero-text-size-pc"] .slide-title, -.header-components__content[style*="--text-size-pc"] .slide-title { - font-size: inherit; -} - -.header-components__slide-overlay { - position: absolute; - inset: 0; - background: linear-gradient( - to bottom, - rgba(0, 0, 0, 0.05) 0%, - rgba(0, 0, 0, 0.12) 55%, - rgba(0, 0, 0, 0.28) 100% - ); - z-index: 1; - pointer-events: none; -} - -/* Bottom-bar .s-desc mode */ -.header-components__content.s-desc, -.header-components__content.slide-text.s-desc { - top: auto; - bottom: 0; - left: 0; - right: 0; - transform: none; - width: 100%; - max-width: none; - text-align: left; - padding: 1.8em 2.5em; - background: linear-gradient(0deg, rgba(0, 0, 0, 0.2), transparent); - border-radius: 0 0 var(--main-radius, 8px) var(--main-radius, 8px); - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); - font-size: 16px; -} - -.header-components__content.s-desc .header-components__title, -.header-components__content.s-desc .slide-title { - font-size: 16px; - font-weight: normal; - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); - letter-spacing: 0; -} - -.header-components__content.slide-text { - background: unset; -} - -/* ============================================================ - * Layer 2: Search — zibll .header-slider-search - * Full-width abs-center + fine-tuned top (NOT point-centered). - * Title/subtitle are in .header-slider-search-more.before (flow). - * ============================================================ */ -.header-slider-search.abs-center, -.header-components-search.abs-center { - position: absolute; - left: 0; - right: 0; - width: 100%; - top: calc(50% - 10px); - transform: translateY(-50%); - z-index: 2; - margin: auto; - max-width: 840px; - padding: 0 20px; - font-size: 17px; - color: #fff; - box-sizing: border-box; -} - -.header-slider-search, -.header-components-search { - max-width: 840px; - margin: auto; - padding: 0 20px; - font-size: 17px; - top: calc(50% - 10px); - z-index: 2; -} - -.card-0 .header-slider-search, -.card-0 .header-components-search { - top: calc(50% + 20px); -} - -.header-slider-search .search-input, -.header-components-search .search-input { - max-width: 800px; - margin: 0 auto; -} - -.header-slider-search-more { - color: #fff; -} - -.header-slider-search-more.before { - margin-bottom: 1.8em; -} - -.header-slider-search .search-form, -.header-components-search .search-form { - margin: 0; - display: block; - background: transparent; - border-radius: 0; - padding: 0; - box-shadow: none; - -webkit-backdrop-filter: none; - backdrop-filter: none; - transform: none; -} - -.header-slider-search .line-form, -.header-components-search .line-form { - background: rgba(255, 255, 255, 0.8); - border-radius: 100px; - padding: 0.5em 1.2em; - z-index: 1; - color: #555; - border: none; - box-shadow: none; - position: relative; -} - -.has-blur-pc .header-slider-search .line-form, -.has-blur-mobile .header-slider-search .line-form, -.filter-blur .header-slider-search .line-form, -.has-blur-pc .header-components-search .line-form, -.has-blur-mobile .header-components-search .line-form, -.filter-blur .header-components-search .line-form { - -webkit-backdrop-filter: saturate(5) blur(20px); - backdrop-filter: saturate(5) blur(20px); -} - -.header-slider-search .line-form .icon, -.header-slider-search .line-form a, -.header-components-search .line-form .icon, -.header-components-search .line-form a { - color: #555; -} - -/* ============================================================ - * Layer 3: Icon cards — margin-top:-40px (zibll) - * ============================================================ */ -.header-slider-card, -.header-components-card { - position: relative; - margin-top: -40px; - z-index: 1; -} - -.header-components-card .zib-widget, -.header-components-card .aksrt-theme-box, -.header-components-card .icon-cover-card { - margin-bottom: 0; -} - -.has-blur-pc .header-components-card .zib-widget, -.has-blur-pc .header-components-card .aksrt-theme-box, -.has-blur-mobile .header-components-card .zib-widget, -.filter-blur .header-components-card .zib-widget { - -webkit-backdrop-filter: saturate(5) blur(20px); - backdrop-filter: saturate(5) blur(20px); - background: var(--blur-bg); -} - -.header-components.slide-header .swiper-slide img, -.header-components.slide-header .header-components__slide-bg img { - border-radius: 0 !important; -} - -/* Decorative slide text content (not the main hero stack) */ -.header-components__content.slide-text:not(.s-desc) { - /* Placement comes from .abs-center + optional alignment modifiers */ - z-index: 1; - color: #fff; - max-width: none; - width: 100%; -} - -.header-components__title, -.header-components .slide-title { - font-family: var(--font-ui); - font-weight: 600; - margin: 0; - line-height: 1.35; - letter-spacing: 0; - color: #fff; - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); -} - -.header-components__subtitle, -.header-components .slide-desc { - margin: 0.6em 0 0; - line-height: 1.5; - color: rgba(255, 255, 255, 0.95); - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); -} - -.header-components__description { - font-size: 0.85em; - margin: 0.4em 0 0; - line-height: 1.5; - color: rgba(255, 255, 255, 0.85); - text-shadow: 0 0 8px rgba(0, 0, 0, 0.3); -} - - -/* zibll: header-slider-search .search-input-text .line-form-line { display:none } */ -.header-slider-search .search-input-text .line-form-line, -.header-components-search .search-input-text .line-form-line { - display: none; -} - -.header-slider-search .search-type-but-average { - margin-bottom: 2em; -} diff --git a/src/Core/ScriptsPart1b.php b/src/Core/ScriptsPart1b.php index fb02041e..9a00e90b 100644 --- a/src/Core/ScriptsPart1b.php +++ b/src/Core/ScriptsPart1b.php @@ -106,6 +106,7 @@ trait ScriptsPart1b { // AKSRT domain styles load after Zibll main.css. The old aggregate is // intentionally not used because it contains the removed navigation CSS. $enqueue_module('base'); + $enqueue_module('header-cards'); $enqueue_module('card-primitives'); $enqueue_module('overlay-primitives'); $enqueue_module('layout'); diff --git a/tests/widget-system/icon-card-contract.test.cjs b/tests/widget-system/icon-card-contract.test.cjs index ab28e6ce..821974e2 100644 --- a/tests/widget-system/icon-card-contract.test.cjs +++ b/tests/widget-system/icon-card-contract.test.cjs @@ -25,13 +25,13 @@ test('icon card renderers keep vertical and horizontal Zibll DOM contracts separ }); test('homepage horizontal cards use the shared compact card contract and retain Zibll responsive rules', () => { - const css = read('assets/css/frontend/header-components/dark-theme.css'); + const css = read('assets/css/frontend/header-cards.css'); const baseCss = read('assets/css/frontend/base.css'); const widgetCss = read('assets/widgets/frontend.css'); assert.match(baseCss, /\.icon-cover-card\.aksrt-icon-cover-card\s*\{\s*padding:\s*10px;\s*font-size:\s*16px;/); - assert.match(css, /\.header-slider-card \.icon-cover-card\.zib-widget \{\s*padding: 10px;/); - assert.match(css, /\.header-slider-card \.icon-cover-card\.padding-10 \{\s*padding: 2px;/); + assert.match(css, /\.icon-cover-card\.zib-widget[\s\S]*?padding:\s*10px;/); + assert.match(css, /\.icon-cover-card\.padding-10[\s\S]*?padding:\s*2px;/); assert.doesNotMatch(css, /\.header-slider-card \.icon-cover-icon\.badg\.cir/); assert.doesNotMatch(css, /\.header-slider-card \.icon-cover-icon img/); assert.doesNotMatch(widgetCss, /aksrt-widget-icon-cards \.icon-cover-card/);