:root{
  --bg:#f4f5f7; --card:#fff; --line:#e2e5ea; --txt:#23272f; --mut:#6b7280;
  --note:#7c6df2; --journal:#2f9e6e; --event:#2f6fe0; --todo:#e0892f; --danger:#d6453d;
}
*{box-sizing:border-box}
body{margin:0;font-family:system-ui,"Segoe UI","Malgun Gothic",sans-serif;background:var(--bg);color:var(--txt)}
header{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;background:#fff;border-bottom:1px solid var(--line)}
header h1{font-size:18px;margin:0}
.userbox{font-size:14px;color:var(--mut)}
.userbox a{margin-left:10px;color:var(--event);text-decoration:none}
.tabs{display:flex;gap:4px;padding:10px 20px 0}
.tabs button{border:none;background:transparent;padding:8px 14px;border-radius:8px 8px 0 0;cursor:pointer;font-size:14px;color:var(--mut)}
.tabs button.active{background:#fff;color:var(--txt);font-weight:600;box-shadow:0 -1px 0 var(--line)}
.toolbar{display:flex;gap:8px;align-items:center;padding:12px 20px;background:#fff;border-bottom:1px solid var(--line);flex-wrap:wrap}
.toolbar input,.toolbar select{padding:7px 10px;border:1px solid var(--line);border-radius:8px;font-size:14px}
.toolbar #q{flex:1;min-width:160px}
.toolbar button,.toolbar a{padding:7px 12px;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:pointer;font-size:14px;color:var(--txt);text-decoration:none}
.primary{background:var(--event)!important;color:#fff!important;border-color:var(--event)!important}
.count{margin-left:auto;color:var(--mut);font-size:13px}
main#list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;padding:20px}
#list.calview{display:block;padding:0}   /* 달력 뷰: 카드 그리드 해제 */
.item{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--mut);border-radius:10px;padding:14px;display:flex;flex-direction:column;gap:6px}
.item.note{border-left-color:var(--note)} .item.journal{border-left-color:var(--journal)}
.item.event{border-left-color:var(--event)} .item.todo{border-left-color:var(--todo)}
.item h3{margin:2px 0;font-size:15px}
.item p{margin:0;color:var(--mut);font-size:13px;white-space:pre-wrap}
.badge{font-size:12px;color:var(--mut)}
.meta{display:flex;flex-wrap:wrap;gap:6px;font-size:12px;color:var(--mut);margin-top:4px}
.meta .cat{background:#eef0f4;padding:1px 7px;border-radius:10px}
.actions{display:flex;gap:6px;margin-top:8px}
.actions button{flex:1;padding:5px;border:1px solid var(--line);background:#fff;border-radius:6px;cursor:pointer;font-size:13px}
.actions .danger{color:var(--danger);border-color:#f0c8c5}
.chk{display:flex;align-items:center;gap:5px;font-size:13px;color:var(--mut);cursor:pointer}
/* 달력 뷰 */
.calhead{display:flex;align-items:center;justify-content:center;gap:16px;padding:14px 20px 6px}
.calhead strong{font-size:22px;min-width:140px;text-align:center}
.calhead button{padding:6px 12px;border:1px solid var(--line);background:#fff;border-radius:8px;cursor:pointer;font-size:15px;line-height:1}
.calhead #calToday{font-size:13px}
.calgrid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:10px;overflow:hidden;margin:6px 20px 24px}
.caldow{background:#f4f6f9;text-align:center;padding:8px;font-size:12px;color:var(--mut);font-weight:700}
.caldow:first-child{color:#d6453d}            /* 일요일 */
.calcell{background:#fff;min-height:120px;padding:6px;font-size:12px;overflow:hidden}
.calcell.empty{background:#fafbfc}
.calcell.today{background:#eef4ff;box-shadow:inset 0 0 0 2px var(--event)}
.caldate{color:var(--mut);font-size:13px;font-weight:600;margin-bottom:4px}
.calcell.today .caldate{color:var(--event)}
.calev{background:var(--event);color:#fff;border-radius:5px;padding:2px 6px;margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;font-size:12px}
.calev:hover{filter:brightness(1.08)}
.empty,.error{padding:40px;text-align:center;color:var(--mut)}
.error{color:var(--danger)}
.modal{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;padding:20px;z-index:10}
/* hidden 속성이 .modal의 display:flex를 이기도록(미지정 시 모달이 안 숨겨짐) */
.modal[hidden]{display:none}
.modal .card{background:#fff;border-radius:12px;padding:22px;width:min(560px,100%);max-height:90vh;overflow:auto;display:flex;flex-direction:column;gap:12px}
.card label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--mut)}
.card input,.card select,.card textarea{padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:14px;color:var(--txt)}
.card .row{display:flex;gap:12px}.card .row>label{flex:1}
.card .row.end{justify-content:flex-end}
.card .row.end button{flex:0 0 auto;padding:8px 18px}
.card pre{background:#f7f8fa;padding:12px;border-radius:8px;white-space:pre-wrap;font-family:inherit;font-size:14px}
.card dl{display:grid;grid-template-columns:80px 1fr;gap:4px 12px;font-size:13px}
.card dt{color:var(--mut)}
.card .muted{color:var(--mut);font-size:13px;margin:0}
#caldavErr{color:var(--danger);font-size:13px;padding:0}
