:root{--font-heading:var(--font-thai),"Noto Sans Thai",sans-serif;--font-body:var(--font-thai),"Noto Sans Thai",sans-serif;--font-label:var(--font-thai),"Noto Sans Thai",sans-serif}body,html{font-family:var(--font-thai),"Noto Sans Thai",sans-serif}*{transition:background-color .2s ease,border-color .2s ease,transform .2s ease,box-shadow .2s ease}.api-key-card{transition:all .3s cubic-bezier(.4,0,.2,1)}.api-key-card:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(0,0,0,.12)!important}button{transition:all .2s ease}button:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 8px rgba(0,0,0,.1)}button:active:not(:disabled){transform:translateY(0)}input:focus,textarea:focus{outline:none;box-shadow:0 0 0 3px rgba(59,130,246,.1)}html{scroll-behavior:smooth}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:rgba(255,255,255,.2);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:rgba(255,255,255,.3)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes slideInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.slide-in-up{animation:slideInUp .3s ease-out}.blur-text{filter:blur(5px);-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:filter .3s ease;cursor:pointer}.blur-text:hover{filter:blur(3px)}.blur-text.visible{filter:none;-webkit-user-select:text;-moz-user-select:text;user-select:text;cursor:text}@keyframes rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.rotate-on-hover:hover{animation:rotate .5s ease}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}input[type=email],input[type=number],input[type=password],input[type=text],textarea{padding:.75rem 1rem!important;font-size:.95rem;line-height:1.5}input::-moz-placeholder,textarea::-moz-placeholder{opacity:.5}input::placeholder,textarea::placeholder{opacity:.5}