*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg-app);color:var(--text-body);font:var(--text-body-font);-webkit-font-smoothing:antialiased}
a{color:var(--brand-ink);text-decoration-thickness:1px;text-underline-offset:3px}
a:hover{color:var(--brand-700)}
button{font:inherit;color:inherit}
:focus-visible{outline:none;box-shadow:var(--focus-ring)}
.cw-num{font-family:var(--font-num);font-variant-numeric:tabular-nums}

/* Interaction states for DS components */
.cw-btn{transition:transform var(--dur-fast) var(--ease-out),filter var(--dur) var(--ease-out),background-color var(--dur) var(--ease-out)}
.cw-btn:not(:disabled):hover{filter:brightness(1.05)}
.cw-btn:not(:disabled):active{transform:scale(.98)}
.cw-btn-ghost:not(:disabled):hover{background:var(--brand-soft)!important;filter:none}
.cw-btn-secondary:not(:disabled):hover{background:var(--surface-sunken)!important;filter:none}
.cw-nav-item{transition:background-color var(--dur) var(--ease-out)}
.cw-nav-item:hover{background:var(--sidebar-hover-bg)}
.cw-nav-item[aria-current="page"]:hover{background:var(--sidebar-active-bg)}
.cw-card-link{transition:box-shadow var(--dur) var(--ease-out),transform var(--dur) var(--ease-out)}
.cw-card-link:hover{box-shadow:var(--shadow-pop)}
.cw-card-link:active{transform:scale(.995)}
.cw-chip-btn{transition:background-color var(--dur) var(--ease-out)}
.cw-chip-btn:hover{filter:brightness(.97)}

/* Privacy mode — names & amounts marked data-sensitive are blurred page-wide */
[data-private="true"] [data-sensitive]{filter:blur(7px);user-select:none;transition:filter var(--dur) var(--ease-out)}

/* Loading */
@keyframes cw-shimmer{0%{background-position:-400px 0}100%{background-position:400px 0}}
@keyframes cw-spin{to{transform:rotate(360deg)}}
.cw-skeleton{background:linear-gradient(90deg,var(--surface-sunken) 0%,var(--border-subtle) 50%,var(--surface-sunken) 100%);background-size:800px 100%;animation:cw-shimmer 1.4s linear infinite;border-radius:var(--radius-sm)}
.cw-spin{animation:cw-spin 1s linear infinite}
@media (prefers-reduced-motion:reduce){.cw-skeleton,.cw-spin{animation:none}}
.cw-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
