/* ============ Reset & Base ============ */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{font-size:16px;-webkit-tap-highlight-color:transparent}
body{
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Helvetica Neue","PingFang SC",sans-serif;
  background:#F5F5F7;
  color:#1D1D1F;
  min-height:100vh;
  min-height:100dvh;
  overflow-x:hidden;
  padding-bottom:env(safe-area-inset-bottom,0);
}

/* ============ Header ============ */
.header{
  text-align:center;
  padding:52px 20px 28px;
  background:linear-gradient(180deg,#FFFFFF 0%,#F5F5F7 100%);
}
.header__label{
  font-size:14px;
  color:#86868B;
  letter-spacing:1px;
  margin-bottom:8px;
}
.header__amount{
  font-size:36px;
  font-weight:700;
  letter-spacing:-0.5px;
  color:#1D1D1F;
}

/* ============ Sections ============ */
.section{
  margin:0 16px 20px;
}
.section__title{
  display:flex;
  align-items:center;
  gap:6px;
  font-size:15px;
  font-weight:600;
  color:#86868B;
  padding:0 4px 10px;
}
.section__icon{font-size:16px}
.section__list{
  display:flex;
  flex-direction:column;
  gap:10px;
}

/* ============ Cards ============ */
.card{
  background:#FFFFFF;
  border-radius:14px;
  padding:16px;
  position:relative;
  transition:background .15s;
  box-shadow:0 1px 3px rgba(0,0,0,.06);
}
.card:active{background:#F0F0F2}

/* Account card */
.card--account{
  display:flex;
  justify-content:space-between;
  align-items:center;
}
.card__name{
  font-size:16px;
  font-weight:500;
  color:#1D1D1F;
}
.card__balance{
  font-size:18px;
  font-weight:600;
  font-variant-numeric:tabular-nums;
  color:#1D1D1F;
}

/* Invest card */
.card--invest .card__row-top{
  display:flex;
  justify-content:space-between;
  align-items:center;
  margin-bottom:10px;
}
.card--invest .card__name{font-size:16px;font-weight:600}
.card--invest .card__total{
  font-size:20px;
  font-weight:700;
  font-variant-numeric:tabular-nums;
  color:#1D1D1F;
}
.card--invest .card__row-bottom{
  display:flex;
  justify-content:space-between;
  align-items:center;
}
.card__meta{
  font-size:13px;
  color:#86868B;
}
.card__meta span{margin-right:12px}
.card__profit{
  font-size:15px;
  font-weight:600;
  font-variant-numeric:tabular-nums;
}
.card__profit--up{color:#E74C3C}
.card__profit--down{color:#27AE60}
.card__profit--zero{color:#86868B}

.card__rate{
  font-size:12px;
  margin-left:4px;
}

/* Expense card */
.card--expense{
  display:flex;
  justify-content:space-between;
  align-items:center;
}
.card--expense .card__balance{
  color:#1D1D1F;
}

/* ============ FAB ============ */
.fab{
  position:fixed;
  bottom:calc(32px + env(safe-area-inset-bottom,0px));
  right:24px;
  width:56px;
  height:56px;
  border-radius:50%;
  background:linear-gradient(135deg,#6C5CE7,#A855F7);
  border:none;
  display:flex;
  align-items:center;
  justify-content:center;
  box-shadow:0 4px 20px rgba(108,92,231,.35);
  cursor:pointer;
  z-index:100;
  transition:transform .15s,box-shadow .15s;
}
.fab:active{
  transform:scale(.92);
  box-shadow:0 2px 10px rgba(108,92,231,.25);
}
.bottom-spacer{height:100px}

/* ============ Modal Overlay ============ */
.modal-overlay{
  position:fixed;
  inset:0;
  background:rgba(0,0,0,.35);
  backdrop-filter:blur(6px);
  -webkit-backdrop-filter:blur(6px);
  z-index:200;
  display:flex;
  align-items:flex-end;
  justify-content:center;
  opacity:0;
  pointer-events:none;
  transition:opacity .2s;
}
.modal-overlay.is-open{
  opacity:1;
  pointer-events:auto;
}

/* 弹窗打开时锁住 body */
body.modal-open{
  overflow:hidden;
  position:fixed;
  width:100%;
}

/* ============ (category sheet removed — now using tabs) ============ */

/* ============ Form Modal ============ */
.modal-form{
  background:#FFFFFF;
  border-radius:20px 20px 0 0;
  width:100%;
  max-width:420px;
  padding:28px 24px calc(24px + env(safe-area-inset-bottom,0px));
  transform:translateY(100%);
  transition:transform .3s cubic-bezier(.32,.72,0,1);
}
.modal-overlay.is-open .modal-form{
  transform:translateY(0);
}
.modal-form--small{
  border-radius:16px;
  max-width:320px;
  padding:24px;
  align-self:center;
  transform:scale(.9);
  transition:transform .2s;
}
.modal-overlay.is-open .modal-form--small{
  transform:scale(1);
}
.modal-form__title{
  font-size:18px;
  font-weight:600;
  margin-bottom:20px;
  text-align:center;
  color:#1D1D1F;
}
.modal-form__desc{
  font-size:14px;
  color:#86868B;
  text-align:center;
  margin-bottom:20px;
  line-height:1.5;
}
.modal-form__label{
  display:block;
  font-size:13px;
  color:#86868B;
  margin-bottom:16px;
}
.modal-form__label input{
  display:block;
  width:100%;
  margin-top:6px;
  padding:12px 14px;
  background:#F5F5F7;
  border:1.5px solid #E5E5EA;
  border-radius:10px;
  color:#1D1D1F;
  font-size:16px;
  outline:none;
  transition:border-color .15s;
}
.modal-form__label input:focus{
  border-color:#6C5CE7;
}
.modal-form__label input::placeholder{color:#C7C7CC}

.modal-form__actions{
  display:flex;
  gap:10px;
  margin-top:4px;
}

/* ============ Buttons ============ */
.btn{
  flex:1;
  padding:12px;
  border:none;
  border-radius:10px;
  font-size:15px;
  font-weight:600;
  cursor:pointer;
  transition:opacity .15s;
}
.btn:active{opacity:.7}
.btn--cancel{
  background:#F5F5F7;
  color:#86868B;
}
.btn--confirm{
  background:linear-gradient(135deg,#6C5CE7,#A855F7);
  color:#fff;
}
.btn--danger{
  background:#E74C3C;
  color:#fff;
}

/* ============ Empty state ============ */
.empty-hint{
  text-align:center;
  padding:20px;
  font-size:13px;
  color:#C7C7CC;
}

/* ============ Tabs ============ */
.tabs{
  display:flex;
  background:#F5F5F7;
  border-radius:10px;
  padding:3px;
  margin-bottom:20px;
}
.tabs__item{
  flex:1;
  padding:8px 0;
  border:none;
  background:none;
  border-radius:8px;
  font-size:14px;
  font-weight:500;
  color:#86868B;
  cursor:pointer;
  transition:all .2s;
}
.tabs__item.is-active{
  background:#FFFFFF;
  color:#1D1D1F;
  box-shadow:0 1px 3px rgba(0,0,0,.1);
}

/* ============ Form panels ============ */
.form-panel{
  animation:fadeIn .15s ease;
}
@keyframes fadeIn{
  from{opacity:0;transform:translateY(4px)}
  to{opacity:1;transform:translateY(0)}
}

