/* The property dossier on a lead.
   Sections are flat by default and only the ones that need attention are
   lifted, so a dossier with nothing alarming in it reads as calm rather than
   as six identical cards. */
.dos-wrap { margin-top: 8px; }
.dos { display: flex; flex-direction: column; gap: 12px; margin-top: 8px; }
.dos-addr { font-weight: 600; }

.dos-sec { border-top: 1px solid var(--border); padding-top: 10px; }
.dos-sec h4 { margin: 0 0 7px; font-size: 13px; letter-spacing: .02em; }
.dos-sec.alert { border-left: 3px solid var(--amber, #d97706); padding-left: 10px; border-top-color: transparent; }

.dos-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 6px 14px; }
.dos-fact { display: flex; flex-direction: column; min-width: 0; }
.dos-fl { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; }
.dos-fv { font-size: 13.5px; word-break: break-word; }

/* "Have we listed it?" - one row per run, each cell fitting on two lines at most.
   The table sat inside the Contact info value column, which is 200px wide and
   sets `overflow-wrap: anywhere` (styles.css, .person-layout .kv .v). That value
   removes every column's minimum width, so the browser shrank all five to about
   ten pixels of text between the shared 14px cell padding and broke the words
   in the middle of a letter: an MLS number ran down the page four characters at a
   time. Fixed in three places, because any one of them alone leaves it broken:
   the table now sits under the row's label and spans the card (see dossier.js),
   it is told to wrap at word boundaries again, and its padding is its own. */
.dos-runs { margin-top: 8px; overflow-wrap: normal; word-break: normal; }
table.list.dos-runs th { position: static; padding: 6px 4px; font-size: 10.5px; letter-spacing: .2px; }
table.list.dos-runs td { padding: 6px 4px; vertical-align: top; font-size: 12px; line-height: 1.3; }
/* Numbers and ids are one word: never broken, so the cells that can wrap are the
   status and the date, which is where a second line reads naturally. */
table.list.dos-runs td:first-child, table.list.dos-runs td:nth-child(5) { white-space: nowrap; }
/* A date is two pieces that each stay whole, so it breaks between "19 Aug" and
   "2025" and never inside either. */
.dos-runs .nw { white-space: nowrap; }
/* The phone rule that hides every list column past the fourth would drop Days
   here, and this table is narrow enough to keep. */
table.list.dos-runs th:nth-child(n+5), table.list.dos-runs td:nth-child(n+5) { display: table-cell; }

.dos-links { display: flex; flex-wrap: wrap; gap: 6px; }
.dos-dupe { display: flex; gap: 10px; align-items: baseline; padding: 4px 0; flex-wrap: wrap; }
.dos-hand { padding: 6px 0; }

/* Diagnostics. Deliberately borrows the browser phone self-test's step list
   (.wpt-line, .wpt-out) rather than inventing a second one: an office that has
   learned to read one should not have to learn another. */
.diag-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
  gap: 6px 14px; margin: 10px 0; padding: 10px; background: var(--bg-soft, rgba(0,0,0,.02)); border-radius: 6px; }
.diag-fact { display: flex; flex-direction: column; min-width: 0; }
.diag-hits { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 12px; align-items: center; }
tr.diag-urgent td { background: rgba(220, 38, 38, .06); }
