diff --git a/index.html b/index.html index 34e08ff..fb8a614 100644 --- a/index.html +++ b/index.html @@ -1,37 +1,36 @@ - + - - - - + + + + - - - - - - - - - - - The Hideout - - - -
- - + + + + + + + + + + The Hideout + + + +
+ + diff --git a/src/global.css b/src/global.css new file mode 100644 index 0000000..7059075 --- /dev/null +++ b/src/global.css @@ -0,0 +1,1292 @@ +* { + font-family: "SF-Pro-Rounded"; + box-sizing: border-box; +} + +/* Improve scrolling performance */ +.th-app-container, +.th-page-wrapper, +.th-page-container { + will-change: transform; + transform: translateZ(0); /* Force hardware acceleration */ +} + +.th-app-container-locked { + overflow: hidden; +} + +.th-sub-page-wrapper { + padding-right: var(--th-images-width); +} + +.th-hidden { + opacity: 0; +} + +body, +html { + height: 100%; + touch-action: pan-y; /* Allow vertical scrolling */ +} + +body { + overflow: hidden; +} + +.th-root { + height: var(--unit-100vh); + overflow: hidden; +} +body.th-body-bg { + transition: background-color 0.5s cubic-bezier(0.4, 0, 0.2, 1); +} + +p, +span, +label, +input, +textarea { + font-weight: 500; + font-size: 14px; + line-height: 1; + letter-spacing: 0.04em; +} + +:root { + --unit-100vh: 100vh; + --th-images-width: 45vw; + --th-page-padding: 70px; + --th-page-mobile-padding: 30px; +} +@supports (height: 100dvh) { + :root { + --unit-100vh: 100dvh; + } +} + +.th-title:first-child { + margin-top: 0; +} + +h1.th-title, +h1.th-title a span, +h2.th-title, +h2.th-title a span { + font-family: "Libre Baskerville", serif; + font-weight: 400; + font-style: normal; + font-weight: "bold"; + text-align: left; + margin: 0.09em 0; +} + +h1.th-title, +h1.th-title a span { + font-size: 3em; + line-height: 52px; +} + +h2.th-title, +h2.th-title a span { + margin-bottom: 0; + margin-top: 0.5em; + font-size: 2.5em; +} + +h3.th-title, +h3.th-title a span { + font-family: "Libre Baskerville", serif; + font-size: 1em; + margin-bottom: 0; + margin-top: 0.5em; + font-weight: 600; +} + +h4.th-title, +h4.th-title a span { + font-size: 1.25em; + margin-bottom: 0; + margin-top: 0.5em; +} + +@media (max-width: 600px) { + h1.th-title, + h1.th-title a span { + font-size: 2.5em; /* Adjust as needed */ + line-height: 46px; + } + + h2.th-title, + h2.th-title a { + font-size: 1.5em; /* Adjust as needed */ + } +} + +.th-title i { + font-family: "Libre Baskerville", serif; + font-weight: 400; + font-style: italic; +} + +p.th-paragraph, +ul.th-list, +ol.th-list { + margin: 7.5px 0; +} + +ul.th-list, +ol.th-list { + padding-left: 22.5px; +} + +/* Icon after the text */ +a.th-link .th-link-icon { + fill: var(--th-textColor); +} + +a.th-link .th-link-icon > svg { + width: 8px; +} +/* Link styling */ +a.th-link { + color: unset; + display: inline-flex; + align-items: center; + gap: 5px; /* space between text and icon */ + text-decoration: none; +} + +/* Text wrapper for underline */ +a.th-link .th-link-text { + position: relative; + display: inline-block; +} + +/* Base underline (50% opacity) */ +a.th-link .th-link-text::before { + content: ""; + position: absolute; + left: 0; + bottom: -2px; + height: 2px; + width: 100%; + background-color: var(--th-textColor); + opacity: 0.15; + border-radius: 1px; +} + +/* Hover underline (100% opacity, animates from left to right) */ +a.th-link .th-link-text::after { + content: ""; + position: absolute; + left: 0; + bottom: -2px; + height: 2px; + width: 0; + background-color: var(--th-textColor); + opacity: 1; + border-radius: 1px; + transition: width 0.3s ease; +} + +/* Animate hover underline */ +a.th-link:hover .th-link-text::after { + width: 100%; +} +/* Keep underline on active item */ +.th-menu-nav-item-active a.th-link .th-link-text::after { + width: 100%; +} + +.th-menu-nav-item:hover::after { + width: 100%; +} + +.th-menu-nav-item-active::after { + width: 100%; +} + +label.th-form-label { + text-transform: lowercase; +} + +hr.th-divider { + width: 100px; + height: 2px; + min-height: 2px; + border: none; + border-radius: 1px; + background-color: var(--th-textColor); + margin: 1em 0; +} + +.th-inline-emoji { + height: 1.25em; + vertical-align: middle; + display: inline; + width: auto; + fill: var(--th-textColor); +} + +.th-loading-modal { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: var(--unit-100vh); + background-color: white; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + visibility: hidden; + transition: opacity 0.5s ease, visibility 0.5s ease; + z-index: 9999; +} + +.th-loading-modal-visible { + opacity: 1; + visibility: visible; +} + +.th-loading-modal-hidden { + opacity: 0; + visibility: hidden; +} + +.th-loading-logo { + width: 200px; + display: block; + margin: 0 auto; + animation: scale-pulse 2s infinite ease-in-out; + transform-origin: center center; +} + +@keyframes scale-pulse { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.2); + } + 100% { + transform: scale(1); + } +} + +/* Page component styles */ +.th-page-wrapper { + height: var(--unit-100vh); + width: 100%; + padding-right: var(--th-images-width); + scroll-snap-align: start; + scroll-snap-stop: normal; + /* Allow react-scroll to handle smooth transitions */ +} + +.th-page-wrapper-mobile { + padding-right: 0; +} + +.th-page-container { + height: var(--unit-100vh); + width: 100%; + gap: 25px; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; +} + +.th-page-content { + flex: 0 0 0%; + flex-grow: 3; + padding: 0 var(--th-page-padding); + margin: 0; + height: 100%; /* Use fixed height instead of min-height */ + min-height: 0; + width: 100%; + color: var(--th-textColor); + display: flex; + flex-direction: column; + align-items: start; + text-align: left; + transition: opacity 0.3s ease-in-out; +} + +.th-content-scroll { + height: 100%; + width: 100%; + flex: 1 1 auto; +} + +.simplebar-scrollbar:before { + background: var(--th-textColor); +} + +.simplebar-track.simplebar-vertical { + width: 6px; +} + +.simplebar-scrollbar.simplebar-visible:before { + opacity: 1; +} + +/* Ensure Simplebar fills and scrolls correctly */ +.th-content-scroll .simplebar-content-wrapper { + height: 100%; + overflow-y: auto; +} + +.th-content-scroll .simplebar-content { + min-height: 100%; + display: flex; + flex-direction: column; +} + +.th-page-content-mobile { + padding: var(--th-page-mobile-padding); + padding-bottom: 0; +} + +.th-page-content:last-child { + padding-bottom: var(--th-page-padding); +} + +.th-page-content-mobile:last-child { + padding-bottom: var(--th-page-mobile-padding); +} + +.th-page-content-hidden { + opacity: 0; +} + +.th-scroll-icon-text { + color: var(--th-textColor); +} + +.th-menu-page { + background-color: var(--th-backgroundColor); + position: absolute; + top: 0; + left: 0; + width: 100vw; + height: var(--unit-100vh); + padding-right: var(--th-images-width); +} + +.th-mobile-menu-page { + padding-right: 0; +} + +.th-menu-page-container { + padding: var(--th-page-padding); +} + +.th-menu-nav { + list-style: none; + padding: 0; + margin: 0; + text-align: end; +} + +.th-menu-nav-item { + border: none; + padding: 0.25em 0; + font-size: 2.5em; + text-transform: lowercase; + background: none; + font-family: "Libre Baskerville", serif; + font-weight: 500; + color: var(--th-textColor); + position: relative; /* Needed for pseudo-element positioning */ + cursor: pointer; +} + +.th-menu-nav-item::after { + content: ""; + position: absolute; + left: 0; + bottom: 13px; + height: 2px; + width: 0; + background-color: var(--th-textColor); + border-radius: 1px; + transition: width 0.3s ease; +} + +.th-menu-nav-item:hover::after { + width: 100%; +} + +.th-menu-nav-item-active::after { + width: 100%; +} + +.menu-icon { + cursor: pointer; + width: 64px; + height: 64px; +} + +.th-line { + transition: transform 0.4s ease, opacity 0.4s ease; + transform-origin: 32px 32px; /* Center of SVG */ +} + +.th-menu-icon.th-menu-icon-open .line1 { + transform: rotate(45deg) translate(0px, 0px); +} + +.th-menu-icon.th-menu-icon-open .line2 { + opacity: 0; +} + +.th-menu-icon.th-menu-icon-open .line3 { + transform: rotate(-45deg) translate(0px, 0px); +} + +.th-mobile-menu-page-container { + padding: var(--th-page-mobile-padding); +} + +/* ContentRenderer component styles */ +.th-content-default { + font-size: 1.2rem; + max-width: 600px; +} + +.th-content-container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + min-height: 0; + justify-content: center; + align-items: flex-start; +} + +.th-content-container-mobile-image { + justify-content: start; +} + +.th-content-container-wrapper { + width: 100%; + display: flex; + flex-direction: column; + justify-content: center; + flex-grow: 1; +} + +.th-content-container-wrapper-scroll { + padding-right: 20px; +} + +/* App component styles */ +.th-app-container { + height: var(--unit-100vh); + overflow-y: auto; + scroll-snap-type: y mandatory; + /* Let react-scroll handle smooth scrolling */ + -webkit-overflow-scrolling: touch; /* Smooth scrolling on iOS */ + scrollbar-width: none; /* Hide scrollbar on Firefox */ + -ms-overflow-style: none; /* Hide scrollbar on IE/Edge */ + width: 100%; +} + +/* Hide scrollbar on WebKit browsers */ +.th-app-container::-webkit-scrollbar { + display: none; +} + +.th-loading-container { + height: var(--unit-100vh); + display: flex; + align-items: center; + justify-content: center; +} + +.th-error-container { + height: var(--unit-100vh); + display: flex; + align-items: center; + justify-content: center; + padding: 20px; +} + +/* Images Sidebar Styles - Floating Overlay */ +.th-images-sidebar { + position: fixed; + top: 0; + right: 0; + width: var(--th-images-width); + height: var(--unit-100vh); + background: rgba(248, 249, 250, 0.95); + z-index: 1000; + pointer-events: none; +} + +.th-images-sidebar::-webkit-scrollbar { + display: none; +} + +.th-images-container { + display: flex; + flex-direction: column; + height: var(--unit-100vh); + transition: opacity 0.5s ease-in-out; + opacity: 1; + position: relative; + top: 0; + left: 0; + width: 100%; +} + +/* Grid layouts for different numbers of images */ +.th-single-image-grid { + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 1fr; + height: var(--unit-100vh); +} + +.th-two-images-grid { + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr; + height: var(--unit-100vh); +} + +.th-three-images-grid { + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr 1fr; + height: var(--unit-100vh); +} + +.th-four-images-grid { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr 1fr; + height: var(--unit-100vh); +} + +.th-multiple-images-grid { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: repeat(auto-fit, minmax(20vh, 1fr)); + height: var(--unit-100vh); + gap: 2px; +} + +.th-image-wrapper { + width: 100%; + height: 100%; + overflow: hidden; + position: relative; +} + +.th-image-carousel { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; +} + +.th-carousel-image-wrapper { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + transition: opacity 1s ease-in-out; +} + +.th-carousel-image-wrapper.th-active { + opacity: 1; + z-index: 1; +} + +.th-carousel-image-wrapper.th-hidden { + opacity: 0; + z-index: 0; +} + +.th-carousel-image { + width: 100%; + height: 100%; + object-fit: cover; +} + +.th-single-image-wrapper { + width: 100%; + height: var(--unit-100vh); + overflow: hidden; +} + +.th-sidebar-image { + width: 100%; + height: 100%; + object-fit: cover; +} + +.th-no-images { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + color: #666; + font-style: italic; + text-align: center; + padding: 20px; + grid-column: 1 / -1; + grid-row: 1 / -1; +} + +/* Header Logo Styles */ +.th-header-logo { + position: relative; + display: inline-block; +} + +.th-logo-image { + width: auto; + opacity: 1; + transition: opacity 0.3s ease-in-out; +} + +.th-logo-image svg { + fill: var(--th-textColor); + height: 45px; + display: block; + width: auto; +} + +.th-logo-image-large svg { + height: 120px; +} + +.th-logo-image-large-mobile svg { + height: 75px; +} + +/* Utility classes */ +.th-logo-image-hidden { + opacity: 0; +} + +.th-header { + width: 100%; + display: flex; + margin-top: var(--th-page-padding); + padding-left: var(--th-page-padding); + padding-right: var(--th-page-padding); + justify-content: space-between; + align-items: center; + transition: opacity 0.3s ease-in-out; + opacity: 1; +} + +.th-menu-header { + align-items: center; + justify-content: end; + height: 45px; +} + +.th-header-mobile { + margin-top: var(--th-page-mobile-padding); + padding-left: var(--th-page-mobile-padding); + padding-right: var(--th-page-mobile-padding); +} + +.th-header-float { + position: absolute; + top: 0; + left: 0; + z-index: 9; +} + +.th-page-mobile-image-wrapper > .th-top-gradient { + position: absolute; + inset: 0; + z-index: 2; + opacity: 1; + height: 160px; + backdrop-filter: blur(15px); + -webkit-backdrop-filter: blur(15px); + mask-image: linear-gradient(to bottom, rgba(0, 0, 0, 1), rgba(0, 0, 0, 0)); + -webkit-mask-image: linear-gradient( + to bottom, + rgba(0, 0, 0, 1), + rgba(0, 0, 0, 0) + ); + transition: opacity 0.01s; +} + +.th-page-mobile-image-wrapper > .th-top-gradient.refresh { + opacity: 0.9998; +} + +.th-header-hidden { + opacity: 0; +} + +.th-header-button { + background: none; + border: none; + width: 48px; + height: 48px; + padding: 0; + z-index: 99; + cursor: pointer; +} + +.th-header-button-menu { + width: unset; +} + +.th-header-button > svg { + width: 16px; + stroke: var(--th-textColor); + transition: width 0.3s ease; +} + +.th-header-button:hover > svg { + width: 18px; +} +.th-scroll-icon-wrapper { + display: flex; + align-items: center; + flex-direction: row; + column-gap: 15px; + width: 100%; + padding: var(--th-page-padding); + padding-top: 0; + transition: opacity 0.3s ease-in-out; +} + +.th-scroll-icon-wrapper-mobile { + padding: var(--th-page-mobile-padding); +} + +.th-scroll-icon-text { + margin: 0; + font-weight: 400; + letter-spacing: 3px; + font-size: 0.8em; +} + +.th-page-mobile-image-wrapper { + width: 100%; + flex-grow: 2; + flex-shrink: 1; + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; /* Prevent overflow */ + border-bottom: 1px solid var(--th-textColor); + transition: opacity 0.3s ease-in-out, + max-height 0.75s cubic-bezier(0, 0.5, 0.5, 1), + min-height 0.75s cubic-bezier(0, 0.5, 0.5, 1); + opacity: 1; + min-height: 260px; + max-height: 260px; +} + +.th-page-mobile-image-wrapper-hidden { + opacity: 0; +} + +.th-page-mobile-image-wrapper-shrunk { + min-height: 110px; + max-height: 110px; +} + +.th-mobile-image { + width: 100%; + height: 100%; + object-fit: cover; /* Scale image to fit both width and height */ + display: block; + max-width: 100%; + max-height: 100%; +} + +/* Image component styles */ +.th-image-container { + position: relative; +} + +.th-image-blurhash { + width: 100%; + height: 100%; + object-fit: cover; + filter: blur(0px); /* Blurhash is already blurred */ +} + +.th-image-content { + position: absolute; + top: 0; + left: 0; + object-fit: cover; + width: 100%; + height: 100%; + transition: opacity 0.3s ease-in-out, height 0.5s, width 0.5s; + opacity: 1; +} + +.th-image-error { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + color: #666; + font-style: italic; + text-align: center; + padding: 20px; +} + +.th-image-loading { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + color: #666; + font-style: italic; + text-align: center; + padding: 20px; +} + +.th-images-container-hidden { + opacity: 0; + position: absolute; +} + +/* App component styles */ + +.th-page-container-mobile { + gap: 0; +} + +/* Mobile overlay styles */ +.th-mobile-overlay { + background-color: black; + position: float; + top: var(--100vh); + left: 0; + width: 100vw; + height: calc(100vh - var(--100vh)); +} + +/* CacheReloadView component styles */ +.tbview { + height: 100%; + display: flex; + justify-content: center; + align-items: center; + padding: 5px 25px; + padding-bottom: 10px; +} + +.tbcard-mobile { + width: 100% !important; + height: 100% !important; + display: flex !important; + flex-direction: column !important; +} + +.tbcard-desktop { + width: 70% !important; + height: 70% !important; + display: flex !important; + flex-direction: column !important; +} + +.tb-loading-container { + padding: 20px; +} + +.tb-loading-icon { + font-size: 48px; + color: white; +} + +/* PropertyCards.css */ +.th-property-cards-container { + position: relative; + width: 100%; + overflow: hidden; /* hides scrollbar outside container */ + padding: 1em 0 0 0; + flex-grow: 1; +} + +.th-property-cards { + overflow-x: auto; + scroll-behavior: smooth; + scroll-snap-type: x mandatory; + -webkit-overflow-scrolling: touch; /* smooth scrolling on iOS */ + display: flex; + flex-wrap: nowrap; /* prevent wrapping */ + gap: 5px; + position: relative; + height: 100%; +} + +.th-property-card { + flex: 0 0 auto; /* prevent shrinking */ + width: 40vh; /* fixed width */ + height: 100%; + border: 1px solid var(--th-textColor); + border-radius: 10px; + scroll-snap-align: start; /* align each card when scrolling */ + background-color: var(--th-backgroundColor); + display: flex; + flex-direction: column; + cursor: pointer; + transition: transform 0.25s ease, box-shadow 0.25s ease; +} + +.th-property-card-wrapper { + padding: 7px; +} + +.th-property-card:hover { + transform: scale(1.03); +} + +.th-property-card-content { + padding: 15px; + display: flex; + flex-direction: column; + gap: 8px; +} + +.th-property-card-image-wrapper { + width: 100%; + height: 100%; + overflow: hidden; +} + +.th-property-card-image { + width: 100%; + height: 100%; + object-fit: cover; + display: block; + border-top-left-radius: 10px; + border-top-right-radius: 10px; + border-bottom: 1px solid var(--th-textColor); +} + +.th-property-card-placeholder-image { + width: 100%; + height: 200px; + background-color: #eee; + display: flex; + justify-content: center; + align-items: center; + border-radius: 10px; + color: #666; +} + +.th-property-card-title { + font-family: "Libre Baskerville", serif; + font-weight: 400; + text-transform: lowercase; + font-size: 1.2rem; + margin: 0; +} + +.th-property-card-address { + text-transform: lowercase; + font-size: 14px; + margin: 0; +} + +.th-features-list { + display: flex; + flex-wrap: wrap; + gap: 6px; + font-size: 14px; + margin: 0.75em 0; + margin-top: 0.25em; + max-width: 600px; + /* Force 2 rows with horizontal scroll if needed */ + overflow: hidden; + position: relative; + align-items: center; +} + +.th-features-listItem { + background-color: var(--th-textColor); + color: var(--th-backgroundColor); + padding: 4px 8px; + border-radius: 15px; + font-size: 0.75rem; + font-weight: 600; + text-transform: lowercase; +} + +.th-features-overflow-counter { + background-color: transparent; + color: var(--th-textColor); + font-weight: 700; + position: relative; + display: flex; + align-items: center; + opacity: 0.8; + padding: 0; + padding-left: 1px; +} + +.th-property-card .th-features-list { + margin: 0; + margin-top: 5px; +} + +.th-scroll-btn { + font-family: "Libre Baskerville", serif; + font-weight: 400; + position: absolute; + top: 50%; + font-size: 16px; + transform: translateY(-50%); + border: 1px solid var(--th-textColor); + backdrop-filter: blur(5px); + background-color: color-mix( + in srgb, + var(--th-backgroundColor) 50%, + transparent + ); + font-size: 2rem; + cursor: pointer; + z-index: 10; + padding: 0; + width: 35px; + height: 35px; + line-height: 0.1px; + border-radius: 50%; + transition: background-color 0.2s ease, transform 0.2s ease; +} + +.th-scroll-btn:hover { + background-color: color-mix( + in srgb, + var(--th-backgroundColor) 75%, + transparent + ); + transform: translateY(-50%) scale(1.075); +} + +.th-scroll-btn.th-left { + left: 10px; +} + +.th-scroll-btn.th-right { + right: 10px; +} + +/* Optional: hide scrollbar but keep scrolling functional */ +.th-property-cards::-webkit-scrollbar { + display: none; +} + +.th-property-cards { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} + +.th-property-cards-gradient { + position: absolute; + width: 70px; + z-index: 9; + transition: opacity 0.2s ease; +} + +.th-property-cards-gradient-left { + top: 0; + left: 0; + bottom: 0; + background: linear-gradient(90deg, var(--th-backgroundColor), transparent); +} + +.th-property-cards-gradient-right { + top: 0; + right: 0; + bottom: 0; + background: linear-gradient(90deg, transparent, var(--th-backgroundColor)); +} + +p.th-property-address { + font-weight: 600; +} + +.th-property-specs { + display: flex; + flex-wrap: wrap; + gap: 1em; + margin-top: 0.25em; + margin-bottom: 0.75em; +} + +.th-property-specs > p { + margin: 0; + font-weight: 600; +} + +.th-property-specs > .th-features-list { + margin: 0; +} + +.th-property-specs span { + font-family: "Libre Baskerville", serif; + font-weight: 600; +} + +.th-button { + padding: 5px 10px; + background-color: var(--th-backgroundColor); + color: var(--th-textColor); + fill: var(--th-textColor); + border: 1px solid var(--th-textColor); + border-radius: 10px; + transition: background-color 0.3s ease, color 0.3s ease, fill 0.3s ease; + display: inline-flex; + align-items: center; + text-transform: lowercase; + margin: 0.74em 0; + line-height: 1; + font-weight: 500; + min-height: 30px; +} + +.th-button:disabled { + opacity: 0.5; +} + +.th-button img { + width: 24px; + margin-right: 24px; +} + +.th-button > .th-icon, +.th-button > svg { + fill: var(--th-textColor); + stroke: var(--th-textColor); + height: 16px; + width: auto; + margin-right: 4px; +} + +.th-button:not(:disabled):hover { + background-color: var(--th-textColor); + color: var(--th-backgroundColor); +} + +.th-button:not(:disabled):hover > .th-icon, +.th-button:not(:disabled):hover > svg { + fill: var(--th-backgroundColor); + stroke: var(--th-backgroundColor); +} + +.th-booking-buttons { + display: flex; + gap: 15px; + margin-top: 5px; +} + +.th-mobile-booking-buttons { + width: 100%; +} + +.th-booking-buttons > button { + background: none; + border-radius: 8px; + padding: 8px 12px; + font-weight: 500; + display: inline-flex; + align-items: center; + justify-content: center; + flex-grow: 1; + cursor: pointer; + transition: background-color 0.3s ease, color 0.3s ease; +} + +.th-booking-buttons > button > svg { + display: inline-block; + height: 18px; + width: auto; + margin-right: 8px; +} + +.th-airbnb-button { + border: 1px solid #ff385c; + color: #ff385c; + fill: #ff385c; +} + +.th-airbnb-button:hover { + background-color: #ff385c; + color: white; + fill: white; +} + +.th-bookingcom-button { + border: 1px solid #003b95; + color: #003b95; + fill: #003b95; +} + +.th-bookingcom-button:hover { + background-color: #003b95; + color: white; + fill: white; +} + +.th-contact-form-wrapper { + width: 100%; +} + +.th-form { + display: flex; + flex-direction: column; + gap: 15px; + margin: 0.75em 0; + width: 100%; +} + +.th-form-input:focus { + outline: none; /* Removes the default outline */ + box-shadow: none; /* Removes Chrome's blue glow */ +} + +.th-form-input { + border: 1px solid var(--th-textColor); + border-radius: 8px; + padding: 5px 10px; + max-width: 400px; + min-width: 0; +} + +.th-form-input:disabled { + opacity: 0.5; +} + +.th-form-actions { + display: flex; + gap: 15px; + align-items: center; +} + +.th-form-actions > .th-button { + margin: 0; +} + +.th-form-actions > .th-form-error { + margin: 0; + border: 1px solid #ff42457d; + padding: 3px 6px; + color: #ff4245; + border-radius: 12px; + font-size: 12px; + text-transform: lowercase; +}