:root {
  --button-primary: #111827;
  --button-primary-hover: #020617;
  --button-primary-foreground: #ffffff;
  --button-primary-light: #fb7185;
  --button-secondary: #ffffff;
  --button-secondary-hover: #f8fafc;
  --button-secondary-foreground: #334155;
  --button-border: #cbd5e1;
  --button-focus: rgba(37, 99, 235, 0.28);
  --button-duration: 3;
}

/* Shared button geometry. Icon-only, tab, and table-header buttons keep their own shapes. */
.el-button:not(.is-circle):not(.is-link):not(.is-text),
.button,
.command-button,
.backtest-primary-command,
.backtest-secondary-command,
.backtest-secondary-search-command,
#backtest-stock-submit,
#backtest-batch-apply,
#backtest-batch-clear,
.holdings-primary-button,
.holdings-secondary-button,
.holdings-danger-button,
.technical-primary-button,
.technical-secondary-button,
.technical-search-submit,
.stock-detail-search-button,
.snapshot-button,
.login-button,
.add-blog-btn,
.add-intelligence-btn,
.edit-column-btn,
.manage-category-btn,
.copy-btn {
  min-height: 38px;
  border-radius: 999px;
  font-weight: 650;
  letter-spacing: 0.01em;
  transition:
    color 160ms ease,
    background-color 160ms ease,
    border-color 160ms ease,
    box-shadow 160ms ease,
    transform 160ms ease;
}

/* Secondary/default actions are quiet and support the primary action instead of competing with it. */
.el-button:not([class*="el-button--"]):not(.is-circle):not(.is-link):not(.is-text),
.el-button--default:not(.is-circle),
.el-button--primary.is-plain,
.button--secondary,
.button--ghost,
.command-button,
.backtest-secondary-command,
.backtest-secondary-search-command,
#backtest-batch-clear,
.holdings-secondary-button,
.technical-secondary-button,
.snapshot-button:not(.snapshot-button-primary),
.edit-column-btn,
.manage-category-btn {
  border-color: var(--button-border);
  background: var(--button-secondary);
  color: var(--button-secondary-foreground);
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05);
}

.el-button:not([class*="el-button--"]):not(.is-circle):not(.is-link):not(.is-text):hover,
.el-button--default:not(.is-circle):hover,
.el-button--primary.is-plain:hover,
.button--secondary:hover,
.button--ghost:hover,
.command-button:hover,
.backtest-secondary-command:hover,
.backtest-secondary-search-command:hover,
#backtest-batch-clear:hover,
.holdings-secondary-button:hover,
.technical-secondary-button:hover,
.snapshot-button:not(.snapshot-button-primary):hover,
.edit-column-btn:hover,
.manage-category-btn:hover {
  border-color: #94a3b8;
  background: var(--button-secondary-hover);
  color: #0f172a;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.08);
  transform: translateY(-1px);
}

/* Star treatment is deliberately reserved for the page's principal action. */
.el-button--primary:not(.is-plain):not(.is-circle),
.button--primary,
.backtest-primary-command,
#backtest-stock-submit,
#backtest-batch-apply,
#exportCsv,
.holdings-primary-button,
.technical-primary-button,
.technical-search-submit,
.stock-detail-search-button,
.snapshot-button-primary,
.login-button,
.add-blog-btn,
.add-intelligence-btn,
.copy-btn {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-color: var(--button-primary);
  background: var(--button-primary);
  color: var(--button-primary-foreground);
  box-shadow:
    0 1px 2px rgba(15, 23, 42, 0.18),
    0 7px 18px rgba(15, 23, 42, 0.16);
}

