:root{--ink:#183d36;--muted:#697b73;--paper:#f4f6f0;--line:#dbe2d9;--gold:#bc8a35;--good:#286d53;--warning:#a56a19;--danger:#a63b35;--radius:18px}*{box-sizing:border-box}body{margin:0;background:#e8ede6;color:#233c34;font-family:'Microsoft YaHei','PingFang SC',sans-serif;font-size:14px;line-height:1.6}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:var(--ink)}button:disabled{opacity:.5;cursor:wait}.brand{position:fixed;left:9%;top:22%;width:32%}.wordmark{font-size:20px;font-weight:700;letter-spacing:4px}.brand h1{font:600 46px/1.5 'Microsoft YaHei',sans-serif;margin:44px 0 20px}.brand p{color:var(--muted);line-height:2}.brand small{font-size:10px;letter-spacing:2px}.app-shell{background:var(--paper);width:min(100%,480px);margin:24px 10% 24px auto;min-height:calc(100vh - 48px);border:1px solid #d5dfd4;border-radius:26px;box-shadow:0 18px 60px #213a2912;overflow:hidden}header{display:flex;align-items:center;justify-content:space-between;padding:20px;background:#fff;border-bottom:1px solid var(--line)}header a{display:flex;align-items:center;gap:10px;text-decoration:none;font-weight:700}header small{display:block;font-size:9px;letter-spacing:2px;color:var(--muted)}.logo{display:grid;place-items:center;width:38px;height:38px;border-radius:12px;background:var(--ink);color:white;font-size:24px}main{padding:24px 20px 100px}.eyebrow{color:var(--muted);font-size:10px;letter-spacing:2px;text-transform:uppercase}h1{font-size:28px;line-height:1.3;margin:8px 0 14px}h2{font-size:18px;margin:10px 0}h3{font-size:15px}p{margin:8px 0 16px}.muted,.intro{color:var(--muted);font-size:12px}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:11px 17px;border:1px solid var(--ink);border-radius:11px;background:var(--ink);color:white;text-decoration:none;font-weight:600}.secondary{background:#fff;color:var(--ink);border-color:var(--line)}.danger{background:#a63b35;border-color:#a63b35;color:white}.quiet{border:0;background:transparent;color:var(--ink);min-height:44px;min-width:44px;padding:8px}.delete{color:var(--danger)}.full{width:100%}.row{display:flex;align-items:center;justify-content:space-between;gap:10px}.row>*{min-width:0}.actions{display:flex;gap:8px;flex-wrap:wrap;margin:16px 0}.actions>*{flex:1}.panel,.project-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px;margin:14px 0}.project-card h2{overflow-wrap:anywhere;font-size:19px}.project-card .row{border-top:1px solid var(--line);margin-top:16px;padding-top:8px}.tag{font-size:11px;border-radius:6px;padding:4px 7px;background:#edf1e8;color:var(--ink)}.profile{padding:22px;background:var(--ink);color:#fff;border-radius:18px}.profile .eyebrow{color:#b9cdc0}.profile dl{margin:16px 0 0}.profile dl div{display:grid;grid-template-columns:90px 1fr;gap:10px;margin:9px 0}.profile dt{color:#bdcec2;font-size:12px}.profile dd{margin:0;overflow-wrap:anywhere}.module-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.module{position:relative;text-align:left;min-height:132px;border:1px solid var(--line);background:white;border-radius:16px;padding:18px 13px}.module .num{display:block;font:22px Georgia,serif;color:#8e9f91;margin-bottom:16px}.module b{display:block;font-size:15px}.module small{font-size:10px;color:var(--muted)}.badge{position:absolute;right:10px;top:12px;font-size:10px;color:#a46b20}.badge.done{color:#2a7453}.empty{text-align:center;padding:45px 12px;color:var(--muted)}.field{display:block;margin:15px 0;font-size:13px;font-weight:600}.field small{font-weight:400;color:var(--muted);margin-left:5px}.field input,.field select,.field textarea{display:block;width:100%;border:1px solid #d4ded2;background:#fff;border-radius:9px;padding:12px;margin-top:7px;color:#203f33;min-height:46px}.field textarea{min-height:86px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid #a9c6af;border-color:#316a50}.required{font-size:10px;color:#9d641b;margin-left:6px}.error-list{padding:15px 16px 15px 32px;border-radius:12px;background:#fff1e8;color:#9c422b;font-size:12px}.notice{padding:13px 15px;border-radius:12px;background:#edf1df;font-size:12px;margin:12px 0}.error{background:#fff0ed;color:#a63b35}.success{background:#e9f4ec;color:#27674c}#status{padding:12px 20px;background:#fff1de;color:#844f19;font-size:12px;overflow-wrap:anywhere}nav{position:fixed;bottom:24px;width:478px;display:flex;background:#fff;border-top:1px solid var(--line);padding:10px 12px 14px;border-radius:0 0 26px 26px;z-index:5}nav a{flex:1;text-align:center;text-decoration:none;font-size:13px;padding:10px;border-radius:10px;color:var(--muted)}nav a.active{background:#e9eee3;color:var(--ink);font-weight:700}dialog{border:1px solid var(--line);border-radius:22px;padding:0;width:min(94vw,500px);max-height:90vh;color:var(--ink);background:var(--paper)}dialog::backdrop{background:#10251db3}#modal-body{padding:4px 20px 24px;max-height:calc(90vh - 80px);overflow:auto}.modal-head{position:sticky;top:0;z-index:2;background:#fff;display:flex;justify-content:space-between;align-items:center;padding:14px 20px;border-bottom:1px solid var(--line)}.modal-head h2{margin:0}.modal-error{margin:12px 0}.savebar{position:sticky;bottom:-24px;background:var(--paper);padding:15px 0 24px}.form-group{padding-top:10px;border-top:1px solid var(--line)}.month-tabs{display:grid;grid-template-columns:repeat(6,1fr);gap:5px;margin:18px 0}.month-tabs button{border:1px solid var(--line);border-radius:8px;background:white;min-height:40px;color:var(--ink)}.month-tabs button.active{background:var(--ink);color:white}.two-cols{display:grid;grid-template-columns:1fr 1fr;gap:10px}.attachment-list{list-style:none;padding:0}.attachment-list li{padding:10px 0;border-bottom:1px solid var(--line);overflow-wrap:anywhere}.diagnosis-system-card,.project-investment-card,.basic-information-card{margin:16px 0;border-radius:18px;background:white;padding:18px;border:1px solid var(--line)}.diagnosis-card-heading{display:flex;align-items:center;justify-content:space-between}.diagnosis-grade{border-radius:12px;padding:8px 15px;background:#edf2df}.diagnosis-grade strong{font-size:30px;display:block}.diagnosis-grade span{font-size:10px}.diagnosis-block{border-top:1px solid var(--line);margin-top:16px;padding-top:12px}.compact-facts{display:grid;grid-template-columns:1fr 1fr;gap:14px 10px}.compact-facts dt{font-size:11px;color:var(--muted)}.compact-facts dd{margin:3px 0 0;font-size:13px}.compact-wide{grid-column:1/-1}.diagnosis-attention{padding:12px;border-radius:12px;background:#f9f2e4;font-size:12px}.compare-line{display:grid;grid-template-columns:50px 1fr 45px;align-items:center;gap:8px;margin:12px 0;font-size:11px}.compare-track{height:9px;background:#eef1e8;border-radius:5px;overflow:hidden}.compare-track i{display:block;height:100%;background:#bc8a35}.compare-track .target-bar{background:#9eb784}.compact-metric-label,.compact-comparison-note{font-size:11px;color:var(--muted)}.investment-summary{display:grid;grid-template-columns:1fr 1fr;gap:12px}.investment-total span{display:block;font-size:12px}.investment-total strong{font-size:23px}.investment-total small{font-size:12px}.investment-scope{font-size:12px;color:var(--muted)}.basic-information-card dl{display:grid;gap:10px}.basic-information-card dt{font-size:12px;color:var(--muted)}.basic-information-card dd{margin:0}.result-placeholder{font-size:12px;color:#9a7128}.export-list{padding:0;list-style:none}.export-list li{padding:12px 0;border-bottom:1px solid var(--line);font-size:12px}.login{padding-top:55px}.search{display:flex;gap:8px;margin:18px 0}.search input{width:100%;min-width:0;border:1px solid var(--line);padding:10px;border-radius:10px}.fold-toggle{width:100%;border:0;background:#f0f3eb;padding:9px;margin-top:12px;border-radius:8px;color:var(--ink)}[hidden]{display:none!important}@media(max-width:900px){.brand{display:none}.app-shell{margin:0 auto;border:0;border-radius:0;min-height:100vh}nav{bottom:0;border-radius:0;width:min(100%,480px);padding-bottom:max(10px,env(safe-area-inset-bottom))}main{padding:22px 16px 100px}header{padding:16px}}@media(prefers-reduced-motion:no-preference){.panel,.module,.project-card{animation:appear .22s ease-out}@keyframes appear{from{opacity:.3;transform:translateY(5px)}to{opacity:1;transform:none}}}
.search .btn{flex:0 0 auto;white-space:nowrap}

/* Keep form controls legible without mobile focus zoom. */
@media (max-width: 900px), (pointer: coarse) {
  input, select, textarea,
  .field input, .field select, .field textarea, .search input {
    font-size: 16px;
    min-width: 0;
    max-width: 100%;
  }
  .two-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .field { min-width: 0; overflow-wrap: anywhere; }
  dialog {
    position: fixed;
    inset: auto 0 auto 0;
    top: calc(var(--form-viewport-top, 0px) + var(--form-viewport-height, 100dvh) / 2);
    transform: translateY(-50%);
    width: min(94vw, 500px);
    max-width: calc(100% - 24px);
    max-height: calc(var(--form-viewport-height, 100dvh) - 24px);
    margin: 0 auto;
    overflow: hidden;
  }
  dialog[open] { display: flex; flex-direction: column; }
  .modal-head { flex: 0 0 auto; }
  .modal-head h2 { min-width: 0; overflow-wrap: anywhere; }
  #close-modal { flex: 0 0 auto; }
  #modal-body {
    min-height: 0;
    max-height: none;
    overflow-y: auto;
    overscroll-behavior-y: contain;
    -webkit-overflow-scrolling: touch;
  }
}
