/*
 * Issue cards, list rows, modals, attachments and the user-management table.
 * Continues trace-board.css, which holds the screens, toolbar, dropdowns and board grid.
 */

/* -- Issue cards ---------------------------------------------------------- */
.issue-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .15s;overflow:hidden;}
.issue-card:hover{border-color:var(--border2);box-shadow:0 2px 8px rgba(9,30,66,.12);transform:translateY(-1px);}
.issue-card.hidden{display:none;}
tr.issue-card:hover{transform:none;box-shadow:none;}
.issue-band{padding:6px 14px;display:flex;justify-content:space-between;align-items:center;gap:8px;}
.issue-key{font-size:12px;font-weight:600;color:var(--accent);white-space:nowrap;}
.issue-type-label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap;}
.issue-body{padding:12px 14px;}
.issue-org{font-size:11px;font-weight:600;color:var(--muted);text-transform:uppercase;margin-bottom:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.issue-summary{font-size:14px;font-weight:500;color:var(--text);line-height:1.4;margin-bottom:10px;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.badge-archived{display:inline-block;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.02em;padding:3px 9px;border-radius:20px;background:#f4f5f7;color:#5e6c84;white-space:nowrap;vertical-align:1px;}
.fixed-pills{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px;margin:0 0 10px;}
.fixed-pill{background:#e3fcef;color:#006644;font-size:11px;font-weight:600;padding:3px 9px;border-radius:20px;white-space:nowrap;}
.resolved-date{display:flex;align-items:center;gap:4px;font-size:11px;font-weight:600;color:#006644;white-space:nowrap;margin-left:auto;}
.issue-meta{display:flex;align-items:center;flex-wrap:wrap;gap:8px;}
.issue-date{font-size:11px;color:var(--dim);margin-left:auto;}
.issue-sub{font-size:11px;color:var(--dim);white-space:nowrap;}
.attach-count{font-size:11px;color:var(--muted);display:flex;align-items:center;gap:3px;}
.cell-muted{color:var(--muted);}
.cell-nowrap{white-space:nowrap;}
.cell-wrap{white-space:normal;word-break:break-word;}

/* Each card carries its own detail markup in a <template>, which the modal clones on open.
   This replaces the Python approach of stuffing a JSON blob into a data-issue attribute. */
.issue-detail{display:none;}

/* -- Modals --------------------------------------------------------------- */
.modal-overlay{position:fixed;inset:0;background:rgba(9,30,66,.45);display:flex;align-items:center;justify-content:center;z-index:500;padding:20px;opacity:0;pointer-events:none;transition:opacity .2s;}
.modal-overlay.open{opacity:1;pointer-events:all;}
.modal{background:var(--surface);border:1px solid var(--border);border-radius:10px;width:100%;max-width:680px;max-height:90vh;overflow-y:auto;box-shadow:0 8px 40px rgba(9,30,66,.25);transform:translateY(10px);transition:transform .2s;}
.modal-overlay.open .modal{transform:translateY(0);}
.modal.narrow{max-width:420px;}
.modal.medium{max-width:580px;}
.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:20px 24px 14px;border-bottom:1px solid var(--border);background:#fafbfc;}
.modal-key{font-size:12px;font-weight:600;color:var(--accent);margin-bottom:4px;}
.modal-title{font-size:17px;font-weight:700;color:var(--text);line-height:1.3;}
.close-btn{background:none;border:none;color:var(--muted);cursor:pointer;padding:2px;border-radius:4px;flex-shrink:0;transition:color .15s;}
.close-btn:hover{color:var(--text);}
.modal-body{padding:20px 24px;}
.modal-body.stack{display:flex;flex-direction:column;gap:14px;}
.modal-footer{display:flex;gap:8px;justify-content:flex-end;padding:14px 20px;border-top:1px solid var(--border);}
.meta-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--border);}
.meta-item label{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);display:block;margin-bottom:4px;}
.meta-item > span{font-size:13px;color:var(--text);font-weight:500;}
.section-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:8px;margin-top:16px;}
.desc-box{font-size:13px;color:var(--text);line-height:1.7;white-space:pre-wrap;background:var(--bg);border:1px solid var(--border);border-radius:var(--r);padding:12px 14px;max-height:220px;overflow-y:auto;}
.desc-empty{font-size:13px;color:var(--dim);font-style:italic;}

#imgModal{z-index:600;}
#imgModal .modal{max-width:90vw;max-height:90vh;width:auto;background:#000;border:none;display:flex;flex-direction:column;align-items:center;padding:0;}
#imgModal .modal-head{background:#111;border-bottom:1px solid #333;width:100%;padding:12px 16px;}
#imgModal .modal-key{color:#aaa;}
#imgModal .modal-title{color:#fff;font-size:14px;}
#imgPreview{max-width:100%;max-height:calc(90vh - 60px);object-fit:contain;display:block;}

/* -- Attachments ---------------------------------------------------------- */
.att-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:8px;}
.att-item{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--bg);border:1px solid var(--border);border-radius:var(--r);cursor:pointer;transition:border-color .15s,background .15s;text-decoration:none;color:var(--text);}
.att-item:hover{border-color:var(--accent);background:var(--accent-bg);}
.att-thumb{width:40px;height:40px;border-radius:4px;object-fit:cover;flex-shrink:0;border:1px solid var(--border);}
.att-icon-box{width:40px;height:40px;border-radius:4px;background:var(--surface);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;}
.att-info{flex:1;min-width:0;}
.att-name{font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.att-size{font-size:11px;color:var(--muted);margin-top:2px;}
.att-download{background:none;border:none;color:var(--muted);cursor:pointer;padding:4px;border-radius:4px;transition:color .15s;flex-shrink:0;}
.att-download:hover{color:var(--accent);}

/* -- Users page ----------------------------------------------------------- */
.page-toolbar{background:var(--surface);border-bottom:1px solid var(--border);padding:16px 24px;display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
.page-toolbar-title{font-size:15px;font-weight:700;color:var(--text);}
.page-toolbar-sub{font-size:12px;color:var(--muted);margin-top:2px;}
.page-toolbar-right{margin-left:auto;display:flex;align-items:center;gap:8px;}
.users-wrap{overflow:auto;}
.users-table{width:100%;border-collapse:collapse;}
.users-table th{position:sticky;top:0;z-index:10;background:#fafbfc;padding:9px 14px;text-align:left;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);border-bottom:2px solid var(--border);}
.users-table td{padding:11px 14px;border-bottom:1px solid var(--border);vertical-align:middle;font-size:13px;}
.users-table tr:last-child td{border-bottom:none;}
.users-table tbody tr:hover td{background:#fafbfc;}
.user-name-cell{font-weight:600;color:var(--text);}
.user-username{font-size:11px;color:var(--muted);margin-top:1px;}
.admin-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:3px;background:var(--accent-bg);color:var(--accent);font-size:10px;font-weight:600;text-transform:uppercase;}
.org-tag{display:inline-block;padding:2px 7px;background:var(--bg);border:1px solid var(--border);border-radius:3px;font-size:11px;color:var(--muted);}
.org-tag.all{color:var(--accent);border-color:var(--accent-bg);background:var(--accent-bg);}
.must-pw-badge{display:inline-block;padding:2px 6px;background:#fff8e1;border:1px solid #ffe082;border-radius:3px;font-size:10px;font-weight:600;color:#f57f17;}
.text-none{color:var(--dim);font-size:12px;}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.btn-sm{height:28px;padding:0 10px;font-size:12px;}
.btn-danger-ghost{color:var(--red);border-color:var(--red);}
.btn-danger{background:var(--red);color:#fff;}
.btn-danger:hover{background:#bf2600;}
.pw-panel{background:var(--surface);border:1px solid var(--border);border-radius:10px;overflow:hidden;max-width:480px;}
.pw-panel-head{padding:16px 20px;border-bottom:1px solid var(--border);background:#fafbfc;}
.pw-panel-head h2{font-size:15px;font-weight:700;color:var(--text);margin-bottom:2px;}
.pw-panel-head p{font-size:13px;color:var(--muted);}
.pw-panel-body{padding:20px;display:flex;flex-direction:column;gap:14px;}

/* Multi-select organisation / company pickers on the user modal. */
.ms-wrap{position:relative;}
.ms-trigger{width:100%;height:auto;min-height:36px;padding:5px 32px 5px 10px;border:2px solid var(--border);border-radius:var(--r);background:var(--surface);color:var(--text);font-family:var(--font);font-size:13px;cursor:pointer;display:flex;align-items:center;flex-wrap:wrap;gap:5px;transition:border-color .15s;text-align:left;appearance:none;background-repeat:no-repeat;background-position:right 10px center;}
.ms-trigger:focus{border-color:var(--accent);outline:none;}
.ms-placeholder{color:var(--dim);font-size:13px;}
.ms-chip{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;background:var(--accent-bg);border-radius:3px;font-size:11px;font-weight:600;color:var(--accent);}
/* The modal animates with a CSS transform, which makes it the containing block for
   position:fixed descendants. The script moves this panel to <body> once, so that
   position:fixed resolves against the viewport rather than against the modal. */
.ms-panel{position:fixed;background:var(--surface);border:1px solid var(--border2);border-radius:var(--r);margin-top:2px;z-index:9999;box-shadow:0 8px 24px rgba(9,30,66,.2);display:none;width:520px;}
.ms-panel.open{display:block;}
.ms-search{width:100%;border:none;border-bottom:1px solid var(--border);padding:8px 12px;font-family:var(--font);font-size:13px;outline:none;background:var(--bg);}
.ms-list{max-height:280px;overflow-y:auto;}
.ms-item{display:flex;align-items:center;gap:12px;padding:9px 14px;font-size:13px;cursor:pointer;transition:background .1s;border-bottom:1px solid var(--bg);user-select:none;}
.ms-item:hover{background:var(--accent-bg);}
.ms-item.filtered-out{display:none;}
.ms-empty{padding:12px;font-size:13px;color:var(--dim);text-align:center;}
.check-box-md{width:18px;height:18px;border-radius:4px;border:2px solid var(--border2);background:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .15s;}
.check-box-md.checked{background:var(--accent);border-color:var(--accent);}
.check-box-md svg{display:none;}
.check-box-md.checked svg{display:block;}
.check-box-lg{width:20px;height:20px;border-radius:4px;border:2px solid var(--border2);background:#fff;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .15s;}
.check-box-lg.checked{background:var(--accent);border-color:var(--accent);}
.check-box-lg svg{display:none;}
.check-box-lg.checked svg{display:block;}
.admin-note{background:var(--accent-bg);border:1px solid rgba(0,82,204,.2);border-radius:var(--r);padding:10px 14px;font-size:13px;color:var(--accent);}
.check-row{display:flex;align-items:center;gap:12px;font-size:13px;color:var(--text);padding:12px 14px;background:#f0f4ff;border:1.5px solid #b3c6f5;border-radius:var(--r);cursor:pointer;user-select:none;}
.check-row:hover{background:#e8effe;}
.check-row-label{font-weight:500;flex:1;}
.pw-field-wrap{position:relative;display:flex;gap:6px;}
.pw-field-wrap input{flex:1;}
.btn-gen{height:36px;padding:0 10px;font-size:11px;white-space:nowrap;flex-shrink:0;}
.hint{font-size:11px;color:var(--muted);}
.grid-span-all{grid-column:1/-1;}