.el-button--primary:not(.is-plain):not(.is-circle)::before,
.button--primary::before,
.backtest-primary-command::before,
#backtest-stock-submit::before,
#backtest-batch-apply::before,
#exportCsv::before,
.holdings-primary-button::before,
.technical-primary-button::before,
.technical-search-submit::before,
.stock-detail-search-button::before,
.snapshot-button-primary::before,
.login-button::before,
.add-blog-btn::before,
.add-intelligence-btn::before,
.copy-btn::before {
  position: absolute;
  z-index: -1;
  width: 82px;
  height: 82px;
  border-radius: 50%;
  background: radial-gradient(circle, var(--button-primary-light) 0, rgba(251, 113, 133, 0.48) 18%, transparent 66%);
  content: "";
  offset-path: inset(1px round 999px);
  offset-distance: 0%;
  pointer-events: none;
  animation: star-btn calc(var(--button-duration) * 1s) linear infinite;
}

.el-button--primary:not(.is-plain):not(.is-circle)::after,
.button--primary::after,
.backtest-primary-command::after,
#backtest-stock-submit::after,
#backtest-batch-apply::after,
#exportCsv::after,
.holdings-primary-button::after,
.technical-primary-button::after,
.technical-search-submit::after,
.stock-detail-search-button::after,
.snapshot-button-primary::after,
.login-button::after,
.add-blog-btn::after,
.add-intelligence-btn::after,
.copy-btn::after {
  position: absolute;
  z-index: -1;
  inset: 1px;
  border-radius: inherit;
  background:
    radial-gradient(circle at 12% 30%, rgba(255, 255, 255, 0.72) 0 1px, transparent 1.5px),
    radial-gradient(circle at 31% 72%, rgba(255, 255, 255, 0.55) 0 1px, transparent 1.5px),
    radial-gradient(circle at 58% 24%, rgba(255, 255, 255, 0.62) 0 1px, transparent 1.5px),
    radial-gradient(circle at 84% 68%, rgba(255, 255, 255, 0.5) 0 1px, transparent 1.5px),
    linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 54%);
  content: "";
  pointer-events: none;
}

.el-button--primary:not(.is-plain):not(.is-circle):hover,
.button--primary:hover,
.backtest-primary-command:hover,
#backtest-stock-submit:hover,
#backtest-batch-apply:hover,
#exportCsv:hover,
.holdings-primary-button:hover,
.technical-primary-button:hover,
.technical-search-submit:hover,
.stock-detail-search-button:hover,
.snapshot-button-primary:hover,
.login-button:hover,
.add-blog-btn:hover,
.add-intelligence-btn:hover,
.copy-btn:hover {
  border-color: var(--button-primary-hover);
  background: var(--button-primary-hover);
  color: var(--button-primary-foreground);
  box-shadow:
    0 2px 3px rgba(15, 23, 42, 0.2),
    0 10px 24px rgba(15, 23, 42, 0.22);
  transform: translateY(-1px);
}

/* These native/custom controls may be loaded after this file by lazy Vue modules. */
html body :is(
  .holdings-primary-button,
  .technical-primary-button,
  .technical-search-submit,
  .stock-detail-search-button,
  .snapshot-button-primary,
  .login-button,
  .add-blog-btn,
  .add-intelligence-btn
) {
  border-color: var(--button-primary) !important;
  border-radius: 999px !important;
  background: var(--button-primary) !important;
  color: var(--button-primary-foreground) !important;
}

html body :is(
  .holdings-primary-button,
  .technical-primary-button,
  .technical-search-submit,
  .stock-detail-search-button,
  .snapshot-button-primary,
  .login-button,
  .add-blog-btn,
  .add-intelligence-btn
):hover {
  border-color: var(--button-primary-hover) !important;
  background: var(--button-primary-hover) !important;
  color: var(--button-primary-foreground) !important;
}

html body :is(
  .holdings-secondary-button,
  .technical-secondary-button,
  .snapshot-button:not(.snapshot-button-primary),
  .edit-column-btn,
  .manage-category-btn
) {
  border-color: var(--button-border) !important;
  border-radius: 999px !important;
  background: var(--button-secondary) !important;
  color: var(--button-secondary-foreground) !important;
}

