/* Explicit component classes; article content is scoped separately. */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:36px;padding:7px 12px;border:1px solid var(--line);border-radius:var(--control-radius);background:var(--surface);color:var(--text);font-size:12px;font-weight:500;line-height:1.4;white-space:nowrap;text-decoration:none;vertical-align:middle}.btn:hover{background:var(--hover);color:var(--text);border-color:#455466}.btn-primary{background:var(--accent);border-color:var(--accent);color:#081b2c}.btn-primary:hover{background:var(--accent-hover);color:#071a2a;border-color:var(--accent-hover)}.btn-primary .icon{filter:brightness(.18)}.btn-ghost{background:none;border-color:transparent;color:var(--muted)}.btn-ghost:hover{border-color:transparent}.btn-danger{color:var(--danger);background:#332326;border-color:#653c40}.btn-danger:hover{background:#422b30;color:#ffc2c2}.btn-sm{min-height:29px;padding:5px 9px;font-size:11px}.btn-sm .icon{width:13px;height:13px}.icon-btn{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;background:none;border:1px solid transparent;color:var(--muted);border-radius:5px;padding:6px;flex-shrink:0}.icon-btn:hover{background:var(--hover);border-color:var(--line)}.inline-form{display:inline-block;margin:0}.actions-inline{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.link-button{border:0;background:none;color:var(--accent);padding:0;font-size:inherit}.avatar{width:34px;height:34px;display:inline-grid;place-items:center;flex-shrink:0;border-radius:50%;background:#293746;color:#b7c8dc;font-size:11px;font-weight:500;border:1px solid #354658}.avatar.large{width:62px;height:62px;font-size:21px}.person{display:flex;align-items:center;gap:11px;min-width:0}.person>span:last-child{min-width:0}.person small{display:block;color:var(--quiet);font-size:11px;margin-top:3px}.row-title{color:var(--text);font-weight:500;overflow-wrap:anywhere}.row-title:hover{color:var(--accent-hover)}.status{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:11px;line-height:1.4;white-space:nowrap}.status:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;flex-shrink:0}.status--active,.status--approved,.status--issued,.status--published,.status--ready,.status--answered,.status--passed,.status--normal{color:var(--success)}.status--pending,.status--waiting,.status--attention,.status--planned,.status--unapproved{color:var(--warning)}.status--overdue,.status--blocked,.status--rejected,.status--failed{color:var(--danger)}.status--processing,.status--in_progress{color:#86baf0}.status--long{color:#e9a280}.notice{display:flex;align-items:flex-start;gap:10px;border:1px solid #334658;background:#1a2938;padding:12px 14px;color:#b9cce1;border-radius:var(--radius);font-size:12px;margin-bottom:20px}.notice .icon{margin-top:2px}.notice--warning{background:#302b20;border-color:#554a31;color:var(--warning)}.notice--error{background:#332327;border-color:#603a41;color:#f2b0b0}.notice--success{background:#203129;border-color:#355744;color:#aad6bd}.panel{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);min-width:0;overflow:hidden}.panel-body{padding:22px}.section-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 16px}.section-head h2{font-size:16px}.section-head>div{display:flex;gap:8px;align-items:center}.panel>.section-head{padding:17px 20px;margin:0;border-bottom:1px solid var(--line-soft)}.metric-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:0 0 26px;padding:22px 0}.metric{padding:0 24px;border-left:1px solid var(--line)}.metric:first-child{padding-left:0;border-left:0}.metric>span,.metric>small{display:block;color:var(--muted);font-size:12px}.metric>strong{display:block;font-size:29px;line-height:1.3;font-weight:550;margin:7px 0 2px;letter-spacing:-.7px}.metric>small{color:var(--quiet);font-size:11px}.filterbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:18px}.search-field{min-width:180px;flex:1;max-width:440px;position:relative;display:flex;align-items:center}.search-field>.icon{position:absolute;left:11px;width:14px;pointer-events:none}.search-field input{width:100%;padding:8px 12px 8px 34px;border:1px solid var(--line);background:var(--sidebar);border-radius:5px;color:var(--text);height:37px;font-size:12px}.search-field input::placeholder{color:var(--quiet)}.filter-select{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--muted)}.filter-select select{min-width:115px;max-width:220px;height:37px;border:1px solid var(--line);border-radius:5px;background:var(--surface);color:var(--text);padding:6px 25px 6px 10px;font-size:12px}.filter-select>span{position:absolute;width:1px;height:1px;overflow:hidden}.table-scroll{overflow-x:auto;min-width:0;max-width:100%;scrollbar-width:thin;scrollbar-color:#445262 var(--surface)}.table-scroll:focus-visible{outline-offset:-2px}.data-table{width:100%;border-collapse:collapse;min-width:620px;text-align:left;line-height:1.4}.data-table th{font-weight:400;text-align:left;padding:11px 16px;color:var(--muted);font-size:11px;background:#191f26;border-bottom:1px solid var(--line);white-space:nowrap}.data-table th>a{display:flex;gap:7px;align-items:center;color:var(--muted)}.sort-mark{font-size:11px;color:var(--quiet)}.data-table td{padding:12px 16px;border-bottom:1px solid var(--line-soft);font-size:12px;vertical-align:middle;color:#c6d0dd;max-width:370px}.data-table tr:last-child td{border-bottom:0}.data-table tbody tr:hover{background:#212a34}.data-table tr.is-selected{background:#203145}.data-table td>small{display:block;color:var(--quiet);margin-top:3px;font-size:10px}.data-table .cell-main{min-width:195px}.data-table .cell-actions{white-space:nowrap;text-align:right}.data-table .person .row-title{font-size:13px}.data-table .cell-id{color:var(--quiet);font-family:var(--mono);font-size:11px}.data-table .cell-long{min-width:210px;max-width:430px;white-space:normal}.pagination{display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--muted);padding:12px 16px;border-top:1px solid var(--line)}.pagination strong{font-weight:500;color:var(--text)}.pagination>div{display:flex;align-items:center;gap:12px}.empty-state{padding:56px 24px;text-align:center;color:var(--muted)}.empty-state>.icon{width:26px;height:26px;opacity:.55;margin-bottom:14px}.empty-state h2{font-size:17px;color:var(--text);margin-bottom:8px}.empty-state p{font-size:12px;max-width:390px;margin:auto}.tabs{display:flex;align-items:center;gap:24px;border-bottom:1px solid var(--line);margin-bottom:22px;overflow-x:auto;scrollbar-width:none}.tabs>a{color:var(--muted);font-size:12px;padding:0 0 12px;white-space:nowrap;border-bottom:2px solid transparent;position:relative;top:1px}.tabs>a.active{color:var(--text);border-bottom-color:var(--accent)}.app-form{display:flex;flex-direction:column;gap:17px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.form-grid .full{grid-column:1/-1}.field{display:flex;flex-direction:column;gap:7px;min-width:0;font-size:12px;color:var(--muted)}.field>span{font-size:12px;color:#bdc8d6}.field input:not([type=checkbox]),.field select,.field textarea{width:100%;min-width:0;color:var(--text);border:1px solid var(--line);background:var(--sidebar);border-radius:var(--control-radius);padding:9px 11px;line-height:1.45;font-size:13px}.field input:not([type=file]),.field select{min-height:38px}.field textarea{resize:vertical;min-height:82px}.field small{font-size:11px;color:var(--quiet)}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--accent);outline:1px solid var(--accent)}.field input[type=file]{font-size:11px;padding:10px}.field input::file-selector-button{padding:6px 9px;border:1px solid var(--line);background:var(--surface-raised);color:var(--text);border-radius:4px;margin-right:12px}.form-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px;padding-top:17px;border-top:1px solid var(--line)}.check{display:flex;gap:9px;align-items:flex-start;color:var(--muted);font-size:12px}.check input{margin:3px 0 0;accent-color:var(--accent);width:14px;height:14px;flex-shrink:0}.check-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:10px}.dialog{width:min(600px,calc(100vw - 32px));max-width:calc(100vw - 32px);max-height:calc(100dvh - 40px);padding:0;border:1px solid #3a4757;border-radius:10px;color:var(--text);background:var(--surface);box-shadow:0 18px 80px #0006;overflow:auto}.dialog::backdrop{background:rgb(3 8 14 / .68)}.dialog--drawer{position:fixed;inset:0 0 0 auto;margin:0;height:100dvh;max-height:100dvh;width:610px;max-width:100vw;border-radius:0;border-top:0;border-right:0;border-bottom:0}.dialog--confirm{max-width:430px}.dialog-head{display:flex;gap:16px;align-items:center;justify-content:space-between;padding:17px 24px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--surface);z-index:2}.dialog-head h2{font-size:17px}.dialog-body{padding:22px 24px}.dialog-body>p{margin-bottom:18px;font-size:13px}.dialog-body .notice{margin-bottom:0}.dialog-body>section,.dialog-body>dl{margin-bottom:24px}.definition-list{margin:0}.definition{display:grid;grid-template-columns:145px 1fr;gap:20px;padding:11px 0;border-bottom:1px solid var(--line-soft)}.definition:last-child{border-bottom:0}.definition dt{color:var(--muted);font-size:12px}.definition dd{margin:0;font-size:13px;overflow-wrap:anywhere}.profile-heading{display:flex;align-items:center;gap:16px;margin-bottom:22px}.profile-heading h2{font-size:21px}.profile-heading p{color:var(--muted);font-size:12px;margin-top:5px}.tool-links{display:flex;gap:8px;flex-wrap:wrap;padding:20px 0}.toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);padding:12px 18px;background:var(--surface-raised);border:1px solid var(--line);border-radius:7px;z-index:100;font-size:12px;box-shadow:0 7px 30px #0006}.attachments{border-top:1px solid var(--line);margin-top:24px;padding-top:18px}.attachments h3{margin-bottom:10px}.attachment{display:flex;align-items:center;gap:10px;padding:12px 0;color:var(--text);font-size:12px;border-bottom:1px solid var(--line-soft)}.attachment>span{flex:1;overflow-wrap:anywhere}.attachment small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.attachment-image{display:block;max-height:360px;object-fit:contain;margin:16px auto;border:1px solid var(--line);border-radius:5px}.inline-badge{padding:2px 6px;border-radius:3px;background:var(--surface-raised);color:var(--muted);font-size:10px}.checklist-row{display:flex;align-items:center;gap:12px;padding:13px 0;border-bottom:1px solid var(--line-soft);font-size:13px}.checklist-row form{margin:0}.checklist-row.is-done>span{text-decoration:line-through;color:var(--quiet)}
@media(max-width:1100px){.data-table td,.data-table th{padding-left:13px;padding-right:13px}.metric{padding:0 18px}}
@media(max-width:680px){.metric-strip{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px 0;padding:20px 0}.metric{padding:0 18px}.metric:nth-child(3){padding-left:0;border-left:0}.metric>strong{font-size:25px}.filterbar{gap:8px}.filterbar .search-field{flex-basis:100%;max-width:none}.filter-select{flex:1;min-width:0}.filter-select select{min-width:0;max-width:none;width:100%}.form-grid{grid-template-columns:1fr}.form-grid .full{grid-column:auto}.check-grid{grid-template-columns:repeat(4,1fr)}.dialog-head{padding:15px 18px}.dialog-body{padding:20px 18px}.definition{grid-template-columns:110px 1fr;gap:14px}.panel-body{padding:18px}.pagination{padding:11px 12px;gap:10px}.pagination>div{gap:9px}.section-head{gap:10px}.section-head h2{font-size:15px}.tabs{gap:20px}.btn{white-space:normal;text-align:center}.cell-actions .btn{white-space:nowrap}}

.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}fieldset{border:1px solid var(--line);border-radius:6px;padding:16px;margin:0 0 16px;min-width:0}legend{padding:0 6px;color:var(--muted);font-size:12px}.checklist-item{display:flex;align-items:center;gap:16px;padding:16px 0;border-bottom:1px solid var(--line-soft)}.checked-label{color:var(--muted);text-decoration:line-through}.prewrap{white-space:pre-wrap}

