:root{
  --bg:#f5f7fa;
  --card:#ffffff;
  --text:#1f2933;
  --muted:#7b8794;
  --border:#e4e7eb;
  --accent:#2f6fed;
  --accent-soft:#eaf1fe;
  --danger:#e53935;
  --shadow:0 1px 3px rgba(0,0,0,.08),0 1px 2px rgba(0,0,0,.04);
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--text);line-height:1.5;padding:24px;
}
.topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;flex-wrap:wrap;gap:16px}
.greeting h1{font-size:24px}
.greeting p{color:var(--muted);font-size:14px}
.clock{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.clock-time{font-size:28px;font-variant-numeric:tabular-nums;font-weight:600}
.weather-toggle{background:var(--accent-soft);color:var(--accent);border:none;border-radius:8px;padding:8px 14px;cursor:pointer;font-size:14px}
.weather{font-size:14px;color:var(--muted)}
.hidden{display:none}
.grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px;align-items:start}
.items-card{grid-column:span 2}
.links-card{grid-column:span 2}
.stocks-card{grid-column:span 4}
.stocks-head{display:flex;justify-content:space-between;align-items:baseline}
.stock-updated{font-size:12px;color:var(--muted);font-weight:400;white-space:nowrap}
@media (max-width:1100px){.grid{grid-template-columns:repeat(2,minmax(0,1fr))}.stocks-card{grid-column:span 2}}
@media (max-width:640px){.grid{grid-template-columns:1fr}.stocks-card{grid-column:span 1}}
.card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:20px;box-shadow:var(--shadow)}
.card h2{font-size:16px;margin-bottom:14px}
.hint{color:var(--muted);font-size:12px;display:block;margin-top:8px}
textarea#notes{width:100%;min-height:120px;border:1px solid var(--border);border-radius:8px;padding:10px;font:inherit;resize:vertical}
textarea#notes:focus{outline:none;border-color:var(--accent)}
.todo-form,.link-form{display:flex;gap:8px;margin-bottom:12px}
.todo-form input,.link-form input{flex:1;border:1px solid var(--border);border-radius:8px;padding:8px 10px;font:inherit;min-width:0}
.todo-form input:focus,.link-form input:focus{outline:none;border-color:var(--accent)}
button{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:8px 14px;cursor:pointer;font-size:14px}
button:hover{opacity:.9}
.todo-filters{display:flex;gap:6px;margin-bottom:10px}
.todo-filters button{background:transparent;color:var(--muted);border:1px solid var(--border);padding:4px 10px;font-size:13px}
.todo-filters button.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-soft)}
.todo-list{list-style:none}
.todo-list li{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--border)}
.todo-list li:last-child{border-bottom:none}
.todo-list .t-text{flex:1;cursor:pointer;word-break:break-all}
.todo-list li.done .t-text{text-decoration:line-through;color:var(--muted)}
.todo-list .del{background:transparent;color:var(--danger);padding:2px 8px;font-size:13px}
.link-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px}
.link-item{display:block;background:var(--accent-soft);color:var(--accent);text-decoration:none;border-radius:10px;padding:14px 10px;text-align:center;font-size:14px;position:relative}
.link-item:hover{opacity:.85}
.link-item .rm{position:absolute;top:2px;right:6px;color:var(--muted);font-size:12px;background:none;padding:0}
.item-form{display:flex;gap:8px;margin-bottom:12px}
.item-form input{flex:1;border:1px solid var(--border);border-radius:8px;padding:8px 10px;font:inherit;min-width:0}
.item-form select{border:1px solid var(--border);border-radius:8px;padding:8px;font:inherit;background:#fff}
.item-form input:focus,.item-form select:focus{outline:none;border-color:var(--accent)}
.item-filters{display:flex;gap:6px;margin-bottom:10px;flex-wrap:wrap}
.item-filters button{background:transparent;color:var(--muted);border:1px solid var(--border);padding:4px 10px;font-size:13px}
.item-filters button.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-soft)}
.item-list{list-style:none}
.item-list li{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--border)}
.item-list li:last-child{border-bottom:none}
.item-list .i-text{flex:1;cursor:pointer;word-break:break-all}
.item-list .i-span{font-size:11px;padding:1px 8px;border-radius:10px;background:var(--accent-soft);color:var(--accent);white-space:nowrap}
.item-list .i-pri{font-size:11px;padding:1px 8px;border-radius:10px;white-space:nowrap}
.item-list .i-pri.p-high{background:#fdecea;color:#e53935}
.item-list .i-pri.p-mid{background:#fff4e0;color:#e08e0b}
.item-list .i-pri.p-low{background:#eef1f4;color:#7b8794}
.item-list .del{background:transparent;color:var(--danger);padding:2px 8px;font-size:13px}
.history{margin-top:14px;border-top:1px dashed var(--border);padding-top:12px}
.history-toggle{background:transparent;color:var(--muted);border:none;padding:0;font-size:13px;cursor:pointer}
.history-panel{margin-top:10px}
.history-search{display:flex;gap:8px;margin-bottom:10px}
.history-search input{flex:1;border:1px solid var(--border);border-radius:8px;padding:8px 10px;font:inherit;min-width:0}
.history-search button{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:8px 14px;cursor:pointer;font-size:14px}
.cal-nav{display:flex;align-items:center;justify-content:center;gap:14px;margin-bottom:8px}
.cal-nav button{background:transparent;color:var(--muted);border:1px solid var(--border);border-radius:6px;padding:2px 14px;cursor:pointer;font-size:16px;line-height:1}
#calMonth{font-size:14px;font-weight:600}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.cal-dow{font-size:11px;color:var(--muted);text-align:center;padding:4px 0}
.cal-cell{border:1px solid var(--border);border-radius:8px;min-height:62px;padding:4px;font-size:11px;cursor:pointer;background:#fff;overflow:hidden}
.cal-cell.muted{background:#fafbfc;color:var(--muted);cursor:default}
.cal-cell:hover{border-color:var(--accent)}
.cal-num{font-weight:600;margin-bottom:2px}
.cal-line{color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-line.done{text-decoration:line-through;color:var(--muted)}
.cal-more{color:var(--muted);font-size:10px;margin-top:1px}
.day-detail{margin-top:12px;border-top:1px dashed var(--border);padding-top:10px}
.dd-title{font-size:13px;font-weight:600;margin-bottom:6px}
.dd-list{list-style:none}
.dd-list li{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--border)}
.dd-text{flex:1;word-break:break-all}
.dd-text.done{text-decoration:line-through;color:var(--muted)}
.dd-list .rec{background:transparent;color:var(--accent);padding:2px 8px;font-size:13px}
.dd-list .del{background:transparent;color:var(--danger);padding:2px 8px;font-size:13px}
.clear-done{margin-top:10px;background:transparent;color:var(--danger);border:1px solid var(--border);padding:4px 12px;font-size:13px}

/* ===== 自选股 / 持仓 ===== */
.rt-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.rt-bar button{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:7px 14px;cursor:pointer;font-size:13px}
.rt-toggle{font-size:13px;color:var(--muted);display:flex;align-items:center;gap:4px;cursor:pointer}
.rt-bar select{border:1px solid var(--border);border-radius:8px;padding:6px;font:inherit;background:#fff}
.sub{font-size:14px;margin:14px 0 8px;color:var(--text)}
.mini-form{display:flex;gap:6px;margin-bottom:8px;flex-wrap:wrap}
.mini-form input{flex:1;min-width:80px;border:1px solid var(--border);border-radius:8px;padding:7px 9px;font:inherit}
.mini-form button{flex:0 0 auto;background:var(--accent);color:#fff;border:none;border-radius:8px;padding:7px 14px;cursor:pointer;font-size:13px}
/* 自选股/持仓 上下堆叠 */
.stock-cols{display:grid;grid-template-columns:1fr;gap:18px}
.stock-col{min-width:0}
.stock-list{list-style:none}
.stock-row{border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin-bottom:10px}
.stock-row:hover{background:var(--accent-soft)}
.s-main{display:flex;align-items:baseline;gap:8px}
.s-name-cell{flex:1;min-width:0}
.s-name{font-weight:600;font-size:14px}
.s-code{color:var(--muted);font-size:12px;margin-left:4px}
.s-time{color:var(--muted);font-size:11px;margin-top:2px}
.s-price-wrap{text-align:right;white-space:nowrap}
.s-price{font-size:18px;font-weight:700}
.s-chg{font-size:13px;margin-left:6px;white-space:nowrap}
.s-sub{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:11px;color:var(--muted);margin-top:6px}
.s-sub span{white-space:nowrap}
.s-sub .c-up{color:#e53935}
.s-sub .c-down{color:#1a9e57}
.s-sub .c-flat{color:var(--muted)}
.s-sub .c-base{color:#3e4c59;font-weight:600}
.s-div.high{color:#1a9e57;font-weight:700}

/* ===== 新闻联播（央视网原版展示，无解读） ===== */
.news-card{grid-column:span 4}
.news-head{display:flex;align-items:baseline;gap:12px;margin-bottom:12px;flex-wrap:wrap}
.news-date{font-size:13px;color:var(--muted);font-weight:400}
.news-copy{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:6px 14px;cursor:pointer;font-size:13px;white-space:nowrap}
.news-copy:hover{opacity:.9}
.news-full{margin-left:auto;color:var(--accent);text-decoration:none;font-size:13px;white-space:nowrap}
.news-full:hover{text-decoration:underline}
.news-list{list-style:none;padding-left:0}
.news-item{padding:12px 0;border-bottom:1px solid var(--border)}
.news-item:last-child{border-bottom:none}
.news-title{font-size:14px;font-weight:600;line-height:1.5}
.news-title a{color:var(--accent);text-decoration:none}
.news-title a:hover{text-decoration:underline}
.news-text{font-size:13px;line-height:1.75;color:var(--text);margin-top:6px;white-space:pre-wrap;word-break:break-word}
.news-more{color:var(--accent);cursor:pointer;margin-left:2px}
.news-more:hover{text-decoration:underline}
.news-note{font-size:12px;color:var(--muted);margin-top:4px}
/* ===== 新闻联播本周回顾 ===== */
.news-review{margin-top:18px;border-top:1px dashed var(--border);padding-top:14px}
.review-head{display:flex;align-items:baseline;gap:10px;margin-bottom:10px}
.review-head h3{font-size:14px;font-weight:600}
.review-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.review-tab{background:transparent;color:var(--muted);border:1px solid var(--border);border-radius:16px;padding:4px 12px;cursor:pointer;font-size:13px}
.review-tab.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-soft);font-weight:600}
.review-body .news-item:first-child{padding-top:0}
.news-switch-note{margin-top:14px;display:block}
.s-acts{display:flex;gap:6px;justify-content:flex-end;margin-top:8px}
.s-open{background:transparent;color:var(--accent);border:1px solid var(--accent-soft);border-radius:6px;padding:3px 10px;font-size:12px;cursor:pointer;white-space:nowrap}
.s-del{background:transparent;color:var(--danger);border:none;padding:2px 8px;font-size:16px;cursor:pointer;line-height:1}
.up{color:#e53935}
.down{color:#1a9e57}

/* ===== K线弹窗 ===== */
.modal{position:fixed;inset:0;background:rgba(15,23,42,.45);display:flex;align-items:center;justify-content:center;padding:20px;z-index:50}
.modal.hidden{display:none}
.modal-box{background:#fff;border-radius:14px;padding:20px;width:100%;max-width:660px;max-height:90vh;overflow:auto;position:relative;box-shadow:var(--shadow)}
.modal-close{position:absolute;top:10px;right:14px;background:transparent;border:none;font-size:22px;color:var(--muted);cursor:pointer;line-height:1}
.kline-head{font-size:16px;font-weight:600;margin-bottom:12px;padding-right:24px}
.kline-tabs{display:flex;gap:6px;margin-bottom:10px}
.kline-tabs button{background:transparent;color:var(--muted);border:1px solid var(--border);border-radius:8px;padding:5px 16px;cursor:pointer;font-size:13px}
.kline-tabs button.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent-soft)}
.kline-chart{margin-bottom:8px}
.kline-info{font-size:13px;margin-bottom:12px}
.kline-actions{margin-bottom:6px}
.kline-actions button{background:var(--accent);color:#fff;border:none;border-radius:8px;padding:8px 14px;cursor:pointer;font-size:13px}
.kline-range{font-size:12px;color:var(--muted);margin-bottom:6px}
.kline-tip{position:absolute;pointer-events:none;background:rgba(31,41,51,.94);color:#fff;font-size:12px;line-height:1.55;padding:8px 10px;border-radius:8px;white-space:nowrap;z-index:6;transform:translate(-50%,-115%)}
.kline-marker{position:absolute;width:9px;height:9px;border-radius:50%;background:#fff;border:2px solid var(--accent);transform:translate(-50%,-50%);pointer-events:none;z-index:5}
.s-det{font-size:11px;color:var(--muted);line-height:1.5}
.s-time{color:var(--muted)}
.s-price .div{font-size:11px;color:var(--muted);margin-top:2px}
.s-price .div.high{color:#1a9e57;font-weight:600}

/* ===== 移动端适配（手机竖屏） ===== */
@media (max-width:640px){
  body{padding:12px;line-height:1.45}
  .topbar{margin-bottom:16px;gap:10px}
  .greeting h1{font-size:20px}
  .clock-time{font-size:24px}
  .card{padding:16px;border-radius:12px}
  .card h2{font-size:15px}

  /* 表单纵向堆叠：输入框/按钮全宽、触控友好 */
  .item-form,.link-form,.mini-form,.todo-form,.history-search{flex-direction:column;align-items:stretch}
  .item-form select,.mini-form input{min-width:0}
  .mini-form input{flex:1 1 auto}
  .mini-form button,.history-search button,.item-form button,.link-form button,.todo-form button{width:100%}

  /* 新闻头部：复制/完整版换行后不挤 */
  .news-head{gap:8px 10px}
  .news-full{margin-left:0}

  /* K线弹窗全屏化，手机上更好看 */
  .modal{padding:0}
  .modal-box{border-radius:0;max-width:none;min-height:100vh;max-height:100vh;padding:16px;padding-top:48px}
  .modal-close{top:12px;right:14px;font-size:26px}
  .kline-tabs{overflow-x:auto;padding-bottom:4px}

  /* 月历格子收紧 */
  .cal-cell{min-height:46px;padding:3px;font-size:10px}
  .cal-dow{font-size:10px}
  .cal-nav{gap:10px}

  /* 股票标题/卡片在手机上不竖排、名字不拆字 */
  .stocks-head h2{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
  .stock-updated{flex:0 0 auto}
  .s-main{flex-wrap:nowrap;align-items:center}
  .s-name-cell{min-width:0;overflow:hidden}
  .s-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;max-width:100%}
  .s-code{white-space:nowrap}
  .s-price-wrap{flex:0 0 auto}
}
@media (max-width:480px){
  .stock-row{padding:10px}
  .s-price{font-size:16px}
  .s-name{font-size:13px}
  .news-title{font-size:13px}
  .news-text{font-size:12px;line-height:1.65}
  .item-filters,.todo-filters,.review-tabs{gap:5px}
  .item-filters button,.todo-filters button,.review-tab{padding:5px 10px;font-size:12px}
  .link-grid{grid-template-columns:repeat(auto-fill,minmax(100px,1fr))}
}
