:root{--bg: #0f1419;--surface: #1a2332;--surface-hover: #243044;--border: #2d3a4f;--text: #e8edf4;--text-muted: #8b9cb3;--primary: #3b82f6;--primary-hover: #2563eb;--success: #22c55e;--warning: #f59e0b;--danger: #ef4444;--accent: #06b6d4;--radius: 10px;--shadow: 0 4px 24px rgba(0, 0, 0, .3)}*{margin:0;padding:0;box-sizing:border-box}body{font-family:IBM Plex Sans Thai,Noto Sans Thai,Sarabun,Leelawadee UI,sans-serif;background:var(--bg);color:var(--text);line-height:1.7;min-height:100vh;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;word-break:break-word;overflow-wrap:break-word}input,select,textarea,button{font-family:inherit}a{color:var(--primary);text-decoration:none}.app-layout{display:flex;min-height:100vh}.sidebar{width:260px;background:var(--surface);border-right:1px solid var(--border);padding:1.5rem 0;flex-shrink:0}.sidebar-brand{padding:0 1.5rem 1.5rem;border-bottom:1px solid var(--border);margin-bottom:1rem}.sidebar-brand h1{font-size:1.25rem;font-weight:700;color:var(--accent)}.sidebar-brand p{font-size:.75rem;color:var(--text-muted);margin-top:.25rem}.nav-list{list-style:none}.nav-link{display:flex;align-items:center;gap:.75rem;padding:.75rem 1.5rem;color:var(--text-muted);transition:all .2s;border-left:3px solid transparent}.nav-link:hover{background:var(--surface-hover);color:var(--text)}.nav-link.active{background:var(--surface-hover);color:var(--primary);border-left-color:var(--primary)}.main-content{flex:1;padding:2rem;overflow-y:auto}.page-header{margin-bottom:2rem}.page-header h2{font-size:1.75rem;font-weight:600}.page-header p{color:var(--text-muted);margin-top:.25rem}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;box-shadow:var(--shadow)}.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.25rem;margin-bottom:2rem}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem}.stat-card .label{font-size:.8rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.stat-card .value{font-size:1.75rem;font-weight:700;margin-top:.25rem}.stat-card .value.primary{color:var(--primary)}.stat-card .value.success{color:var(--success)}.stat-card .value.warning{color:var(--warning)}.stat-card .value.accent{color:var(--accent)}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse}th,td{padding:.75rem 1rem;text-align:left;border-bottom:1px solid var(--border)}th{font-size:.75rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-weight:600}tr:hover td{background:var(--surface-hover)}.badge{display:inline-block;padding:.2rem .6rem;border-radius:999px;font-size:.75rem;font-weight:500}.badge-pending{background:#374151;color:#d1d5db}.badge-assigned{background:#1e3a5f;color:#93c5fd}.badge-in_progress{background:#1e3a2f;color:#86efac}.badge-review{background:#3b2f1e;color:#fcd34d}.badge-completed{background:#14532d;color:#86efac}.badge-cancelled{background:#3b1e1e;color:#fca5a5}.badge-planning{background:#1e293b;color:#94a3b8}.badge-on_hold{background:#3b2f1e;color:#fcd34d}.badge-low{background:#1e293b;color:#94a3b8}.badge-medium{background:#1e3a5f;color:#93c5fd}.badge-high{background:#3b2f1e;color:#fcd34d}.badge-critical{background:#3b1e1e;color:#fca5a5}.badge-labor{background:#1e3a5f;color:#93c5fd}.badge-infrastructure{background:#1e3a2f;color:#86efac}.badge-license{background:#3b2f1e;color:#fcd34d}.badge-hardware{background:#2e1e3b;color:#c4b5fd}.badge-other{background:#374151;color:#d1d5db}.badge-requirement{background:#1e3a5f;color:#93c5fd}.badge-design{background:#2e1e3b;color:#c4b5fd}.badge-api{background:#1e3a2f;color:#86efac}.badge-manual{background:#3b2f1e;color:#fcd34d}.badge-report,.badge-draft{background:#1e293b;color:#94a3b8}.badge-approved{background:#14532d;color:#86efac}.badge-admin{background:#3b1e1e;color:#fca5a5}.badge-manager{background:#1e3a5f;color:#93c5fd}.badge-developer{background:#1e3a2f;color:#86efac}.badge-viewer{background:#1e293b;color:#94a3b8}.form-group{margin-bottom:1rem}.form-group label{display:block;font-size:.85rem;color:var(--text-muted);margin-bottom:.35rem}.form-group input,.form-group select,.form-group textarea{width:100%;padding:.6rem .85rem;background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);font-family:inherit;font-size:.9rem}.form-group textarea{min-height:80px;resize:vertical}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.6rem 1.25rem;border:none;border-radius:6px;font-family:inherit;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-hover)}.btn-secondary{background:var(--surface-hover);color:var(--text);border:1px solid var(--border)}.btn-secondary:hover{background:var(--border)}.btn-sm{padding:.35rem .75rem;font-size:.8rem}.progress-bar{height:8px;background:var(--bg);border-radius:4px;overflow:hidden}.progress-bar-fill{height:100%;background:linear-gradient(90deg,var(--primary),var(--accent));border-radius:4px;transition:width .3s}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;width:90%;max-width:520px;max-height:90vh;overflow-y:auto}.modal-wide{max-width:860px}.modal h3{margin-bottom:1.25rem}.modal-actions{display:flex;gap:.75rem;justify-content:flex-end;margin-top:1.5rem}.toc-tree{list-style:none}.toc-item{padding:.5rem 0;border-bottom:1px solid var(--border)}.toc-item.level-1{padding-left:0;font-weight:600}.toc-item.level-2{padding-left:1.5rem}.toc-item.level-3{padding-left:3rem;color:var(--text-muted)}.toc-doc-title{font-size:.75rem;color:var(--accent);margin-bottom:.15rem}.loading,.empty{text-align:center;padding:3rem;color:var(--text-muted)}.error{color:var(--danger);padding:1rem;background:#ef44441a;border-radius:var(--radius);margin-bottom:1rem}.section-title{font-size:1.1rem;font-weight:600;margin-bottom:1rem;display:flex;align-items:center;justify-content:space-between}.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.25rem}.stars{color:var(--warning)}.thai-content{white-space:pre-wrap;line-height:1.8;letter-spacing:.01em}.version-list{display:flex;flex-direction:column;gap:.75rem}.version-item{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;padding:.75rem 1rem;background:var(--bg);border:1px solid var(--border);border-radius:6px}.attachment-section{margin:1.5rem 0;padding:1rem;background:var(--bg);border:1px solid var(--border);border-radius:6px}.attachment-section-header,.attachment-item{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.attachment-section-header{align-items:center;margin-bottom:.75rem}.attachment-upload-button{position:relative;overflow:hidden}.attachment-upload-button input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer}.attachment-upload-button.is-disabled,.btn:disabled{opacity:.55;cursor:not-allowed}.attachment-list{display:flex;flex-direction:column;gap:.75rem}.attachment-item{padding:.85rem;background:var(--surface);border:1px solid var(--border);border-radius:6px}.attachment-info{min-width:0}.attachment-info strong,.attachment-info span,.attachment-info small{display:block}.attachment-info strong{overflow-wrap:anywhere}.attachment-info span,.attachment-info small,.attachment-empty,.attachment-note,.attachment-preview-meta{color:var(--text-muted);font-size:.85rem}.attachment-note{margin-bottom:.75rem}.attachment-preview-panel{width:min(1100px,100%);margin:0 auto}.attachment-preview-body{min-height:60vh;padding:1rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.attachment-preview-body img,.attachment-preview-body video{display:block;max-width:100%;max-height:72vh;margin:0 auto;border-radius:4px}.attachment-preview-body iframe{width:100%;height:72vh;border:0;border-radius:4px;background:#fff}.attachment-preview-body audio{width:100%;margin-top:2rem}.attachment-preview-body pre{max-height:72vh;overflow:auto;padding:1rem;background:var(--bg);border:1px solid var(--border);border-radius:6px;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text)}.attachment-preview-empty{min-height:40vh;display:flex;align-items:center;justify-content:center;text-align:center;color:var(--text-muted)}.preview-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000bf;z-index:200;display:flex;align-items:flex-start;justify-content:center;padding:1.5rem;overflow-y:auto}.preview-panel{width:100%;max-width:900px;margin:0 auto}.preview-toolbar{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem;padding:.75rem 1rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);position:sticky;top:0;z-index:1}.preview-toolbar h3{font-size:1rem;font-weight:600}.preview-actions{display:flex;flex-wrap:wrap;gap:.5rem}.preview-paper{background:#fff;color:#1a1a1a;padding:2.5rem 2rem;border-radius:4px;box-shadow:0 4px 32px #00000059;font-family:IBM Plex Sans Thai,Noto Sans Thai,sans-serif;line-height:1.75;min-height:297mm}.preview-doc-header{border-bottom:2px solid #0d6efd;padding-bottom:1rem;margin-bottom:1.5rem}.preview-brand{font-size:.85rem;color:#0d6efd;font-weight:600}.preview-doc-title{font-size:1.5rem;font-weight:700;margin:.5rem 0 .75rem;color:#111}.preview-doc-meta{font-size:.85rem;color:#555;display:flex;flex-wrap:wrap;gap:.5rem 1.25rem}.preview-doc-note{margin-top:.75rem;background:#f0f7ff;border-left:3px solid #0d6efd;padding:.5rem .75rem;font-size:.9rem;color:#333}.preview-doc-body{font-size:.95rem;margin-bottom:1.5rem;color:#222}.preview-doc-sections h2{font-size:1.1rem;margin-bottom:.75rem;color:#222;border-bottom:1px solid #ddd;padding-bottom:.35rem}.preview-toc{list-style:none}.preview-toc li{padding:.35rem 0;border-bottom:1px solid #f0f0f0}.preview-toc li.toc-level-2{padding-left:1.25rem}.preview-toc li.toc-level-3{padding-left:2.5rem;color:#555}.preview-toc p{font-size:.85rem;color:#666;margin-top:.15rem}.preview-doc-footer{margin-top:2rem;padding-top:.75rem;border-top:1px solid #ddd;font-size:.75rem;color:#888;text-align:center}.btn-group{display:flex;flex-wrap:wrap;gap:.5rem}@media(max-width:720px){.attachment-section-header,.attachment-item,.version-item{flex-direction:column;align-items:stretch}.attachment-item .btn-group,.version-item .btn-group{width:100%}.attachment-item .btn,.version-item .btn{justify-content:center}}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:var(--bg)}.login-card{width:100%;max-width:420px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:2rem;box-shadow:var(--shadow)}.login-header{text-align:center;margin-bottom:1.5rem}.login-header h1{color:var(--accent);font-size:1.5rem}.login-header p{color:var(--text-muted);font-size:.9rem}.login-demo{margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid var(--border)}.demo-accounts{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.demo-account-btn{display:flex;flex-direction:column;align-items:flex-start;padding:.6rem .75rem;background:var(--bg);border:1px solid var(--border);border-radius:6px;color:var(--text);font-family:inherit;font-size:.8rem;cursor:pointer;transition:border-color .2s}.demo-account-btn:hover{border-color:var(--primary)}.demo-account-btn strong{font-size:.85rem}.demo-account-btn span{color:var(--text-muted);font-size:.75rem}.sidebar{display:flex;flex-direction:column}.sidebar-user{margin-top:auto;padding:1rem 1.5rem;border-top:1px solid var(--border)}.sidebar-user-name{font-weight:600;font-size:.9rem}.sidebar-user-role{font-size:.75rem;color:var(--text-muted)}.role-card{margin-bottom:1.25rem;padding-bottom:1rem;border-bottom:1px solid var(--border)}.role-card:last-child{border-bottom:none;margin-bottom:0}.perm-tags{display:flex;flex-wrap:wrap;gap:.35rem}.perm-tag{font-size:.7rem;padding:.15rem .5rem;background:var(--bg);border:1px solid var(--border);border-radius:4px;color:var(--text-muted);text-transform:capitalize}.perm-tag.active{background:#3b82f626;border-color:var(--primary);color:var(--primary)}.admin-tabs{display:flex;gap:.25rem;margin-bottom:1.25rem;border-bottom:1px solid var(--border);flex-wrap:wrap}.admin-tab{padding:.65rem 1.25rem;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-muted);font-family:inherit;font-size:.9rem;cursor:pointer;margin-bottom:-1px;transition:all .2s}.admin-tab:hover{color:var(--text)}.admin-tab.active{color:var(--primary);border-bottom-color:var(--primary)}.search-input{flex:1;max-width:360px;padding:.55rem .85rem;background:var(--surface);border:1px solid var(--border);border-radius:6px;color:var(--text);font-family:inherit}.role-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}.role-card-full h3{font-size:1.05rem}.perm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1rem}.perm-module-card h3{font-size:1rem;margin-bottom:.25rem}.perm-list{list-style:none}.perm-list li{display:flex;flex-direction:column;gap:.1rem;padding:.5rem 0;border-bottom:1px solid var(--border);font-size:.85rem}.perm-list code{font-size:.75rem;color:var(--accent)}.perm-list span{color:var(--text-muted)}.perm-group h4{font-size:.85rem;margin-bottom:.5rem;color:var(--accent)}.perm-picker{max-height:360px;overflow-y:auto}.perm-picker-group{margin-bottom:1rem;padding-bottom:.75rem;border-bottom:1px solid var(--border)}.perm-picker-module{display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;cursor:pointer}.perm-picker-item{display:flex;align-items:center;gap:.5rem;padding:.3rem 0 .3rem 1.25rem;font-size:.85rem;cursor:pointer}.perm-picker-item code{margin-left:auto;font-size:.7rem;color:var(--text-muted)}.matrix-table th{font-size:.7rem;writing-mode:vertical-rl;text-orientation:mixed;max-width:2rem;padding:.5rem .35rem}.matrix-cell{text-align:center;color:var(--success);font-weight:600}@media(max-width:768px){.app-layout{flex-direction:column}.sidebar{width:100%;border-right:none;border-bottom:1px solid var(--border)}.form-row{grid-template-columns:1fr}}
