2026-tombutcher-ui/src/styles/components.css
Tom Butcher 8ef109b8e7 Update environment variables, refactor context usage, and enhance UI components
- Changed API and Keycloak URLs in `.env` and `.env.development`.
- Updated `vite.config.js` to reflect new allowed hosts.
- Refactored components to use `useContent` context instead of individual contexts for blogs, companies, and projects.
- Improved error handling in `App` component with `AppError`.
- Added FPS monitoring to `ParticlesBackground` component for developer mode.
- Removed unused contexts and adjusted related imports.
- Enhanced styling for various components and added new styles for FPS monitor.
- Cleaned up SVG files by removing unnecessary attributes.
2025-11-15 19:32:09 +00:00

3303 lines
65 KiB
CSS

/* Component styles - Reusable UI components */
/* Loading Modal */
.tb-loading-modal {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: var(--unit-100vh);
background-color: var(--tb-loading-backgroundColor);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
visibility: hidden;
transition: opacity 0.5s ease, visibility 0.5s ease;
z-index: 9999;
}
.tb-loading-modal > svg {
width: 60px;
height: 60px;
fill: var(--tb-loading-textColor);
}
.tb-loading-modal-visible {
opacity: 1;
visibility: visible;
}
.tb-loading-modal-hidden {
opacity: 0;
visibility: hidden;
}
.tb-loading-logo {
width: 200px;
display: block;
margin: 0 auto;
animation: scale-pulse 2s infinite ease-in-out;
transform-origin: center center;
}
/* Particles */
.tb-particles {
transition: opacity 1s ease-in-out;
}
.tb-particles-fps-monitor {
position: fixed;
top: 90px;
right: var(--tb-page-mobile-padding);
padding: 10px 16px;
border-radius: 18px;
border: 1px solid color-mix(in srgb, var(--tb-textColor) 25%, transparent);
background: color-mix(in srgb, var(--tb-backgroundColor) 18%, transparent);
color: var(--tb-textColor);
font-size: 0.75rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
display: inline-flex;
flex-direction: column;
align-items: flex-end;
gap: 8px;
pointer-events: none;
z-index: 5;
backdrop-filter: blur(18px);
-webkit-backdrop-filter: blur(18px);
box-shadow: 0 16px 36px
color-mix(in srgb, var(--tb-backgroundColor) 25%, transparent);
transition: opacity 0.35s ease, transform 0.35s ease;
}
.tb-particles-fps-monitor-row {
display: flex;
align-items: baseline;
gap: 8px;
}
.tb-particles-fps-monitor-divider {
align-self: stretch;
height: 1px;
background: color-mix(in srgb, var(--tb-textColor) 18%, transparent);
}
.tb-particles-fps-monitor-label {
opacity: 0.7;
font-size: 0.68rem;
letter-spacing: 0.14em;
}
.tb-particles-fps-monitor-value {
font-size: 0.95rem;
font-weight: 700;
}
.tb-particles-fps-monitor-visible {
opacity: 1;
transform: translateY(0);
}
.tb-particles-fps-monitor-hidden {
opacity: 0;
transform: translateY(-8px);
}
.tb-particles-visible {
opacity: 1;
}
.tb-particles-hidden {
opacity: 0;
}
.tb-particles-background {
backdrop-filter: blur(45px);
-webkit-backdrop-filter: blur(45px);
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
/* Buttons */
.tb-button {
padding: 8px 14px;
background-color: transparent;
color: var(--tb-textColor);
border: 2px solid color-mix(in srgb, var(--tb-textColor) 15%, transparent);
border-radius: 18px;
transition: background-color 0.3s ease, color 0.3s ease, fill 0.3s ease,
transform 0.5s ease;
display: inline-flex;
align-items: center;
margin: 0.74em 2.5px;
line-height: 1;
min-height: 30px;
font-weight: 500;
position: relative;
transform-origin: center center;
transform: scale(1);
width: max-content;
}
.tb-menu-popup-button,
.tb-account-menu-button {
padding: 9px 10px;
border: none;
font-weight: 600;
transition: color 0.3s ease, transform 0.3s ease, background-color 0.3s ease,
padding 0.3s ease;
}
.tb-menu-popup-button:hover,
.tb-menu-popup-button-active,
.tb-account-menu-button:hover,
.tb-account-menu-button-active {
transform: scale(1.05);
padding: 9px 14px;
}
.tb-menu-popup-button-active,
.tb-account-menu-button-active {
background-color: var(--tb-textColor);
color: var(--tb-backgroundColor);
}
.tb-button:disabled {
opacity: 0.5;
}
.tb-button img {
width: 24px;
margin-right: 24px;
}
.tb-button > .tb-icon,
.tb-button > svg {
fill: var(--tb-textColor);
stroke: var(--tb-textColor);
height: 16px;
width: auto;
margin-right: 8px;
transition: fill 0.3s ease, stroke 0.3s ease;
}
.tb-menu-popup-button > svg,
.tb-account-menu-button > svg {
margin-left: 6px;
margin-right: 0;
}
.tb-menu-popup-button-active > svg,
.tb-menu-popup-button-active > .tb-icon-button > svg {
fill: var(--tb-backgroundColor);
stroke: var(--tb-backgroundColor);
}
.tb-button:not(:disabled):hover > .tb-icon,
.tb-button:not(:disabled):hover > svg {
fill: var(--tb-backgroundColor);
stroke: var(--tb-backgroundColor);
}
.tb-button:not(:disabled):hover {
background-color: var(--tb-textColor);
color: var(--tb-backgroundColor);
transform: scale(1.025);
cursor: pointer;
}
.tb-button:not(:disabled):active {
background-color: var(--tb-textColor);
color: var(--tb-backgroundColor);
transform: scale(0.975);
cursor: pointer;
}
.tb-icon-button > svg {
width: 16px;
height: 16px;
fill: var(--tb-textColor);
stroke: var(--tb-textColor);
}
.tb-button:hover > .tb-icon-button > svg {
fill: var(--tb-backgroundColor);
stroke: var(--tb-backgroundColor);
}
.tb-icon-button {
position: static;
top: 9px;
left: 0;
right: 0;
bottom: 0;
transform: scale(1);
min-width: 16px;
min-height: 16px;
transform-origin: center center;
transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out,
position 0.3s ease-in-out;
height: 16px;
}
.tb-icon-button.tb-hidden {
position: absolute;
transform: scale(0.5);
}
.tb-error-content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 50px;
}
.tb-error-message {
padding: 20px 30px;
background-color: #b00000;
border: 1px solid #ff0000;
text-align: center;
color: #ffffff;
border-radius: 25px;
box-shadow: 0px 8.5px 20px 0px #000000;
margin-bottom: 30px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.tb-error-message h1 {
font-size: 26px;
font-weight: 600;
margin: 0;
}
.tb-error-message-divider {
width: 50%;
height: 1px;
background-color: #ff0000;
margin: 17px 0;
border: none;
}
.tb-error-message p {
font-size: 16px;
font-weight: 400;
margin: 0;
max-width: 500px;
}
.tb-error-button {
color: #ffffff;
background-color: #b00000;
border: 1px solid #ff0000;
box-shadow: 0px 8.5px 20px 0px #000000;
}
.tb-error-button:not(:disabled):hover {
background-color: #b00000;
color: #ffffff;
}
.tb-error-secondary-button {
color: #ffffff;
background-color: #b000004e;
border: 1px solid #ff000072;
box-shadow: 0px 8.5px 20px 0px #000000;
}
.tb-error-secondary-button:not(:disabled):hover {
color: #ffffff;
background-color: #b000004e;
border: 1px solid #ff000052;
}
.tb-error-actions {
display: flex;
flex-wrap: wrap;
gap: 12px;
justify-content: center;
}
.tb-error-details {
width: 100%;
max-width: 640px;
max-height: 320px;
margin: 12px auto 0;
padding: 20px;
background-color: rgba(0, 0, 0, 0.85);
border: 1px solid rgba(255, 0, 0, 0.45);
border-radius: 16px;
box-shadow: 0px 8.5px 24px 0px rgba(0, 0, 0, 0.45);
color: #ffffff;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
font-size: 14px;
line-height: 1.5;
text-align: left;
overflow: auto;
white-space: pre-wrap;
word-break: break-word;
margin-bottom: 30px;
}
.tb-error-icon {
fill: #b00000;
width: 150px;
stroke: #ff0000;
}
/* Menu Components */
.tb-menu-popup {
position: absolute;
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 50%,
transparent
);
backdrop-filter: blur(8px);
box-shadow: -1px 3px 50px 4px var(--tb-backgroundColor);
-webkit-backdrop-filter: blur(8px);
top: calc(var(--tb-header-footer-vertical-padding) + 50px);
right: var(--tb-header-footer-horizontal-padding);
width: auto;
height: auto;
z-index: 9;
border-radius: 25px;
transition: background-color 0.3s ease;
}
.tb-ios-webclip .tb-menu-popup {
top: calc(var(--tb-header-footer-vertical-padding) + 80px);
}
.tb-menu-popup::before {
content: "";
position: absolute;
inset: 0;
padding: 1px; /* border thickness */
border-radius: inherit;
background: linear-gradient(
to bottom right,
/* 👈 diagonal gradient */
color-mix(in srgb, var(--tb-textColor) 15%, transparent),
color-mix(in srgb, var(--tb-textColor) 10%, transparent),
color-mix(in srgb, var(--tb-textColor) 15%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
z-index: 1;
transition: background 0.3s ease;
}
.tb-mobile-menu-popup {
top: calc(var(--tb-page-mobile-padding) + 50px);
right: var(--tb-page-mobile-padding);
}
.tb-menu-popup-container {
padding: 0 13px 2px 13px;
}
.tb-mobile-menu-popup-container {
padding: 0 13px 2px 13px;
}
.tb-menu-popup-divider {
width: 1px;
background-color: color-mix(in srgb, var(--tb-textColor) 20%, transparent);
margin: 10px 13px;
}
.tb-menu-nav {
list-style: none;
padding: 0;
margin: 0;
text-align: end;
padding: 15px 22px 3px 22px;
}
.tb-menu-nav > li {
display: flex;
justify-content: end;
}
.tb-menu-nav-item {
border: none;
padding: 0.5em 0;
font-size: 1.3em;
background: none;
font-weight: 400;
color: var(--tb-textColor);
position: relative; /* Needed for pseudo-element positioning */
cursor: pointer;
transition: font-weight 0.3s ease, font-size 0.3s ease;
display: flex;
gap: 15px;
align-items: center;
}
.tb-menu-nav-item-active {
font-weight: 600;
}
.tb-menu-nav-item > svg {
width: 1.3em;
fill: var(--tb-textColor);
}
.tb-menu-nav-item:hover {
font-weight: 600;
font-size: 1.4em;
}
.tb-menu-nav-item:hover::after {
width: 100%;
}
.tb-menu-nav-item-active::after {
width: 100%;
}
.tb-menu-popup-footer {
margin: 10px 2px 0 2px;
border-top: 1px solid color-mix(in srgb, var(--tb-textColor) 20%, transparent);
display: flex;
justify-content: end;
}
/* Developer Popup */
.tb-developer-popup {
position: fixed;
bottom: calc(var(--tb-header-footer-vertical-padding) + 24px);
left: 50%;
transform: translateX(-50%);
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 55%,
transparent
);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
box-shadow: -1px 3px 50px 4px var(--tb-backgroundColor);
border-radius: 30px;
z-index: 15;
padding: 0;
transition: background-color 0.3s ease, box-shadow 0.3s ease;
width: max-content;
}
.tb-developer-popup::before {
content: "";
position: absolute;
inset: 0;
padding: 1px;
border-radius: inherit;
background: linear-gradient(
to bottom right,
color-mix(in srgb, var(--tb-textColor) 15%, transparent),
color-mix(in srgb, var(--tb-textColor) 10%, transparent),
color-mix(in srgb, var(--tb-textColor) 15%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
z-index: 1;
}
.tb-developer-popup-container {
position: relative;
z-index: 2;
padding: 0 13px;
display: flex;
flex-direction: column;
gap: 12px;
align-items: center;
}
.tb-developer-popup-actions {
display: flex;
gap: 10px;
justify-content: center;
align-items: center;
}
.tb-developer-popup-actions .tb-button {
justify-content: center;
}
.tb-developer-popup-actions-divider {
width: 1px;
height: 18px;
background-color: color-mix(in srgb, var(--tb-textColor) 20%, transparent);
}
.tb-developer-popup-status {
font-size: 0.85rem;
text-align: center;
color: color-mix(in srgb, var(--tb-textColor) 70%, transparent);
min-height: 1.2em;
}
.tb-developer-popup-status-success {
color: color-mix(in srgb, var(--tb-textColor) 85%, transparent);
}
.tb-developer-popup-status-error {
color: #ff6b6b;
}
.tb-developer-popup-status-pending {
color: color-mix(in srgb, var(--tb-textColor) 75%, transparent);
}
.tb-developer-exit-button {
font-weight: 600;
}
/* Message Popup */
.tb-message-popup {
position: fixed;
top: calc(var(--tb-header-footer-vertical-padding) + 24px);
left: 50%;
transform: translate(-50%, -12px) scale(0.98);
opacity: 0;
pointer-events: none;
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 55%,
transparent
);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
box-shadow: 0px 16px 40px -12px color-mix(in srgb, var(--tb-backgroundColor)
80%, transparent);
border-radius: 28px;
z-index: 20;
transition: opacity 0.35s ease, transform 0.35s ease;
padding: 0;
}
.tb-message-popup::before {
content: "";
position: absolute;
inset: 0;
padding: 1px;
border-radius: inherit;
background: linear-gradient(
130deg,
color-mix(in srgb, var(--tb-textColor) 14%, transparent),
color-mix(in srgb, var(--tb-textColor) 8%, transparent),
color-mix(in srgb, var(--tb-textColor) 12%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
z-index: 1;
}
.tb-message-popup-content {
position: relative;
z-index: 2;
display: flex;
align-items: center;
gap: 8px;
padding: 10px 18px 10px 18px;
width: max-content;
}
.tb-message-popup-icon {
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 22px;
color: color-mix(in srgb, var(--tb-textColor) 80%, transparent);
}
.tb-message-popup-text {
font-size: 16px;
line-height: 1;
color: var(--tb-textColor);
max-width: min(460px, 75vw);
}
.tb-message-popup-dismiss {
appearance: none;
border: none;
background: none;
color: var(--tb-textColor);
font-size: 22px;
line-height: 1;
padding: 0;
margin-left: 4px;
margin-bottom: 2px;
cursor: pointer;
transition: color 0.2s ease, transform 0.2s ease;
}
.tb-message-popup-dismiss:hover,
.tb-message-popup-dismiss:focus-visible {
color: color-mix(in srgb, var(--tb-textColor) 90%, transparent);
transform: scale(1.05);
}
.tb-message-popup-visible {
opacity: 1;
transform: translate(-50%, 0) scale(1);
pointer-events: auto;
}
.tb-message-popup-hidden {
opacity: 0;
transform: translate(-50%, -12px) scale(0.98);
pointer-events: none;
}
/* Account Menu Popup */
.tb-account-menu-popup {
position: fixed;
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 50%,
transparent
);
backdrop-filter: blur(8px);
box-shadow: -1px 3px 50px 4px var(--tb-backgroundColor);
-webkit-backdrop-filter: blur(8px);
bottom: calc(var(--tb-header-footer-vertical-padding) + 50px);
left: var(--tb-header-footer-horizontal-padding);
width: auto;
min-width: 280px;
max-width: 400px;
height: auto;
z-index: 9;
border-radius: 25px;
transition: background-color 0.3s ease, opacity 0.8s ease, transform 0.8s ease;
opacity: 0;
transform: translateY(-10px) scale(0.95);
}
.tb-ios-webclip .tb-account-menu-popup {
bottom: calc(var(--tb-header-footer-vertical-padding) + 80px);
}
.tb-account-menu-popup::before {
content: "";
position: absolute;
inset: 0;
padding: 1px; /* border thickness */
border-radius: inherit;
background: linear-gradient(
to bottom right,
/* 👈 diagonal gradient */
color-mix(in srgb, var(--tb-textColor) 15%, transparent),
color-mix(in srgb, var(--tb-textColor) 10%, transparent),
color-mix(in srgb, var(--tb-textColor) 15%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
z-index: 1;
transition: background 0.3s ease;
}
.tb-mobile-account-menu-popup {
bottom: calc(var(--tb-page-mobile-padding) + 50px);
left: var(--tb-page-mobile-padding);
}
.tb-account-menu-popup-container {
padding: 0 13px;
display: flex;
flex-direction: column;
}
.tb-mobile-account-menu-popup-container {
padding: 0 13px;
}
.tb-account-menu-header {
display: flex;
flex-direction: row;
gap: 12px;
align-items: center;
padding: 13px 3px;
}
.tb-account-menu-icon {
width: 48px;
height: 48px;
}
.tb-account-menu-icon > svg {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center center;
fill: var(--tb-textColor);
}
.tb-account-menu-user-info {
padding-bottom: 1px;
}
.tb-account-menu-user-name {
font-size: 20px;
font-weight: 600;
color: var(--tb-textColor);
margin: 0;
line-height: 1;
display: flex;
gap: 10px;
align-items: center;
margin-bottom: 5px;
}
.tb-account-menu-user-email {
margin: 0;
font-size: 14px;
font-weight: 500;
color: color-mix(in srgb, var(--tb-textColor) 50%, transparent);
margin-bottom: 0px;
}
.tb-account-menu-user-username {
font-size: 13px;
font-weight: 500;
margin: 0;
line-height: 1;
border: 1px solid color-mix(in srgb, var(--tb-textColor) 20%, transparent);
border-radius: 12px;
padding: 2px 5px;
padding-left: 3px;
display: flex;
align-items: center;
gap: 3px;
margin-top: 2px;
}
.tb-account-menu-user-username-at {
color: color-mix(in srgb, var(--tb-textColor) 50%, transparent);
width: 12px;
height: 12px;
margin-bottom: 1px;
}
.tb-account-menu-user-username-at > svg {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center center;
fill: color-mix(in srgb, var(--tb-textColor) 75%, transparent);
}
.tb-account-menu-user-username-content {
font-size: 12px;
font-weight: 500;
color: color-mix(in srgb, var(--tb-textColor) 100%, transparent);
padding-top: 1px;
line-height: 1;
}
.tb-account-menu-content {
display: flex;
flex-direction: column;
gap: 10px;
}
.tb-account-menu-roles {
display: flex;
flex-direction: column;
gap: 8px;
}
.tb-account-menu-roles-label {
font-size: 12px;
font-weight: 600;
color: color-mix(in srgb, var(--tb-textColor) 50%, transparent);
text-transform: uppercase;
letter-spacing: 0.5px;
margin: 0;
}
.tb-account-menu-roles-list {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.tb-account-menu-role {
display: inline-block;
padding: 4px 10px;
border: 2px solid color-mix(in srgb, var(--tb-textColor) 50%, transparent);
border-radius: 12px;
font-size: 12px;
font-weight: 600;
color: var(--tb-textColor);
background-color: transparent;
transition: background-color 0.3s ease, border-color 0.3s ease;
}
.tb-account-menu-footer {
border-top: 1px solid color-mix(in srgb, var(--tb-textColor) 20%, transparent);
display: flex;
justify-content: flex-end;
}
.tb-account-menu-divider {
width: 1px;
background-color: color-mix(in srgb, var(--tb-textColor) 20%, transparent);
margin: 10px 13px;
}
.tb-account-menu-logout-button > svg {
margin-left: 4px;
}
.tb-account-menu-login-button {
margin: 0 5px;
}
.tb-account-menu-loading {
height: 48px;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.tb-account-menu-loading > svg {
width: 18px;
height: 18px;
object-fit: cover;
object-position: center center;
stroke: var(--tb-textColor);
}
/* CV Download Popup Menu */
.tb-cv-popup {
position: fixed;
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 50%,
transparent
);
backdrop-filter: blur(8px);
box-shadow: -1px 3px 50px 4px var(--tb-backgroundColor);
-webkit-backdrop-filter: blur(8px);
width: auto;
height: auto;
z-index: 10;
border-radius: 25px;
transition: background-color 0.3s ease;
color: var(--tb-textColor);
margin-left: 42px;
}
.tb-cv-popup::before {
content: "";
position: absolute;
inset: 0;
padding: 1px; /* border thickness */
border-radius: inherit;
background: linear-gradient(
to bottom right,
/* 👈 diagonal gradient */
color-mix(in srgb, var(--tb-textColor) 15%, transparent),
color-mix(in srgb, var(--tb-textColor) 5%, transparent),
color-mix(in srgb, var(--tb-textColor) 15%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
z-index: 1;
transition: background 0.3s ease;
}
.tb-mobile-cv-popup {
/* Mobile-specific styles if needed */
}
.tb-cv-popup-container {
padding: 13px;
display: flex;
flex-direction: column;
gap: 10px;
}
.tb-mobile-cv-popup-container {
padding: 13px;
}
.tb-cv-main-divider {
height: 1px;
width: 100%;
background-color: color-mix(in srgb, var(--tb-textColor) 20%, transparent);
border-radius: 2px;
}
.tb-cv-buttons-divider {
width: 1px;
background-color: color-mix(in srgb, var(--tb-textColor) 20%, transparent);
margin: 10px 13px;
}
.tb-cv-print,
.tb-cv-digital {
display: flex;
flex-direction: row;
gap: 12px;
align-items: center;
}
.tb-cv-print-icon,
.tb-cv-digital-icon {
min-width: 40px;
width: 40px;
height: 40px;
fill: var(--tb-textColor);
margin-left: 4px;
}
.tb-cv-description {
flex-grow: 1;
}
.tb-cv-title {
font-size: 20px;
font-weight: 600;
color: var(--tb-textColor);
margin-bottom: 5px;
display: inline-flex;
align-items: center;
gap: 1px;
}
.tb-cv-subtitle {
font-size: 14px;
font-weight: 500;
color: color-mix(in srgb, var(--tb-textColor) 50%, transparent);
margin-bottom: 4px;
}
.tb-cv-digital-buttons {
display: flex;
flex-direction: row;
gap: 3px;
}
.tb-cv-download-button {
margin: 0;
justify-content: center;
}
.tb-cv-versions-button {
margin: 0;
margin-left: 3px;
min-height: 20px;
padding: 4px 4.5px 3px 3px;
justify-content: center;
}
.tb-cv-versions-button:hover {
padding: 4px 4.5px 3px 3px;
}
.tb-cv-versions-button > svg {
margin-left: 0;
}
/* Website Selector Popup */
.tb-website-selector-popup {
position: fixed;
width: 200px;
height: auto;
z-index: 10;
border-radius: 25px;
box-shadow: -1px 3px 50px 4px var(--tb-backgroundColor);
overflow: visible;
}
.tb-mobile-website-selector-popup {
/* Mobile-specific styles if needed */
}
.tb-website-selector-popup-container {
}
.tb-mobile-website-selector-popup-container {
padding: 0;
}
.tb-website-selector-list {
display: flex;
flex-direction: column;
align-items: flex-end;
}
.tb-website-selector-item {
border: none;
padding: 0;
font-size: 1.3em;
background: none;
font-weight: 400;
height: 60px;
width: 200px;
color: var(--tb-textColor);
position: relative;
cursor: pointer;
transition: width 0.3s ease, height 0.3s ease, border-radius 0.3s ease,
box-shadow 0.3s ease;
overflow: hidden;
}
.tb-website-selector-item::before {
content: "";
position: absolute;
inset: 0;
padding: 1px; /* border thickness */
border-radius: inherit;
background: linear-gradient(
to bottom right,
/* 👈 diagonal gradient */
color-mix(in srgb, var(--tb-textColor) 15%, transparent),
color-mix(in srgb, var(--tb-textColor) 10%, transparent),
color-mix(in srgb, var(--tb-textColor) 15%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
z-index: 1;
transition: background 0.3s ease;
}
.tb-website-selector-item:first-child {
border-top-left-radius: 25px;
border-top-right-radius: 25px;
}
.tb-website-selector-item:last-child {
border-bottom-left-radius: 25px;
border-bottom-right-radius: 25px;
}
.tb-website-selector-item > svg {
width: 100%;
height: 100%;
object-fit: cover; /* fill width and clip vertically */
object-position: center center; /* keep it centered */
flex-shrink: 0;
}
.tb-website-selector-item:hover {
height: 68px;
width: 226.66px;
border-top-left-radius: 25px;
border-bottom-left-radius: 25px;
box-shadow: -1px 3px 25px 4px
color-mix(in srgb, var(--tb-backgroundColor) 50%, transparent);
z-index: 11;
}
@media (max-width: 450px) {
.tb-website-selector-list {
align-items: flex-start;
}
.tb-website-selector-item:hover {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
border-top-right-radius: 25px;
border-bottom-right-radius: 25px;
}
.tb-website-selector-item:first-child:hover {
border-top-left-radius: 25px;
}
.tb-website-selector-item:last-child:hover {
border-bottom-left-radius: 25px;
}
.tb-website-selector-popup {
transform-origin: top left !important;
}
}
/* Share Popup Menu */
.tb-share-popup {
position: fixed;
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 50%,
transparent
);
backdrop-filter: blur(8px);
box-shadow: -1px 3px 50px 4px var(--tb-backgroundColor);
-webkit-backdrop-filter: blur(8px);
width: auto;
height: auto;
z-index: 10;
border-radius: 25px;
transition: background-color 0.3s ease;
color: var(--tb-textColor);
margin-left: var(--tb-page-mobile-padding);
}
.tb-share-popup::before {
content: "";
position: absolute;
inset: 0;
padding: 1px; /* border thickness */
border-radius: inherit;
background: linear-gradient(
to bottom right,
/* 👈 diagonal gradient */
color-mix(in srgb, var(--tb-textColor) 15%, transparent),
color-mix(in srgb, var(--tb-textColor) 10%, transparent),
color-mix(in srgb, var(--tb-textColor) 15%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
z-index: 1;
transition: background 0.3s ease;
}
.tb-mobile-share-popup {
/* Mobile-specific styles if needed */
}
.tb-share-popup-container {
padding: 13px;
}
.tb-mobile-share-popup-container {
padding: 13px;
}
.tb-share-list {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
align-items: stretch;
justify-items: center;
gap: 0px;
}
.tb-share-item {
border: none;
padding: 13px 13px;
font-size: 16px;
background: none;
font-weight: 400;
color: var(--tb-textColor);
position: relative;
transition: background-color 0.3s ease, transform 0.3s ease;
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
min-width: 105px;
min-height: 110px;
width: 100%;
justify-content: center;
text-align: right;
border-radius: 17px;
transform: scale(1);
cursor: pointer;
}
.tb-share-item:hover {
background-color: var(--tb-textColor);
color: var(--tb-backgroundColor);
transform: scale(1.025);
cursor: pointer;
}
.tb-share-icon {
transition: font-size 0.3s ease;
font-size: 48px;
min-width: 24px;
text-align: center;
}
.tb-share-item:hover .tb-share-icon {
font-size: 52px;
}
.tb-share-item .tb-share-label {
transition: font-weight 0.3s ease;
font-weight: 600;
font-size: 16px;
white-space: nowrap;
}
.tb-share-item:hover .tb-share-label {
font-weight: 700;
}
.tb-share-divider {
height: 1px;
width: 100%;
background-color: color-mix(in srgb, var(--tb-textColor) 20%, transparent);
margin: 8px 0;
border-radius: 2px;
}
/* Menu Icon */
.menu-icon {
cursor: pointer;
width: 64px;
height: 64px;
}
.tb-line {
transition: transform 0.4s ease, opacity 0.4s ease;
transform-origin: 32px 32px; /* Center of SVG */
}
.tb-menu-header {
align-items: center;
justify-content: end;
height: 30px;
}
/* Header Logo */
.tb-header-logo {
position: relative;
display: inline-block;
}
.tb-logo-image {
opacity: 1;
transition: opacity 0.3s ease-in-out, width 0.3s ease-in-out,
transform 0.3s ease-in-out;
width: 30px;
height: 30px;
overflow: hidden;
position: relative;
cursor: pointer;
}
.tb-logo-image:hover {
transform: scale(1.025);
cursor: pointer;
}
.tb-logo-image:active {
transform: scale(0.975);
cursor: pointer;
}
.tb-logo-image-large {
width: 237px;
}
.tb-logo-image svg {
fill: var(--tb-textColor);
height: 30px;
display: block;
width: auto;
position: absolute;
top: 0;
right: 0;
transition: fill 0.3s ease-in-out, right 0.3s ease-in-out;
}
.tb-logo-image-large svg {
right: auto;
left: 0;
}
.tb-logo-image-large-mobile svg {
height: 30px;
}
.tb-logo-image-hidden {
opacity: 0;
}
/* Header Button */
.tb-header-button,
.tb-footer-button {
background: none;
border: none;
width: 30px;
height: 30px;
padding: 0;
z-index: 99;
cursor: pointer;
transform-origin: center center;
transform: scale(1);
transition: transform 0.3s ease;
}
.tb-header-button:active,
.tb-footer-button:active {
transform: scale(0.95);
cursor: pointer;
}
.tb-header-button:hover,
.tb-footer-button:hover {
transform: scale(1.05);
cursor: pointer;
}
.tb-header-button-menu > .hamburger-react {
position: relative;
left: -9px;
top: -10px;
}
.tb-header-button-menu > .hamburger-react > div {
height: 4px !important;
}
.tb-header-button > svg {
width: 16px;
stroke: var(--tb-textColor);
transition: width 0.3s ease;
}
.tb-header-button:hover > svg {
width: 18px;
}
/* Footer Icon */
.tb-footer-icon {
width: 30px;
height: 30px;
cursor: pointer;
transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out;
opacity: 1;
transform: scale(1);
}
.tb-footer-icon.tb-hidden {
transform: scale(0.5);
}
.tb-footer-icon > svg {
transition: fill 0.3s ease-in-out;
fill: var(--tb-textColor);
}
.tb-footer-icon-close {
width: 30px;
height: 30px;
cursor: pointer;
position: absolute;
top: 0;
right: 0;
transition: opacity 0.3s ease-in-out;
opacity: 1;
}
.tb-footer-icon-close > svg {
transition: fill 0.3s ease-in-out;
fill: var(--tb-textColor);
}
/* Scroll Icon */
.tb-scroll-icon-wrapper {
display: flex;
align-items: center;
flex-direction: row;
column-gap: 15px;
padding-top: 0;
transition: opacity 0.3s ease-in-out;
}
.tb-scroll-icon-wrapper > svg {
fill: var(--tb-textColor);
height: 38px;
width: auto;
}
.tb-scroll-icon-text {
margin: 0;
font-weight: 600;
font-size: 1.1em;
color: var(--tb-textColor);
}
/* Image Components */
.tb-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%;
}
.tb-images-container-hidden {
opacity: 0;
position: absolute;
}
/* Grid layouts for different numbers of images */
.tb-single-image-grid {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 1fr;
height: var(--unit-100vh);
}
.tb-two-images-grid {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 1fr 1fr;
height: var(--unit-100vh);
}
.tb-three-images-grid {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 1fr 1fr 1fr;
height: var(--unit-100vh);
}
.tb-four-images-grid {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr 1fr;
height: var(--unit-100vh);
}
.tb-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;
}
.tb-image-wrapper {
width: 100%;
height: 100%;
overflow: hidden;
position: relative;
}
.tb-image-carousel {
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
}
.tb-carousel-image-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
transition: opacity 1s ease-in-out;
}
.tb-carousel-image-wrapper.tb-active {
opacity: 1;
z-index: 1;
}
.tb-carousel-image-wrapper.tb-hidden {
opacity: 0;
z-index: 0;
}
.tb-carousel-image {
width: 100%;
height: 100%;
object-fit: cover;
}
.tb-single-image-wrapper {
width: 100%;
height: var(--unit-100vh);
overflow: hidden;
}
.tb-sidebar-image {
width: 100%;
height: 100%;
object-fit: cover;
}
.tb-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;
}
/* Image component styles */
.tb-image-container {
position: relative;
width: 100%;
height: 100%;
min-height: 0;
}
.tb-image-container-loading {
min-height: 200px;
}
.tb-image-error {
display: flex;
align-items: center;
justify-content: center;
min-height: 200px;
height: 100%;
border-radius: 5px;
font-style: italic;
text-align: center;
padding: 20px;
position: relative;
z-index: 1;
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 50%,
transparent
);
transition: opacity 0.3s ease-in-out;
}
.tb-image-error.tb-hidden {
pointer-events: none;
}
.tb-image-error-content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 15px;
}
.tb-image-error-title {
font-size: 18px;
font-weight: 600;
margin: 0;
font-style: normal;
}
.tb-image-error-button {
margin: 0;
}
.tb-image-error-button:hover {
text-shadow: none;
}
.tb-image-blurhash {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
bottom: 0;
z-index: 0;
object-fit: cover;
filter: blur(0px); /* Blurhash is already blurred */
}
.tb-image-content {
position: relative;
object-fit: cover;
width: 100%;
height: 100%;
z-index: 1;
transition: opacity 0.3s ease-in-out, height 0.5s, width 0.5s;
opacity: 1;
}
.tb-image-loading-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
}
.tb-image-loading {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
gap: 12px;
align-items: flex-start;
justify-content: center;
text-align: left;
font-style: normal;
padding: 8px;
color: var(--tb-textColor);
stroke: var(--tb-textColor);
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 55%,
transparent
);
border-radius: 22px;
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
box-shadow: -1px 12px 45px 0
color-mix(in srgb, var(--tb-backgroundColor) 65%, transparent);
}
.tb-image-loading::before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
padding: 1px;
border-radius: inherit;
background: linear-gradient(
to bottom right,
color-mix(in srgb, var(--tb-textColor) 12%, transparent),
color-mix(in srgb, var(--tb-textColor) 6%, transparent),
color-mix(in srgb, var(--tb-textColor) 12%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
}
.tb-image-loading > svg {
width: 18px;
height: 18px;
}
/* Project Cards */
.tb-project-cards-container {
position: relative;
flex-grow: 1;
max-height: 400px;
height: min(400px, 50vh);
min-height: 0;
transition: padding-bottom 0.3s ease;
padding-bottom: 0;
}
.simplebar-scrolling .tb-project-cards-container {
padding-bottom: 40px;
}
.tb-project-card {
flex: 0 0 auto; /* prevent shrinking */
height: 100%;
scroll-snap-align: start; /* align each card when scrolling */
background-color: var(--tb-backgroundColor);
display: flex;
gap: 15px;
flex-direction: column;
cursor: pointer;
transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.tb-project-card-wrapper {
padding: 7px;
}
.tb-project-card:hover {
transform: scale(1.015);
}
.tb-project-card-content {
padding-left: 20px;
display: flex;
flex-direction: row;
gap: 15px;
position: relative;
justify-content: space-between;
}
.tb-project-type-badge {
margin: 0;
border: 2px solid color-mix(in srgb, var(--tb-textColor) 50%, transparent);
padding: 2px 6px 2px 6px;
color: var(--tb-textColor);
border-radius: 12px;
font-size: 12px;
width: fit-content;
}
.tb-project-type-badge-wrapper {
height: 0;
overflow: hidden;
transition: opacity 0.3s ease;
opacity: 0;
display: flex;
flex-direction: row;
gap: 10px;
}
.tb-scroll-top .tb-project-type-badge-wrapper {
height: 20px;
opacity: 1;
}
.tb-project-info-wrapper {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease, opacity 0.3s ease;
opacity: 0;
display: flex;
flex-direction: row;
column-gap: 10px;
row-gap: 10px;
align-items: center;
flex-wrap: wrap;
}
.tb-project-tools-list {
display: flex;
flex-wrap: wrap;
column-gap: 10px;
row-gap: 5px;
font-size: 14px;
max-width: 600px;
align-items: center;
}
.tb-scroll-top .tb-project-info-wrapper {
max-height: 100px;
opacity: 1;
}
.tb-project-client {
margin: 0;
font-size: 14px;
}
.tb-project-client-label {
font-size: 14px;
opacity: 0.5;
margin-right: 5px;
}
.tb-project-tool-badge {
margin: 0;
border: 2px solid color-mix(in srgb, var(--tb-textColor) 50%, transparent);
padding: 2px 6px 2px 6px;
color: var(--tb-textColor);
border-radius: 12px;
font-size: 12px;
width: fit-content;
}
.tb-project-status-badge {
margin: 0;
border: 2px solid #ffffff7d;
padding: 2px 6px 2px 6px;
color: #ffffff;
border-radius: 12px;
font-size: 12px;
}
.tb-project-status-badge-planned {
border: 2px solid #00a8ff7d;
color: #00a8ff;
}
.tb-project-status-badge-inProgress {
border: 2px solid #fbc5317d;
color: #fbc531;
}
.tb-project-status-badge-complete {
border: 2px solid #4cd1377d;
color: #4cd137;
}
.tb-project-card-image-wrapper {
max-width: 600px;
width: calc(100vw - var(--tb-page-mobile-padding) * 2);
max-height: 400px;
min-height: 0;
height: min(400px, 50vh);
overflow: hidden;
border-radius: 5px;
}
.tb-project-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(--tb-textColor);
}
.tb-project-card-placeholder-image {
width: 100%;
height: 200px;
background-color: #eee;
display: flex;
justify-content: center;
align-items: center;
border-radius: 10px;
color: #666;
}
.tb-project-card-title {
font-weight: 600;
font-size: 18px;
margin: 0;
}
.tb-project-card-title:before {
content: "";
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 4px;
border-radius: 2px;
background-color: var(--tb-textColor);
}
.tb-project-cards {
display: flex;
flex-wrap: nowrap;
gap: 5px;
position: relative;
height: 100%;
margin-bottom: 0;
}
.tb-scroll-btn {
font-family: "Libre Baskerville", serif;
font-weight: 400;
position: absolute;
top: calc(50% - 17.5px);
transform: translateY(-50%);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
box-shadow: -1px 3px 35px 4px var(--tb-backgroundColor);
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 50%,
transparent
);
cursor: pointer;
z-index: 10;
padding: 0;
width: 40px;
height: 40px;
line-height: 0.1px;
border-radius: 50%;
transition: background-color 0.3s ease, transform 0.2s ease, opacity 0.3s ease,
visibility 0.3s ease;
border: none;
opacity: 1;
visibility: visible;
padding: 10px;
}
.tb-scroll-btn::before {
content: "";
position: absolute;
inset: 0;
padding: 1px; /* border thickness */
border-radius: inherit;
background: linear-gradient(
to bottom right,
/* 👈 diagonal gradient */
color-mix(in srgb, var(--tb-textColor) 15%, transparent),
color-mix(in srgb, var(--tb-textColor) 10%, transparent),
color-mix(in srgb, var(--tb-textColor) 15%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
z-index: 1;
transition: background 0.3s ease;
}
.tb-scroll-btn > svg {
transition: fill 0.3s ease;
fill: var(--tb-textColor);
margin-bottom: 2px;
}
.tb-scroll-btn:hover {
background-color: var(--tb-textColor);
transform: translateY(-50%) scale(1.075);
}
.tb-scroll-btn:active {
transform: translateY(-50%) scale(0.975);
}
.tb-scroll-btn:hover > svg {
fill: var(--tb-backgroundColor);
}
.tb-scroll-btn.tb-left {
left: var(--tb-header-footer-horizontal-padding, 25px);
}
.tb-scroll-btn.tb-right {
right: var(--tb-header-footer-horizontal-padding, 25px);
}
.tb-page-content-mobile .tb-scroll-btn.tb-left {
left: var(--tb-page-mobile-padding, 25px);
}
.tb-page-content-mobile .tb-scroll-btn.tb-right {
right: var(--tb-page-mobile-padding, 25px);
}
.tb-scroll-btn.tb-hidden {
opacity: 0;
visibility: hidden;
pointer-events: none;
}
/* Blog List */
.tb-blog-list {
display: flex;
flex-direction: column;
gap: 15px;
width: 100%;
}
.tb-blog-list-container {
height: 100%;
position: relative;
min-height: 0;
}
.tb-blog-list-scroll {
height: calc(
100% + calc(var(--tb-header-footer-vertical-padding) * 2) + 30px
);
width: 100%;
padding-bottom: calc(
calc(var(--tb-header-footer-vertical-padding) * 2) + 30px
);
}
.tb-blog-list-scroll .simplebar-content-wrapper {
scroll-snap-type: y mandatory;
}
/* Content scroll SimpleBar styling */
.tb-page-vscroll.tb-page-scroll-snap .simplebar-content-wrapper {
scroll-snap-type: y proximity;
}
.tb-page-hscroll.tb-page-scroll-snap .simplebar-content-wrapper {
scroll-snap-type: x proximity;
}
.tb-page-vscroll .simplebar-vertical {
margin-left: var(--tb-page-mobile-padding, 0);
width: 4px;
border-radius: 3px;
overflow: hidden;
opacity: 0;
transition: opacity 0.3s ease;
margin-top: var(--simplebar-track-margin-top, 0);
margin-bottom: var(--tb-page-margin, 0);
}
.tb-page-vscroll:before {
content: "";
position: absolute;
right: 0;
top: 0;
bottom: 0;
z-index: 1;
opacity: 0;
transition: opacity 0.3s ease;
width: 4px;
border-radius: 3px;
}
.tb-page-vscroll.simplebar-scrolling:before {
opacity: 1;
}
.tb-page-hscroll .simplebar-horizontal {
margin-top: 4px;
height: 4px;
border-radius: 3px;
opacity: 0;
overflow: hidden;
transition: opacity 0.3s ease;
background-color: var(--tb-backgroundColor);
margin-left: var(--tb-page-padding, 0);
margin-right: var(--tb-page-padding, 0);
box-shadow: var(--tb-backgroundColor) 0px 0px 20px 20px;
}
.tb-page-content-mobile .tb-page-hscroll .simplebar-horizontal {
margin-left: var(--tb-page-mobile-padding, 0);
margin-right: var(--tb-page-mobile-padding, 0);
}
.tb-page-vscroll.simplebar-scrolling .simplebar-vertical {
opacity: 1;
}
.tb-page-hscroll.simplebar-scrolling .simplebar-horizontal {
opacity: 1;
}
.tb-blog-list-scroll .simplebar-vertical {
margin-bottom: calc(
calc(var(--tb-header-footer-vertical-padding) * 2) + 30px
);
width: 4px;
border-radius: 3px;
}
.simplebar-scrollbar:before {
top: 0px;
bottom: 0px;
left: 0px;
right: 0px;
background: var(--tb-textColor);
border-radius: 3px;
}
.simplebar-scrollbar.simplebar-visible,
.simplebar-scrollbar.simplebar-visible:before {
opacity: 1;
}
.tb-blog-list-item-wrapper {
scroll-snap-align: start;
scroll-snap-stop: normal;
}
.tb-blog-list-item {
width: 100%;
}
.tb-blog-list-item h3 {
font-size: 18px;
padding-bottom: 5px;
margin-bottom: 0;
font-weight: 600;
transition: font-size 0.3s ease;
}
.tb-blog-list-item p {
font-size: 14px;
transition: font-size 0.3s ease;
padding-bottom: 7px;
margin-bottom: 0;
}
.tb-blog-list-item:hover h3 {
font-size: 22px;
cursor: pointer;
}
.tb-blog-list-item:hover p {
font-size: 17px;
cursor: pointer;
}
.tb-blog-list-item-date {
opacity: 0.75;
}
.tb-blog-list-item-content {
position: relative;
padding-left: 20px;
}
.tb-blog-list-item-content:before {
content: "";
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 4px;
border-radius: 2px;
background-color: var(--tb-textColor);
}
.tb-blog-content h1.tb-title {
font-size: 38px;
font-weight: 600;
margin: 10px 0 0 0;
line-height: 1.2;
}
.tb-blog-content-mobile h1.tb-title {
font-size: 28px;
line-height: 1.2;
}
.tb-blog-content h2.tb-title {
font-size: 32px;
font-weight: 600;
margin: 10px 0 0 0;
line-height: 1.2;
}
.tb-blog-content-mobile h2.tb-title {
font-size: 26px;
line-height: 1.2;
}
.tb-blog-content p.tb-paragraph {
font-weight: 500;
margin: 0;
}
.tb-blog-header {
display: flex;
flex-direction: column;
gap: 10px;
transition: gap 0.3s ease;
width: 100%;
margin-bottom: 20px;
}
.tb-scroll-top .tb-blog-header {
gap: 20px;
}
.tb-blog-title {
font-size: 30px;
font-weight: 700;
margin: 0;
transition: font-size 0.3s ease;
}
.tb-scroll-top .tb-blog-title {
font-size: 46px;
}
.tb-scroll-top .tb-blog-title-mobile {
font-size: 36px;
}
.tb-blog-subtitle {
font-size: 14px;
transition: font-size 0.3s ease;
margin: 0;
}
.tb-scroll-top .tb-blog-subtitle {
font-size: 18px;
}
.tb-blog-date {
font-size: 12px;
text-align: end;
transition: font-size 0.3s ease;
margin: 0;
}
.tb-scroll-top .tb-blog-date {
font-size: 16px;
}
.tb-blog-header-meta,
.tb-blog-header-title {
display: flex;
flex-direction: row;
width: 100%;
justify-content: space-between;
align-items: center;
}
.tb-project-header-buttons,
.tb-experience-header-buttons {
display: flex;
flex-direction: row;
gap: 15px;
align-items: center;
}
.tb-share-button {
border: none;
background: none;
padding: 0;
margin: 0;
min-width: 32px;
height: 32px;
transition: transform 0.3s ease;
position: relative;
}
.tb-share-button:hover {
cursor: pointer;
transform: scale(1.025);
}
.tb-share-button:active {
transform: scale(0.975);
cursor: pointer;
}
.tb-share-button-icon {
transition: opacity 0.3s ease;
opacity: 1;
}
.tb-share-button-icon > svg {
width: auto;
opacity: 1;
transform: scale(1);
transition: opacity 0.3s ease, transform 0.3s ease;
fill: var(--tb-textColor);
}
.tb-share-button-icon.tb-hidden > svg {
transform: scale(0.5);
}
.tb-share-button-close {
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
width: auto;
opacity: 1;
transition: opacity 0.3s ease;
}
.tb-visit-button {
border: none;
background: none;
padding: 0;
margin: 3px 0 0 0;
border-radius: 22px;
padding: 8px 14px;
color: var(--tb-textColor);
font-weight: 500;
transition: background-color 0.3s ease, color 0.3s ease, transform 0.3s ease;
border: 2px solid color-mix(in srgb, var(--tb-textColor) 15%, transparent);
align-items: center;
display: inline-flex;
gap: 6px;
padding-top: 9px;
}
.tb-visit-button:hover {
cursor: pointer;
transform: scale(1.025);
background-color: var(--tb-textColor);
color: var(--tb-backgroundColor);
}
.tb-visit-button:active {
transform: scale(0.975);
cursor: pointer;
}
.tb-visit-button > svg {
width: 12px;
fill: var(--tb-textColor);
}
.tb-visit-button:hover > svg {
fill: var(--tb-backgroundColor);
}
/* Companies List */
.tb-companies-list {
display: flex;
flex-direction: column;
gap: 15px;
width: 100%;
}
.tb-companies-list-container {
height: 100%;
max-width: 100%;
width: fit-content;
position: relative;
min-height: 0;
}
.tb-companies-list-item-wrapper {
scroll-snap-align: start;
scroll-snap-stop: normal;
}
.tb-companies-list-item {
width: 100%;
}
.tb-companies-list-item-content {
position: relative;
text-align: left;
display: flex;
gap: 15px;
}
.tb-companies-list-item-logo {
max-height: 75px;
width: 350px;
max-width: 100%;
transition: max-height 0.3s ease, width 0.3s ease;
align-items: flex-start;
justify-content: flex-start;
}
.tb-h-divider {
min-width: 4px;
width: 4px;
background-color: var(--tb-textColor);
border-radius: 2px;
}
.tb-v-divider {
height: 4px;
width: 100%;
background-color: var(--tb-textColor);
border-radius: 2px;
}
.tb-companies-list-item-logo svg {
fill: var(--tb-textColor);
height: 100%;
width: auto;
max-width: 100%;
padding: 10px 5px;
}
.tb-companies-list-item-wrapper:hover {
cursor: pointer;
}
.tb-companies-list-item-wrapper:hover .tb-companies-list-item-logo {
max-height: 85px;
width: 400px;
}
.tb-companies-list-item-year {
font-size: 16px;
font-weight: 600;
margin: 0;
color: var(--tb-textColor);
max-width: 40px;
text-align: end;
}
/* Project Page Styles - Matching Blog Page */
.tb-project-content h1.tb-title {
font-size: 38px;
font-weight: 600;
margin: 10px 0 0 0;
line-height: 1.2;
}
.tb-project-content h1.tb-title:first-child {
margin-top: 0;
}
.tb-project-content-mobile h1.tb-title {
font-size: 28px;
line-height: 1.2;
}
.tb-project-content-mobile h1.tb-title:first-child {
margin-top: 0;
}
.tb-project-content h2.tb-title {
font-size: 32px;
font-weight: 600;
margin: 10px 0 0 0;
line-height: 1.2;
}
.tb-project-content h2.tb-title:first-child {
margin-top: 0;
}
.tb-project-content-mobile h2.tb-title {
font-size: 26px;
line-height: 1.2;
}
.tb-project-content-mobile h2.tb-title:first-child {
margin-top: 0;
}
.tb-project-content p.tb-paragraph {
font-weight: 500;
margin: 0;
}
.tb-project-content .tb-image-container {
width: 100%;
overflow: hidden;
border-radius: 5px;
margin-bottom: 10px;
}
.tb-project-header {
display: flex;
flex-direction: column;
gap: 10px;
transition: gap 0.3s ease;
width: 100%;
margin-bottom: 20px;
}
.tb-scroll-top .tb-project-header {
gap: 20px;
}
.tb-project-title {
font-size: 30px;
font-weight: 700;
margin: 0;
transition: font-size 0.3s ease;
}
.tb-scroll-top .tb-project-title {
font-size: 46px;
}
.tb-scroll-top .tb-project-title-mobile {
font-size: 36px;
}
.tb-project-subtitle {
font-size: 14px;
transition: font-size 0.3s ease;
margin: 0;
}
.tb-scroll-top .tb-project-subtitle {
font-size: 18px;
}
.tb-project-date {
font-size: 12px;
text-align: end;
transition: font-size 0.3s ease;
margin: 0;
}
.tb-scroll-top .tb-project-date {
font-size: 16px;
}
.tb-project-header-meta,
.tb-project-header-title {
display: flex;
flex-direction: row;
width: 100%;
justify-content: space-between;
align-items: center;
}
.tb-experience-logo {
display: flex;
align-items: center;
justify-content: flex-start;
width: 300px;
max-width: 100%;
transition: width 0.3s ease;
}
.tb-scroll-top .tb-experience-logo {
width: 350px;
}
.tb-experience-logo > svg {
fill: var(--tb-textColor);
height: 45px;
width: auto;
max-width: 100%;
transition: height 0.3s ease;
}
.tb-scroll-top .tb-experience-logo > svg {
height: 65px;
}
.tb-project-header-meta-items {
display: flex;
flex-direction: column;
gap: 10px;
}
.tb-project-header-meta-items-left {
align-items: flex-start;
}
.tb-project-header-meta-items-right {
align-items: flex-end;
}
/* Experience Page Styles - Matching Project Page */
.tb-experience-content h1.tb-title {
font-size: 38px;
font-weight: 600;
margin: 10px 0 0 0;
line-height: 1.2;
}
.tb-experience-content-mobile h1.tb-title {
font-size: 28px;
line-height: 1.2;
}
.tb-experience-content h2.tb-title {
font-size: 32px;
font-weight: 600;
margin: 10px 0 0 0;
line-height: 1.2;
}
.tb-experience-content-mobile h2.tb-title {
font-size: 26px;
line-height: 1.2;
}
.tb-experience-content p.tb-paragraph {
font-weight: 500;
margin: 0;
}
.tb-experience-content .tb-image-container {
width: 100%;
overflow: hidden;
border-radius: 5px;
margin-bottom: 10px;
}
.tb-experience-header {
display: flex;
flex-direction: column;
gap: 10px;
transition: gap 0.3s ease;
width: 100%;
margin-bottom: 20px;
}
.tb-scroll-top .tb-experience-header {
gap: 20px;
}
.tb-experience-title {
font-size: 30px;
font-weight: 700;
margin: 0;
transition: font-size 0.3s ease;
}
.tb-scroll-top .tb-experience-title {
font-size: 46px;
}
.tb-scroll-top .tb-experience-title-mobile {
font-size: 36px;
}
.tb-experience-subtitle {
font-size: 14px;
transition: font-size 0.3s ease;
margin: 0;
}
.tb-scroll-top .tb-experience-subtitle {
font-size: 18px;
}
.tb-experience-date,
.tb-experience-months-years {
font-size: 12px;
text-align: end;
transition: font-size 0.3s ease;
margin: 0;
}
.tb-scroll-top .tb-experience-date,
.tb-scroll-top .tb-experience-months-years {
font-size: 16px;
}
.tb-experience-header-meta,
.tb-experience-header-title {
display: flex;
flex-direction: row;
width: 100%;
justify-content: space-between;
align-items: center;
}
.tb-experience-header-title {
gap: 30px;
}
/* Features List */
.tb-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;
}
.tb-features-listItem {
background-color: var(--tb-textColor);
color: var(--tb-backgroundColor);
padding: 4px 8px;
border-radius: 15px;
font-size: 0.75rem;
font-weight: 600;
text-transform: lowercase;
}
.tb-features-overflow-counter {
background-color: transparent;
color: var(--tb-textColor);
font-weight: 700;
position: relative;
display: flex;
align-items: center;
opacity: 0.8;
padding: 0;
padding-left: 1px;
}
.tb-project-card .tb-features-list {
margin: 0;
margin-top: 5px;
}
/* Contact Form */
.tb-contact-form-wrapper {
width: 100%;
}
.tb-form {
display: flex;
flex-direction: column;
gap: 15px;
margin: 0.75em 0;
width: 100%;
}
.tb-form-input:focus {
outline: none; /* Removes the default outline */
box-shadow: none; /* Removes Chrome's blue glow */
}
.tb-form-input {
border: none;
border-radius: 18px;
padding: 6.5px 14px;
max-width: 400px;
min-width: 0;
font-weight: 500;
background-color: var(--tb-backgroundColor);
width: 100%;
}
.tb-form-input::placeholder {
color: color-mix(in srgb, var(--tb-textColor) 50%, transparent);
}
textarea.tb-form-input {
padding: 12px 14px;
line-height: 1.5;
vertical-align: top;
resize: vertical;
}
.tb-form-input-wrapper {
position: relative;
max-width: 400px;
border-radius: 19px;
border: 2px solid color-mix(in srgb, var(--tb-textColor) 15%, transparent);
padding: 0;
transition: border 0.3s ease;
}
.tb-form-input-wrapper:hover,
.tb-form-input-wrapper:focus-within {
border: 2px solid var(--tb-textColor);
}
.tb-form-input-wrapper .tb-form-input {
background-color: var(--tb-backgroundColor);
position: relative;
z-index: 1;
}
.tb-form-input:disabled {
opacity: 0.5;
}
.tb-form-actions {
display: flex;
gap: 15px;
align-items: center;
}
.tb-form-actions > .tb-button {
margin: 0;
}
.tb-form-actions > .tb-form-error {
margin: 0;
border: 1px solid #ff42457d;
padding: 3px 6px;
color: #ff4245;
border-radius: 12px;
font-size: 12px;
}
/* CacheReloadView */
.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;
}
/* Column Flex Layout */
.tb-column-flex {
display: flex;
flex-direction: row;
width: 100%;
align-items: center;
margin-bottom: 10px;
}
.tb-column-flex-item {
flex-shrink: 0;
display: flex;
flex-direction: column;
}
.tb-column-flex-item .tb-image-container {
margin-bottom: 0;
}
/* Responsive behavior for column flex */
@media (max-width: 768px) {
.tb-column-flex {
flex-direction: column;
gap: 15px;
}
.tb-column-flex-item {
width: 100% !important;
}
}
.tb-positions-timeline {
display: flex;
flex-direction: column;
gap: 15px;
}
.tb-position-timeline-item {
display: flex;
flex-direction: row;
width: 100%;
gap: 15px;
}
.tb-position-timeline-item-content {
flex: 1;
}
.tb-position-timeline-item-year {
max-width: 40px;
text-align: end;
font-size: 16px;
font-weight: 600;
}
.tb-position-timeline-item-name {
font-weight: 600;
}
/* Video component styles (based on Image component styles) */
.tb-video-container {
position: relative;
width: 100%;
height: 100%;
min-height: 0;
display: flex;
align-items: center;
}
.tb-video-container-inner {
border-radius: 5px;
overflow: hidden;
width: 100%;
}
.tb-video-container-inner-fullscreen {
border-radius: 0;
}
.tb-video-container-loading {
min-height: 200px;
}
.tb-video-error {
display: flex;
align-items: center;
justify-content: center;
min-height: 200px;
height: 100%;
width: 100%;
border-radius: 5px;
font-style: italic;
text-align: center;
padding: 20px;
position: relative;
z-index: 1;
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 50%,
transparent
);
border-radius: 5px;
transition: opacity 0.3s ease-in-out;
}
.tb-video-error.tb-hidden {
pointer-events: none;
}
.tb-video-placeholder {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
bottom: 0;
z-index: 0;
object-fit: cover;
background-color: var(--tb-textColor);
opacity: 0.5;
transition: opacity 0.2s ease-in-out;
pointer-events: none;
border-radius: 5px;
}
.tb-video-content {
position: relative;
object-fit: cover;
width: 100%;
height: 100%;
z-index: 1;
transition: opacity 0.3s ease-in-out, height 0.5s, width 0.5s;
opacity: 1;
display: block;
border-radius: 0;
}
.tb-video-loading-container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 1;
display: flex;
align-items: center;
justify-content: center;
}
.tb-video-loading {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
gap: 12px;
align-items: center;
justify-content: center;
text-align: left;
font-style: normal;
padding: 8px;
color: var(--tb-textColor);
stroke: var(--tb-textColor);
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 55%,
transparent
);
border-radius: 22px;
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
box-shadow: -1px 12px 45px 0
color-mix(in srgb, var(--tb-backgroundColor) 65%, transparent);
}
.tb-video-loading::before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
padding: 1px;
border-radius: inherit;
background: linear-gradient(
to bottom right,
color-mix(in srgb, var(--tb-textColor) 12%, transparent),
color-mix(in srgb, var(--tb-textColor) 6%, transparent),
color-mix(in srgb, var(--tb-textColor) 12%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
}
.tb-video-loading > svg {
width: 18px;
height: 18px;
}
.tb-video-loading-progress {
max-width: 200px;
width: 200px;
height: 6px;
background-color: color-mix(in srgb, var(--tb-textColor) 25%, transparent);
border-radius: 3px;
overflow: hidden;
margin: 5px;
}
.tb-video-loading-progress-bar {
height: 100%;
width: 0;
background-image: linear-gradient(
90deg,
color-mix(in srgb, var(--tb-textColor) 100%, transparent) 0%,
color-mix(in srgb, var(--tb-textColor) 75%, transparent) 16.16%,
color-mix(in srgb, var(--tb-textColor) 50%, transparent) 33.33%,
color-mix(in srgb, var(--tb-textColor) 50%, transparent) 66.67%,
color-mix(in srgb, var(--tb-textColor) 75%, transparent) 83.33%,
color-mix(in srgb, var(--tb-textColor) 100%, transparent) 100%
);
background-size: 200% 100%;
background-position: 0 0;
transition: width 0.3s ease-in-out;
border-radius: 3px;
animation: tb-video-loading-progress-shift 1.4s linear infinite;
will-change: background-position;
}
@keyframes tb-video-loading-progress-shift {
0% {
background-position: 0 0;
}
100% {
background-position: 200% 0;
}
}
.tb-video-controls {
position: absolute;
left: 0;
right: 0;
bottom: 0;
display: flex;
gap: 8px;
align-items: center;
margin: 15px;
padding: 0 12px;
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 55%,
transparent
);
border-radius: 30px;
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
box-shadow: -1px 12px 45px 0
color-mix(in srgb, var(--tb-backgroundColor) 65%, transparent);
z-index: 2;
transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out,
margin 0.3s ease-in-out;
opacity: 1;
}
.tb-video-controls-fullscreen {
margin: 40px;
}
.tb-video-controls::before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
padding: 1px;
border-radius: inherit;
background: linear-gradient(
to bottom right,
color-mix(in srgb, var(--tb-textColor) 12%, transparent),
color-mix(in srgb, var(--tb-textColor) 6%, transparent),
color-mix(in srgb, var(--tb-textColor) 12%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
}
.tb-video-controls-separator {
width: 1px;
height: 18px;
background-color: color-mix(in srgb, var(--tb-textColor) 25%, transparent);
}
.tb-video-seek.rc-slider {
height: 4px;
transition: height 0.3s ease-in-out;
padding: 0;
}
.tb-video-seek .rc-slider-rail {
background: color-mix(in srgb, var(--tb-textColor) 25%, transparent);
transition: height 0.3s ease-in-out;
}
.tb-video-seek .rc-slider-track {
background: var(--tb-textColor);
transition: height 0.3s ease-in-out;
}
.tb-video-seek .rc-slider-handle {
opacity: 0;
background: var(--tb-textColor);
border: none;
transform: scale(0.5);
transform-origin: center center;
transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out,
margin-top 0.3s ease-in-out, box-shadow 0.3s ease-in-out;
box-shadow: none;
width: 16px;
height: 16px;
}
.tb-video-seek.rc-slider:active .rc-slider-handle,
.tb-video-seek.rc-slider:hover .rc-slider-handle {
margin-top: -5px;
opacity: 1;
transform: scale(1);
}
.tb-video-seek.rc-slider .rc-slider-handle-dragging {
border: none !important;
box-shadow: 0px 0px 25px 0
color-mix(in srgb, var(--tb-textColor) 75%, transparent);
}
.tb-video-seek.rc-slider:active,
.tb-video-seek.rc-slider:hover,
.tb-video-seek.rc-slider:active .rc-slider-track,
.tb-video-seek.rc-slider:active .rc-slider-rail,
.tb-video-seek.rc-slider:hover .rc-slider-track,
.tb-video-seek.rc-slider:hover .rc-slider-rail {
height: 6px;
}
.tb-video-volume {
width: 96px;
}
.tb-video-controls.tb-hidden {
opacity: 0;
visibility: hidden;
pointer-events: none;
}
.tb-video-volume-popup {
position: absolute;
padding: 15px;
width: auto;
z-index: 1000;
transform-origin: bottom center !important;
background-color: color-mix(
in srgb,
var(--tb-backgroundColor) 55%,
transparent
);
border-radius: 30px;
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
box-shadow: -1px 12px 45px 0
color-mix(in srgb, var(--tb-backgroundColor) 65%, transparent);
}
.tb-video-volume-popup:before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
padding: 1px;
border-radius: inherit;
background: linear-gradient(
to bottom right,
color-mix(in srgb, var(--tb-textColor) 12%, transparent),
color-mix(in srgb, var(--tb-textColor) 6%, transparent),
color-mix(in srgb, var(--tb-textColor) 12%, transparent)
);
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
mask-composite: xor;
-webkit-mask-composite: xor;
mask-composite: exclude;
pointer-events: none;
}
.tb-video-volume-popup-container {
margin: 4px 0;
}
.tb-video-volume.rc-slider {
width: 4px;
height: 120px;
padding: 0;
transition: width 0.3s ease-in-out;
}
.tb-video-volume.rc-slider .rc-slider-rail {
background: color-mix(in srgb, var(--tb-textColor) 25%, transparent);
transition: width 0.3s ease-in-out;
width: 4px;
}
.tb-video-volume.rc-slider .rc-slider-track {
background: var(--tb-textColor);
transition: width 0.3s ease-in-out;
width: 4px;
margin-left: 0;
left: 0;
}
.tb-video-volume.rc-slider:active,
.tb-video-volume.rc-slider:hover,
.tb-video-volume.rc-slider:active .rc-slider-track,
.tb-video-volume.rc-slider:active .rc-slider-rail,
.tb-video-volume.rc-slider:hover .rc-slider-track,
.tb-video-volume.rc-slider:hover .rc-slider-rail {
width: 6px;
}
.tb-video-volume.rc-slider .rc-slider-handle {
margin-left: -6px;
opacity: 0;
background: var(--tb-textColor);
border: none;
transform: scale(0.5);
transform-origin: center center;
transition: opacity 0.3s ease-in-out, transform 0.3s ease-in-out,
margin-left 0.3s ease-in-out, box-shadow 0.3s ease-in-out;
box-shadow: none;
width: 16px;
height: 16px;
}
.tb-video-volume.rc-slider:active .rc-slider-handle,
.tb-video-volume.rc-slider:hover .rc-slider-handle {
margin-left: -5px;
opacity: 1;
transform: scale(1);
}
.tb-video-volume.rc-slider .rc-slider-handle-dragging {
border: none !important;
box-shadow: 0px 0px 25px 0
color-mix(in srgb, var(--tb-textColor) 75%, transparent);
}
.tb-video-volume-button > .tb-icon-button > svg {
width: auto;
}