Files
website/components/BusinessDetail.module.css

807 lines
12 KiB
CSS

.root {
width: 100%;
padding-bottom: 80px;
}
.bannerWrap {
padding-top: 28px;
}
.banner {
position: relative;
isolation: isolate;
overflow: hidden;
background: #f6f6f6;
border-radius: 5px;
min-height: 136px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
padding: 24px 20px;
}
.banner::before {
content: "";
position: absolute;
inset: 0;
z-index: 0;
pointer-events: none;
opacity: 0.7;
background-image: var(--page-title-pattern);
}
.bannerTitle,
.crumbs {
position: relative;
z-index: 1;
}
.bannerTitle {
font-size: clamp(24px, 2.2vw, 35px);
font-weight: 400;
letter-spacing: 14px;
text-transform: uppercase;
}
.crumbs {
margin-top: 14px;
display: flex;
flex-wrap: wrap;
gap: 10px;
align-items: center;
justify-content: center;
font-size: 12px;
letter-spacing: 2px;
text-transform: uppercase;
color: var(--color-soft);
}
.crumbs > span {
display: inline-flex;
align-items: center;
gap: 10px;
}
.crumbChevron {
width: 10px;
height: 10px;
opacity: 0.55;
}
.crumbActive {
color: var(--color-black);
}
.hero {
position: relative;
margin-top: 28px;
height: clamp(220px, 28vw, 408px);
border-radius: 0;
overflow: hidden;
}
.heroImg {
object-fit: cover;
object-position: center 35%;
}
.profile {
margin-top: -40px;
position: relative;
z-index: 2;
padding: 0 clamp(12px, 4vw, 72px);
}
.profileBar {
background: #f6f6f6;
border-radius: 5px;
min-height: 121px;
padding: 18px 22px;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 24px;
}
.identity {
display: flex;
align-items: center;
gap: 18px;
min-width: 240px;
}
.logo {
width: 75px;
height: 75px;
object-fit: cover;
border-radius: 4px;
background: #fff;
}
.name {
font-size: clamp(16px, 1.4vw, 24px);
font-weight: 400;
letter-spacing: 4.8px;
text-transform: uppercase;
}
.tagline {
margin-top: 4px;
font-size: 16px;
font-weight: 300;
color: var(--color-muted);
}
.stats {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: clamp(20px, 3vw, 48px);
}
.stat {
display: flex;
flex-direction: column;
gap: 2px;
}
.statWide {
display: flex;
align-items: center;
gap: 10px;
}
.statLabel {
font-size: 12px;
letter-spacing: 0.04em;
text-transform: uppercase;
color: #969696;
line-height: 20px;
}
.statLabelStack {
font-size: 14px;
line-height: 14px;
text-transform: uppercase;
color: #969696;
}
.statValueSm {
font-size: clamp(20px, 2vw, 30px);
font-weight: 400;
}
.statValueLg {
font-size: clamp(32px, 3vw, 50px);
font-weight: 400;
line-height: 1;
}
.description {
margin-top: 24px;
max-width: 1568px;
font-size: clamp(13px, 1vw, 16px);
line-height: 1.55;
color: var(--color-body);
}
.tabs {
margin-top: 36px;
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: clamp(20px, 2.5vw, 40px);
border-bottom: 1px solid #ececec;
padding: 0 clamp(12px, 4vw, 40px);
}
.tab,
.tabActive {
position: relative;
padding: 0 6px 14px;
font-size: clamp(12px, 1vw, 15px);
font-weight: 300;
line-height: 1;
text-transform: uppercase;
color: var(--color-soft);
transition: color 0.2s ease;
}
.tabActive {
font-weight: 500;
color: var(--color-black);
}
.tabActive::after {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: -1px;
height: 3px;
background: var(--color-black);
}
.tab:hover {
color: var(--color-black);
}
.panel {
margin-top: 36px;
padding: 0;
}
.pills {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 8px;
margin-bottom: 28px;
}
.filtersBar {
background: transparent;
border: 1px solid #eee;
border-radius: 5px;
padding: 18px 24px;
display: grid;
grid-template-columns: auto minmax(0, 1fr);
gap: 24px;
align-items: center;
}
.filtersLabel {
display: flex;
align-items: center;
gap: 12px;
}
.filtersLabel strong {
display: block;
font-size: 18px;
font-weight: 300;
letter-spacing: 6px;
text-transform: uppercase;
}
.filtersLabel span {
display: block;
font-size: 12px;
color: #9c9c9c;
}
.filters {
display: flex;
flex-wrap: wrap;
gap: 16px;
align-items: center;
justify-content: flex-end;
}
.filterField {
position: relative;
min-width: min(100%, 280px);
flex: 1 1 240px;
border: 1px solid #eee;
border-radius: 5px;
min-height: 44px;
padding: 14px 14px 8px;
display: flex;
flex-direction: column;
justify-content: flex-end;
}
.filterField span {
position: absolute;
top: -8px;
left: 12px;
background: #fff;
padding: 0 6px;
font-size: 12px;
font-weight: 300;
color: var(--color-body);
}
.filterField input {
border: 0;
outline: 0;
background: transparent;
font: inherit;
font-size: 16px;
font-weight: 300;
width: 100%;
}
.filterBtn {
min-height: 45px;
padding: 0 28px;
font-size: 20px;
letter-spacing: 4px;
text-transform: uppercase;
color: var(--color-soft);
}
.filterBtn img {
width: 12px;
height: 12px;
opacity: 0.55;
transform: rotate(90deg);
transition: filter 0.3s ease, opacity 0.3s ease;
}
:global(.filter-chip).filterBtn:hover,
:global(.filter-chip).filterBtn:focus-visible {
color: var(--color-white);
}
:global(.filter-chip).filterBtn:hover img,
:global(.filter-chip).filterBtn:focus-visible img {
opacity: 1;
filter: invert(1);
}
.activeTags {
margin-top: 16px;
display: flex;
flex-wrap: wrap;
gap: 12px;
}
.activeTag {
min-height: 41px;
padding: 0 14px;
font-size: 16px;
gap: 10px;
}
.activeTag em {
position: relative;
z-index: 2;
font-style: normal;
font-size: 12px;
text-transform: uppercase;
color: #999;
transition: color 0.3s ease;
}
.activeTag button {
position: relative;
z-index: 2;
font-size: 18px;
line-height: 1;
color: #999;
transition: color 0.3s ease;
}
:global(.filter-chip).activeTag:hover,
:global(.filter-chip).activeTag:focus-within {
color: var(--color-white);
}
:global(.filter-chip).activeTag:hover em,
:global(.filter-chip).activeTag:hover button,
:global(.filter-chip).activeTag:focus-within em,
:global(.filter-chip).activeTag:focus-within button {
color: var(--color-white);
}
.productGrid,
.blogGrid {
margin-top: 28px;
display: grid;
grid-template-columns: repeat(6, minmax(0, 1fr));
gap: 18px;
}
.productCard,
.blogCard {
border: 1px solid #eee;
border-radius: 5px;
overflow: hidden;
background: #fff;
display: flex;
flex-direction: column;
color: inherit;
text-decoration: none;
transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.productCard:hover,
.blogCard:hover {
transform: translateY(-4px);
box-shadow: 0 12px 28px rgba(0, 0, 0, 0.06);
}
.productMedia,
.blogMedia {
position: relative;
aspect-ratio: 1;
margin: 12px 12px 0;
border-radius: 5px;
overflow: hidden;
background: #f7f7f7;
}
.productImg,
.blogImg {
object-fit: contain;
}
.blogImg {
object-fit: cover;
}
.productBody,
.blogBody {
padding: 14px 12px 18px;
display: flex;
flex-direction: column;
gap: 8px;
flex: 1;
}
.productBody h3,
.blogBody h3 {
font-size: 18px;
font-weight: 300;
}
.stars {
display: flex;
align-items: center;
gap: 2px;
}
.starFilled {
color: #111;
font-size: 12px;
}
.starEmpty {
color: #d0d0d0;
font-size: 12px;
}
.rating {
margin-left: 6px;
font-size: 14px;
font-weight: 300;
color: #969696;
}
.productMeta {
margin-top: auto;
display: flex;
gap: 8px;
flex-wrap: wrap;
}
.chip {
display: inline-flex;
align-items: center;
gap: 6px;
min-height: 23px;
padding: 2px 8px;
border-radius: 5px;
background: #f6f6f6;
}
.chip strong {
font-size: 18px;
font-weight: 400;
}
.chip em {
font-style: normal;
font-size: 9px;
line-height: 8px;
text-transform: uppercase;
color: #999;
}
.blogBody p {
font-size: 14px;
font-weight: 300;
line-height: 18px;
color: #9d9d9d;
display: -webkit-box;
-webkit-line-clamp: 4;
-webkit-box-orient: vertical;
overflow: hidden;
}
.blogMeta {
margin-top: auto;
display: flex;
justify-content: space-between;
gap: 12px;
font-size: 12px;
font-weight: 300;
color: var(--color-soft);
}
.blogMeta span {
display: inline-flex;
align-items: center;
gap: 6px;
}
.blogMeta img {
opacity: 0.55;
}
.contact {
display: flex;
flex-direction: column;
gap: 28px;
}
.contactRows {
display: flex;
flex-direction: column;
gap: 24px;
}
.contactRow {
display: flex;
align-items: flex-start;
gap: 16px;
}
.contactIcon {
width: 46px;
height: 46px;
display: grid;
place-items: center;
font-size: 22px;
color: #666;
}
.contactLabel {
display: block;
font-size: 14px;
color: #888;
margin-bottom: 4px;
}
.contactRow p {
font-size: clamp(16px, 1.4vw, 24px);
font-weight: 400;
}
.socials {
display: flex;
flex-wrap: wrap;
gap: 16px;
}
.socialChip {
display: inline-flex;
align-items: center;
gap: 12px;
min-width: min(100%, 280px);
min-height: 41px;
padding: 8px 16px;
border: 1px solid #eee;
border-radius: 5px;
font-size: 15px;
transition: border-color 0.2s ease;
}
.socialChip:hover {
border-color: #bbb;
}
.socialChip em {
font-style: normal;
font-size: 12px;
color: #888;
margin-right: 4px;
}
.map {
position: relative;
width: 100%;
height: clamp(280px, 40vw, 660px);
border-radius: 5px;
overflow: hidden;
background: #eee;
}
.mapImg {
object-fit: cover;
}
.gallery {
display: grid;
grid-template-columns: repeat(5, minmax(0, 1fr));
grid-auto-rows: 120px;
gap: 16px;
}
.galleryItem {
position: relative;
grid-row: span 3;
border: 1px solid #eee;
border-radius: 5px;
overflow: hidden;
margin: 0;
background: #f6f6f6;
}
.galleryTall {
grid-row: span 5;
}
.galleryMedium {
grid-row: span 4;
}
.galleryImg {
object-fit: cover;
transition: transform 0.35s ease;
}
.galleryItem:hover .galleryImg {
transform: scale(1.05);
}
.galleryZoom {
position: absolute;
inset: 0;
display: grid;
place-items: center;
background: rgba(0, 0, 0, 0.28);
opacity: 0;
transition: opacity 0.25s ease;
}
.galleryItem:hover .galleryZoom {
opacity: 1;
}
.galleryZoom img {
filter: invert(1);
}
.portfolioGrid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 18px;
}
.portfolioCard {
border: 1px solid #e4e4e4;
border-radius: 5px;
padding: 28px;
background: #fff;
color: inherit;
text-decoration: none;
display: block;
}
.portfolioMedia {
position: relative;
aspect-ratio: 1;
border-radius: 5px;
overflow: hidden;
}
.portfolioImg {
object-fit: cover;
}
.portfolioOverlay {
position: absolute;
left: 0;
right: 0;
bottom: 0;
padding: 28px 24px;
background: rgba(0, 0, 0, 0.6);
color: #fff;
transform: translateY(12px);
opacity: 0;
transition: opacity 0.3s ease, transform 0.3s ease;
border-radius: 0 0 5px 5px;
}
.portfolioOverlayVisible {
opacity: 1;
transform: translateY(0);
}
.portfolioOverlay h3 {
font-size: 23px;
font-weight: 300;
margin-bottom: 8px;
}
.portfolioOverlay p {
font-size: 16px;
font-weight: 300;
line-height: 18px;
color: #9d9d9d;
}
@media (max-width: 1200px) {
.productGrid,
.blogGrid {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.gallery {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.portfolioGrid {
grid-template-columns: 1fr 1fr;
}
}
@media (max-width: 900px) {
.profile {
margin-top: -24px;
padding: 0;
}
.profileBar {
flex-direction: column;
align-items: flex-start;
}
.filtersBar {
grid-template-columns: 1fr;
}
.filters {
justify-content: stretch;
}
.filterBtn {
width: 100%;
justify-content: center;
}
.tabs {
justify-content: flex-start;
gap: 24px;
overflow-x: auto;
flex-wrap: nowrap;
}
.productGrid,
.blogGrid,
.portfolioGrid {
grid-template-columns: 1fr 1fr;
}
.gallery {
grid-template-columns: 1fr 1fr;
grid-auto-rows: 140px;
}
}
@media (max-width: 560px) {
.bannerTitle {
letter-spacing: 6px;
}
.productGrid,
.blogGrid,
.portfolioGrid,
.gallery {
grid-template-columns: 1fr;
}
.portfolioCard {
padding: 16px;
}
.socialChip {
min-width: 100%;
}
}