.btn-primary,
.btn-ghost,
.btn-outline {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 13px 24px;
    font-family: var(--font-mono);
    font-size: var(--fs-sm);
    font-weight: 700;
    border-radius: var(--nb-radius);
    cursor: pointer;
    border: var(--nb-border-w) solid var(--nb-border);
    text-decoration: none;
    line-height: 1;
    position: relative;
    transition: transform 0.22s cubic-bezier(0.34, 1.56, 0.64, 1),
                box-shadow 0.22s cubic-bezier(0.22, 1, 0.36, 1),
                background-color 0.2s ease,
                color 0.2s ease,
                border-color 0.2s ease;
    box-shadow: var(--nb-shadow-offset) var(--nb-shadow-offset) 0 var(--nb-shadow);
}

.btn-primary {
    background: var(--accent);
    color: var(--accent-ink);
    border-color: var(--accent-ink);
}

.btn-ghost {
    background: var(--bg-primary);
    color: var(--text-primary);
}

.btn-outline {
    background: transparent;
    color: var(--text-primary);
    padding: 11px 20px;
}

.btn-primary:hover,
.btn-ghost:hover,
.btn-outline:hover {
    transform: translate(calc(-2px + var(--mag-x, 0px)), calc(-2px + var(--mag-y, 0px)));
    box-shadow: var(--nb-shadow-hover) var(--nb-shadow-hover) 0 var(--nb-shadow);
}

.btn-ghost:hover,
.btn-outline:hover {
    background: var(--accent);
    color: var(--accent-ink);
    border-color: var(--accent-ink);
}

.btn-primary:active,
.btn-ghost:active,
.btn-outline:active {
    transform: translate(var(--nb-shadow-offset), var(--nb-shadow-offset));
    box-shadow: 0 0 0 var(--nb-shadow);
}

.btn-primary .material-icons-round,
.btn-ghost .material-icons-round,
.btn-outline .material-icons-round {
    font-size: 16px;
    transition: transform var(--dur-base) var(--ease-out);
}

.btn-primary:hover .material-icons-round {
    transform: translateX(3px);
}

.full-width {
    width: 100%;
    justify-content: center;
}