@media(max-width:600px){.filterbar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.filterbar .search-field{grid-column:1/-1;width:100%}.filterbar .filter-select{min-width:0;width:100%}.filterbar .filter-select select{width:100%;min-width:0}.filterbar>.btn{justify-content:center}.filterbar .filter-select>span{display:none}}


/* v16 — flash messages are transient application toasts. */
.app-toast-stack{position:fixed;top:76px;right:20px;z-index:190;display:grid;gap:9px;width:min(360px,calc(100vw - 28px));pointer-events:none}
.app-toast{position:relative;display:grid;grid-template-columns:20px minmax(0,1fr) 24px;gap:10px;align-items:start;overflow:hidden;padding:13px 12px 14px;border:1px solid var(--line);border-left-width:3px;border-radius:7px;background:var(--surface-raised);color:var(--text);box-shadow:0 12px 36px #0007;pointer-events:auto;animation:app-toast-in 180ms cubic-bezier(.2,.75,.2,1) both}
.app-toast--success{border-left-color:var(--success)}.app-toast--warning{border-left-color:var(--warning)}.app-toast--error{border-left-color:var(--danger)}
.app-toast__icon{margin-top:2px;color:var(--muted)}.app-toast--success .app-toast__icon{color:var(--success)}.app-toast--warning .app-toast__icon{color:var(--warning)}.app-toast--error .app-toast__icon{color:var(--danger)}
.app-toast__copy{min-width:0;display:grid;gap:3px}.app-toast__copy strong{font-size:12px;font-weight:600}.app-toast__copy span{color:var(--muted);font-size:11px;line-height:1.5;overflow-wrap:anywhere}
.app-toast__close{width:24px;height:24px;display:grid;place-items:center;border:0;border-radius:4px;background:transparent;color:var(--quiet);padding:0}.app-toast__close:hover{background:var(--hover);color:var(--text)}
.app-toast__timer{position:absolute;left:0;right:0;bottom:0;height:2px;background:currentColor;opacity:.34;transform-origin:left center;animation:app-toast-timer var(--toast-timeout,3000ms) linear both}.app-toast--success .app-toast__timer{color:var(--success)}.app-toast--warning .app-toast__timer{color:var(--warning)}.app-toast--error .app-toast__timer{color:var(--danger)}
.app-toast.is-leaving{animation:app-toast-out 160ms ease forwards}
@keyframes app-toast-in{from{opacity:0;transform:translateY(-7px) translateX(8px)}to{opacity:1;transform:none}}
@keyframes app-toast-out{to{opacity:0;transform:translateX(12px)}}
@keyframes app-toast-timer{from{transform:scaleX(1)}to{transform:scaleX(0)}}
@media(max-width:620px){.app-toast-stack{top:12px;right:14px}}
@media(prefers-reduced-motion:reduce){.app-toast,.app-toast__timer{animation:none!important}}
