:root { /* Colors */ --btn-bg-primary: #267361; --btn-bg-primary-hover: #267361; --btn-bg-primary-active: #353030; --btn-text-light: #fefcfb; --btn-text-dark: #267361; --btn-border-primary: #267361; --btn-border-ghost: #e9e9e9; --btn-border-ghost-hover: #ececec; --btn-border-ghost-active: #e1e1e1; --btn-bg-ghost-hover: #ececec; --btn-bg-ghost-active: #e1e1e1; /* Disabled */ --btn-bg-disabled: #cccccc; --btn-text-disabled: #888888; --btn-border-disabled: #cccccc; /* Focus */ --btn-focus-ring: 3px solid #a9a9a9; --btn-focus-offset: 2px; /* Layout */ --btn-py: 12px; --btn-px: 16px; --btn-py-lg: 16px; --btn-px-lg: 24px; --btn-radius: 50px; --btn-gap: 8px; --btn-max-height: 52px; --btn-icon-size: 18px; --btn-tertiary-px: 4px; /* Typography */ --btn-font-family: var(--font-body); --btn-font-size: 0.889rem; --btn-font-weight: var(--font-weight-bold); --btn-line-height: 1; /* Shadow */ --btn-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); --btn-shadow-none: none; /* Motion */ --btn-transition: background-color 0.25s ease, border-color 0.25s ease, color 0.25s ease, transform 0.25s ease, box-shadow 0.25s ease; } /* Base */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: var(--btn-gap); padding: var(--btn-py) var(--btn-px); max-height: var(--btn-max-height); border: 2px solid transparent; border-radius: var(--btn-radius); font-family: var(--btn-font-family); font-size: var(--btn-font-size); font-weight: var(--btn-font-weight); line-height: var(--btn-line-height); white-space: nowrap; text-decoration: none; vertical-align: middle; cursor: pointer; user-select: none; transition: var(--btn-transition); -webkit-tap-highlight-color: transparent; z-index: 999; } .btn:focus { outline: none; } .btn:focus-visible { outline: var(--btn-focus-ring); outline-offset: var(--btn-focus-offset); } .btn .btn-icon { display: flex; align-items: center; flex-shrink: 0; width: var(--btn-icon-size); height: var(--btn-icon-size); transition: transform 0.25s ease, color 0.25s ease; } .btn:hover .btn-icon.animate { transform: translateX(4px); } /* Filled */ .btn--filled { background-color: var(--btn-bg-primary); color: var(--btn-text-light); border-color: var(--btn-border-primary); box-shadow: var(--btn-shadow); } .btn--filled .btn-icon { color: currentColor; } .btn--filled:hover { background-color: var(--btn-bg-primary-hover); border-color: var(--btn-bg-primary-hover); } .btn--filled:active { background-color: var(--btn-bg-primary-active); border-color: var(--btn-bg-primary-active); transition: none; } /* Outline */ .btn--outline { background-color: transparent; color: var(--btn-text-dark); border-color: var(--btn-border-primary); box-shadow: var(--btn-shadow-none); } .btn--outline .btn-icon { color: currentColor; } .btn--outline:hover { background-color: var(--btn-bg-primary); border-color: var(--btn-bg-primary); color: var(--btn-text-light); } .btn--outline:active { background-color: var(--btn-bg-primary-active); border-color: var(--btn-bg-primary-active); color: var(--btn-text-light); transition: none; } /* Ghost */ .btn--ghost { background-color: transparent; color: var(--btn-text-dark); border-color: var(--btn-border-ghost); box-shadow: var(--btn-shadow-none); } .btn--ghost .btn-icon { color: currentColor; } .btn--ghost:hover { background-color: var(--btn-bg-ghost-hover); border-color: var(--btn-border-ghost-hover); } .btn--ghost:active { background-color: var(--btn-bg-ghost-active); border-color: var(--btn-border-ghost-active); transition: none; } /* Tertiary */ .btn--tertiary { background-color: transparent; color: var(--btn-text-dark); border-color: transparent; box-shadow: var(--btn-shadow-none); padding-inline: var(--btn-tertiary-px); } .btn--tertiary .btn-icon { color: currentColor; } .btn--tertiary:hover { text-decoration: underline; text-underline-offset: 3px; } .btn--tertiary:active { opacity: 0.7; transition: none; } /* Disabled */ .btn:disabled, .btn[aria-disabled="true"] { background-color: var(--btn-bg-disabled) !important; border-color: var(--btn-border-disabled) !important; color: var(--btn-text-disabled) !important; box-shadow: none !important; text-decoration: none !important; cursor: default !important; pointer-events: none; transform: none !important; } .btn:disabled .btn-icon, .btn[aria-disabled="true"] .btn-icon { color: var(--btn-text-disabled) !important; } /* Touch */ @media (hover: none) { .btn--filled:hover { background-color: var(--btn-bg-primary); border-color: var(--btn-bg-primary); } .btn--outline:hover { background-color: transparent; border-color: var(--btn-border-primary); color: var(--btn-text-dark); } .btn--ghost:hover { background-color: transparent; border-color: var(--btn-border-ghost); } .btn--tertiary:hover { text-decoration: none; } .btn:hover .btn-icon.animate { transform: none; } } @media (min-width: 768px) { .btn { padding: var(--btn-py-lg) var(--btn-px-lg); font-size: 1rem; } }