:root{
  --bg:#F7F5F0;
  --card:#FFFFFF;
  --ink:#1A1A1A;
  --sub:#6B6560;
  --line:#E5E0D8;
  --fomc:#E0492A;
  --cpi:#1E6FD9;
  --jobs:#1C9C5B;
  --today-ring:#111111;
}
*{box-sizing:border-box; -webkit-tap-highlight-color:transparent;}
html,body{margin:0;padding:0;background:var(--bg);color:var(--ink);
  font-family:"Hiragino Sans","Hiragino Kaku Gothic ProN",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  font-weight:700;}
body{padding:14px 10px 28px;}
.wrap{max-width:640px;margin:0 auto;}

.header{margin-bottom:12px;}
.eyebrow{font-size:14px; font-weight:800; letter-spacing:.08em; color:var(--sub); text-transform:uppercase;}
h1{font-size:26px; font-weight:900; margin:2px 0 0; letter-spacing:-0.01em;}
.desc{font-size:16px; color:var(--sub); font-weight:700; margin-top:4px; line-height:1.6;}

.legend{display:flex; gap:8px; flex-wrap:wrap; margin:12px 0 14px;}
.chip{display:flex; align-items:center; gap:6px; background:var(--card); border:2px solid var(--line);
  border-radius:999px; padding:6px 12px 6px 8px; font-size:15px; font-weight:800;}
.dot{width:12px; height:12px; border-radius:50%; flex-shrink:0;}
.dot.fomc{background:var(--fomc);}
.dot.cpi{background:var(--cpi);}
.dot.jobs{background:var(--jobs);}

.nav{display:flex; align-items:center; justify-content:space-between; background:var(--card);
  border:2px solid var(--ink); border-radius:16px; padding:10px 8px; margin-bottom:10px;}
.nav button{border:none; background:var(--ink); color:#fff; font-weight:900; font-size:18px;
  width:38px; height:38px; border-radius:10px; cursor:pointer;}
.nav button:active{transform:scale(0.94);}
.month-title{font-size:22px; font-weight:900; letter-spacing:0.01em;}

.grid{background:var(--card); border:2px solid var(--ink); border-radius:16px; overflow:hidden;}
.dow{display:grid; grid-template-columns:repeat(7,1fr); background:var(--ink);}
.dow div{color:#fff; text-align:center; font-size:14px; font-weight:900; padding:7px 0;}
.days{display:grid; grid-template-columns:repeat(7,1fr);}
.day{min-height:72px; border-right:1px solid var(--line); border-bottom:1px solid var(--line);
  padding:4px 3px; position:relative;}
.day:nth-child(7n){border-right:none;}
.day.blank{background:#FBFAF7;}
.daynum{font-size:15px; font-weight:800; color:var(--ink);}
.day.blank .daynum{color:#D8D2C8;}
.today .daynum{display:inline-flex; align-items:center; justify-content:center;
  width:22px; height:22px; border-radius:50%; background:var(--ink); color:#fff;}
.badges{display:flex; flex-direction:column; gap:2px; margin-top:3px;}
.badge{font-size:11.5px; font-weight:900; color:#fff; border-radius:5px; padding:1.5px 3px;
  line-height:1.3; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.badge.fomc{background:var(--fomc);}
.badge.cpi{background:var(--cpi);}
.badge.jobs{background:var(--jobs);}

.list{margin-top:16px;}
.list h2{font-size:17px; font-weight:900; margin:0 0 8px; letter-spacing:.02em;}
.item{display:flex; align-items:flex-start; gap:10px; background:var(--card); border:2px solid var(--line);
  border-radius:12px; padding:10px 12px; margin-bottom:8px;}
.item .idot{width:14px; height:14px; border-radius:50%; margin-top:3px; flex-shrink:0;}
.item .idot.fomc{background:var(--fomc);}
.item .idot.cpi{background:var(--cpi);}
.item .idot.jobs{background:var(--jobs);}
.item .txt{font-size:16px; font-weight:800; line-height:1.5;}
.item .txt .date{color:var(--sub); font-weight:900; font-size:14px; display:block; margin-bottom:1px;}
.item .txt .detail{font-weight:700; color:var(--sub); font-size:14px;}
.empty{font-size:16px; font-weight:700; color:var(--sub); padding:10px 2px;}
.error{font-size:16px; font-weight:700; color:var(--fomc); padding:10px 2px;}

.note{margin-top:16px; font-size:14px; color:var(--sub); font-weight:700; line-height:1.7;
  border-top:2px dashed var(--line); padding-top:10px;}

@media (max-width:380px){
  .day{min-height:62px;}
  .badge{font-size:10.5px;}
  h1{font-size:22px;}
}
