83 lines
6.0 KiB
CSS
83 lines
6.0 KiB
CSS
/* XShop Layout — header, footer, grid, sections. Logical properties only. */
|
|
|
|
/* Header */
|
|
.xshop-header { position: sticky; inset-block-start: 0; z-index: var(--xshop-z-header); background: var(--xshop-card); border-block-end: 1px solid var(--xshop-border); }
|
|
.xshop-header__inner { display: flex; align-items: center; gap: var(--xshop-space-4); padding-block: var(--xshop-space-3); flex-wrap: wrap; }
|
|
.xshop-header__branding { display: flex; align-items: center; gap: var(--xshop-space-3); flex-shrink: 0; }
|
|
.xshop-header__logo img { max-block-size: 40px; inline-size: auto; }
|
|
.xshop-header__title { font-size: var(--xshop-text-xl); font-weight: var(--xshop-weight-bold); margin: 0; }
|
|
.xshop-header__title a { color: var(--xshop-text); }
|
|
.xshop-header__tagline { font-size: var(--xshop-text-sm); color: var(--xshop-muted); margin: 0; }
|
|
.xshop-header__nav { flex: 1 1 auto; display: flex; justify-content: center; }
|
|
.xshop-header__actions { display: flex; align-items: center; gap: var(--xshop-space-2); flex-shrink: 0; }
|
|
.xshop-header__action-btn { display: inline-flex; align-items: center; justify-content: center; min-inline-size: 40px; min-block-size: 40px; border: 1px solid var(--xshop-border); border-radius: var(--xshop-radius-sm); background: var(--xshop-card); color: var(--xshop-text); cursor: pointer; }
|
|
.xshop-header__action-btn:hover { background: var(--xshop-surface); }
|
|
.xshop-header__search { position: relative; }
|
|
.xshop-header__search-form { display: flex; gap: var(--xshop-space-2); }
|
|
|
|
/* Primary nav */
|
|
.xshop-nav { display: flex; }
|
|
.xshop-nav__list { display: flex; flex-wrap: wrap; gap: var(--xshop-space-1); list-style: none; margin: 0; padding: 0; align-items: center; }
|
|
.xshop-nav__list a { display: block; padding: var(--xshop-space-2) var(--xshop-space-3); color: var(--xshop-text); border-radius: var(--xshop-radius-sm); font-weight: var(--xshop-weight-medium); font-size: var(--xshop-text-sm); }
|
|
.xshop-nav__list a:hover, .xshop-nav__list a:focus-visible { background: var(--xshop-surface); color: var(--xshop-text); }
|
|
.xshop-nav__list .current-menu-item > a, .xshop-nav__list .current_page_item > a { background: var(--xshop-surface-2); }
|
|
|
|
/* Mobile nav */
|
|
.xshop-mobile-toggle { display: none; align-items: center; justify-content: center; inline-size: 40px; block-size: 40px; border: 1px solid var(--xshop-border); border-radius: var(--xshop-radius-sm); background: var(--xshop-card); cursor: pointer; color: var(--xshop-text); }
|
|
.xshop-mobile-nav { display: none; border-block-start: 1px solid var(--xshop-border); padding-block: var(--xshop-space-3); }
|
|
.xshop-mobile-nav.is-open { display: block; }
|
|
.xshop-mobile-nav__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
.xshop-mobile-nav__list a { display: block; padding: var(--xshop-space-2) var(--xshop-space-3); color: var(--xshop-text); border-radius: var(--xshop-radius-sm); }
|
|
.xshop-mobile-nav__list a:hover { background: var(--xshop-surface); }
|
|
|
|
@media (max-width: 1024px) {
|
|
.xshop-nav--desktop { display: none; }
|
|
.xshop-mobile-toggle { display: inline-flex; }
|
|
.xshop-header__search--desktop { display: none; }
|
|
}
|
|
|
|
/* Footer */
|
|
.xshop-footer { background: var(--xshop-surface); border-block-start: 1px solid var(--xshop-border); margin-block-start: var(--xshop-space-12); padding-block: var(--xshop-space-8) var(--xshop-space-6); }
|
|
.xshop-footer__widgets { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--xshop-space-6); margin-block-end: var(--xshop-space-8); }
|
|
.xshop-footer__bottom { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--xshop-space-4); border-block-start: 1px solid var(--xshop-border); padding-block-start: var(--xshop-space-4); font-size: var(--xshop-text-sm); color: var(--xshop-muted); }
|
|
.xshop-footer__nav-list { display: flex; flex-wrap: wrap; gap: var(--xshop-space-3); list-style: none; margin: 0; padding: 0; }
|
|
.xshop-footer__nav-list a { color: var(--xshop-muted); }
|
|
.xshop-footer__nav-list a:hover { color: var(--xshop-text); }
|
|
@media (max-width: 768px) {
|
|
.xshop-footer__widgets { grid-template-columns: 1fr 1fr; }
|
|
}
|
|
@media (max-width: 640px) {
|
|
.xshop-footer__widgets { grid-template-columns: 1fr; }
|
|
.xshop-footer__bottom { flex-direction: column; align-items: flex-start; }
|
|
}
|
|
|
|
/* Main layout */
|
|
.xshop-main { padding-block: var(--xshop-space-8); }
|
|
.xshop-layout { display: grid; grid-template-columns: 1fr 320px; gap: var(--xshop-space-8); align-items: start; }
|
|
.xshop-layout--no-sidebar { grid-template-columns: 1fr; }
|
|
.xshop-layout__content { min-inline-size: 0; }
|
|
.xshop-layout__sidebar { position: sticky; inset-block-start: calc(60px + var(--xshop-space-4)); }
|
|
@media (max-width: 1024px) {
|
|
.xshop-layout { grid-template-columns: 1fr; }
|
|
.xshop-layout__sidebar { position: static; }
|
|
}
|
|
|
|
/* Grids */
|
|
.xshop-grid { display: grid; gap: var(--xshop-space-4); }
|
|
.xshop-grid--posts { grid-template-columns: repeat(3, 1fr); }
|
|
.xshop-grid--products { grid-template-columns: repeat(3, 1fr); }
|
|
@media (max-width: 1024px) { .xshop-grid--posts, .xshop-grid--products { grid-template-columns: repeat(2, 1fr); } }
|
|
@media (max-width: 640px) { .xshop-grid--posts, .xshop-grid--products { grid-template-columns: 1fr; } }
|
|
|
|
/* Section */
|
|
.xshop-section { padding-block: var(--xshop-space-8); }
|
|
.xshop-section__header { display: flex; align-items: baseline; justify-content: space-between; gap: var(--xshop-space-4); margin-block-end: var(--xshop-space-6); flex-wrap: wrap; }
|
|
.xshop-section__title { font-size: var(--xshop-text-2xl); margin: 0; }
|
|
.xshop-section__link { font-size: var(--xshop-text-sm); font-weight: var(--xshop-weight-medium); }
|
|
|
|
/* Hero foundation */
|
|
.xshop-hero { background: var(--xshop-surface); border: 1px solid var(--xshop-border); border-radius: var(--xshop-radius-lg); padding: var(--xshop-space-8); display: grid; gap: var(--xshop-space-4); }
|
|
.xshop-hero__title { font-size: var(--xshop-text-4xl); margin: 0; }
|
|
.xshop-hero__text { color: var(--xshop-muted); max-inline-size: 60ch; }
|
|
.xshop-hero__actions { display: flex; gap: var(--xshop-space-3); flex-wrap: wrap; }
|