html body :is(
  .holdings-secondary-button,
  .technical-secondary-button,
  .snapshot-button:not(.snapshot-button-primary),
  .edit-column-btn,
  .manage-category-btn
):hover {
  border-color: #94a3b8 !important;
  background: var(--button-secondary-hover) !important;
  color: #0f172a !important;
}

/* Semantic actions retain their meaning and never receive the decorative star treatment. */
.el-button--danger:not(.is-link):not(.is-text),
.button--danger,
.holdings-danger-button {
  border-color: #dc2626;
  background: #dc2626;
  color: #ffffff;
}

.el-button--success:not(.is-link):not(.is-text) {
  border-color: #15803d;
  background: #15803d;
  color: #ffffff;
}

.el-button--warning:not(.is-link):not(.is-text) {
  border-color: #b45309;
  background: #b45309;
  color: #ffffff;
}

.el-button:focus-visible,
.button:focus-visible,
.command-button:focus-visible,
.backtest-primary-command:focus-visible,
.backtest-secondary-command:focus-visible,
.backtest-secondary-search-command:focus-visible,
#backtest-stock-submit:focus-visible,
#backtest-batch-apply:focus-visible,
#backtest-batch-clear:focus-visible,
.holdings-primary-button:focus-visible,
.holdings-secondary-button:focus-visible,
.holdings-danger-button:focus-visible,
.technical-primary-button:focus-visible,
.technical-secondary-button:focus-visible,
.technical-search-submit:focus-visible,
.stock-detail-search-button:focus-visible,
.snapshot-button:focus-visible,
.login-button:focus-visible,
.add-blog-btn:focus-visible,
.add-intelligence-btn:focus-visible,
.edit-column-btn:focus-visible,
.manage-category-btn:focus-visible,
.copy-btn:focus-visible {
  outline: 3px solid var(--button-focus);
  outline-offset: 2px;
}

.el-button.is-disabled,
.el-button:disabled,
.button:disabled,
.command-button:disabled,
.backtest-primary-command:disabled,
.backtest-secondary-command:disabled,
.holdings-primary-button:disabled,
.holdings-secondary-button:disabled,
.holdings-danger-button:disabled,
.technical-primary-button:disabled,
.technical-secondary-button:disabled,
.technical-search-submit:disabled,
.stock-detail-search-button:disabled,
.snapshot-button:disabled,
.login-button:disabled,
.add-blog-btn:disabled,
.add-intelligence-btn:disabled,
.edit-column-btn:disabled,
.manage-category-btn:disabled,
button[aria-disabled="true"] {
  box-shadow: none;
  cursor: not-allowed;
  opacity: 0.5;
  transform: none;
}

@keyframes star-btn {
  0% {
    offset-distance: 0%;
  }
  100% {
    offset-distance: 100%;
  }
}

@media (prefers-reduced-motion: reduce) {
  .el-button,
  .button,
  .command-button,
  .backtest-primary-command,
  .backtest-secondary-command,
  .backtest-secondary-search-command,
  #backtest-stock-submit,
  #backtest-batch-apply,
  #backtest-batch-clear,
  .holdings-primary-button,
  .holdings-secondary-button,
  .holdings-danger-button,
  .technical-primary-button,
  .technical-secondary-button,
  .technical-search-submit,
  .stock-detail-search-button,
  .snapshot-button,
  .login-button,
  .add-blog-btn,
  .add-intelligence-btn,
  .edit-column-btn,
  .manage-category-btn,
  .copy-btn {
    transition: none;
  }

  .el-button--primary::before,
  .button--primary::before,
  .backtest-primary-command::before,
  #backtest-stock-submit::before,
  #backtest-batch-apply::before,
  #exportCsv::before,
  .holdings-primary-button::before,
  .technical-primary-button::before,
  .technical-search-submit::before,
  .stock-detail-search-button::before,
  .snapshot-button-primary::before,
  .login-button::before,
  .add-blog-btn::before,
  .add-intelligence-btn::before,
  .copy-btn::before {
    animation: none;
    opacity: 0;
  }
}
