<style>
/* MEDIQ V48 - New workspaces and consolidated request dialog */
#mediq-dashboard .mq-v48-title{display:flex;align-items:center;justify-content:space-between;gap:12px}
#mediq-dashboard .mq-v48-title h3{font-size:19px!important;color:#176b96!important}
#mediq-dashboard .mq-v48-title p{font-size:12px;color:#6a879d}
#mediq-dashboard .mq-v48-filters{margin:18px 0!important}
#mediq-dashboard .mq-v48-warning{padding:22px;border:1px dashed #d7ab77;background:#fffaf2;color:#835321;border-radius:12px;line-height:2}
#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:repeat(3,minmax(0,1fr))!important}
.mm-request-box .mm-request-body{background:linear-gradient(#f7fbff,#fff 240px)!important}
.mm-request-box .mm-form-section{box-shadow:0 4px 18px rgba(26,90,130,.06)!important}
.mm-request-box .mq-v47-action{border-top:3px solid #3997c8!important}
.mm-request-box .mm-transition-tile{cursor:pointer!important;transition:transform .18s,box-shadow .18s,background .18s!important}
.mm-request-box .mm-transition-tile:hover,.mm-request-box .mm-transition-tile:focus-visible{transform:translateY(-4px)!important;box-shadow:0 9px 24px #227eaa30!important}
.mm-request-box .mm-transition-tile.chosen{border-color:#148acc!important}
.mm-request-box #mmEditPriority{display:none!important}
.mm-request-box .mm-compact-attachments{align-self:stretch;min-width:0}
#mediq-dashboard #mufRoot .muf-stats{margin-top:16px!important}
#mediq-dashboard #mufRoot .muf-tabs{margin-top:16px!important}
#mediq-dashboard #mufRoot .mq-v47-newfault{animation:mqV48Signal 3s ease-in-out infinite}
#mediq-dashboard #mufRoot .mq-v47-newfault:hover{animation:none;transform:translateY(-4px) rotate(-1deg)!important}
@keyframes mqV48Signal{0%,85%,100%{box-shadow:0 0 0 0 #de424b00}90%{box-shadow:0 0 0 7px #de424b22}}
@media(max-width:930px){#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media(max-width:600px){#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:1fr!important}.mq-v48-title{flex-direction:column;align-items:flex-start!important}}
@media(prefers-reduced-motion:reduce){#mediq-dashboard #mufRoot .mq-v47-newfault{animation:none!important}}
</style>
<style>
/* V38.20 - clickable KPI cards, activity-aligned detail panel, live workflow pulse */
#mediq-dashboard #mmContent .mm-kpi-card{background:#fff;border:1px solid #cbdfea;border-radius:16px;padding:30px;display:flex;flex-direction:column;gap:12px;cursor:pointer;transition:border-color .18s,background .18s,box-shadow .18s;text-align:right;font:inherit;color:inherit}
#mediq-dashboard #mmContent .mm-kpi-card strong{font-size:30px;color:#318fbd}
#mediq-dashboard #mmContent .mm-kpi-card:hover{border-color:#3595c4;background:#f5fbff}
#mediq-dashboard #mmContent .mm-kpi-card.active{border:2px solid #328fc2;background:#eaf6ff;box-shadow:0 0 0 2px #d6edf9 inset}
#mediq-dashboard #mmContent .mm-kpi-card:focus-visible{outline:3px solid #2e92ca;outline-offset:2px}
#mediq-dashboard #mmContent.mm-with-fixed-side{display:block!important}
#mediq-dashboard #mmContent .mm-permanent-panel{float:left!important;position:sticky!important;top:16px!important;left:auto!important;bottom:auto!important;display:block;width:315px!important;max-height:calc(100vh - 34px)!important;margin:0 14px 18px 0!important;box-sizing:border-box;z-index:3;border:1px solid #cee0ee;border-radius:14px;box-shadow:none;padding:14px;overflow:auto}
#mediq-dashboard #mmContent .mm-permanent-panel[hidden]{display:none!important}
#mediq-dashboard #mmContent.mm-with-fixed-side #mmRows,#mediq-dashboard #mmContent.mm-with-fixed-side .mm-actionbar{margin-left:330px!important;min-width:0}
#mediq-dashboard .mm-workflow .mm-stage.current:before{animation:mediqV3820Pulse 1.1s ease-in-out infinite!important;will-change:box-shadow,transform;}
@keyframes mediqV3820Pulse{0%,100%{box-shadow:0 0 0 3px #dff1fc,0 0 0 5px rgba(30,145,199,.72);transform:scale(1);opacity:1}50%{box-shadow:0 0 0 3px #dff1fc,0 0 0 15px rgba(30,145,199,0);transform:scale(1.18);opacity:.52}}
@media(max-width:900px){#mediq-dashboard #mmContent .mm-permanent-panel{float:none!important;position:relative!important;width:100%!important;max-height:none!important;top:0!important;margin:0 0 12px!important}#mediq-dashboard #mmContent.mm-with-fixed-side #mmRows,#mediq-dashboard #mmContent.mm-with-fixed-side .mm-actionbar{margin-left:0!important}}
/* MediQ V39: visual refresh while retaining brand colors */
#mediq-dashboard .mm-category-icon{width:74px!important;height:74px!important;background:#e7f4fc!important;color:#2688bd!important;border-radius:18px!important}
#mediq-dashboard .mm-category-icon svg{width:46px!important;height:46px!important;stroke-width:2!important}
#mediq-dashboard .mm-category-card{border-color:#c5e2f3!important;box-shadow:0 9px 28px rgba(32,103,146,.08)!important}
#mediq-dashboard .mm-category-card:hover{box-shadow:0 16px 36px rgba(32,103,146,.15)!important}
#mediq-dashboard .mm-kpi-card{position:relative;border-radius:16px!important;border:1px solid #c8dfed!important;box-shadow:0 5px 16px rgba(22,85,124,.07)!important;text-align:right!important;direction:rtl!important;transition:transform .14s,box-shadow .14s!important}
#mediq-dashboard .mm-kpi-card:hover{transform:translateY(-3px);box-shadow:0 9px 24px rgba(26,91,128,.13)!important}
#mediq-dashboard .mm-kpi-card.active{background:#e9f6ff!important;border-color:#3197cc!important}
#mediq-dashboard .mm-kpi-card strong{color:#208ac2!important;font-size:29px!important}
#mediq-dashboard #mmContent .mm-two-pane{direction:rtl}
#mediq-dashboard #mmContent th{background:#eaf4fb!important;color:#245978!important}
#mediq-dashboard #mmContent tr:hover td{background:#f2f9fe}
#mediq-dashboard .mm-issue-overlay .mm-permanent-panel,#mediq-dashboard #mmPermanentIssue{width:min(46vw,610px)!important;max-width:calc(100vw - 20px)!important;box-shadow:0 8px 28px rgba(24,70,100,.13)!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-card{border-color:#c6e2f1!important;box-shadow:0 3px 9px rgba(20,85,125,.04)}
.mm-request-box .mm-request-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}
.mm-request-box .mm-form-section{box-shadow:0 3px 14px rgba(32,91,126,.06);border-color:#cce4f3!important}
.mm-request-box .mm-form-section h4{font-size:16px!important;color:#136b9e!important}
.mm-request-box .mm-transition-tiles{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}
.mm-request-box .mm-transition-tile{border:1px solid #b9dced;border-radius:11px;background:#f4faff;color:#245d7c;font:inherit;font-weight:750;padding:10px 16px;cursor:pointer}
.mm-request-box .mm-transition-tile.chosen{border-color:#208cc6;background:#d7efff;color:#075b8e;box-shadow:0 0 0 2px #c5e8fc}
.mm-request-box .mm-current-stage{background:#e7f6ef;border:1px solid #bce3d1;color:#177453;font-weight:800;border-radius:10px;padding:10px 12px}
.mm-discard-overlay[hidden]{display:none!important}.mm-discard-overlay{position:absolute;inset:0;background:#1b3c5299;display:grid;place-items:center;z-index:10;border-radius:14px}
.mm-discard-card{background:white;direction:rtl;text-align:right;border-radius:15px;padding:26px;max-width:380px;box-shadow:0 20px 55px #11374b44}
.mm-discard-card strong{font-size:17px;color:#125f8f}.mm-discard-card>div{display:flex;gap:8px}
@media(max-width:850px){#mediq-dashboard #mmPermanentIssue{width:min(95vw,520px)!important}.mm-request-box .mm-request-grid{grid-template-columns:1fr!important}}
/* V39 last-in-cascade responsive layout fixes */
#mediq-dashboard .mm-category-icon{width:74px!important;height:74px!important;border-radius:18px!important;background:#e6f5fd!important}
#mediq-dashboard .mm-category-icon svg{width:46px!important;height:46px!important}
#mediq-dashboard #mmContent .mm-permanent-panel{width:560px!important;max-width:44%!important;float:left!important;top:0!important;margin:0 14px 16px 0!important;max-height:calc(100vh - 26px)!important}
#mediq-dashboard #mmContent.mm-with-fixed-side #mmRows,#mediq-dashboard #mmContent.mm-with-fixed-side .mm-actionbar{margin-left:580px!important}
#mediq-dashboard #mmPermanentIssue>.mm-detail-card:first-of-type{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 18px}
#mediq-dashboard #mmPermanentIssue>.mm-detail-card:first-of-type .mm-detail-line{min-width:0}
#mediq-dashboard .mm-kpi-card{direction:rtl!important;text-align:right!important;border-radius:16px!important;box-shadow:0 5px 16px #20678c12!important}
@media(max-width:1040px){#mediq-dashboard #mmContent .mm-permanent-panel{width:42%!important;max-width:42%!important}#mediq-dashboard #mmContent.mm-with-fixed-side #mmRows,#mediq-dashboard #mmContent.mm-with-fixed-side .mm-actionbar{margin-left:44%!important}}
@media(max-width:760px){#mediq-dashboard #mmContent .mm-permanent-panel{position:relative!important;width:100%!important;max-width:100%!important;float:none!important;max-height:70vh!important}#mediq-dashboard #mmContent.mm-with-fixed-side #mmRows,#mediq-dashboard #mmContent.mm-with-fixed-side .mm-actionbar{margin-left:0!important}}</style>
<style>
/* MEDIQ: vertical workflow timeline, same asset-status visual language */
#mediq-dashboard .mm-stage-grid{display:flex!important;flex-direction:column!important;gap:0!important;margin:14px 0!important;direction:rtl}
#mediq-dashboard .mm-stage{position:relative;display:flex!important;align-items:center;gap:12px;min-height:60px;text-align:right!important;padding:7px 5px!important;border:0!important;border-radius:0!important;background:transparent!important;color:#758e9f!important;font-size:12px!important;line-height:1.7}
#mediq-dashboard .mm-stage:before{content:'';display:block;width:19px;height:19px;flex:0 0 19px;border-radius:50%;background:#e0eaf0;border:2px solid #c9dbe6;box-shadow:0 0 0 3px #fff;position:relative;z-index:2}
#mediq-dashboard .mm-stage:not(:last-child):after{content:'';position:absolute;right:15px;top:40px;bottom:-20px;width:3px;background:#d7e5ed;z-index:0}
#mediq-dashboard .mm-stage.done{color:#23865e!important;font-weight:700}
#mediq-dashboard .mm-stage.done:before{content:'✓';background:#1aaf68;color:white;border-color:#1aaf68;text-align:center;font-size:13px;line-height:17px}
#mediq-dashboard .mm-stage.done:after{background:#1aaf68}
#mediq-dashboard .mm-stage.current{color:#147fac!important;font-weight:900!important}
#mediq-dashboard .mm-stage.current:before{background:#168bc0;border:5px solid #b5e4f8;box-shadow:0 0 0 4px #e7f5fc}
/* V38.18: pulse only the CURRENT maintenance workflow stage, matching asset timeline */
#mediq-dashboard .mm-workflow .mm-stage.current::before{
animation:mediqMaintenanceCurrentPulse 1.55s ease-in-out infinite;
transform-origin:center center;
}
@keyframes mediqMaintenanceCurrentPulse{
0%,100%{box-shadow:0 0 0 4px #e7f5fc,0 0 0 7px rgba(22,139,192,.28);opacity:1}
50%{box-shadow:0 0 0 4px #e7f5fc,0 0 0 15px rgba(22,139,192,0);opacity:.72}
}
@media(prefers-reduced-motion:reduce){
#mediq-dashboard .mm-workflow .mm-stage.current::before{animation:none}
}
#mediq-dashboard .mm-workflow .mm-hint{font-size:11px;line-height:1.9}
</style>
<style>
/* MediQ V38.16: sidebar parity and workflow summary */
#mediq-dashboard .mq-tree-v31 .v32-tree-children .mq-tree-row.level-2{font-size:14px!important;font-weight:650!important;min-height:42px!important;line-height:1.75!important}
#mediq-dashboard .mm-stage-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin:12px 0}
#mediq-dashboard .mm-stage{padding:10px 7px;border-radius:9px;text-align:center;background:#f2f7fa;color:#54768d;border:1px solid #d5e4ee;font-size:12px}
#mediq-dashboard .mm-stage.current{border-color:#318fc3;background:#dff2ff;color:#11577f;font-weight:800}
#mediq-dashboard .mm-workflow h4{font-size:15px;margin-bottom:9px}
#mediq-dashboard .mm-request-box button{font-family:inherit;font-size:14px;border-radius:8px}
#mediq-dashboard .mm-request-box .mm-actions .mq-assets-btn{min-height:38px;padding:9px 16px}
@media(max-width:650px){#mediq-dashboard .mm-stage-grid{grid-template-columns:1fr 1fr}}
/* MEDIQ PRESENTATION: focused and polished request editor */
.mm-request-modal{z-index:1000100!important;padding:18px!important}
.mm-request-box{width:min(980px,96vw)!important;max-height:90vh!important;display:flex!important;flex-direction:column!important;padding:0!important;overflow:hidden!important;border:1px solid #c9dfed!important;border-radius:17px!important;direction:rtl!important;text-align:right!important}
.mm-request-box>header{padding:19px 24px!important;position:sticky;top:0;background:#fff;z-index:3;flex-shrink:0;box-shadow:0 3px 12px #184d6409}
.mm-request-box>header h3{font-size:18px!important;margin:0!important}
.mm-request-body{padding:6px 24px 24px;overflow-y:auto;flex:1;min-height:0;scrollbar-width:thin}
.mm-request-box .mm-form-section{padding:19px!important;margin:16px 0!important;border-radius:12px!important;background:#fff!important}
.mm-request-box .mm-form-section h4{font-size:15px!important;margin:0 0 18px!important}
.mm-request-box .mm-request-grid{gap:17px!important;align-items:start}
.mm-request-box .mm-request-grid label{display:flex!important;flex-direction:column!important;gap:5px;font-size:13px!important;color:#245574!important}
.mm-request-box .mm-request-grid input,.mm-request-box .mm-request-grid select,.mm-request-box .mm-request-grid textarea{min-height:43px!important;font-size:13px!important;margin:0!important;text-align:right!important;direction:rtl!important}
.mm-request-box .mm-request-grid textarea{min-height:100px!important;line-height:1.8!important}
.mm-request-box .mm-actions button,.mm-request-box #mmSendComment{border:1px solid #328fbe!important;border-radius:9px!important;min-height:40px!important;padding:9px 16px!important;background:#3997c8!important;color:white!important;font-weight:700!important;cursor:pointer!important}
.mm-request-box .mm-actions button:disabled{opacity:.55!important;cursor:wait!important}
.mm-request-box #mmSaveIssueResult,.mm-request-box #mmCommentResult{font-size:12px!important;line-height:1.9!important;margin:10px 0 0!important}
.mm-request-box .mm-user-menu{position:absolute;top:calc(100% - 1px);left:0;right:0;box-shadow:0 8px 24px #12345622;border-radius:9px;z-index:10}
.mm-request-box .mm-request-grid label{position:relative}
.mm-request-box .mm-documents{display:flex;flex-wrap:wrap;gap:8px}
.mm-request-box .mm-doc-pill{width:auto!important;margin:0!important}
@media(max-width:690px){.mm-request-modal{padding:6px!important}.mm-request-box{max-height:98vh!important;width:100%!important}.mm-request-body{padding:4px 12px 16px}.mm-request-box .mm-request-grid{grid-template-columns:1fr!important}.mm-request-box>header{padding:15px!important}}
</style>
<style>
/* MediQ V38.22 — Activity detail panel refinements */
#mediq-dashboard #mmContent.mm-with-fixed-side{
display:grid!important;grid-template-columns:minmax(0,1fr) minmax(285px,310px)!important;
column-gap:18px!important;row-gap:12px!important;align-items:start!important;
min-width:0!important;overflow:visible!important;
}
#mediq-dashboard #mmContent.mm-with-fixed-side>.v-stats,
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmActivitiesHeading{
grid-column:1/-1!important;min-width:0!important;
}
#mediq-dashboard #mmContent.mm-with-fixed-side>.v-stats{grid-row:1!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmActivitiesHeading{grid-row:2!important;margin:8px 0 0!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmPermanentIssue{
grid-column:2!important;grid-row:3/span 2!important;float:none!important;
position:sticky!important;top:12px!important;left:auto!important;right:auto!important;bottom:auto!important;
width:100%!important;min-width:0!important;max-width:100%!important;
max-height:calc(100vh - 28px)!important;margin:0!important;padding:0 12px 16px!important;
overflow-x:hidden!important;overflow-y:auto!important;
background:linear-gradient(180deg,#f2f9fe 0,#fff 160px)!important;
border:1px solid #b8d8ed!important;border-radius:17px!important;
box-shadow:0 9px 30px rgba(25,83,123,.12)!important;
color:#174866!important;font-size:13px!important;line-height:1.85!important;
box-sizing:border-box!important;isolation:isolate;
}
#mediq-dashboard #mmContent.mm-with-fixed-side>.mm-actionbar{
grid-column:1!important;grid-row:3!important;margin:0!important;min-width:0!important;
}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmRows{
grid-column:1!important;grid-row:4!important;margin:0!important;min-width:0!important;
width:100%!important;overflow-x:auto!important;
}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmRows .mq-tbl{width:100%!important;max-width:100%!important}
#mediq-dashboard #mmPermanentIssue *,#mediq-dashboard #mmPermanentIssue *::before,#mediq-dashboard #mmPermanentIssue *::after{box-sizing:border-box}
#mediq-dashboard #mmPermanentIssue>header{
position:sticky;top:0;z-index:5;margin:0 -12px 15px!important;padding:14px 14px!important;
background:linear-gradient(115deg,#e1f1fb,#f3faff)!important;border-bottom:1px solid #c5e1f1!important;
display:flex;gap:10px;align-items:center;justify-content:space-between;
}
#mediq-dashboard #mmPermanentIssue>header strong{font-size:14px!important;font-weight:850!important;color:#075b8b!important;overflow-wrap:anywhere}
#mediq-dashboard #mmPermanentIssue>header button{flex:0 0 auto;width:30px;height:30px;padding:0!important;font-size:21px!important;background:#fff!important;color:#326b91!important;border:1px solid #cfe2ee!important}
#mediq-dashboard #mmPermanentIssue>h3{font-size:14px!important;line-height:1.9!important;font-weight:850!important;color:#174a6d!important;margin:4px 2px 12px!important;overflow-wrap:anywhere;word-break:normal}
#mediq-dashboard #mmPermanentIssue .mm-detail-card{
margin:12px 0!important;padding:14px 12px!important;background:#fff!important;
border:1px solid #d1e5f3!important;border-right:3px solid #4ca5d1!important;border-radius:12px!important;
box-shadow:0 4px 12px rgba(21,84,124,.045)!important;min-width:0!important;
}
#mediq-dashboard #mmPermanentIssue .mm-detail-card h4{font-size:14px!important;font-weight:850!important;color:#0b628f!important;margin:0 0 12px!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-line{align-items:flex-start!important;gap:9px!important;padding:11px 0!important;font-size:12.5px!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-line span{color:#687f92!important;flex:0 0 82px!important;font-weight:650!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-line strong{color:#163e5a!important;text-align:left!important;flex:1;min-width:0;font-size:13px!important;font-weight:850!important;overflow-wrap:anywhere}
#mediq-dashboard #mmPermanentIssue .mm-detail-line:first-child strong{color:#087bb0!important}
#mediq-dashboard #mmPermanentIssue input,#mediq-dashboard #mmPermanentIssue textarea{
width:100%!important;min-width:0!important;max-width:100%!important;
border:1px solid #c4dff0!important;background:#fbfdff!important;border-radius:9px!important;
padding:10px!important;direction:rtl!important;text-align:right!important;
font-size:13px!important;color:#204b67!important;
}
#mediq-dashboard #mmPermanentIssue label{font-size:12px!important;font-weight:750!important;color:#2a6488!important}
#mediq-dashboard #mmPermanentIssue button.mq-assets-btn{max-width:100%!important;white-space:normal!important;line-height:1.6!important;font-weight:800!important;border-radius:9px!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage{font-size:12.5px!important;font-weight:700!important;min-width:0!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage.current{font-weight:900!important;color:#0a77ae!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-hint{font-size:11px!important;line-height:1.8!important;color:#7891a3!important}
#mediq-dashboard #mmPermanentIssue .mm-user-menu,#mediq-dashboard #mmPermanentIssue .mm-cal{max-width:min(100%,300px)!important}
@media(max-width:1000px){
#mediq-dashboard #mmContent.mm-with-fixed-side{grid-template-columns:minmax(0,1fr)!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmPermanentIssue{grid-column:1!important;grid-row:3!important;position:relative!important;top:0!important;max-height:470px!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>.mm-actionbar{grid-column:1!important;grid-row:4!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmRows{grid-column:1!important;grid-row:5!important}
}
</style>
<style>
/* MEDIQ V47: action dialog refresh – presentation only */
.mm-request-box .mq-v47-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.mm-request-box .mq-v47-product-image{display:block;width:min(240px,100%);height:130px;object-fit:contain;background:#f6fbfe;border:1px solid #d8e8f2;border-radius:12px;margin:8px auto}
.mm-request-box .mq-v47-priority{display:flex;align-items:center;gap:8px;min-height:43px;border:1px solid #cfe3f0;border-radius:10px;padding:8px 13px;background:#f3f9fe;color:#245574;font-size:13px}
.mm-request-box .mq-v47-priority b{font-size:19px}
.mm-request-box input[readonly],.mm-request-box textarea[readonly]{background:#f4f8fb!important;color:#315873!important;cursor:default}
.mm-request-box .mq-v47-status{border:1px solid #d0e4f1;border-radius:10px;padding:9px 13px;display:flex;flex-direction:column;gap:5px;background:#f5faff;font-size:12px}
.mm-request-box .mq-v47-status span{color:#7290a5}.mm-request-box .mq-v47-status strong{color:#176b9b}
.mm-request-box .mq-v47-device{grid-column:1/-1;margin:3px 0!important;padding:12px!important}
.mm-request-box .mq-v47-help{color:#7290a5;font-size:12px;margin:0 0 12px}
.mm-request-box .mq-v47-actions-container{display:flex;flex-direction:column;gap:10px}
.mm-request-box .mq-v47-action .mm-transition-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px}
.mm-request-box .mq-v47-action .mm-transition-tile{min-height:62px;text-align:center;font-size:14px;border:1px solid #add4e9!important;border-radius:13px!important;transition:transform .2s,box-shadow .2s,background .2s!important}
.mm-request-box .mq-v47-action .mm-transition-tile:hover{transform:translateY(-4px);background:#e6f5ff!important;box-shadow:0 12px 24px #1b82b626!important}
.mm-request-box .mq-v47-action .mm-transition-tile.chosen{background:#d6efff!important;box-shadow:0 0 0 2px #b8e2fa!important}
.mm-request-box .mq-v47-self{border:0;background:transparent;color:#1682b7;text-decoration:underline;text-align:right;align-self:flex-start;cursor:pointer;font:inherit}
.mm-request-box .mq-v47-notes{display:flex;flex-direction:column;gap:10px}
.mm-request-box .mq-v47-notes #mmCommentList{order:5}
.mm-request-box .mq-v47-notes h5{order:4;margin:10px 0 0;color:#176b9b}
.mm-request-box .mq-v47-notes .mm-comment-actions{order:2}
.mm-request-box .mq-v47-notes #mmCommentResult{order:3}
.mm-request-box .mq-v47-notes>label{order:1}
.mm-request-box .mq-v47-notes>h4{order:0}
@media(max-width:650px){.mm-request-box .mq-v47-action .mm-transition-tiles{grid-template-columns:1fr 1fr}}
</style>
<style>
/* V47: creation next to refresh, appearance only */
#mediq-dashboard #mufRoot .mq-v47-newfault{background:#dc464d!important;color:#fff!important;border:1px solid #cf3f49!important;border-radius:9px!important;cursor:pointer!important;font-weight:850!important;padding:11px 16px!important;transition:transform .18s,box-shadow .18s!important}
#mediq-dashboard #mufRoot .mq-v47-newfault:hover{transform:translateY(-4px) rotate(-1deg)!important;box-shadow:0 12px 24px #d73d4a44!important;background:#bd303b!important}
#mediq-dashboard #mufRoot .muf-heading{gap:12px;flex-wrap:wrap}
</style>
<style id="mediq-v49-precise-overrides">
/* V49 — refinement on the user's exact V48 source; no replacement of core routing */
.mm-request-box{width:min(1000px,97vw)!important;max-height:94vh!important}
.mm-request-box>header{padding:13px 20px!important}
.mm-request-body{padding:5px 16px 14px!important}
.mm-request-box .mm-form-section{margin:9px 0!important;padding:13px!important}
.mm-request-box .mm-form-section h4{margin:0 0 10px!important}
.mm-request-box .mm-request-grid{gap:10px!important}
.mm-request-box .mm-request-grid textarea{min-height:68px!important;max-height:130px!important}
.mm-request-box .mm-request-grid input{min-height:39px!important}
.mm-request-box .mm-compact-attachments{grid-column:1;min-width:0;margin:0!important;padding:0!important}
.mm-request-box .mq-v47-device{padding:9px!important;margin:0!important}
.mm-request-box .mq-v47-product-image{height:110px!important;width:min(170px,100%)!important}
.mm-request-box .mq-v47-action{border-top:3px solid #258fc5!important;background:linear-gradient(145deg,#fff,#f7fbfe)!important}
.mm-request-box .mq-v49-flow{display:flex;align-items:center;flex-wrap:wrap;gap:9px;padding:9px 12px;border:1px solid #d7e9f4;background:#eef8fe;border-radius:10px;color:#2a607f;font-size:12px;margin-bottom:10px}
.mm-request-box .mq-v49-now{display:inline-flex;align-items:center;gap:7px}
.mm-request-box .mq-v49-now i{width:9px;height:9px;background:#1397cb;border-radius:50%;box-shadow:0 0 0 3px #c7ecfa;animation:mqV49Pulse 1.6s ease-in-out infinite}
.mm-request-box .mq-v49-flow-arrow{font-size:21px;color:#3794be}
.mm-request-box .mq-v49-next{font-weight:800;color:#166f9e}
.mm-request-box .mq-v47-action .mm-transition-tiles{margin:8px 0!important;gap:9px!important}
.mm-request-box .mq-v47-action .mm-transition-tile{min-height:51px!important;border:1px solid #a6d3ec!important;background:#fff!important;box-shadow:0 3px 10px #246e9612!important;position:relative}
.mm-request-box .mq-v47-action .mm-transition-tile:not(.chosen):hover{transform:translateY(-4px) scale(1.015)!important;background:#e6f6ff!important;box-shadow:0 11px 20px #1b82b62e!important}
.mm-request-box .mq-v47-action .mm-transition-tile.chosen{background:#def2ff!important;border-color:#158ac3!important}
.mm-request-box .mq-v47-help{margin-bottom:6px!important}
.mm-request-box .mq-v47-notes{gap:8px!important}
.mm-request-box .mq-v47-notes #mmCommentList{max-height:220px;overflow:auto;border-top:1px solid #e5edf3;margin-top:6px}
.mm-request-box .mm-documents{max-height:110px;overflow:auto}
#mediq-dashboard #mufRoot .muf-heading{display:flex!important;gap:10px!important;align-items:center!important;flex-wrap:wrap!important}
#mediq-dashboard #mufRoot .muf-kpi{transition:transform .18s,box-shadow .18s!important;cursor:pointer!important}
#mediq-dashboard #mufRoot .muf-kpi:hover{transform:translateY(-4px)!important;box-shadow:0 12px 28px #276b9b24!important}
#mediq-dashboard #mufRoot .muf-kpi.selected{box-shadow:0 0 0 2px #59b0dd inset,0 7px 20px #276b9b14!important}
#mediq-dashboard #mufRoot .mq-v47-newfault{background:#dc414e!important;color:#fff!important}
#mediq-dashboard #mufRoot .mq-v47-newfault:hover{transform:translateY(-4px) rotate(-1deg)!important;box-shadow:0 12px 26px #b9273d55!important}
#mediq-dashboard #mufRoot .muf-urgency-icon{display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:28px;border-radius:9px;background:#e8f3fc;font-size:18px;vertical-align:middle}
#mediq-dashboard #mufRoot .muf-urgency-icon[data-level=high]{background:#fff3e2}
#mediq-dashboard #mufRoot .muf-urgency-icon[data-level=critical]{background:#ffedf0}
#mediq-dashboard .mm-handover-card{font-family:inherit!important}
@keyframes mqV49Pulse{50%{box-shadow:0 0 0 9px #1397cb00;transform:scale(1.15)}}
@media(max-width:690px){.mm-request-box .mm-request-grid{grid-template-columns:1fr!important}.mm-request-box .mm-compact-attachments{grid-column:1!important}.mm-request-box .mq-v49-flow-arrow{display:none}}
@media(prefers-reduced-motion:reduce){.mm-request-box .mq-v49-now i{animation:none}}
</style>
<div id="mediq-dashboard" dir="rtl">
<style>
/* MediQ V38.6 — spacing, compact forms and integrated combobox */
#mediq-dashboard #mmContent .v-fields{display:grid!important;grid-template-columns:repeat(5,minmax(0,1fr))!important;gap:12px!important;align-items:end}
#mediq-dashboard #mmContent .v-fields>label{min-width:0;text-align:right;direction:rtl}
#mediq-dashboard #mmContent .v-fields input,#mediq-dashboard #mmContent .v-fields select{width:100%;min-width:0;box-sizing:border-box}
#mediq-dashboard #mmContent .v-fields textarea{min-height:42px}
#mediq-dashboard #mmContent .mm-search-spaced{margin:22px 0 15px}
#mediq-dashboard #mmContent #mmEquipSearch{margin:22px 0 15px!important}
#mediq-dashboard .mm-combo{position:relative;min-width:0}
#mediq-dashboard .mm-combo-menu{position:absolute;z-index:1001;top:calc(100% + 4px);right:0;left:0;max-height:240px;overflow:auto;background:#fff;border:1px solid #cfe2ed;border-radius:9px;box-shadow:0 12px 26px #143a531f;padding:5px}
#mediq-dashboard .mm-combo-menu[hidden]{display:none!important}
#mediq-dashboard .mm-combo-menu button{display:block;text-align:right;direction:rtl;width:100%;background:#fff;color:#23536e;border:0;border-radius:6px;padding:9px;cursor:pointer;font:inherit}
#mediq-dashboard .mm-combo-menu button:hover{background:#eaf5fb}
#mediq-dashboard .mm-combo-empty{display:block;padding:10px;color:#668197}
#mediq-dashboard .mm-attachment-label small{display:block;font-size:10px;color:#69849a;margin-top:4px}
#mediq-dashboard .mm-attachment-label input[type=file]{font-size:11px;direction:rtl;border:1px dashed #bcd8e8;border-radius:8px;padding:6px;background:#f8fcfe}
@media(max-width:1250px){#mediq-dashboard #mmContent .v-fields{grid-template-columns:repeat(3,minmax(0,1fr))!important}}
@media(max-width:760px){#mediq-dashboard #mmContent .v-fields{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media(max-width:480px){#mediq-dashboard #mmContent .v-fields{grid-template-columns:1fr!important}}
/* MEDIQ V38.8 - maintenance refinements */
#mediq-dashboard #mmContent .mq-tbl th,#mediq-dashboard #mmContent .mq-tbl td{text-align:center;vertical-align:middle}
#mediq-dashboard #mmContent .mm-plan-form .mq-preview{margin-top:10px!important}
#mediq-dashboard #mmContent .mq-preview{min-height:unset;box-shadow:none}
#mediq-dashboard #mmContent .v-fields>label{min-width:0;display:flex;flex-direction:column;gap:7px;text-align:right;font-size:13px;font-weight:650}
#mediq-dashboard #mmContent .v-fields input,#mediq-dashboard #mmContent .v-fields select,#mediq-dashboard #mmContent .v-fields textarea{height:42px;min-height:42px;font-size:13px;border-radius:10px;background:#fff;width:100%;box-sizing:border-box}
#mediq-dashboard #mmContent .v-fields textarea{height:42px;resize:vertical;min-height:42px;padding:11px}
#mediq-dashboard #mmContent .v-fields>label:focus-within{color:#2476a3}
#mediq-dashboard #mmContent .v-fields input:focus,#mediq-dashboard #mmContent .v-fields select:focus,#mediq-dashboard #mmContent .v-fields textarea:focus{outline:2px solid #b8e3fa;outline-offset:1px;border-color:#409cc7}
#mediq-dashboard #mmContent .mm-combo{position:relative;width:100%;min-width:0}
#mediq-dashboard #mmContent .mm-combo-menu{position:absolute;top:calc(100% + 4px);right:0;left:0;max-height:260px;overflow:auto;background:#fff;box-shadow:0 14px 28px rgba(20,62,92,.16);border:1px solid #c7dfe9;border-radius:10px;z-index:600;padding:5px}
#mediq-dashboard #mmContent .mm-combo-menu[hidden]{display:none}
#mediq-dashboard #mmContent .mm-combo-menu button{display:block;width:100%;border:0;background:transparent;color:#194b6a;text-align:right;padding:9px 10px;white-space:normal;cursor:pointer;font-size:12px;border-radius:7px}
#mediq-dashboard #mmContent .mm-combo-menu button:hover{background:#eaf6fc}
#mediq-dashboard #mmContent .mm-plan-form .v-fields{grid-template-columns:repeat(6,minmax(0,1fr))!important}
#mediq-dashboard .mm-issue-drawer{width:min(510px,95vw)}
#mediq-dashboard .mm-issue-drawer .mm-issue-fields{border:1px solid #d7e7f0;border-radius:12px;padding:16px;background:#fff}
#mediq-dashboard .mm-issue-drawer .mm-issue-fields>div{display:flex;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid #e7eff4}
#mediq-dashboard .mm-issue-drawer .mm-issue-fields>div:last-child{border-bottom:0}
#mediq-dashboard .mm-issue-drawer .mm-issue-fields span{color:#608099}
#mediq-dashboard .mm-issue-drawer .mm-issue-fields strong{color:#154d71;text-align:left}
#mediq-dashboard .mm-issue-drawer .mm-issue-actions{margin-top:16px}
#mediq-dashboard #mmContent .mm-attachment-label{justify-content:flex-start}
@media(max-width:1250px){#mediq-dashboard #mmContent .mm-plan-form .v-fields{grid-template-columns:repeat(3,minmax(0,1fr))!important}}
@media(max-width:670px){#mediq-dashboard #mmContent .mm-plan-form .v-fields{grid-template-columns:1fr!important}}
#mediq-dashboard .mm-plan-form .v-fields{grid-template-columns:repeat(7,minmax(0,1fr))}
#mediq-dashboard #mmContent .mq-tbl th,#mediq-dashboard #mmContent .mq-tbl td{text-align:center;vertical-align:middle}
#mediq-dashboard #mmContent .mq-tbl tbody tr:has([data-mm-issue]):hover{background:#f0f8fd}
#mediq-dashboard .mm-attachment-label input[type=file]{width:100%}
@media(max-width:1150px){#mediq-dashboard .mm-plan-form .v-fields{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:650px){#mediq-dashboard .mm-plan-form .v-fields{grid-template-columns:1fr}}
#mediq-dashboard .mm-edit-identity{padding:12px 16px;margin:10px 0;border:1px solid #8cc6e6;background:#eef8fd;border-radius:10px;font-weight:800;color:#175c81;text-align:right;}
#mediq-dashboard .mm-edit-identity[hidden]{display:none!important}
#mediq-dashboard .mm-plan-form .v-fields{grid-template-columns:repeat(4,minmax(0,1fr));}
@media(max-width:950px){#mediq-dashboard .mm-plan-form .v-fields{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media(max-width:560px){#mediq-dashboard .mm-plan-form .v-fields{grid-template-columns:1fr;}}
/* MediQ V38.12: aligned forms and full row edit selection */
#mediq-dashboard .mm-plan-row-selected, #mediq-dashboard .mm-plan-row-selected td{background:#e1f3fe!important;color:#14587e!important;}
#mediq-dashboard .mm-plan-row-selected td:first-child{box-shadow:inset -4px 0 0 #318fc3;}
#mediq-dashboard .mm-plan-row-selected td{border-top:1px solid #80c2e9!important;border-bottom:1px solid #80c2e9!important;}
#mediq-dashboard .mm-main, #mediq-dashboard .mm-main form, #mediq-dashboard #mmContent, #mediq-dashboard #mmContent input, #mediq-dashboard #mmContent textarea, #mediq-dashboard #mmContent select, #mediq-dashboard #mmContent table{direction:rtl;text-align:right;}
#mediq-dashboard #mmContent .mq-tbl th,#mediq-dashboard #mmContent .mq-tbl td{text-align:right;}
#mediq-dashboard .mm-main,#mediq-dashboard .mm-main input,#mediq-dashboard .mm-main select,#mediq-dashboard .mm-main button,#mediq-dashboard .mm-main textarea{font-size:14px;direction:rtl}
#mediq-dashboard .mm-main th,#mediq-dashboard .mm-main td{text-align:right;vertical-align:middle}
#mediq-dashboard .mm-issue-drawer{font-size:14px;direction:rtl}
#mediq-dashboard .mm-report-form{border:1px solid #d5e6f0;border-radius:12px;padding:14px;margin-top:14px}
#mediq-dashboard .mm-report-form h4{margin:0 0 12px;font-size:16px}
#mediq-dashboard .mm-report-form label{display:block;margin:8px 0}
#mediq-dashboard .mm-report-form input,#mediq-dashboard .mm-report-form textarea{display:block;width:100%;box-sizing:border-box;border:1px solid #cde0ed;border-radius:8px;padding:10px;font:inherit;direction:rtl}
#mediq-dashboard .mm-report-form p{font-size:12px;color:#627e91}
#mediq-dashboard .mm-permanent-panel{position:fixed;left:0;top:104px;bottom:0;width:min(395px,35vw);z-index:8000;overflow-y:auto;background:#fff;border-right:1px solid #cee0ee;box-shadow:8px 0 22px #173b5517;padding:18px;direction:rtl;text-align:right;color:#194965;font-size:13px}
#mediq-dashboard .mm-permanent-panel[hidden]{display:none}
#mediq-dashboard .mm-permanent-panel header,.mm-request-box header{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #d9e8f2;padding-bottom:12px}
#mediq-dashboard .mm-permanent-panel header button,.mm-request-box header button{border:0;border-radius:8px;background:#edf6fb;font-size:23px;cursor:pointer;padding:3px 11px}
#mediq-dashboard .mm-detail-card{border:1px solid #d1e6f3;border-radius:12px;padding:13px;margin:11px 0;background:#fff}
#mediq-dashboard .mm-detail-card label,.mm-request-box label{display:block;font-weight:650;margin:10px 0;position:relative}
#mediq-dashboard .mm-detail-card input,#mediq-dashboard .mm-detail-card textarea,.mm-request-box input,.mm-request-box textarea{display:block;width:100%;box-sizing:border-box;border:1px solid #cfe3f0;border-radius:8px;padding:10px;font:inherit;margin-top:5px}
#mediq-dashboard .mm-detail-line{display:flex;justify-content:space-between;gap:14px;padding:9px 0;border-bottom:1px solid #e4edf3}
#mediq-dashboard .mm-detail-line span{color:#668399}#mediq-dashboard .mm-detail-line strong{overflow-wrap:anywhere}
#mediq-dashboard .mm-user-menu{max-height:180px;overflow:auto;background:white;border:1px solid #c9dfea;position:relative;z-index:5}.mm-user-menu button{display:block;width:100%;padding:8px;text-align:right;background:#fff;border:0;cursor:pointer}.mm-user-menu button:hover{background:#eaf4fb}
.mm-request-modal{position:fixed;inset:0;z-index:999999;display:flex;align-items:center;justify-content:center}.mm-request-backdrop{position:absolute;inset:0;background:#183c5d80}.mm-request-box{position:relative;width:min(850px,94vw);max-height:90vh;overflow:auto;background:white;border-radius:16px;padding:24px;box-sizing:border-box;box-shadow:0 14px 65px #1237}.mm-request-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.mm-request-grid label:last-child{grid-column:1/-1}.mm-comment{border-bottom:1px solid #dae7ef;padding:10px}
@media(max-width:800px){#mediq-dashboard .mm-permanent-panel{width:min(92vw,410px);top:0}.mm-request-grid{grid-template-columns:1fr}}
/* V38.15 - fixed dashboard column, compact modal and floating receipt calendar */
#mediq-dashboard #mmContent.mm-with-fixed-side{display:grid;grid-template-columns:minmax(0,1fr) 315px;gap:14px;align-items:start}
#mediq-dashboard #mmContent.mm-with-fixed-side>.mm-permanent-panel{grid-column:2;grid-row:1/20;position:sticky;top:16px;left:auto;bottom:auto;width:auto;max-height:calc(100vh - 40px);z-index:2;box-shadow:none;border:1px solid #cee0ee;border-radius:14px;padding:14px;overflow:auto}
#mediq-dashboard #mmContent.mm-with-fixed-side>:not(.mm-permanent-panel){grid-column:1;min-width:0}
#mediq-dashboard .mm-receipt-date{position:relative}
#mediq-dashboard .mm-receipt-date>.mm-cal{position:absolute!important;top:calc(100% + 5px)!important;right:0;left:auto!important;z-index:300;max-width:310px;width:310px;box-sizing:border-box}
#mediq-dashboard .mm-receipt-date>.mm-cal[hidden]{display:none!important}
.mm-request-box{width:min(850px,95vw);max-height:86vh;padding:20px 24px;font-size:14px;direction:rtl;text-align:right}
.mm-request-box h3,.mm-request-box h4{margin:0 0 14px;color:#19577e}
.mm-form-section{border:1px solid #d4e5f0;background:#fff;border-radius:12px;padding:16px;margin:15px 0}
.mm-request-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.mm-request-grid .mm-wide{grid-column:1/-1}
.mm-request-box label{margin:0;font-weight:600}
.mm-request-box input,.mm-request-box select,.mm-request-box textarea{font:inherit;width:100%;border:1px solid #c9dfed;border-radius:8px;padding:10px;box-sizing:border-box;background:white;min-height:42px;margin-top:6px}
.mm-readonly{background:#edf5fa;border-radius:8px;padding:12px;margin-top:6px}
.mm-actions{display:flex;gap:9px;justify-content:flex-start;margin-top:12px}
.mm-asset-button,.mm-related-ticket,.mm-doc-pill{display:block;text-align:right;background:#eff7fc;color:#135a83;border:1px solid #c7e2f2;padding:10px;border-radius:9px;margin:5px 0;cursor:pointer;width:100%;font:inherit}
.mm-hint{color:#6a8190}.mm-doc-pill{display:inline-block;width:auto;text-decoration:none}
@media(max-width:900px){#mediq-dashboard #mmContent.mm-with-fixed-side{grid-template-columns:minmax(0,1fr)}#mediq-dashboard #mmContent.mm-with-fixed-side>.mm-permanent-panel{position:relative;grid-row:auto;grid-column:1;top:auto;max-height:none}#mediq-dashboard #mmContent.mm-with-fixed-side>:not(.mm-permanent-panel){grid-column:1}.mm-request-grid{grid-template-columns:1fr}}
</style>
<style>
#mediq-dashboard .mm-nav{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}
#mediq-dashboard #mmContent{min-height:350px;padding:20px}
#mediq-dashboard #mmContent h3{font-size:14px;margin:18px 0 12px;color:#20577b}
#mediq-dashboard #mmContent .v-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:16px 0}
#mediq-dashboard #mmContent .v-fields label{display:flex;flex-direction:column;gap:6px;font-size:11px;font-weight:700}
#mediq-dashboard #mmContent .v-fields input,#mediq-dashboard #mmContent .v-fields select,#mediq-dashboard #mmContent .v-fields textarea{padding:10px;border:1px solid #d5e7f2;border-radius:8px;background:white;min-width:0;width:100%;font:inherit}
#mediq-dashboard #mmContent .mq-tbl-wrap{overflow:auto;max-height:490px}
@media(max-width:850px){#mediq-dashboard #mmContent .v-fields{grid-template-columns:1fr}}
/* Maintenance V37.4 */
#mediq-dashboard .mm-date-line{display:flex;gap:8px;align-items:center}
#mediq-dashboard .mm-date-line input{flex:1;min-width:0;cursor:pointer}
#mediq-dashboard .mm-cal{display:block;max-width:340px;padding:12px;background:#fff;border:1px solid #cadfec;border-radius:12px;margin-top:8px;box-shadow:0 12px 30px #17456520}
#mediq-dashboard .mm-cal[hidden]{display:none!important}
#mediq-dashboard .mm-cal-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}
#mediq-dashboard .mm-cal-head button{border:1px solid #cde1ed;background:#f1f7fc;border-radius:7px;padding:6px;color:#20577b;cursor:pointer}
#mediq-dashboard .mm-cal-days{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px;text-align:center}
#mediq-dashboard .mm-cal-days b{font-size:11px;color:#507890}
#mediq-dashboard .mm-cal-days button{border:0;border-radius:7px;padding:6px 0;background:#eef6fb;color:#174565;cursor:pointer}
#mediq-dashboard .mm-cal-days button:hover{background:#3997c8;color:#fff}
#mediq-dashboard .mm-chart-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:15px;margin:15px 0}
#mediq-dashboard .mm-chart-card{border:1px solid #d5e7f2;border-radius:14px;padding:20px;background:#fbfdff;display:flex;flex-direction:column;align-items:center;gap:15px}
#mediq-dashboard .mm-donut{width:176px;height:176px;border-radius:50%;display:grid;place-items:center}
#mediq-dashboard .mm-donut>div{width:120px;height:120px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;flex-direction:column;font-size:25px;font-weight:800;color:#20577b}
#mediq-dashboard .mm-donut small{font-size:11px;color:#7890a2}
#mediq-dashboard .mm-chart-legend{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
#mediq-dashboard .mm-chart-legend span{display:flex;gap:5px;align-items:center;font-size:11px}
#mediq-dashboard .mm-chart-legend i{width:9px;height:9px;border-radius:50%;display:inline-block}
/* V37.6: Floating Jalali picker and maintenance hierarchy. */
#mediq-dashboard .mm-cal{position:fixed!important;z-index:2147482000!important;max-width:none!important;margin:0!important;box-shadow:0 18px 52px rgba(20,56,81,.23)!important;direction:rtl;overflow-y:auto;max-height:calc(100vh - 16px)}
#mediq-dashboard .mm-cal[hidden]{display:none!important}
#mediq-dashboard .mm-date-line input{cursor:pointer!important;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%234c7793' stroke-width='1.7'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cpath d='M7 3v4m10-4v4M3 10h18'/%3E%3C/svg%3E") no-repeat 12px center!important;padding-left:38px!important}
#mediq-dashboard .mm-category-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin:14px 0}
#mediq-dashboard .mm-category-card{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:11px;text-align:right;min-height:175px;padding:22px;border:1px solid #d2e4ef;border-radius:16px;background:#fff;color:#20577b;cursor:pointer;font-family:inherit;transition:transform .15s,box-shadow .15s}
#mediq-dashboard .mm-category-card:hover{transform:translateY(-2px);box-shadow:0 14px 28px rgba(32,87,123,.10);border-color:#74b7d7}
#mediq-dashboard .mm-category-icon{display:grid;place-items:center;width:52px;height:52px;background:#edf6fb;border-radius:12px;color:#467a9a}
#mediq-dashboard .mm-category-icon svg{width:30px;height:30px}
#mediq-dashboard .mm-category-card strong{font-size:14px}
#mediq-dashboard .mm-category-card>span:not(.mm-category-icon){font-size:11px;color:#788e9c;line-height:1.8}
#mediq-dashboard .mm-category-card i{position:absolute;left:16px;bottom:15px;font-style:normal;font-size:18px;color:#4d96b8}
#mediq-dashboard .mm-subgrid{grid-template-columns:repeat(3,minmax(0,1fr))}
#mediq-dashboard .mm-subgrid .mm-category-card{min-height:142px}
#mediq-dashboard .mm-breadcrumb-nav{align-items:center}.mm-nav-separator{color:#8ca1b0;font-size:16px}
#mediq-dashboard .mm-category-intro{font-size:12px;color:#6c8695}
@media(max-width:900px){#mediq-dashboard .mm-category-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:580px){#mediq-dashboard .mm-category-grid{grid-template-columns:1fr}}
/* MEDIQ V38 - UI only, existing palette */
#mediq-dashboard .mm-category-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;margin:20px 0}
#mediq-dashboard .mm-category-card{min-height:178px;font-size:15px;box-shadow:0 6px 20px rgba(29,82,115,.06)}
#mediq-dashboard .mm-category-card strong{font-size:17px}
#mediq-dashboard #mmContent,#mediq-dashboard #mmContent h3{font-size:15px}
#mediq-dashboard #mmContent .v-fields label{font-size:13px}
#mediq-dashboard #mmContent input,#mediq-dashboard #mmContent select,#mediq-dashboard #mmContent textarea{font-size:14px}
#mediq-dashboard .mm-actionbar{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0;align-items:center}
#mediq-dashboard .mm-actionbar input,#mediq-dashboard .mm-actionbar select{border:1px solid #cfe2ed;border-radius:9px;padding:11px;min-width:145px;background:white;color:#234b66;max-width:100%}
#mediq-dashboard .mm-two-pane{display:grid;grid-template-columns:minmax(0,1fr) 240px;gap:16px;align-items:start}
#mediq-dashboard .mm-sidebar{grid-column:2;grid-row:1;border:1px solid #cfe2ed;background:#fff;border-radius:13px;padding:15px;position:sticky;top:12px}
#mediq-dashboard .mm-sidebar button{display:block;width:100%;text-align:right;border:0;background:transparent;color:#225b7f;padding:12px 8px;cursor:pointer;border-radius:8px;font:inherit;font-weight:700}
#mediq-dashboard .mm-sidebar button:hover{background:#eff7fc}
#mediq-dashboard .mm-main{grid-column:1;grid-row:1;min-width:0}
#mediq-dashboard .mm-plan-form .v-fields{grid-template-columns:repeat(4,minmax(0,1fr))!important}
#mediq-dashboard .mm-priority-high{color:#b54831;font-weight:800}
#mediq-dashboard .mm-priority-normal{color:#1f7092}
#mediq-dashboard .mm-stats-block{margin-bottom:18px}
#mediq-dashboard .mm-table-panel{max-width:100%;overflow-x:auto}
@media(max-width:1050px){#mediq-dashboard .mm-plan-form .v-fields{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media(max-width:800px){#mediq-dashboard .mm-two-pane{display:block}#mediq-dashboard .mm-sidebar{position:static;margin-bottom:12px}#mediq-dashboard .mm-sidebar button{display:inline-block;width:auto}#mediq-dashboard .mm-category-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:550px){#mediq-dashboard .mm-category-grid{grid-template-columns:1fr}#mediq-dashboard .mm-plan-form .v-fields{grid-template-columns:1fr!important}#mediq-dashboard .mm-actionbar input,#mediq-dashboard .mm-actionbar select{width:100%}}
/* V38.4 - Five actual maintenance landing cards */
#mediq-dashboard .mm-card-home{direction:rtl;text-align:right;padding:10px 2px 24px}
#mediq-dashboard .mm-card-home h2{font-size:19px;font-weight:800;color:#225b7f;margin:5px 0 20px}
#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}
#mediq-dashboard .mm-card-home .mm-category-card{align-items:flex-start;text-align:right;min-height:188px;border-radius:17px}
#mediq-dashboard .mm-crumb{background:transparent;border:0;color:#225b7f;font:inherit;cursor:pointer;padding:5px 2px}
#mediq-dashboard .mm-crumb:hover{text-decoration:underline}
@media(max-width:900px){#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:560px){#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:1fr}}
/* MEDIQ V38.3 - top-level maintenance navigation */
#mediq-dashboard .mm-route-nav{display:flex;direction:rtl;align-items:center;justify-content:flex-start;gap:10px;flex-wrap:wrap;margin:13px 0 17px;color:#54758d;font-size:13px;font-weight:600}
#mediq-dashboard .mm-route-nav strong{color:#1d628b;font-weight:800}
#mediq-dashboard .mm-route-separator{opacity:.55;font-size:19px}
#mediq-dashboard .mm-top-tabs{display:flex;direction:rtl;gap:8px;flex-wrap:wrap;align-items:center;margin:0 0 14px;border-bottom:1px solid #cfe2ed;padding-bottom:10px}
#mediq-dashboard .mm-top-tab{appearance:none;border:1px solid #cfe2ed;border-radius:10px;background:#fff;color:#225b7f;padding:12px 19px;font:inherit;font-size:14px;font-weight:700;cursor:pointer;transition:background .15s,border-color .15s}
#mediq-dashboard .mm-top-tab.active{background:#348fbe;border-color:#348fbe;color:#fff}
#mediq-dashboard .mm-top-tab:focus-visible{outline:2px solid #167cac;outline-offset:2px}
#mediq-dashboard .mm-top-tab:not(.active):hover{background:#eef7fc}
@media(max-width:550px){#mediq-dashboard .mm-top-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}#mediq-dashboard .mm-top-tab{padding:12px 8px;font-size:12px}}
/* MEDIQ V38.2 scoped improvements */
#mediq-dashboard .mm-full-width{display:block!important}
#mediq-dashboard .mm-full-width .mm-main{width:100%}
#mediq-dashboard #mmContent{text-align:right;direction:rtl}
#mediq-dashboard #mmContent .v-fields{direction:rtl}
#mediq-dashboard .mm-tree-children{display:none;direction:rtl;padding:4px 14px 8px 4px}
#mediq-dashboard .mm-tree-children.open{display:block}
#mediq-dashboard .mm-tree-children button{display:block;width:100%;border:0;background:transparent;color:#eaf5ff;text-align:right;padding:11px 12px;font:inherit;cursor:pointer;border-radius:8px}
#mediq-dashboard .mm-tree-children button.active,#mediq-dashboard .mm-tree-children button:hover{background:rgba(255,255,255,.16);font-weight:700}
#mediq-dashboard .mm-tree-arrow{margin-right:auto;padding:0 4px}
#mediq-dashboard .mm-issue-link{background:none;border:0;color:#0872ba;cursor:pointer;font:inherit;font-weight:700}
#mediq-dashboard .mm-issue-overlay{position:fixed;inset:0;z-index:99999}
#mediq-dashboard .mm-issue-scrim{position:absolute;inset:0;background:rgba(22,52,75,.34)}
#mediq-dashboard .mm-issue-drawer{position:absolute;top:0;left:0;height:100%;width:min(480px,94vw);background:#fff;box-shadow:8px 0 30px rgba(20,50,80,.18);overflow:auto;padding:22px;color:#1f4f6b;text-align:right}
#mediq-dashboard .mm-issue-top{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #dce9f3;padding-bottom:14px}
#mediq-dashboard .mm-issue-top button{border:0;background:#eaf4fa;border-radius:8px;font-size:24px;cursor:pointer}
#mediq-dashboard .mm-issue-drawer dl{display:grid;grid-template-columns:120px 1fr;gap:14px;border-top:1px solid #e0edf3;padding-top:15px}
#mediq-dashboard .mm-issue-drawer dt{color:#6b879b}#mediq-dashboard .mm-issue-drawer dd{margin:0}
#mediq-dashboard .mm-cal button[disabled]{opacity:.28;pointer-events:none;cursor:not-allowed}
#mediq-dashboard #mm_targetSearch{margin-bottom:5px}
@media(max-width:600px){#mediq-dashboard .mm-tree-children button{padding:10px}#mediq-dashboard .mm-issue-drawer{width:96vw}}
</style>
<style>
#mediq-dashboard .mq-list-controls{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin:14px 0;font-size:12px}
#mediq-dashboard .mq-list-controls select{border:1px solid #cce2f0;border-radius:8px;padding:7px 12px;background:white;color:#315873}
#mediq-dashboard .mq-assets-btn:disabled{opacity:.4;cursor:default}
#mediq-dashboard .mq-jcalendar{padding:12px;border:1px solid #cce2f0;border-radius:10px;background:#fff;margin-top:7px;max-width:340px}
#mediq-dashboard .mq-jcalendar[hidden]{display:none!important}
#mediq-dashboard .mq-jcal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;text-align:center;margin:10px 0}
#mediq-dashboard .mq-jcal-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
#mediq-dashboard .mq-jcalendar button{border:1px solid #d5e7f2;border-radius:6px;padding:5px;background:#f1f8fd;color:#315873;cursor:pointer;font:inherit}
#mediq-dashboard .mq-jcalendar button:hover{background:#e0f0fa}
/* ============================================================
MEDIQ DASHBOARD - SUPPLY
PRESENTATION VERSION
============================================================ */
#mediq-dashboard,
#mediq-dashboard * {
box-sizing: border-box;
}
#mediq-dashboard {
--navy: #20577b;
--navy-dark: #174565;
--primary: #3997c8;
--primary-dark: #277eaf;
--text: #24475f;
--muted: #7c99ae;
--border: #d5e7f2;
--bg: #f1f7fc;
--white: #ffffff;
position: fixed;
inset: 0;
width: 100vw;
height: 100vh;
z-index: 9999;
overflow: hidden;
direction: rtl;
font-family:
Tahoma,
Arial,
sans-serif;
color: var(--text);
background:
radial-gradient(
circle at 12% 4%,
rgba(57,151,200,.09),
transparent 27%
),
#f1f7fc;
}
/* ============================================================
HIDE CONFLUENCE
============================================================ */
html,
body,
#page,
#full-height-container,
#main,
#content,
#main-content,
.aui-page-panel,
.aui-page-panel-inner,
.aui-page-panel-content,
.content-body {
width: 100% !important;
height: 100% !important;
max-width: none !important;
margin: 0 !important;
padding: 0 !important;
}
html,
body {
overflow: hidden !important;
}
#footer,
footer,
.aui-footer,
#header,
#main-header,
.breadcrumbs,
#breadcrumbs,
.page-metadata {
display: none !important;
}
/* ============================================================
APP
============================================================ */
.mq-app {
width: 100%;
height: 100%;
display: grid;
grid-template-columns:
minmax(0,1fr)
255px;
direction: ltr;
}
/* ============================================================
SIDEBAR - LEAD GRAY THEME
============================================================ */
.mq-sidebar {
grid-column: 2;
height: 100vh;
padding:
24px
17px;
direction: rtl;
color: #fff;
display: flex;
flex-direction: column;
background:
linear-gradient(
180deg,
#4b9dca 0%,
#337fae 45%,
#23658f 100%
);
box-shadow:
-12px 0 38px
rgba(43,49,56,.18);
border-left:
1px solid
rgba(255,255,255,.04);
}
/* LOGO */
.mq-logo {
width: 100%;
text-align: center;
padding:
3px
5px
22px;
border-bottom:
1px solid
rgba(255,255,255,.08);
}
.mq-logo img {
width: 174px;
max-width: 92%;
height: auto;
filter:
drop-shadow(0 2px 10px rgba(0,0,0,.08));
}
/* USER */
.mq-user {
margin-top: 17px;
padding:
14px
15px;
border-radius: 14px;
background:
rgba(255,255,255,.06);
border:
1px solid
rgba(255,255,255,.08);
box-shadow:
inset 0 1px 0 rgba(255,255,255,.04);
}
.mq-user-name {
font-size: 12px;
font-weight: 900;
color: #ffffff;
}
.mq-user-role {
margin-top: 6px;
color:
rgba(255,255,255,.64);
font-size: 9px;
font-weight: 600;
}
/* ============================================================
LIFE CYCLE
============================================================ */
.mq-life-title {
margin:
26px
7px
9px;
color:
rgba(255,255,255,.42);
font-size: 9px;
font-weight: 700;
letter-spacing: .2px;
}
.mq-life {
display: flex;
flex-direction: column;
gap: 7px;
}
.mq-life-item {
position: relative;
min-height: 46px;
padding:
0
13px;
border-radius: 12px;
display: flex;
align-items: center;
gap: 10px;
color:
rgba(255,255,255,.76);
font-size: 11px;
font-weight: 800;
cursor: pointer;
user-select: none;
border:
1px solid
transparent;
transition:
background .18s ease,
color .18s ease,
transform .18s ease,
border-color .18s ease,
box-shadow .18s ease;
}
.mq-life-item:hover {
color: #fff;
background:
rgba(255,255,255,.08);
border-color:
rgba(255,255,255,.07);
}
.mq-life-item.active {
color: #ffffff;
background:
linear-gradient(
90deg,
#3997c8 0%,
#2e85b5 100%
);
border-color:
rgba(255,255,255,.10);
box-shadow:
0 12px 24px rgba(35,40,46,.24);
}
.mq-life-item.active::before {
content: "";
position: absolute;
right: 10px;
top: 50%;
width: 6px;
height: 6px;
border-radius: 50%;
background: #ffffff;
transform: translateY(-50%);
box-shadow:
0 0 0 4px rgba(255,255,255,.10);
}
.mq-life-icon {
width: 28px;
height: 28px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
background:
rgba(255,255,255,.06);
border:
1px solid
rgba(255,255,255,.05);
}
.mq-life-item.active .mq-life-icon {
background:
rgba(255,255,255,.14);
border-color:
rgba(255,255,255,.10);
}
.mq-life-icon svg {
width: 16px;
height: 16px;
fill: none;
stroke: currentColor;
stroke-width: 1.9;
stroke-linecap: round;
stroke-linejoin: round;
}
/* ============================================================
LOGOUT
============================================================ */
.mq-sidebar-bottom {
margin-top: auto;
padding-top: 14px;
border-top:
1px solid
rgba(255,255,255,.07);
}
.mq-logout {
min-height: 43px;
padding:
0
13px;
border-radius: 11px;
display: flex;
align-items: center;
gap: 9px;
color:
rgba(255,255,255,.72);
font-size: 10px;
font-weight: 700;
cursor: pointer;
border:
1px solid
transparent;
transition:
background .18s ease,
color .18s ease,
border-color .18s ease;
}
.mq-logout:hover {
color: #fff;
background:
rgba(255,255,255,.07);
border-color:
rgba(255,255,255,.07);
}
/* ============================================================
MAIN
============================================================ */
.mq-main {
grid-column: 1;
height: 100vh;
direction: rtl;
overflow-y: auto;
padding:
0
clamp(25px,4vw,55px)
45px;
}
/* ============================================================
HEADER
============================================================ */
.mq-header {
min-height: 88px;
border-bottom:
1px solid
var(--border);
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
}
.mq-header-right {
min-width: 0;
}
.mq-page-title {
color:
var(--navy);
font-size: 20px;
font-weight: 900;
}
.mq-page-description {
margin-top: 6px;
color:
var(--muted);
font-size: 10px;
font-weight: 600;
}
/* CENTER */
.mq-center {
padding:
10px
14px;
border:
1px solid
var(--border);
border-radius: 11px;
background: #fff;
color:
#536f84;
font-size: 10px;
font-weight: 700;
}
/* ============================================================
BREADCRUMB
============================================================ */
.mq-breadcrumb {
min-height: 54px;
display: flex;
align-items: center;
gap: 7px;
flex-wrap: wrap;
}
.mq-bread-item {
color:
#8197a8;
font-size: 10px;
font-weight: 700;
}
.mq-bread-current {
color:
var(--primary-dark);
font-weight: 900;
}
.mq-bread-separator {
color:
#b6c4cf;
}
/* ============================================================
HERO
============================================================ */
.mq-hero {
position: relative;
overflow: hidden;
min-height: 112px;
padding:
21px
24px;
border-radius: 18px;
color: #fff;
display: flex;
align-items: center;
justify-content: space-between;
background:
linear-gradient(
105deg,
#24475f,
#277eaf
);
box-shadow:
0 15px 35px
rgba(7,53,83,.10);
}
.mq-hero::before {
content: "";
position: absolute;
width: 250px;
height: 250px;
left: -70px;
top: -150px;
border-radius: 50%;
background:
rgba(107,119,131,.14);
}
.mq-hero-title {
position: relative;
z-index: 2;
font-size: 16px;
font-weight: 900;
}
.mq-hero-desc {
position: relative;
z-index: 2;
margin-top: 6px;
color:
rgba(255,255,255,.70);
font-size: 10px;
}
.mq-back-btn {
position: relative;
z-index: 2;
display: none;
min-width: 88px;
height: 36px;
padding:
0
13px;
border:
1px solid
rgba(255,255,255,.25);
border-radius: 10px;
background:
rgba(255,255,255,.10);
color: #fff;
font-family:
inherit;
font-size: 10px;
font-weight: 800;
cursor: pointer;
}
.mq-back-btn:hover {
background:
rgba(255,255,255,.16);
}
/* ============================================================
CONTENT
============================================================ */
.mq-view {
margin-top: 23px;
animation:
mqFade
.22s ease;
}
@keyframes mqFade {
from {
opacity: 0;
transform: translateY(5px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* ============================================================
SECTION HEADER
============================================================ */
.mq-section-head {
margin-bottom: 14px;
display: flex;
align-items: center;
justify-content: space-between;
}
.mq-section-title {
color:
var(--navy);
font-size: 14px;
font-weight: 900;
}
.mq-section-desc {
margin-top: 4px;
color:
var(--muted);
font-size: 9px;
}
/* ============================================================
MODULE CARDS
============================================================ */
.mq-card-grid {
display: grid;
grid-template-columns:
repeat(4,minmax(0,1fr));
gap: 14px;
}
.mq-module-card {
position: relative;
min-height: 176px;
padding:
18px;
border:
1px solid
var(--border);
border-radius: 17px;
background: #fff;
cursor: pointer;
box-shadow:
0 9px 26px
rgba(19,65,90,.035);
transition:
transform .17s ease,
box-shadow .17s ease,
border-color .17s ease;
}
.mq-module-card:hover {
transform:
translateY(-4px);
border-color:
rgba(87,96,106,.45);
box-shadow:
0 18px 40px
rgba(19,65,90,.08);
}
.mq-module-icon {
width: 48px;
height: 48px;
margin-bottom: 17px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
color:
var(--primary-dark);
background:
linear-gradient(
145deg,
#eaf4fb,
#e0f0fa
);
}
.mq-module-icon svg {
width: 24px;
height: 24px;
fill: none;
stroke: currentColor;
stroke-width: 1.8;
stroke-linecap: round;
stroke-linejoin: round;
}
.mq-module-name {
color:
var(--navy);
font-size: 12px;
font-weight: 900;
line-height: 1.8;
}
.mq-module-arrow {
position: absolute;
left: 18px;
bottom: 17px;
width: 29px;
height: 29px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
color:
#8ea5b5;
background:
#f3f7f9;
font-size: 18px;
}
.mq-module-card:hover
.mq-module-arrow {
color: #fff;
background:
var(--primary);
}
/* ============================================================
LARGE ACTION CARDS
============================================================ */
.mq-action-grid {
display: grid;
grid-template-columns:
repeat(2,minmax(0,1fr));
gap: 15px;
}
.mq-action-card {
min-height: 155px;
padding:
19px;
border:
1px solid
var(--border);
border-radius: 17px;
background: #fff;
cursor: pointer;
display: flex;
align-items: center;
gap: 16px;
transition: .17s;
}
.mq-action-card:hover {
border-color:
rgba(87,96,106,.45);
transform:
translateY(-2px);
box-shadow:
0 15px 35px
rgba(24,74,98,.06);
}
.mq-action-icon {
flex: 0 0 auto;
width: 54px;
height: 54px;
border-radius: 15px;
display: flex;
align-items: center;
justify-content: center;
color:
var(--primary-dark);
background:
#f0f7fc;
}
.mq-action-icon svg {
width: 25px;
height: 25px;
fill: none;
stroke: currentColor;
stroke-width: 1.8;
stroke-linecap: round;
stroke-linejoin: round;
}
.mq-action-title {
color:
var(--navy);
font-size: 13px;
font-weight: 900;
}
.mq-action-sub {
margin-top: 6px;
color:
var(--muted);
font-size: 9px;
}
/* ============================================================
ASSET LIST MENU
============================================================ */
.mq-list-layout {
display: grid;
grid-template-columns:
330px
minmax(0,1fr);
gap: 16px;
direction: ltr;
}
.mq-list-menu,
.mq-preview {
direction: rtl;
border:
1px solid
var(--border);
border-radius: 18px;
background: #fff;
box-shadow:
0 10px 28px
rgba(19,65,90,.035);
}
.mq-list-menu {
padding: 13px;
}
.mq-list-option {
min-height: 52px;
margin-bottom: 5px;
padding:
0
13px;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: space-between;
color:
#536f84;
font-size: 10px;
font-weight: 800;
cursor: pointer;
transition: .15s;
}
.mq-list-option:hover {
color:
var(--primary-dark);
background:
#f3f9fd;
}
.mq-list-option.active {
color:
#2b5672;
background:
#eaf4fc;
}
.mq-option-badge {
width: 26px;
height: 26px;
border-radius: 7px;
display: flex;
align-items: center;
justify-content: center;
background:
rgba(87,96,106,.09);
color:
var(--primary-dark);
}
/* ============================================================
PREVIEW
============================================================ */
.mq-preview {
min-height: 390px;
padding:
23px;
}
.mq-preview-title {
color:
var(--navy);
font-size: 14px;
font-weight: 900;
}
.mq-preview-description {
margin-top: 7px;
color:
var(--muted);
font-size: 9px;
}
/* MOCK CONTENT */
.mq-demo-box {
margin-top: 23px;
padding: 20px;
border:
1px dashed
#bdd4df;
border-radius: 14px;
background:
#f8fbfc;
}
.mq-demo-icon {
width: 48px;
height: 48px;
margin:
0
auto
12px;
border-radius: 14px;
display: flex;
align-items: center;
justify-content: center;
color:
var(--primary-dark);
background:
#eaf4fc;
}
.mq-demo-text {
color:
#4d84a8;
text-align: center;
font-size: 10px;
line-height: 2;
}
.mq-demo-button {
display: block;
min-width: 125px;
height: 38px;
margin:
17px
auto
0;
border: 0;
border-radius: 9px;
background:
linear-gradient(
90deg,
#409fd1,
#2c88bb
);
color: #fff;
font-family: inherit;
font-size: 10px;
font-weight: 800;
cursor: pointer;
}
/* ============================================================
PLACEHOLDER LIFE CYCLE
============================================================ */
.mq-empty-cycle {
min-height: 350px;
border:
1px dashed
#c7dce5;
border-radius: 18px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
background:
rgba(255,255,255,.65);
color:
#7890a2;
}
.mq-empty-cycle strong {
color:
var(--navy);
font-size: 15px;
}
.mq-empty-cycle span {
margin-top: 8px;
font-size: 10px;
}
/* ============================================================
TOAST
============================================================ */
.mq-toast {
position: fixed;
left: 30px;
bottom: 27px;
z-index: 10020;
min-width: 260px;
max-width: 360px;
padding:
13px
16px;
border-radius: 11px;
color: #fff;
background:
#073b5c;
box-shadow:
0 16px 40px
rgba(0,0,0,.15);
font-size: 10px;
font-weight: 700;
opacity: 0;
transform:
translateY(12px);
pointer-events: none;
transition:
.2s;
}
.mq-toast.show {
opacity: 1;
transform:
translateY(0);
}
/* ============================================================
RESPONSIVE
============================================================ */
@media(max-width:1300px) {
.mq-card-grid {
grid-template-columns:
repeat(2,minmax(0,1fr));
}
}
@media(max-width:1000px) {
.mq-app {
grid-template-columns:
minmax(0,1fr)
210px;
}
.mq-list-layout {
grid-template-columns:
280px
minmax(0,1fr);
}
}
@media(max-width:800px) {
.mq-sidebar {
display: none;
}
.mq-app {
display: block;
}
.mq-main {
width: 100%;
}
.mq-card-grid,
.mq-action-grid,
.mq-list-layout {
grid-template-columns:
1fr;
}
}
/* ============================================================
MEDIQ SIDEBAR NAVIGATION TREE
============================================================ */
.mq-life-title,
.mq-life {
display: none !important;
}
.mq-tree-title {
margin: 22px 7px 9px;
color: rgba(255,255,255,.39);
font-size: 9px;
font-weight: 700;
}
.mq-tree {
display: flex;
flex-direction: column;
gap: 5px;
overflow-y: auto;
overflow-x: hidden;
padding-left: 2px;
scrollbar-width: thin;
}
.mq-tree::-webkit-scrollbar {
width: 4px;
}
.mq-tree::-webkit-scrollbar-thumb {
background: rgba(255,255,255,.15);
border-radius: 10px;
}
.mq-tree-row {
min-height: 38px;
padding: 0 10px;
border-radius: 9px;
display: flex;
align-items: center;
gap: 8px;
color: rgba(255,255,255,.70);
font-size: 10px;
font-weight: 800;
cursor: pointer;
user-select: none;
transition: background .15s ease, color .15s ease;
}
.mq-tree-row:hover {
color: #fff;
background: rgba(255,255,255,.07);
}
.mq-tree-row.active {
color: #fff;
background: linear-gradient(90deg,#3997c8,#277eaf);
}
.mq-tree-row.parent-active:not(.active) {
color: #fff;
background: rgba(255,255,255,.055);
}
.mq-tree-row.level-1 { padding-right: 10px; }
.mq-tree-row.level-2 { padding-right: 23px; font-size: 9.5px; }
.mq-tree-row.level-3 { padding-right: 36px; font-size: 9px; }
.mq-tree-row.level-4 { padding-right: 49px; font-size: 8.7px; color: rgba(255,255,255,.60); }
.mq-tree-dot {
width: 6px;
height: 6px;
flex: 0 0 6px;
border-radius: 50%;
background: rgba(255,255,255,.32);
}
.mq-tree-row.active .mq-tree-dot {
background: #fff;
}
.mq-tree-arrow {
margin-right: auto;
color: rgba(255,255,255,.45);
font-size: 13px;
transition: transform .18s ease;
}
.mq-tree-row.open > .mq-tree-arrow {
transform: rotate(90deg);
}
.mq-tree-children {
display: none;
margin-top: 2px;
}
.mq-tree-children.open {
display: block;
}
.mq-tree-separator {
height: 1px;
margin: 8px 9px;
background: rgba(255,255,255,.08);
}
/* ============================================================
MEDIQ UI POLISH - LARGER TYPOGRAPHY + TOP WELCOME
============================================================ */
#mediq-dashboard .mq-user-name { font-size: 15px; }
#mediq-dashboard .mq-user-role { font-size: 12px; }
#mediq-dashboard .mq-tree-title { font-size: 12px; }
#mediq-dashboard .mq-tree-row { font-size: 13px; min-height: 42px; }
#mediq-dashboard .mq-tree-row.level-2 { font-size: 12.5px; }
#mediq-dashboard .mq-tree-row.level-3 { font-size: 12px; }
#mediq-dashboard .mq-tree-row.level-4 { font-size: 11.7px; }
#mediq-dashboard .mq-logout { font-size: 13px; }
#mediq-dashboard .mq-page-title { font-size: 23px; }
#mediq-dashboard .mq-page-description { font-size: 13px; }
#mediq-dashboard .mq-center { font-size: 13px; }
#mediq-dashboard .mq-bread-item { font-size: 13px; }
#mediq-dashboard .mq-hero-title { font-size: 19px; }
#mediq-dashboard .mq-hero-desc { font-size: 13px; }
#mediq-dashboard .mq-back-btn { font-size: 13px; }
#mediq-dashboard .mq-section-title { font-size: 17px; }
#mediq-dashboard .mq-section-desc { font-size: 12px; }
#mediq-dashboard .mq-module-name { font-size: 15px; }
#mediq-dashboard .mq-action-title { font-size: 16px; }
#mediq-dashboard .mq-action-sub { font-size: 12px; }
#mediq-dashboard .mq-list-option { font-size: 13px; }
#mediq-dashboard .mq-preview-title { font-size: 17px; }
#mediq-dashboard .mq-preview-description,
#mediq-dashboard .mq-demo-text { font-size: 12px; }
#mediq-dashboard .mq-demo-button { font-size: 13px; }
#mediq-dashboard .mq-empty-cycle strong { font-size: 18px; }
#mediq-dashboard .mq-empty-cycle span { font-size: 13px; }
#mediq-dashboard .mq-toast { font-size: 13px; }
#mediq-dashboard .mq-header-welcome {
display:flex; align-items:center; gap:9px; padding:9px 14px;
border:1px solid rgba(87,96,106,.20); border-radius:999px;
background:rgba(255,255,255,.82); box-shadow:0 7px 22px rgba(7,53,83,.055);
color:#587287; font-size:13px; font-weight:700; white-space:nowrap;
}
#mediq-dashboard .mq-header-welcome strong { color:var(--navy); font-size:14px; font-weight:900; }
#mediq-dashboard .mq-welcome-dot { width:8px; height:8px; border-radius:50%; background:var(--primary); box-shadow:0 0 0 4px rgba(87,96,106,.10); }
#mediq-dashboard .mq-header-left { display:flex; align-items:center; gap:10px; }
#mediq-dashboard .mq-edit-page-btn{
display:inline-flex;
align-items:center;
justify-content:center;
gap:7px;
min-height:38px;
padding:0 14px;
border:1px solid #cfe1e8;
border-radius:12px;
background:#fff;
color:#34414d !important;
font-family:inherit;
font-size:12px;
font-weight:900;
text-decoration:none !important;
cursor:pointer;
box-shadow:0 6px 18px rgba(3,53,83,.06);
transition:.18s ease;
}
#mediq-dashboard .mq-edit-page-btn:hover{
background:#eaf4fb;
border-color:#b8bec5;
color:#326588 !important;
transform:translateY(-1px);
}
#mediq-dashboard .mq-edit-page-btn svg{
width:15px;
height:15px;
stroke:currentColor;
stroke-width:2;
fill:none;
}
#mediq-dashboard .mq-module-card { box-shadow:0 10px 30px rgba(19,65,90,.05); }
#mediq-dashboard .mq-module-card:hover { transform:translateY(-5px); box-shadow:0 20px 45px rgba(19,65,90,.10); }
#mediq-dashboard .mq-hero { box-shadow:0 18px 42px rgba(7,53,83,.12); }
/* ===== FINAL UI REFINEMENTS ===== */
#mediq-dashboard .mq-header { min-height: 92px; }
#mediq-dashboard .mq-header-left { margin-right:auto; }
#mediq-dashboard .mq-header-welcome { padding:10px 16px; }
#mediq-dashboard .mq-breadcrumb { min-height:46px; }
#mediq-dashboard .mq-hero { margin-top:14px; }
#mediq-dashboard .mq-tree { scrollbar-width:none; -ms-overflow-style:none; }
#mediq-dashboard .mq-tree::-webkit-scrollbar { display:none !important; width:0 !important; }
#mediq-dashboard .mq-sidebar { overflow:hidden; }
#mediq-dashboard .mq-bread-link {
cursor: pointer;
transition: color .15s ease, background .15s ease;
border-radius: 7px;
padding: 4px 6px;
}
#mediq-dashboard .mq-bread-link:hover {
color: var(--primary) !important;
background: rgba(87,96,106,.08);
}
/* MEDIQ - REAL PURCHASED ASSETS LIST (table)
============================================================ */
#mediq-dashboard .mq-assets-head {
margin-top: 18px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
}
#mediq-dashboard .mq-assets-actions {
display: flex;
gap: 8px;
flex-wrap: wrap;
}
#mediq-dashboard .mq-assets-btn {
min-height: 38px;
padding: 0 15px;
border: 1px solid #d8e7ed;
border-radius: 9px;
background: #fff;
color: #47677d;
font-family: inherit;
font-size: 12px;
font-weight: 800;
cursor: pointer;
}
#mediq-dashboard .mq-assets-btn.primary {
border-color: transparent;
color: #fff;
background: linear-gradient(90deg,#409fd1,#2c88bb);
}
#mediq-dashboard .mq-assets-host {
margin-top: 14px;
min-height: 140px;
}
#mediq-dashboard .mq-assets-host > table,
#mediq-dashboard .mq-assets-host table {
width: 100% !important;
border-collapse: collapse !important;
direction: rtl !important;
background: #fff !important;
border: 1px solid #d7dde2 !important;
border-radius: 12px !important;
overflow: hidden !important;
}
#mediq-dashboard .mq-assets-host th {
padding: 12px 14px !important;
text-align: right !important;
background: #f5f9fd !important;
color: #47677d !important;
border-bottom: 1px solid #d7dde2 !important;
font-size: 12px !important;
font-weight: 900 !important;
}
#mediq-dashboard .mq-assets-host td {
padding: 12px 14px !important;
text-align: right !important;
color: #294e68 !important;
border-bottom: 1px solid #e5f0f9 !important;
font-size: 12px !important;
font-weight: 700 !important;
}
#mediq-dashboard .mq-assets-message {
min-height: 140px;
display: flex;
align-items: center;
justify-content: center;
padding: 22px;
border: 1px dashed #c5dce5;
border-radius: 12px;
background: #f8fbfc;
color: #6f8799;
text-align: center;
font-size: 12px;
font-weight: 700;
}
#mediq-dashboard .mq-cf-delete-proxy {
display: inline-flex !important;
align-items: center;
justify-content: center;
min-width: 58px;
min-height: 30px;
padding: 0 10px !important;
border: 1px solid #f1c9c9 !important;
border-radius: 8px !important;
background: #fff7f7 !important;
color: #b42318 !important;
text-decoration: none !important;
font-family: inherit !important;
font-size: 11px !important;
font-weight: 800 !important;
cursor: pointer !important;
}
#mediq-dashboard .mq-cf-delete-proxy:hover {
background: #ffeded !important;
border-color: #e8aaaa !important;
}
#mediq-dashboard .mq-cf-edit-proxy {
min-width: 50px !important;
height: 28px !important;
padding: 0 11px !important;
margin-left: 6px !important;
border: 1px solid rgba(87,96,106,.30) !important;
border-radius: 8px !important;
background: #f4f4f5 !important;
color: #434a51 !important;
font-family: inherit !important;
font-size: 11px !important;
font-weight: 800 !important;
cursor: pointer !important;
text-decoration: none !important;
}
#mediq-dashboard .mq-cf-edit-proxy:hover {
background: #eaebec !important;
border-color: rgba(87,96,106,.55) !important;
}
/* ============================================================
DEDICATED EDIT ASSET WORKSPACE
============================================================ */
#mediq-dashboard .mq-edit-wrap {
border: 1px solid var(--border);
border-radius: 18px;
background: #fff;
padding: 24px;
box-shadow: 0 10px 28px rgba(19,65,90,.035);
}
#mediq-dashboard .mq-edit-toolbar {
margin-top: 18px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
}
#mediq-dashboard .mq-edit-search {
width: min(390px, 100%);
min-height: 40px;
padding: 0 14px;
border: 1px solid #d8e7ed;
border-radius: 10px;
outline: none;
background: #fff;
color: #294e68;
direction: rtl;
font-family: inherit;
font-size: 12px;
font-weight: 700;
}
#mediq-dashboard .mq-edit-search:focus {
border-color: rgba(87,96,106,.65);
box-shadow: 0 0 0 3px rgba(87,96,106,.08);
}
#mediq-dashboard .mq-edit-help {
color: #71899a;
font-size: 12px;
font-weight: 700;
}
#mediq-dashboard .mq-edit-host {
margin-top: 14px;
}
#mediq-dashboard .mq-edit-host table {
width: 100% !important;
border-collapse: collapse !important;
direction: rtl !important;
background: #fff !important;
border: 1px solid #d7dde2 !important;
}
#mediq-dashboard .mq-edit-host th {
padding: 12px 14px !important;
text-align: right !important;
background: #f5f9fd !important;
color: #47677d !important;
border-bottom: 1px solid #d7dde2 !important;
font-size: 12px !important;
font-weight: 900 !important;
}
#mediq-dashboard .mq-edit-host td {
padding: 12px 14px !important;
text-align: right !important;
color: #294e68 !important;
border-bottom: 1px solid #e5f0f9 !important;
font-size: 12px !important;
font-weight: 700 !important;
}
#mediq-dashboard{
--navy:#347da8 !important;
--navy-dark:#215b83 !important;
--primary:#3997c8 !important;
--primary-dark:#277eaf !important;
--text:#315873 !important;
--muted:#7e9bae !important;
--border:#d5e7f2 !important;
--bg:#f1f7fc !important;
}
#mediq-dashboard{background:#f1f7fc !important;}
#mediq-dashboard .mq-sidebar{
background:linear-gradient(180deg,#58a4cf 0%,#3d89b7 52%,#23658f 100%) !important;
box-shadow:-12px 0 42px rgba(27,32,42,.18) !important;
}
#mediq-dashboard .mq-life-item.active{
background:linear-gradient(90deg,#409fd1,#2c88bb) !important;
box-shadow:0 10px 24px rgba(39,126,175,.22) !important;
}
#mediq-dashboard .mq-hero{
background:linear-gradient(105deg,#388cbc 0%,#64b2db 62%,#3997c8 135%) !important;
box-shadow:0 16px 40px rgba(38,44,58,.14) !important;
}
#mediq-dashboard .mq-hero::before{background:rgba(169,218,246,.13) !important;}
#mediq-dashboard .mq-welcome-dot{background:#3997c8 !important;box-shadow:0 0 0 4px rgba(64,159,209,.12) !important;}
#mediq-dashboard .mq-action-card:hover,
#mediq-dashboard .mq-card:hover{
border-color:#a5d1eb !important;
box-shadow:0 16px 34px rgba(39,126,175,.09) !important;
}
#mediq-dashboard .mq-edit-page-btn:hover{
border-color:#a5d1eb !important;
color:#277eaf !important;
}
/* ===== MediQ code-only wizard (standalone) ===== */
#mqWz,#mqDetail{position:fixed;inset:0;z-index:11000;display:none;align-items:center;justify-content:center;padding:18px;background:rgba(28,33,43,.58);backdrop-filter:blur(4px);direction:rtl}
#mqWz.open,#mqDetail.open{display:flex}
#mqWz *,#mqDetail *{box-sizing:border-box;font-family:Tahoma,Arial,sans-serif}
.wz-dialog{width:min(820px,94vw);max-height:90vh;display:flex;flex-direction:column;background:#fff;border:1px solid #d5e7f2;border-radius:20px;box-shadow:0 28px 90px rgba(22,27,38,.34);overflow:hidden;color:#24475f}
.wz-head{padding:18px 22px 14px;border-bottom:1px solid #e5e7ef;flex:0 0 auto}
.wz-head-top{display:flex;align-items:center;justify-content:space-between;gap:14px}
.wz-title{font-size:18px;font-weight:900;color:#204969}
.wz-close{width:36px;height:36px;border:0;border-radius:10px;background:#f2f4f8;color:#6d91ab;font:700 21px/36px Tahoma;cursor:pointer}
.wz-close:hover{background:#e5f0f9;color:#277eaf}
.wz-steps{margin-top:14px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.wz-step{min-height:40px;padding:7px 9px;display:flex;align-items:center;justify-content:center;gap:7px;border:1px solid #e2e6ee;border-radius:10px;background:#f5f9fd;color:#91aabd;font-size:11px;font-weight:800}
.wz-step b{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:#e3eff8;color:#6d91ab;font-size:10px}
.wz-step.active{border-color:#3997c8;background:#3997c8;color:#fff}
.wz-step.active span{color:#fff}
.wz-step.active b{background:#3997c8;color:#fff}
.wz-step.done{background:#edf6fc;color:#4f86aa}
.wz-body{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:20px 22px 14px}
.wz-label{margin:0 2px 8px;font-size:12px;font-weight:900;color:#355e79}
.wz-selected{margin:0 0 10px;padding:9px 12px;border:1px dashed #cce2f0;border-radius:10px;background:#f5f9fd;color:#819eaf;font-size:12px;font-weight:800}
.wz-selected.has{border-style:solid;color:#2b5672;background:#e7f2fb}
.wz-picker{border:1px solid #cce2f0;border-radius:12px;overflow:hidden;background:#fff}
.wz-search{display:block;width:100%;height:42px;padding:0 13px;border:0;border-bottom:1px solid #e4e7e9;background:#f1f8fd;font-size:12px;color:#2b5672;outline:none;direction:rtl}
.wz-list{max-height:230px;overflow-y:auto;padding:6px}
.wz-item{display:block;width:100%;min-height:38px;padding:8px 11px;border:0;border-radius:8px;background:#fff;color:#315873;text-align:right;font-size:12px;font-weight:700;cursor:pointer}
.wz-item:hover{background:#e5f0f9}
.wz-item.sel{background:#3997c8;color:#fff}
.wz-empty,.wz-loading{padding:18px 12px;color:#7e9bae;text-align:center;font-size:12px;font-weight:700}
.wz-link{margin-top:12px;min-height:38px;padding:0 14px;border:1px solid #cce2f0;border-radius:10px;background:#fff;color:#277eaf;font-size:12px;font-weight:900;cursor:pointer}
.wz-link:hover{background:#e9f4fc}
.wz-create{margin-top:14px;padding:14px;border:1px solid #d5e7f2;border-radius:14px;background:#f5f9fd}
.wz-create[hidden]{display:none}
.wz-create>strong{display:block;margin-bottom:12px;font-size:13px;color:#2b506b}
.wz-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}
.wz-field{margin:0 0 12px;min-width:0}
.wz-field label{display:block;margin:0 0 6px;font-size:12px;font-weight:800;color:#2b506b}
.wz-field input,.wz-field select{display:block;width:100%;min-height:42px;padding:0 12px;border:1px solid #d2e5f1;border-radius:11px;background:#fff;color:#24475f;font-size:12px;direction:rtl;outline:none}
.wz-field input:focus,.wz-field select:focus{border-color:#409fd1;box-shadow:0 0 0 3px rgba(64,159,209,.12)}
.wz-inline{display:flex;gap:8px;align-items:center}
.wz-inline select{flex:1 1 auto}
.wz-plus{flex:0 0 42px;width:42px;height:42px;border:1px solid #b3d5e9;border-radius:11px;background:#eaf4fb;color:#326588;font:900 22px/40px Tahoma;cursor:pointer}
.wz-plus:hover{background:#3997c8;border-color:#3997c8;color:#fff}
.wz-mini{display:flex;gap:8px;margin:0 0 12px}
.wz-mini[hidden]{display:none}
.wz-mini input{flex:1 1 auto;min-height:40px;padding:0 12px;border:1px solid #d2e5f1;border-radius:10px;font-size:12px;direction:rtl}
.wz-static{margin:0 0 14px;padding:10px 12px;border:1px solid #d5e7f2;border-radius:10px;background:#f5f9fd;color:#487391;font-size:12px;font-weight:800}
.wz-msg{min-height:20px;padding:0 22px 6px;font-size:11px;font-weight:800;color:#6d91ab}
.wz-msg.err{color:#a33d3d}
.wz-foot{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 22px 16px;border-top:1px solid #e2e6e9;background:#fff}
.wz-foot-r,.wz-foot-l{display:flex;gap:9px}
.wz-btn{min-height:42px;padding:0 20px;border-radius:10px;border:1px solid #d8dde7;background:#fff;color:#487391;font-size:12px;font-weight:900;cursor:pointer}
.wz-btn.primary,.wz-primary{border:1px solid #277eaf;background:linear-gradient(135deg,#3997c8,#277eaf);color:#fff;box-shadow:0 8px 18px rgba(39,126,175,.18);border-radius:10px;min-height:42px;padding:0 18px;font-size:12px;font-weight:900;cursor:pointer}
.wz-btn:disabled,.wz-primary:disabled,.wz-link:disabled{opacity:.55;cursor:not-allowed}
.wz-btn:focus-visible,.wz-primary:focus-visible,.wz-item:focus-visible,.wz-plus:focus-visible,.wz-link:focus-visible{outline:2px solid #409fd1;outline-offset:2px}
#mqDetail .wz-dialog{width:min(620px,94vw)}
.dt-row{display:flex;justify-content:space-between;gap:14px;padding:11px 2px;border-bottom:1px solid #e7f2fb;font-size:12px}
.dt-row span:first-child{color:#7e9bae;font-weight:800}
.dt-row span:last-child{color:#2b5672;font-weight:800;text-align:left}
.mq-tbl{width:100%;border-collapse:collapse;direction:rtl;background:#fff}
.mq-tbl th,.mq-tbl td{padding:12px 14px;text-align:right;font-size:12px;border-bottom:1px solid #e5f0f9;color:#294e68;font-weight:700}
.mq-tbl th{background:#ecf5fc;color:#47677d;font-weight:900}
.mq-tbl-wrap{border:1px solid #d7dde2;border-radius:14px;overflow:auto;background:#fff}
@media(max-width:760px){.wz-steps{grid-template-columns:repeat(2,minmax(0,1fr))}.wz-grid{grid-template-columns:1fr}}
/* MediQ hospital-blue palette. */
#mediq-dashboard .mq-welcome-dot{background:#409fd1!important;box-shadow:0 0 0 4px rgba(64,159,209,.12)!important}
.wz-btn.primary,.wz-primary{background:linear-gradient(135deg,#4ca9d8,#328fc1);border-color:#328fc1;box-shadow:0 8px 18px rgba(64,159,209,.2)}
.wz-step.active{background:#368fbe;border-color:#368fbe;color:white}
.wz-step.active b{background:rgba(255,255,255,.18);color:white}
.wz-step.active span{color:white}
.wz-item.sel{background:#368fbe;color:white}
/* Large minimal duotone illustrations and structured wizard. */
#mediq-dashboard .mq-module-icon{width:110px;height:110px;border-radius:24px;background:#f2f6f8;color:#4e6979;margin-bottom:16px}
#mediq-dashboard .mq-module-icon svg{width:72px;height:72px;stroke-width:1.25}
#mediq-dashboard .mq-action-icon{width:108px;height:108px;border-radius:22px;background:#f2f6f8;color:#4e6979}
#mediq-dashboard .mq-action-icon svg{width:75px;height:75px;stroke-width:1.25}
#mediq-dashboard .mq-module-card{min-height:216px}
#mediq-dashboard .mq-action-card{min-height:148px}
.wz-step{flex-direction:column;gap:4px;min-height:65px}
.wz-step .wz-step-heading{display:flex;align-items:center;justify-content:center;gap:6px}
.wz-step .wz-step-value{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;font-weight:600;color:inherit}
.wz-group-tree,.wz-group-tree ul{list-style:none;margin:0;padding:0 18px 0 0;position:relative}
.wz-group-tree{padding:4px 0}
.wz-group-tree ul{margin-right:15px;border-right:1px solid #bacbd5}
.wz-group-tree li{position:relative;margin:3px 0}
.wz-group-tree ul>li:before{content:"";position:absolute;right:-18px;top:19px;width:18px;border-top:1px solid #bacbd5}
.wz-tree-line{display:flex;align-items:center;gap:4px}
.wz-tree-line .wz-item{width:auto;flex:1;min-width:0;white-space:normal}
.wz-tree-toggle,.wz-tree-spacer{width:26px;flex:0 0 26px;height:30px}
.wz-tree-toggle{border:0;border-radius:6px;background:#edf2f5;color:#435c6d;cursor:pointer;font:700 17px Tahoma}
.wz-tree-toggle:focus-visible{outline:2px solid #69737d}
.wz-segment{padding:14px;margin:0 0 13px;border:1px solid #dce5eb;border-radius:13px;background:#fff;min-inline-size:0}
.wz-segment legend{padding:0 8px;color:#394e5e;font-size:12px;font-weight:900}
.wz-segment .wz-field:last-child{margin-bottom:0}
.wz-context{font-size:11px;font-weight:600;line-height:1.8;color:#6c8190;margin-top:8px}
@media(max-width:760px){#mediq-dashboard .mq-card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}#mediq-dashboard .mq-action-grid{grid-template-columns:1fr}.wz-step{padding:5px}.wz-step .wz-step-value{font-size:9px}}
.wz-segment-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 15px;padding-bottom:10px;border-bottom:1px solid #e2e7eb}
.wz-segment-tabs button{padding:9px 12px;border:1px solid #d4dfe6;border-radius:9px;background:#f5f8fa;color:#526777;font:700 11px Tahoma;cursor:pointer}
.wz-segment-tabs button.active{background:#69737d;color:white;border-color:#69737d}
.wz-segment[hidden]{display:none!important}
/* Float above the form without occupying a grid row or being clipped by form scroll. */
#mqWz .mq-jcalendar.mq-date-floating{position:fixed!important;z-index:50;margin:0!important;max-width:calc(100vw - 20px);padding:12px;background:#fff;border:1px solid #cce2f0;border-radius:12px;box-shadow:0 16px 48px rgba(23,65,86,.24);overflow:auto;direction:rtl}
:is(#mqWz,#vDialog) .mq-date-floating[hidden]{display:none!important}
:is(#mqWz,#vDialog) .mq-date-floating .mq-jcal-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
:is(#mqWz,#vDialog) .mq-date-floating .mq-jcal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;text-align:center;margin:10px 0}
:is(#mqWz,#vDialog) .mq-date-floating button{border:1px solid #d5e7f2;border-radius:6px;padding:5px;background:#f1f8fd;color:#315873;cursor:pointer;font:inherit}
:is(#mqWz,#vDialog) .mq-date-floating button:hover{background:#e0f0fa}
/* V11 layout and accessible operation dialog */
#mediq-dashboard .mq-logo img{width:121.8px!important}
#mediq-dashboard .mq-list-layout{grid-template-columns:297px minmax(0,1fr)}
#mediq-dashboard .v-five{grid-template-columns:repeat(5,minmax(0,1fr))}
#mediq-dashboard button.mq-module-card{font:inherit;text-align:right;cursor:pointer;display:flex;flex-direction:column;align-items:flex-start}
#mediq-dashboard .v-tag{display:inline-block;border-radius:8px;padding:5px 8px;font-size:11px;line-height:1.8}
#mediq-dashboard .v-tag.green{color:#17633d;background:#e5f5eb}
#mediq-dashboard .v-tag.orange{color:#8c4808;background:#fff0df}
#mediq-dashboard .v-active{display:block;color:#ab590c;font-size:10px}
#mediq-dashboard .v-summary-row{display:flex;flex-direction:column;gap:8px;padding:14px 0;border-bottom:1px solid #dce8ee;font-size:12px}
#mediq-dashboard .v-summary-row span{color:#6c8190}
#mediq-dashboard .v-summary-row b{line-height:1.8}
#mediq-dashboard .v-steps{display:flex;flex-direction:column;gap:8px}
#mediq-dashboard .v-steps>div{border-right:4px solid #dce8ee;padding:10px;background:#f4f8fb;border-radius:7px;font-size:11px}
#mediq-dashboard .v-steps>.current{background:#44525f;color:white;border-color:#44525f}
#mediq-dashboard .v-steps>.passed{background:#e5f5eb;border-color:#58a97a}
#mediq-dashboard .v-search{display:flex;gap:7px;flex-wrap:wrap}
#mediq-dashboard .v-search input{min-width:180px;border:1px solid #cbdfea;border-radius:8px;padding:10px;font:inherit}
#mediq-dashboard #vService{color:#9a5b10;font-size:11px}
#mediq-dashboard .v-overlay{position:fixed;inset:0;background:#122f4590;z-index:100100;display:flex;align-items:center;justify-content:center;padding:18px;direction:rtl}
#mediq-dashboard .v-overlay[hidden]{display:none}
#mediq-dashboard .v-dialog{width:min(920px,96vw);max-height:92vh;display:flex;flex-direction:column;background:#fff;border:1px solid #cbdfea;border-radius:18px;box-shadow:0 20px 80px #163d4950;overflow:hidden}
#mediq-dashboard .v-dialog header{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;border-bottom:1px solid #dce8ee}
#mediq-dashboard .v-dialog header button{border:0;background:#edf5fa;border-radius:8px;width:35px;height:35px;font-size:24px;cursor:pointer}
#mediq-dashboard .v-dialog-body{overflow:auto;padding:20px;min-height:0}
#mediq-dashboard #vMessage{margin:0;padding:12px 20px;background:#f2f8fc;white-space:pre-wrap;line-height:1.8;font-size:12px}
#mediq-dashboard .v-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:16px 0}
#mediq-dashboard .v-fields label{display:flex;flex-direction:column;gap:8px;font-size:12px}
#mediq-dashboard .v-fields input,#mediq-dashboard .v-fields select,#mediq-dashboard .v-fields textarea,#mediq-dashboard #vProcessSearch{font:inherit;padding:10px;border:1px solid #cbdfea;border-radius:8px;background:white;width:100%;box-sizing:border-box}
#mediq-dashboard .v-choice{display:flex;align-items:center;gap:10px;padding:12px;border-bottom:1px solid #e7edf1;font-size:12px;cursor:pointer}
#mediq-dashboard .v-choice small{margin-right:auto;color:#789}
#mediq-dashboard .v-operation-choices{display:flex;flex-wrap:wrap;gap:8px}
#mediq-dashboard .v-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:20px}
#mediq-dashboard .v-stats>div{background:white;border:1px solid #cbdfea;padding:30px;display:flex;flex-direction:column;gap:12px;border-radius:16px}
#mediq-dashboard .v-stats strong{font-size:30px;color:#318fbd}
@media(max-width:1100px){#mediq-dashboard .v-five{grid-template-columns:repeat(3,minmax(0,1fr))}#mediq-dashboard .mq-list-layout{grid-template-columns:230px minmax(0,1fr)}}
@media(max-width:760px){#mediq-dashboard .v-five{grid-template-columns:repeat(2,minmax(0,1fr))}#mediq-dashboard .mq-list-layout{grid-template-columns:1fr}#mediq-dashboard .v-fields{grid-template-columns:1fr}#mediq-dashboard .v-choice{flex-wrap:wrap}}
#mediq-dashboard .v-attribute-list{max-height:220px;overflow:auto;border:1px solid #cbdfea;border-radius:8px;margin:12px 0;padding:12px;display:flex;flex-direction:column;gap:12px}#mediq-dashboard .v-attribute-list label[hidden]{display:none}
#mediq-dashboard .v-editor-tabs{display:flex;gap:6px;flex-wrap:wrap;position:sticky;top:-20px;z-index:2;background:white;padding:12px 0;border-bottom:1px solid #d4e5ee}
#mediq-dashboard .v-editor-tabs button{font:inherit;font-size:12px;cursor:pointer;border:1px solid #cbdfea;border-radius:9px;padding:10px;background:#f2f8fc;color:#385d73}
#mediq-dashboard .v-editor-tabs button.active{background:#485762;border-color:#485762;color:white}
#mediq-dashboard [data-edit-panel][hidden]{display:none}
#mediq-dashboard .v-editor-footer{display:flex;justify-content:space-between;align-items:center;gap:12px;position:sticky;bottom:-20px;background:#fff;padding:14px 0;border-top:1px solid #d4e5ee;font-size:11px;z-index:2}
#mediq-dashboard .v-fields textarea{min-height:90px}
#mediq-dashboard .v-fields small{color:#7b8c98}
#mediq-dashboard #vDialog .mq-date-floating{position:fixed;z-index:100120;display:block;overflow:auto;background:white;border:1px solid #c3d9e5;border-radius:12px;padding:12px;box-shadow:0 14px 40px #203d5b30;box-sizing:border-box}
#mediq-dashboard #vDialog .mq-date-floating[hidden]{display:none}
#mediq-dashboard .v-live-timeline{direction:rtl;background:white;border:1px solid #d0e2ec;border-radius:14px;padding:18px 20px;margin:0 0 20px;min-width:0}
#mediq-dashboard .v-live-timeline header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:24px}
#mediq-dashboard .v-live-timeline header>div{display:flex;flex-direction:column;gap:7px;min-width:0}
#mediq-dashboard .v-live-timeline header span{font-size:11px;color:#6d8795;overflow-wrap:anywhere}
#mediq-dashboard .v-live-timeline header>small{font-size:10px;color:#698b8b;display:flex;align-items:center;gap:5px;white-space:nowrap}
#mediq-dashboard .v-live-timeline header>small>i{width:6px;height:6px;border-radius:50%;background:#16b66a;display:block}
#mediq-dashboard .v-live-timeline header>small.stale{color:#a46515}
#mediq-dashboard .v-live-timeline header>small.stale>i{background:#d58c30}
#mediq-dashboard .v-circle-track{list-style:none;margin:0;padding:0;display:flex;direction:rtl;align-items:flex-start}
#mediq-dashboard .v-circle-step{flex:1;min-width:0;text-align:center;position:relative;padding:0 6px;line-height:1.7}
#mediq-dashboard .v-circle-rail{position:relative;height:30px;margin-bottom:8px}
#mediq-dashboard .v-circle-node{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;width:24px;height:24px;margin:0 auto;border-radius:50%;border:2px solid #cadce5;background:#e0eaf0;box-shadow:0 0 0 4px white;box-sizing:border-box;color:white;font-size:15px;font-weight:bold}
#mediq-dashboard .v-circle-line{position:absolute;top:11px;right:50%;width:calc(100% + 12px);height:3px;background:#d9e5ec}
#mediq-dashboard .v-circle-step:last-child .v-circle-line{display:none}
#mediq-dashboard .v-circle-step.done .v-circle-node{background:#15b464;border-color:#15b464}
#mediq-dashboard .v-circle-line.done{background:#15b464}
#mediq-dashboard .v-circle-step.current .v-circle-node{border-color:#087eaa;background:white}
#mediq-dashboard .v-circle-step.current .v-circle-node>i{display:block;width:8px;height:8px;border-radius:50%;background:#087eaa;animation:v13-pulse 1.6s ease-in-out infinite}
#mediq-dashboard .v-circle-step strong{display:block;font-size:11px;color:#335e76;overflow-wrap:anywhere}
#mediq-dashboard .v-circle-step.current strong{color:#087eaa}
#mediq-dashboard .v-circle-step small,#mediq-dashboard .v-circle-step time{display:block;font-size:10px;color:#8ba0ae}
#mediq-dashboard .v-circle-step.current small{color:#087eaa;font-weight:bold}
#mediq-dashboard .v-live-timeline footer{display:flex;justify-content:space-between;gap:14px;border-top:1px solid #edf3f7;margin-top:20px;padding-top:12px;font-size:11px}
#mediq-dashboard .v-timeline-warning{font-size:11px;color:#a46515}
@keyframes v13-pulse{0%,100%{box-shadow:0 0 0 0 #087eaa40}50%{box-shadow:0 0 0 6px #087eaa10}}
@media(prefers-reduced-motion:reduce){#mediq-dashboard .v-circle-step.current .v-circle-node>i{animation:none}}
@media(max-width:760px){#mediq-dashboard .v-live-timeline header{flex-direction:column}#mediq-dashboard .v-circle-track{flex-direction:column;gap:0}#mediq-dashboard .v-circle-step{width:100%;text-align:right;padding:0 40px 22px 0;box-sizing:border-box}#mediq-dashboard .v-circle-rail{position:absolute;right:0;top:0;width:24px;height:100%;margin:0}#mediq-dashboard .v-circle-line{top:24px;right:11px;height:calc(100% - 12px);width:3px}#mediq-dashboard .v-circle-step:last-child{padding-bottom:0}}
/* Keep row actions together; status dashboard and restrained hospital-blue styling. */
#mediq-dashboard #vAssetDashboard{margin-bottom:20px;direction:rtl}
#mediq-dashboard .v-dashboard-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 2px 12px}
#mediq-dashboard .v-dashboard-heading>div{display:flex;flex-direction:column;gap:6px}
#mediq-dashboard .v-dashboard-heading strong{font-size:16px;color:#245574}
#mediq-dashboard .v-dashboard-heading span,#mediq-dashboard .v-dashboard-heading small{font-size:11px;color:#7893a5}
#mediq-dashboard .v-status-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
#mediq-dashboard .v-stat-card{--stat-color:#318ebe;--stat-tint:#edf7fd;position:relative;overflow:hidden;text-align:right;font:inherit;cursor:pointer;border:1px solid #d5e6ef;border-radius:17px;padding:18px 20px 16px;background:#fff;color:#345e78;display:grid;grid-template-columns:1fr 48px;gap:8px 12px;box-shadow:0 6px 22px #396a8a06;transition:border-color .16s,box-shadow .16s,transform .16s;min-width:0}
#mediq-dashboard .v-stat-card.active{--stat-color:#20996a;--stat-tint:#edf9f3}
#mediq-dashboard .v-stat-card.inactive{--stat-color:#d58a34;--stat-tint:#fff6e9}
#mediq-dashboard .v-stat-card.other{--stat-color:#7a88a3;--stat-tint:#f0f3f8}
#mediq-dashboard .v-stat-card:hover{transform:translateY(-2px);border-color:var(--stat-color);box-shadow:0 8px 26px #316b8a12}
#mediq-dashboard .v-stat-card.selected{border-color:var(--stat-color);box-shadow:inset 0 0 0 1px var(--stat-color),0 6px 22px #396a8a08}
#mediq-dashboard .v-stat-card:focus-visible{outline:3px solid #8dcced;outline-offset:3px}
#mediq-dashboard .v-stat-icon{grid-column:2;grid-row:1/span 2;width:46px;height:46px;display:flex;align-items:center;justify-content:center;border-radius:14px;background:var(--stat-tint);color:var(--stat-color)}
#mediq-dashboard .v-stat-icon svg{width:27px;height:27px}
#mediq-dashboard .v-stat-label{grid-column:1;grid-row:1;font-size:12px;color:#597b91;align-self:center}
#mediq-dashboard .v-stat-card>strong{grid-column:1;grid-row:2;font-size:28px;line-height:1.3;color:#244e68}
#mediq-dashboard .v-stat-bottom{grid-column:1/-1;font-size:10px;color:#8ba2b1;margin-top:5px}
#mediq-dashboard .v-stat-meter{grid-column:1/-1;height:4px;border-radius:5px;background:var(--stat-tint);overflow:hidden;margin-top:2px}
#mediq-dashboard .v-stat-meter>i{display:block;height:100%;background:var(--stat-color);border-radius:5px}
#mediq-dashboard #mqAssetsHost .mq-tbl{table-layout:auto!important;width:100%;border-collapse:separate;border-spacing:0}
#mediq-dashboard #mqAssetsHost .mq-tbl th{padding:14px 10px;background:#edf6fc;font-size:11px;line-height:1.7;color:#50738a;vertical-align:middle}
#mediq-dashboard #mqAssetsHost .mq-tbl td{padding:15px 10px;vertical-align:middle;border-bottom:1px solid #e8f0f5;font-size:11px;line-height:1.85}
#mediq-dashboard #mqAssetsHost .mq-tbl tr:last-child td{border-bottom:0}
#mediq-dashboard #mqAssetsHost .mq-tbl tbody tr{transition:background .15s;cursor:pointer}
#mediq-dashboard #mqAssetsHost .mq-tbl tbody tr:hover{background:#f6fbfe}
#mediq-dashboard #mqAssetsHost .mq-tbl th:last-child,#mediq-dashboard #mqAssetsHost .mq-tbl td:last-child{width:156px;min-width:156px;white-space:nowrap}
#mediq-dashboard .v-row-actions{display:inline-flex!important;flex-direction:row!important;flex-wrap:nowrap!important;align-items:center;justify-content:center;gap:6px;white-space:nowrap}
#mediq-dashboard .v-row-actions .mq-assets-btn{display:inline-flex!important;align-items:center;justify-content:center;gap:5px;min-width:66px;margin:0!important;padding:7px 9px!important;border-radius:9px;font-size:10px!important;white-space:nowrap;min-height:34px}
#mediq-dashboard .v-row-actions .mq-assets-btn svg{width:14px;height:14px;flex:0 0 14px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
#mediq-dashboard .v-row-actions [data-detail]{background:#f1f8fd;border-color:#d5e6ef;color:#377caa}
#mediq-dashboard .v-row-actions [data-vedit]{background:#fff;border-color:#bdd8e8;color:#377caa}
#mediq-dashboard .v-row-actions button:disabled{opacity:.45;cursor:not-allowed}
#mediq-dashboard .v-status-pill{display:inline-flex;align-items:center;gap:5px;border-radius:8px;background:#f0f3f8;color:#65758f;padding:4px 8px;font-size:10px;white-space:nowrap}
#mediq-dashboard .v-status-pill:before{content:'';width:5px;height:5px;border-radius:50%;background:currentColor}
#mediq-dashboard .v-status-pill.active{background:#ecf8f0;color:#27875b}
#mediq-dashboard .v-status-pill.inactive{background:#fff5e8;color:#a57532}
#mediq-dashboard .v-tag{max-width:210px;overflow-wrap:anywhere;line-height:1.8;padding:5px 9px;border:1px solid transparent}
#mediq-dashboard .v-tag.green{background:#edf8f1;color:#3b8060;border-color:#e2f0e7}
#mediq-dashboard .v-tag.orange{background:#fff4e8;color:#a57532;border-color:#faecd9}
#mediq-dashboard .mq-list-menu{border-color:#d5e6ef;box-shadow:0 6px 24px #396a8a05}
#mediq-dashboard .v-summary-row{padding:13px 0}
@media(max-width:1150px){#mediq-dashboard .v-status-cards{grid-template-columns:repeat(2,minmax(0,1fr))}#mediq-dashboard .mq-list-layout{grid-template-columns:240px minmax(0,1fr)}}
@media(max-width:900px){#mediq-dashboard .mq-list-layout{grid-template-columns:1fr}#mediq-dashboard #mqAssetsHost .mq-tbl th:last-child,#mediq-dashboard #mqAssetsHost .mq-tbl td:last-child{min-width:146px;width:146px}}
@media(max-width:600px){#mediq-dashboard .v-dashboard-heading{align-items:flex-start;flex-direction:column;gap:7px}#mediq-dashboard .v-stat-card{padding:14px;grid-template-columns:1fr 32px}#mediq-dashboard .v-stat-icon{width:32px;height:32px;border-radius:10px}#mediq-dashboard .v-stat-icon svg{width:21px;height:21px}#mediq-dashboard .v-stat-label{font-size:10px}#mediq-dashboard .v-stat-card>strong{font-size:24px}}
/* V15: dependent attribute values and compact vertical process under sidebar details. */
#mediq-dashboard .v-smart-filter{display:flex;flex-direction:column;gap:9px;direction:rtl}
#mediq-dashboard .v-smart-filter label{font-size:12px;font-weight:900;color:#315873}
#mediq-dashboard .v-smart-filter select,#mediq-dashboard .v-smart-filter input{width:100%;max-width:100%;min-height:39px;border:1px solid #cbdfea;border-radius:9px;padding:8px 11px;background:white;color:#315873;outline:none;font:12px Tahoma,Arial;box-sizing:border-box}
#mediq-dashboard .v-smart-filter select:focus,#mediq-dashboard .v-smart-filter input:focus{border-color:#3997c8;box-shadow:0 0 0 3px #3997c822}
#mediq-dashboard .v-smart-filter #vFilterDetails{display:flex;flex-direction:column;gap:9px;margin-top:8px}
#mediq-dashboard .v-smart-filter #vFilterDetails[hidden]{display:none!important}
#mediq-dashboard .v-smart-filter #vFilterValue{height:178px;overflow:auto}
#mediq-dashboard .v-smart-filter #vFilterValue option{padding:8px;white-space:normal}
#mediq-dashboard .v-smart-filter small,#mediq-dashboard .v-filter-hint{font-size:11px;color:#7995a7}
#mediq-dashboard .v-filter-actions{display:flex;justify-content:flex-start;margin-top:4px}
#mediq-dashboard .v-filter-chip{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:7px 0;padding:9px 11px;border:1px solid #d4e6f0;background:#f1f8fd;border-radius:9px;font-size:11px;color:#305b78;font-weight:700}
#mediq-dashboard .v-filter-chip button{border:0;background:#e5f6ee;color:#15986b;font-size:17px;font-weight:900;border-radius:6px;cursor:pointer;min-width:27px;min-height:27px}
#mediq-dashboard #vFilterList h4{font-size:12px;margin:15px 0 5px}
#mediq-dashboard .mq-list-menu #vLiveTimeline{margin:18px 0 0;padding:15px 5px 5px;border:0;border-top:1px solid #dce9f1;border-radius:0;box-shadow:none;background:transparent}
#mediq-dashboard .mq-list-menu #vLiveTimeline header{margin-bottom:17px}
#mediq-dashboard .mq-list-menu #vLiveTimeline header strong{font-size:13px;color:#245574}
#mediq-dashboard .mq-list-menu #vLiveTimeline .v-circle-track{display:flex;flex-direction:column;align-items:stretch;gap:0}
#mediq-dashboard .mq-list-menu #vLiveTimeline .v-circle-step{width:100%;min-height:69px;flex:none;text-align:right;padding:0 38px 18px 0}
#mediq-dashboard .mq-list-menu #vLiveTimeline .v-circle-rail{position:absolute;right:0;top:0;width:27px;height:100%;margin:0}
#mediq-dashboard .mq-list-menu #vLiveTimeline .v-circle-node{margin:0;width:24px;height:24px}
#mediq-dashboard .mq-list-menu #vLiveTimeline .v-circle-line{position:absolute;top:24px;right:11px;width:3px;height:calc(100% - 20px)}
#mediq-dashboard .mq-list-menu #vLiveTimeline .v-circle-step strong{font-size:11px}
#mediq-dashboard .mq-list-menu #vLiveTimeline .v-circle-step small{font-size:10px}
/* Inline Jira Assets-style attribute filtering; never uses the dialog overlay. */
#mediq-dashboard .v-filter-anchor{position:relative;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
#mediq-dashboard .v-inline-filters{position:absolute;top:calc(100% + 8px);right:0;z-index:80;width:min(610px,calc(100vw - 70px));max-height:min(560px,75vh);overflow:auto;direction:rtl;background:#fff;border:1px solid #cbd9e4;border-radius:8px;box-shadow:0 14px 40px rgba(21,55,75,.18);padding:12px;text-align:right}
#mediq-dashboard .v-filter-top{display:flex;align-items:center;justify-content:space-between;padding:3px 5px 12px;border-bottom:1px solid #e4edf3;font-size:13px;color:#245574}
#mediq-dashboard .v-filter-top button{border:0;background:transparent;font-size:23px;cursor:pointer;color:#55748a}
#mediq-dashboard .v-filter-columns{display:grid;grid-template-columns:minmax(160px,1fr) minmax(200px,1.2fr);gap:12px;padding-top:12px}
#mediq-dashboard .v-filter-attributes{border-left:1px solid #e4edf3;padding-left:10px;min-width:0}
#mediq-dashboard .v-filter-attributes input,#mediq-dashboard .v-filter-values input,#mediq-dashboard .v-filter-values select{width:100%;min-height:34px;max-width:100%;padding:7px 9px;border:1px solid #ccdce7;border-radius:5px;background:#fff;color:#315873;box-sizing:border-box;font:12px Tahoma}
#mediq-dashboard .v-attribute-list{max-height:290px;overflow-y:auto;margin-top:8px}
#mediq-dashboard .v-attribute-choice{display:flex;align-items:center;gap:9px;width:100%;min-height:34px;border:0;background:#fff;color:#315873;text-align:right;padding:6px;cursor:pointer;font:12px Tahoma}
#mediq-dashboard .v-attribute-choice:hover{background:#ecf5fc}
#mediq-dashboard .v-checkmark{display:inline-flex;justify-content:center;align-items:center;width:15px;height:15px;border:1px solid #a7b7c4;border-radius:2px;color:#247eaf;font-weight:bold;flex:none}
#mediq-dashboard .v-filter-values{min-width:0}
#mediq-dashboard .v-filter-values #vFilterDetails{display:flex;flex-direction:column;gap:8px}
#mediq-dashboard .v-filter-values #vFilterDetails[hidden],#mediq-dashboard .v-filter-values #vFilterPickHint[hidden]{display:none!important}
#mediq-dashboard .v-filter-values label{font-size:12px;font-weight:700;color:#345c74}
#mediq-dashboard .v-filter-values #vFilterValue{height:166px;overflow:auto}
#mediq-dashboard .v-filter-values #vFilterValue option{padding:7px}
#mediq-dashboard .v-filter-values small,#mediq-dashboard .v-filter-values p{font-size:11px;color:#7893a5}
#mediq-dashboard .v-inline-filters #vFilterList{border-top:1px solid #e5edf3;margin-top:10px;padding-top:6px}
@media(max-width:650px){#mediq-dashboard .v-filter-columns{grid-template-columns:1fr}#mediq-dashboard .v-filter-attributes{border-left:0;border-bottom:1px solid #e4edf3;padding-bottom:9px}#mediq-dashboard .v-attribute-list{max-height:155px}}
/* V18 - Inline checkbox selection, no separate active filter section */
#mediq-dashboard .v-filter-checklist{height:166px;overflow-y:auto;border:1px solid #ccdce7;border-radius:5px;background:white;padding:4px!important}
#mediq-dashboard .v-filter-check-option{display:flex!important;flex-direction:row!important;align-items:center;gap:9px;min-height:33px;margin:0!important;padding:5px 8px;cursor:pointer;color:#315873;font-size:12px;font-weight:600}
#mediq-dashboard .v-filter-check-option:hover{background:#eef7fc}
#mediq-dashboard .v-filter-check-option:has(input:checked){background:#e5f3fc;color:#20577b}
#mediq-dashboard .v-filter-check-option input[type=checkbox]{width:16px!important;height:16px!important;min-height:0!important;flex:0 0 16px;margin:0!important;accent-color:#3997c8;cursor:pointer}
#mediq-dashboard .v-filter-check-option span{flex:1;min-width:0}
#mediq-dashboard .v-filter-empty{margin:10px!important;text-align:center}
/* V19: simultaneous attribute filters and right-aligned checkboxes */
#mediq-dashboard .v-attribute-choice,
#mediq-dashboard .v-filter-check-option {
direction:rtl !important;
text-align:right !important;
justify-content:flex-start !important;
flex-direction:row !important;
}
#mediq-dashboard .v-attribute-choice { gap:9px !important; }
#mediq-dashboard .v-attribute-choice .v-attribute-tick {
display:inline-flex;align-items:center;justify-content:center;
width:16px;height:16px;min-width:16px;flex:0 0 16px;
border:1px solid #9bbad0;border-radius:3px;
background:#fff;color:#fff;font-size:12px;font-weight:900;
}
#mediq-dashboard .v-attribute-choice[aria-pressed="true"] .v-attribute-tick {
background:#3997c8;border-color:#3997c8;color:#fff;
}
#mediq-dashboard .v-attribute-current{background:#eaf4fc!important;}
#mediq-dashboard .v-filter-check-option input[type="checkbox"]{
order:0!important;margin:0!important;float:none!important;
position:static!important;inset:auto!important;
flex:0 0 16px!important;align-self:center!important;
}
#mediq-dashboard .v-filter-check-option span{order:1!important;flex:1 1 auto!important;text-align:right!important;}
/* ===== V26: scoped table alignment, purple department, hierarchy arrow ===== */
#mediq-dashboard .v-tag.purple{background:#f1e8ff!important;color:#773ab6!important;border:1px solid #e0c9ff!important}
#mediq-dashboard #mqAssetsHost .mq-tbl th:nth-child(n+4),
#mediq-dashboard #mqAssetsHost .mq-tbl td:nth-child(n+4){text-align:center!important;vertical-align:middle!important}
#mediq-dashboard #mqAssetsHost .mq-tbl td:nth-child(4) .v-tag,
#mediq-dashboard #mqAssetsHost .mq-tbl td:nth-child(5) .v-tag{margin:0 auto!important}
#mediq-dashboard .mq-module-card.mq-has-children{position:relative!important;padding-bottom:40px!important}
#mediq-dashboard .mq-module-card.mq-has-children .mq-hierarchy-arrow{position:absolute;bottom:12px;left:13px;width:25px;height:25px;display:flex;align-items:center;justify-content:center;border:1px solid #d6e4ed;border-radius:8px;background:#f1f7fb;color:#4484af;font:900 20px/1 Tahoma;pointer-events:none}
/* V27 — compact RTL filters and animated live workflow step */
#mediq-dashboard .v-inline-filters{
width:min(510px,calc(100vw - 36px)) !important;
max-height:min(500px,78vh) !important;
padding:10px !important;
direction:rtl !important;
text-align:right !important;
}
#mediq-dashboard .v-filter-columns{
grid-template-columns:minmax(0,1fr) minmax(0,1.04fr) !important;
gap:9px !important;
direction:rtl !important;
}
#mediq-dashboard .v-filter-attributes{
min-width:0 !important;padding-left:8px !important;
}
#mediq-dashboard .v-filter-values,#mediq-dashboard .v-filter-values #vFilterDetails{
direction:rtl !important;text-align:right !important;min-width:0 !important;
}
#mediq-dashboard .v-attribute-choice,
#mediq-dashboard .v-filter-check-option{
display:grid !important;
grid-template-columns:16px minmax(0,1fr) !important;
column-gap:7px !important;
justify-content:initial !important;
align-items:center !important;
direction:rtl !important;
text-align:right !important;
width:100% !important;
padding:5px 4px !important;
box-sizing:border-box !important;
}
#mediq-dashboard .v-attribute-choice .v-attribute-tick,
#mediq-dashboard .v-filter-check-option input[type="checkbox"]{
grid-column:1 !important;
grid-row:1 !important;
justify-self:start !important;
margin:0 !important;
order:initial !important;
}
#mediq-dashboard .v-attribute-choice>span:last-child,
#mediq-dashboard .v-filter-check-option>span{
grid-column:2 !important;grid-row:1 !important;
text-align:right !important;min-width:0 !important;
order:initial !important;flex:initial !important;
line-height:1.8 !important;
}
#mediq-dashboard .v-filter-checklist{padding:4px !important;}
#mediq-dashboard .v-filter-values label,
#mediq-dashboard .v-filter-values input,
#mediq-dashboard .v-filter-values select{
direction:rtl !important;text-align:right !important;
}
#mediq-dashboard .v-circle-step.current .v-circle-node{
animation:mq-live-circle 1.65s ease-in-out infinite !important;
}
#mediq-dashboard .v-circle-step.current .v-circle-node>i{
animation:mq-live-dot 1.65s ease-in-out infinite !important;
}
@keyframes mq-live-circle{
0%,100%{box-shadow:0 0 0 3px #ffffff,0 0 0 4px rgba(8,126,170,.12);border-color:#087eaa}
50%{box-shadow:0 0 0 4px #ffffff,0 0 0 10px rgba(8,126,170,.20);border-color:#0c9ac8}
}
@keyframes mq-live-dot{
0%,100%{opacity:1;transform:scale(1)}
50%{opacity:.32;transform:scale(.55)}
}
@media(max-width:540px){
#mediq-dashboard .v-filter-columns{grid-template-columns:1fr !important}
#mediq-dashboard .v-filter-attributes{border-left:0 !important;border-bottom:1px solid #e4edf3 !important;padding-bottom:8px !important}
}
/* V28 — visible live step + hierarchy corner indicator */
#mediq-dashboard .mq-card-grid.v-five .mq-module-card.mq-has-children{
position:relative!important;padding-bottom:40px!important;
}
#mediq-dashboard .mq-card-grid.v-five .mq-hierarchy-arrow{
position:absolute!important;left:13px!important;bottom:12px!important;
display:flex!important;visibility:visible!important;opacity:1!important;
width:27px!important;height:27px!important;align-items:center!important;justify-content:center!important;
border:1px solid #bfd8e9!important;border-radius:8px!important;
background:#eaf5fc!important;color:#257eaf!important;
font:900 19px/1 Tahoma,Arial,sans-serif!important;
pointer-events:none!important;z-index:3!important;
}
#mediq-dashboard .v-circle-step.current .v-circle-node{
animation:mediq-v28-live 1.15s ease-in-out infinite!important;
will-change:box-shadow,background-color,transform;
}
#mediq-dashboard .v-circle-step.current .v-circle-node>i{
animation:mediq-v28-dot 1.15s ease-in-out infinite!important;
}
@keyframes mediq-v28-live{
0%,100%{background:#fff;border-color:#087eaa;box-shadow:0 0 0 3px #fff,0 0 0 4px rgba(0,139,207,.15);transform:scale(1)}
50%{background:#d8f1ff;border-color:#0077b6;box-shadow:0 0 0 4px #fff,0 0 0 10px rgba(0,139,207,.36);transform:scale(1.12)}
}
@keyframes mediq-v28-dot{
0%,100%{opacity:1;transform:scale(1)}
50%{opacity:.18;transform:scale(.4)}
}
/* V29 — strong, clearly visible active-workflow blink. */
#mediq-dashboard .mq-list-menu #vLiveTimeline .v-circle-step.current .v-circle-node,
#mediq-dashboard #vLiveTimeline .v-circle-step.current .v-circle-node {
animation: mediq-v29-blink 1s steps(1,end) infinite !important;
transform:none !important;
will-change:background-color,box-shadow !important;
}
#mediq-dashboard .mq-list-menu #vLiveTimeline .v-circle-step.current .v-circle-node>i,
#mediq-dashboard #vLiveTimeline .v-circle-step.current .v-circle-node>i {
animation: mediq-v29-dot 1s steps(1,end) infinite !important;
}
@keyframes mediq-v29-blink {
0%, 100% { background:#fff; border-color:#087eaa; box-shadow:0 0 0 4px #fff,0 0 0 5px rgba(0,125,190,.18); }
50% { background:#087eaa; border-color:#087eaa; box-shadow:0 0 0 4px #fff,0 0 0 11px rgba(0,125,190,.40); }
}
@keyframes mediq-v29-dot {
0%,100% { background:#087eaa; opacity:1; }
50% { background:#fff; opacity:1; }
}
/* V30 - focused UI refinements */
#mediq-dashboard .mq-header{display:none!important}
#mediq-dashboard .mq-hero{margin-top:18px!important;min-height:110px!important;overflow:visible!important}
#mediq-dashboard .mq-hero .mq-header-left{position:relative;z-index:3;display:flex!important;flex-wrap:wrap!important;margin:0!important}
#mediq-dashboard .mq-hero .mq-header-welcome{color:#37617c!important}
#mediq-dashboard .mq-breadcrumb{margin-top:14px!important;min-height:48px!important}
#mediq-dashboard .mq-tree-title{margin-top:8px!important}
#mediq-dashboard .mq-assets-actions{order:-1}
#mediq-dashboard .mq-assets-btn.primary,#mediq-dashboard #vProcess,#mediq-dashboard #mqAssetsNew,#mediq-dashboard #vReview,#mediq-dashboard #vCommit{background:#179967!important;border-color:#179967!important;color:#fff!important}
#mediq-dashboard .mq-assets-btn.primary:hover,#mediq-dashboard #vProcess:hover{background:#0c7c51!important}
#mediq-dashboard .v-process-controls{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:12px 0}
#mediq-dashboard .v-process-controls label{font-size:12px;font-weight:700;color:#315873;display:flex;flex-direction:column;gap:7px}
#mediq-dashboard .v-process-controls select{width:100%;padding:9px;border:1px solid #cbdfea;border-radius:8px;background:#fff}
#mediq-dashboard .v-process-table{width:100%;border-collapse:collapse;margin-top:12px;font-size:11px}
#mediq-dashboard .v-process-table th,#mediq-dashboard .v-process-table td{padding:10px 7px;border-bottom:1px solid #deebf3;text-align:center;vertical-align:middle}
#mediq-dashboard .v-process-table th{background:#edf6fc;color:#315873}
#mediq-dashboard .v-active-flag{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:5px;background:#16a46b}
#mediq-dashboard .v-active-flag.inactive{background:#e08c44}
#mediq-dashboard .v-process-searchline{margin-top:15px}
@media(max-width:750px){#mediq-dashboard .v-process-controls{grid-template-columns:1fr}#mediq-dashboard .mq-hero{flex-wrap:wrap;gap:10px}}
#mediq-dashboard .mq-tree-row.level-2,#mediq-dashboard .mq-tree-row.level-3,#mediq-dashboard .mq-tree-row.level-4,#mediq-dashboard .mq-tree-children,#mediq-dashboard .mq-tree-separator{display:none!important}
#mediq-dashboard .mq-tree-row.level-1{min-height:48px!important}
#mediq-dashboard .mq-tree-title{font-size:12px!important}
/* V31: five-item primary tree, no former cycle navigation */
#mediq-dashboard .mq-tree-v31{margin-top:18px;gap:8px;overflow-y:auto;}
#mediq-dashboard .mq-tree-v31 .mq-tree-row{min-height:48px;padding:0 13px;font-size:13px;white-space:normal;line-height:1.8;}
#mediq-dashboard .mq-tree-v31 .mq-tree-dot{flex:0 0 6px;}
#mediq-dashboard .mq-tree-v31 .mq-tree-row.active{background:linear-gradient(90deg,#3997c8,#277eaf);}
#mediq-dashboard .v32-review-top{display:inline-flex!important;margin:10px 0 14px!important;align-items:center;justify-content:center}
/* V32 - keep main navigation blue; only operational submit buttons soft green */
#mediq-dashboard .mq-assets-btn.primary,#mediq-dashboard #mqAssetsNew,#mediq-dashboard #vProcess{background:linear-gradient(135deg,#429ed0,#2c88bb)!important;border-color:#328fbe!important;color:#fff!important}
#mediq-dashboard #vReview,#mediq-dashboard #vCommit,#mediq-dashboard .v-dialog .mq-assets-btn.primary{background:#43a981!important;border-color:#43a981!important;color:#fff!important}
#mediq-dashboard #vReview:hover,#mediq-dashboard #vCommit:hover{background:#339671!important}
/* Real back button sits at the left edge of the hero, never in its center */
#mediq-dashboard .mq-hero{position:relative!important;padding-left:122px!important}
#mediq-dashboard #mqBack{position:absolute!important;left:20px!important;top:50%!important;transform:translateY(-50%)!important;margin:0!important;right:auto!important}
/* Hierarchy is revealed only for the currently selected branch */
#mediq-dashboard .mq-tree-v31 .v32-tree-children{display:none!important;margin:0 0 7px!important;padding-right:12px!important}
#mediq-dashboard .mq-tree-v31 .v32-tree-children.open{display:block!important}
#mediq-dashboard .mq-tree-v31 .v32-tree-children .mq-tree-row.level-2{display:flex!important;min-height:35px!important;font-size:11px!important;color:rgba(255,255,255,.85)}
#mediq-dashboard .mq-tree-v31 .v32-tree-children .mq-tree-row.level-2.active{background:#2b83b7!important;color:white!important}
#mediq-dashboard .mq-tree-v31 .mq-tree-row.level-1[data-tree-key="logistics"]:after,
#mediq-dashboard .mq-tree-v31 .mq-tree-row.level-1[data-tree-key="property"]:after{content:'⌄';margin-right:auto;color:#eaf4fa;font-size:16px}
/* Compact right-to-left feature picker: no horizontal scrollbar or overflowing labels */
#mediq-dashboard .v-inline-filters{width:min(485px,calc(100vw - 35px))!important;max-height:min(490px,75vh)!important;overflow-y:auto!important;overflow-x:hidden!important;text-align:right!important;direction:rtl!important}
#mediq-dashboard .v-filter-columns{grid-template-columns:minmax(0,1fr) minmax(0,1fr)!important;gap:8px!important}
#mediq-dashboard .v-filter-attributes,#mediq-dashboard .v-filter-values{min-width:0!important;overflow:hidden!important}
#mediq-dashboard .v-attribute-list,#mediq-dashboard .v-filter-checklist{overflow-x:hidden!important;max-width:100%!important}
#mediq-dashboard .v-filter-check-option{display:flex!important;direction:rtl!important;flex-direction:row!important;justify-content:flex-start!important;align-items:center!important;gap:6px!important;text-align:right!important;padding:6px!important;min-width:0!important}
#mediq-dashboard .v-filter-check-option input[type=checkbox]{order:0!important;position:static!important;flex:0 0 15px!important;width:15px!important;height:15px!important;margin:0!important}
#mediq-dashboard .v-filter-check-option>span{order:1!important;flex:1 1 0!important;min-width:0!important;max-width:100%!important;overflow-wrap:anywhere!important;word-break:break-word!important;white-space:normal!important;text-align:right!important;line-height:1.7!important}
#mediq-dashboard .v-attribute-choice{white-space:normal!important;overflow-wrap:anywhere!important}
#mediq-dashboard #vFilterFind,#mediq-dashboard #vAttributeSearch{width:100%!important;min-width:0!important}
@media(max-width:520px){#mediq-dashboard .v-filter-columns{grid-template-columns:1fr!important}#mediq-dashboard .v-inline-filters{width:min(360px,calc(100vw - 20px))!important}}
/* V33 – button scope, statuses, request links and review placement */
#mediq-dashboard .mq-assets-btn.primary,
#mediq-dashboard #vProcess,
#mediq-dashboard #mqAssetsNew,
#mediq-dashboard #vEditSave,
#mediq-dashboard .v-dialog .mq-assets-btn.primary:not(#vReview):not(#vCommit){
background:#3997c8!important;border-color:#3997c8!important;color:#fff!important;
}
#mediq-dashboard #vReview,#mediq-dashboard #vCommit{
background:#54ae8b!important;border-color:#54ae8b!important;color:#fff!important;
}
#mediq-dashboard #vReview:hover,#mediq-dashboard #vCommit:hover{background:#439e7c!important;border-color:#439e7c!important;}
#mediq-dashboard #vReviewBox{margin:10px 0 16px;max-width:100%;}
#mediq-dashboard #vReviewBox:empty{display:none;}
#mediq-dashboard #vCommit{display:inline-flex;align-items:center;justify-content:center;margin-top:10px;}
#mediq-dashboard .v33-status-icon{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;width:16px;height:16px;border-radius:50%;font-size:11px;font-weight:900;margin-left:5px;}
#mediq-dashboard .v33-status-icon.is-active{color:#13804a;background:#dbf4e7;border:1px solid #8dd7ab;}
#mediq-dashboard .v33-status-icon.is-inactive{color:#b34c38;background:#fff0ea;border:1px solid #f0b5a5;}
#mediq-dashboard .v33-status-icon.is-unknown{color:#688194;background:#eff4f6;border:1px solid #cbdce6;}
#mediq-dashboard .v33-request-link{display:inline-flex;align-items:center;gap:6px;margin-top:12px;padding:7px 12px;border:1px solid #c3e0f2;border-radius:8px;background:#eff8ff;color:#176c9e!important;font-size:11px;font-weight:800;text-decoration:none!important;}
#mediq-dashboard .v33-request-link:hover{background:#dff1fc;}
/* V34 scoped visual fixes */
#mediq-dashboard #vProcess:hover,#mediq-dashboard #vProcess:focus-visible,
#mediq-dashboard #mqAssetsNew:hover,#mediq-dashboard #mqAssetsNew:focus-visible,
#mediq-dashboard .mq-assets-btn.primary:hover:not(#vReview):not(#vCommit){background:#287fae!important;border-color:#287fae!important;color:white!important;}
#mediq-dashboard .mq-logo{cursor:pointer}
#mediq-dashboard .mq-logo:focus-visible{outline:2px solid white;outline-offset:3px}
#mediq-dashboard .mq-hero:not(:has(#mqBack[style*="inline-block"])) {padding-left:24px!important}
#mediq-dashboard .mq-hero #mqBack[style*="none"]{display:none!important}
#mediq-dashboard .v-inline-filters{width:min(680px,calc(100vw - 42px))!important;max-height:min(520px,78vh)!important;overflow-x:hidden!important}
#mediq-dashboard .v-filter-columns{grid-template-columns:minmax(0,1fr) minmax(0,1.15fr)!important;gap:14px!important}
#mediq-dashboard .v-filter-attributes,#mediq-dashboard .v-filter-values{overflow:visible!important;min-width:0!important}
#mediq-dashboard .v-filter-check-option,#mediq-dashboard .v-attribute-choice{display:flex!important;flex-direction:row!important;direction:rtl!important;align-items:center!important;justify-content:flex-start!important;gap:9px!important;min-width:0!important;white-space:nowrap!important;padding:6px 8px!important}
#mediq-dashboard .v-filter-check-option input[type=checkbox],#mediq-dashboard .v-attribute-choice .v-attribute-tick{position:static!important;order:0!important;display:inline-flex!important;flex:0 0 16px!important;min-width:16px!important;width:16px!important;height:16px!important;grid-column:auto!important;grid-row:auto!important;margin:0!important}
#mediq-dashboard .v-filter-check-option>span,#mediq-dashboard .v-attribute-choice>span:last-child{order:1!important;display:block!important;flex:1 1 0!important;min-width:0!important;max-width:none!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;word-break:normal!important;overflow-wrap:normal!important;text-align:right!important;grid-column:auto!important;grid-row:auto!important}
#mediq-dashboard .v-filter-checklist,#mediq-dashboard .v-attribute-list{overflow-x:hidden!important;overflow-y:auto!important;max-width:100%!important;scrollbar-width:thin}
#mediq-dashboard .v34-process-loading{min-height:170px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:22px;text-align:center;color:#366784;border:1px solid #cce2ef;border-radius:12px;background:#f4faff;font-size:13px}
#mediq-dashboard .v34-process-loading small{font-size:11px;color:#61829a;line-height:1.8}
#mediq-dashboard .v34-spinner{width:34px;height:34px;border:4px solid #d2eaf6;border-top-color:#258fc6;border-radius:50%;animation:v34spin .8s linear infinite}
@keyframes v34spin{to{transform:rotate(360deg)}}
#mediq-dashboard #vProcessFilter[aria-busy="true"]{opacity:.65;cursor:progress}
@media(max-width:720px){#mediq-dashboard .v-filter-columns{grid-template-columns:1fr!important}}
</style>
<div class="mq-app">
<!-- =====================================================
MAIN
===================================================== -->
<main class="mq-main">
<!-- HEADER -->
<header class="mq-header">
<div class="mq-header-right">
<div
id="mqPageTitle"
class="mq-page-title"
>
تأمین
</div>
<div
id="mqPageDesc"
class="mq-page-description"
>
مدیریت فرآیند تأمین تجهیزات پزشکی
</div>
</div>
<div class="mq-header-left">
<a
id="mqEditPageBtn"
class="mq-edit-page-btn"
href="/pages/editpage.action?pageId=177807112"
title="ویرایش صفحه داشبورد"
>
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 20h9"></path>
<path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L8 18l-4 1 1-4Z"></path>
</svg>
<span>ویرایش صفحه</span>
</a>
<div class="mq-header-welcome">
<span class="mq-welcome-dot"></span>
<strong id="mqWelcomeUser">کاربر مدیکیو</strong>
<span>خوش آمدید</span>
</div>
</div>
</header>
<!-- HERO -->
<section class="mq-hero">
<div>
<div
id="mqHeroTitle"
class="mq-hero-title"
>
مدیریت تجهیزات
</div>
<div
id="mqHeroDesc"
class="mq-hero-desc"
>
بخش موردنظر خود را انتخاب کنید.
</div>
</div>
<button
id="mqBack"
class="mq-back-btn"
type="button"
>
بازگشت
</button>
</section>
<!-- BREADCRUMB -->
<div
id="mqBreadcrumb"
class="mq-breadcrumb"
></div>
<!-- DYNAMIC VIEW -->
<div
id="mqView"
class="mq-view"
>
<div class="mq-section-head">
<div>
<div class="mq-section-title">مدیریت تجهیزات</div>
<div class="mq-section-desc">یکی از حوزههای مدیریت تجهیزات را انتخاب کنید.</div>
</div>
</div>
<div class="mq-card-grid">
<div class="mq-module-card">
<div class="mq-module-icon">
<svg viewBox="0 0 24 24"><path d="M12 3l7 4-7 4-7-4 7-4z"></path><path d="M5 7v9l7 4 7-4V7"></path><path d="M12 11v9"></path></svg>
</div>
<div class="mq-module-name">مدیریت اموال</div>
</div>
<div class="mq-module-card">
<div class="mq-module-icon">
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"></circle><path d="M12 2v3"></path><path d="M12 19v3"></path><path d="M2 12h3"></path><path d="M19 12h3"></path></svg>
</div>
<div class="mq-module-name">مدیریت تعمیر و نگهداری</div>
</div>
<div class="mq-module-card">
<div class="mq-module-icon">
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"></circle><path d="M8 12h8"></path><path d="M12 8v8"></path></svg>
</div>
<div class="mq-module-name">مدیریت مالی و بهرهوری</div>
</div>
<div class="mq-module-card" data-action="logistics">
<div class="mq-module-icon">
<svg viewBox="0 0 24 24"><path d="M4 7h16"></path><path d="M6 7l1 13h10l1-13"></path><path d="M9 4h6"></path></svg>
</div>
<div class="mq-module-name">مدیریت تأمین و لجستیک</div>
<div class="mq-module-arrow">‹</div>
</div>
</div>
</div>
</main>
<!-- =====================================================
SIDEBAR
===================================================== -->
<aside class="mq-sidebar">
<div class="mq-logo">
<img
src="/download/attachments/174855060/MediQ%20Heart%20Medical%20Logo.png"
alt="MediQ"
>
</div>
<div class="mq-life-title">
چرخه عمر تجهیزات
</div>
<div class="mq-life">
<div
class="mq-life-item active"
data-cycle="supply"
>
<div class="mq-life-icon">
<svg viewBox="0 0 24 24">
<path d="M4 7h16"></path>
<path d="M6 7l1 13h10l1-13"></path>
<path d="M9 4h6"></path>
</svg>
</div>
تأمین
</div>
<div
class="mq-life-item"
data-cycle="operation"
>
<div class="mq-life-icon">
<svg viewBox="0 0 24 24">
<circle
cx="12"
cy="12"
r="3"
></circle>
<path d="M12 3v3"></path>
<path d="M12 18v3"></path>
<path d="M3 12h3"></path>
<path d="M18 12h3"></path>
</svg>
</div>
بهرهبرداری
</div>
<div
class="mq-life-item"
data-cycle="replacement"
>
<div class="mq-life-icon">
<svg viewBox="0 0 24 24">
<path d="M4 7h11"></path>
<path d="M12 4l3 3-3 3"></path>
<path d="M20 17H9"></path>
<path d="M12 14l-3 3 3 3"></path>
</svg>
</div>
جایگزینی
</div>
<div
class="mq-life-item"
data-cycle="maintenance"
>
<div class="mq-life-icon">
<svg viewBox="0 0 24 24">
<path
d="M14 6a4 4 0 0 0 4 4l-8 8-4-4 8-8z"
></path>
</svg>
</div>
نگهداری
</div>
</div>
<!-- MEDIQ V31 - FIVE PRIMARY NAVIGATION SECTIONS -->
<nav class="mq-tree mq-tree-v31" id="mqTree" aria-label="منوی اصلی مدیکیو">
<div class="mq-tree-row level-1" data-tree-action="equipmentMaintenance" data-tree-key="equipmentMaintenance"><span class="mq-tree-dot"></span><span>مدیریت تعمیر و نگهداری</span><span class="mm-tree-arrow">▾</span></div><div class="mm-tree-children" id="mmTreeChildren"><button type="button" data-mm-tree="overview">داشبورد فعالیتها</button><button type="button" data-mm-tree="plans">برنامهریزی پیشگیرانه</button><button type="button" data-mm-tree="em">ثبت و پیگیری خرابی</button><button type="button" data-mm-tree="suppliers">تعمیرکاران</button><button type="button" data-mm-tree="costing">مدیریت هزینههای نت</button><button type="button" data-mm-tree="risk">مدیریت ریسک</button></div>
<div class="mq-tree-row level-1" data-tree-action="logistics" data-tree-key="logistics"><span class="mq-tree-dot"></span><span>مدیریت تأمین و لجستیک</span></div>
<div class="mq-tree-children v32-tree-children" data-tree-group="logistics">
<div class="mq-tree-row level-2" data-v32-nav="consumable"><span class="mq-tree-dot"></span><span>کالاهای مصرفی</span></div>
<div class="mq-tree-row level-2" data-v32-nav="fixed"><span class="mq-tree-dot"></span><span>داراییهای ثابت</span></div>
<div class="mq-tree-row level-2" data-v32-nav="suppliers"><span class="mq-tree-dot"></span><span>تأمینکنندهها</span></div>
</div>
<div class="mq-tree-row level-1" data-tree-action="property" data-tree-key="property"><span class="mq-tree-dot"></span><span>مدیریت اموال و داراییها</span></div>
<div class="mq-tree-children v32-tree-children" data-tree-group="property">
<div class="mq-tree-row level-2" data-v32-nav="assets"><span class="mq-tree-dot"></span><span>نمای کلی داراییها</span></div>
<div class="mq-tree-row level-2" data-v32-nav="handover"><span class="mq-tree-dot"></span><span>اقدامات تحویل</span></div>
</div>
<div class="mq-tree-row level-1" data-tree-action="finance" data-tree-key="finance"><span class="mq-tree-dot"></span><span>مدیریت مالی و بهرهوری</span></div>
<div class="mq-tree-row level-1" data-tree-action="analysis" data-tree-key="analysis"><span class="mq-tree-dot"></span><span>تحلیل و آنالیز</span></div>
</nav>
<div class="mq-sidebar-bottom">
<div
id="mqLogout"
class="mq-logout"
>
خروج از حساب کاربری
</div>
</div>
</aside>
</div>
<div id="mqWz" aria-hidden="true">
<div class="wz-dialog" role="dialog" aria-modal="true" aria-labelledby="wzTitle">
<div class="wz-head">
<div class="wz-head-top"><div class="wz-title" id="wzTitle">انتخاب گروه</div><button type="button" class="wz-close" id="wzClose" aria-label="بستن">×</button></div>
<div class="wz-steps" id="wzSteps"></div>
</div>
<div class="wz-body" id="wzBody"></div>
<div class="wz-msg" id="wzMsg" role="status"></div>
<div class="wz-foot">
<div class="wz-foot-r"><button type="button" class="wz-btn" id="wzPrev">مرحله قبل</button></div>
<div class="wz-foot-l"><button type="button" class="wz-btn primary" id="wzNext">مرحله بعد</button></div>
</div>
</div>
</div>
<div id="mqDetail" aria-hidden="true">
<div class="wz-dialog" role="dialog" aria-modal="true" aria-labelledby="mqDetailTitle">
<div class="wz-head"><div class="wz-head-top"><div class="wz-title" id="mqDetailTitle">جزئیات دارایی</div><button type="button" class="wz-close" id="mqDetailClose" aria-label="بستن">×</button></div></div>
<div class="wz-body" id="mqDetailBody"></div>
</div>
</div>
<div id="mqToast" class="mq-toast"></div>
<style>
/* V38.24: left-column accordion with standalone request action */
#mediq-dashboard #mmContent.mm-with-fixed-side{display:grid!important;grid-template-columns:minmax(260px,290px) minmax(0,1fr)!important;gap:12px!important;align-items:start!important;min-width:0!important;direction:ltr!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>.v-stats,#mediq-dashboard #mmContent.mm-with-fixed-side>#mmActivitiesHeading{grid-column:1 / -1!important;min-width:0!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmPermanentIssue{float:none!important;grid-column:1!important;grid-row:3 / span 3!important;direction:rtl!important;position:sticky!important;top:12px!important;width:100%!important;min-width:0!important;max-width:100%!important;max-height:min(660px,calc(100vh - 40px))!important;overflow-y:auto!important;overflow-x:hidden!important;margin:0!important;padding:12px!important;box-sizing:border-box!important;z-index:3!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>.mm-actionbar{grid-column:2!important;grid-row:3!important;direction:rtl!important;margin:0!important;min-width:0!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmRows{grid-column:2!important;grid-row:4!important;direction:rtl!important;margin:0!important;min-width:0!important;width:100%!important;overflow:auto!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-card{padding:0!important;margin:9px 0!important;overflow:visible!important;border-radius:12px!important;min-width:0!important}
#mediq-dashboard #mmPermanentIssue .mm-accordion-toggle{appearance:none;border:0;background:#f2f8fd;border-radius:11px;padding:12px 11px;width:100%;font-family:inherit;font-size:13px;font-weight:800;color:#125d85;cursor:pointer;display:flex;align-items:center;justify-content:space-between;text-align:right;min-height:43px}
#mediq-dashboard #mmPermanentIssue .mm-accordion-toggle[aria-expanded="true"]{background:#e6f4fc;color:#075b89;border-radius:11px 11px 0 0;border-bottom:1px solid #cbe5f4}
#mediq-dashboard #mmPermanentIssue .mm-accordion-chevron{font-size:21px;transition:transform .2s}
#mediq-dashboard #mmPermanentIssue .mm-accordion-toggle[aria-expanded="true"] .mm-accordion-chevron{transform:rotate(180deg)}
#mediq-dashboard #mmPermanentIssue .mm-accordion-body{padding:11px!important;min-width:0!important;overflow-wrap:anywhere}
#mediq-dashboard #mmPermanentIssue .mm-accordion-body[hidden]{display:none!important}
#mediq-dashboard #mmPermanentIssue .mm-standalone-request{padding:11px!important;background:#f4faff!important;border:1px solid #c6e3f5!important}
#mediq-dashboard #mmPermanentIssue .mm-standalone-request #mmShowRequest{width:100%!important;min-height:42px!important;font-weight:800!important}
#mediq-dashboard #mmPermanentIssue input,#mediq-dashboard #mmPermanentIssue textarea{min-width:0!important;max-width:100%!important;box-sizing:border-box!important}
#mediq-dashboard #mmPermanentIssue .mm-accordion-body .mm-stage-grid{max-width:100%!important}
@media(max-width:920px){#mediq-dashboard #mmContent.mm-with-fixed-side{grid-template-columns:minmax(0,1fr)!important}#mediq-dashboard #mmContent.mm-with-fixed-side>#mmPermanentIssue{grid-column:1!important;grid-row:3!important;position:relative!important;max-height:460px!important}#mediq-dashboard #mmContent.mm-with-fixed-side>.mm-actionbar{grid-column:1!important;grid-row:4!important}#mediq-dashboard #mmContent.mm-with-fixed-side>#mmRows{grid-column:1!important;grid-row:5!important}}
</style>
<style>
/* MEDIQ V49.8: uploaded original priority icons, embedded locally */
#mediq-dashboard .mq-real-priority-icon {display:inline-block;width:23px;height:23px;object-fit:contain;vertical-align:middle;flex:none}
#mediq-dashboard .muf-priority-badge{display:inline-flex;align-items:center;gap:7px}
#mediq-dashboard .muf-urgency-icon{display:inline-flex;align-items:center;justify-content:center}
#mediq-dashboard .muf-urgency-icon .mq-real-priority-icon{width:22px;height:22px}
#mediq-dashboard .mq-v494-icon{object-fit:contain}
</style>
<script>
(function () {
"use strict";
function mqShowFatal(msg){
try{
var d=document.getElementById("mqHeroDesc");
if(d){d.textContent="خطای اسکریپت: "+msg;d.style.color="#ffb4b4";d.style.direction="ltr";d.style.textAlign="right";}
}catch(e){}
}
/* ============================================================
STATE
============================================================ */
var state = {
cycle:
"supply",
screen:
"equipment",
selectedAssetSection:
"purchased"
};
/* ============================================================
ELEMENTS
============================================================ */
var view =
document.getElementById(
"mqView"
);
var breadcrumb =
document.getElementById(
"mqBreadcrumb"
);
var heroTitle =
document.getElementById(
"mqHeroTitle"
);
var heroDesc =
document.getElementById(
"mqHeroDesc"
);
var backButton =
document.getElementById(
"mqBack"
);
var pageTitle =
document.getElementById(
"mqPageTitle"
);
var pageDesc =
document.getElementById(
"mqPageDesc"
);
var toast =
document.getElementById(
"mqToast"
);
/* ============================================================
ICONS
============================================================ */
var ICONS = {
"supply": "<path fill=\"#e5edf1\" stroke=\"none\" d=\"M3 8h12v10H3z\"/><path d=\"M3 8h12v10H3zM15 11h4l3 4v3h-7M19 11v4h3M7 8V4h7v4M10.5 4v4\"/><circle cx=\"7\" cy=\"19\" r=\"2\" fill=\"#fff\"/><circle cx=\"18\" cy=\"19\" r=\"2\" fill=\"#fff\"/><path d=\"M6 12h6m-3-2v4\"/>",
"maintenance": "<rect x=\"2\" y=\"3\" width=\"16\" height=\"12\" rx=\"2\" fill=\"#e5edf1\"/><path d=\"M4 10h3l2-4 3 7 2-3h2M8 15v4m-4 1h9\"/><path d=\"M21 11a4 4 0 0 1-4 5l-4 5-2-2 5-5a4 4 0 0 1 5-3z\" fill=\"#fff\"/>",
"property": "<rect x=\"3\" y=\"4\" width=\"14\" height=\"17\" rx=\"2\" fill=\"#e5edf1\"/><rect x=\"7\" y=\"2\" width=\"6\" height=\"4\" rx=\"1\" fill=\"#fff\"/><path d=\"M6 9h8M6 12h4M6 16h3M6 18h3\"/><path d=\"M14 11h5l3 3-7 7-5-5z\" fill=\"#fff\"/><circle cx=\"17\" cy=\"14\" r=\".8\"/>",
"finance": "<path fill=\"#e5edf1\" d=\"M3 3h13v16H3z\"/><path d=\"M6 15v-4m4 4V8m4 4V5M5 7l4-3 4 1 4-3\"/><ellipse cx=\"18\" cy=\"16\" rx=\"4\" ry=\"2\" fill=\"#fff\"/><path d=\"M14 16v4c0 3 8 3 8 0v-4M14 18c0 3 8 3 8 0\"/>",
"purchase": "<path d=\"M3 4h3l2 12h11l3-9H7\" fill=\"#e5edf1\"/><circle cx=\"10\" cy=\"20\" r=\"1.5\" fill=\"#fff\"/><circle cx=\"18\" cy=\"20\" r=\"1.5\" fill=\"#fff\"/><path d=\"M10 10h8m-4-3v6M3 9H1M4 12H2\"/>",
"newAsset": "<path d=\"M3 8l8-4 8 4-8 4z\" fill=\"#e5edf1\"/><path d=\"M3 8v11l8 4 8-4V8M11 12v11M7 6l8 4\"/><circle cx=\"19\" cy=\"5\" r=\"4\" fill=\"#fff\"/><path d=\"M19 3v4m-2-2h4\"/>",
"edit": "<rect x=\"3\" y=\"3\" width=\"13\" height=\"18\" rx=\"2\" fill=\"#e5edf1\"/><path d=\"M6 7h7M6 11h4M6 15h2\"/><path d=\"M10 18l1-4L20 5l3 3-9 9z\" fill=\"#fff\"/><path d=\"M18 7l3 3M10 18l4-1\"/>",
"consumable": "<path d=\"M3 11h18v11H3z\" fill=\"#e5edf1\"/><path d=\"M8 11V4h5v7M7 4h7M8 7h5M16 11V2h4v9M16 5h4M3 15h18\"/><path d=\"M10 17h4m-2-2v6\"/>"
};
/* ============================================================
TOAST
============================================================ */
var toastTimer = null;
function showToast(message) {
if (!toast) {
return;
}
toast.textContent =
publicMessage(message);
toast.classList.add(
"show"
);
window.clearTimeout(
toastTimer
);
toastTimer =
window.setTimeout(
function () {
toast.classList.remove(
"show"
);
},
2200
);
}
/* ============================================================
BREADCRUMB
============================================================ */
function buildBreadcrumb(items) {
items=(items||[]).filter(function(x){return x!=='تأمین';});
if (!breadcrumb) {
return;
}
var html = "";
items.forEach(function (item, index) {
var isLast = index === items.length - 1;
html +=
'<span class="' +
(isLast ? 'mq-bread-item mq-bread-current' : 'mq-bread-item mq-bread-link') +
'" data-bread-label="' + item + '">' +
item +
'</span>';
if (!isLast) {
html += '<span class="mq-bread-separator">/</span>';
}
});
breadcrumb.innerHTML = html;
var links = breadcrumb.querySelectorAll('.mq-bread-link');
for (var i = 0; i < links.length; i++) {
links[i].onclick = function () {
var label = this.getAttribute('data-bread-label');
if (label === 'تأمین' || label === 'مدیریت تجهیزات') {
renderEquipment();
}
else if (label === 'مدیریت تأمین و لجستیک') {
renderLogistics();
}
else if (label === 'ورود دارایی جدید') {
state.selectedAssetSection = 'purchased';
renderAssetSections('newAsset');
}
else if (label === 'ویرایش دارایی') {
renderEditAssetWorkspace();
}
};
}
}
/* ============================================================
CARD
============================================================ */
function moduleCard(
title,
icon,
action,
clickable
) {
return (
'<div class="mq-module-card" ' +
(
clickable
? 'data-action="' +
action +
'"'
: ''
) +
'>' +
'<div class="mq-module-icon">' +
'<svg viewBox="0 0 24 24">' +
icon +
'</svg>' +
'</div>' +
'<div class="mq-module-name">' +
title +
'</div>' +
(
clickable
? '<div class="mq-module-arrow">‹</div>'
: ''
) +
'</div>'
);
}
/* ============================================================
SCREEN : EQUIPMENT
============================================================ */
function renderEquipment() {
state.screen =
"equipment";
pageTitle.textContent =
"تأمین";
pageDesc.textContent =
"مدیریت فرآیند تأمین تجهیزات پزشکی";
heroTitle.textContent =
"مدیریت تجهیزات";
heroDesc.textContent =
"حوزه موردنظر را انتخاب کنید.";
backButton.style.display =
"none";
buildBreadcrumb(
[
"تأمین",
"مدیریت تجهیزات"
]
);
view.innerHTML =
'<div class="mq-section-head">' +
'<div>' +
'<div class="mq-section-title">' +
'مدیریت تجهیزات' +
'</div>' +
'<div class="mq-section-desc">' +
'یکی از حوزههای مدیریت تجهیزات را انتخاب کنید.' +
'</div>' +
'</div>' +
'</div>' +
'<div class="mq-card-grid">' +
moduleCard(
"مدیریت تأمین و لجستیک",
ICONS.supply,
"logistics",
true
) +
moduleCard(
"مدیریت تعمیر و نگهداری",
ICONS.maintenance,
"",
false
) +
moduleCard(
"مدیریت اموال و داراییها",
ICONS.property,
"",
false
) +
moduleCard(
"مدیریت مالی و بهرهوری",
ICONS.finance,
"",
false
) +
'</div>';
bindActions();
mqTreeActivate("equipment");
}
/* ============================================================
SCREEN : LOGISTICS
============================================================ */
function renderLogistics() {
state.screen =
"logistics";
heroTitle.textContent =
"مدیریت تأمین و لجستیک";
heroDesc.textContent =
"عملیات موردنظر را انتخاب کنید.";
backButton.style.display =
"inline-block";
buildBreadcrumb(
[
"تأمین",
"مدیریت تجهیزات",
"مدیریت تأمین و لجستیک"
]
);
view.innerHTML =
'<div class="mq-section-head">' +
'<div>' +
'<div class="mq-section-title">' +
'مدیریت تأمین و لجستیک' +
'</div>' +
'<div class="mq-section-desc">' +
'عملیات مرتبط با تأمین و لجستیک تجهیزات' +
'</div>' +
'</div>' +
'</div>' +
'<div class="mq-action-grid">' +
actionCard(
"خرید دارایی",
"فرآیند خرید دارایی",
ICONS.purchase,
"purchase"
) +
actionCard(
"ورود دارایی جدید",
"ثبت و تکمیل اطلاعات دارایی جدید",
ICONS.newAsset,
"newAsset"
) +
actionCard(
"ویرایش دارایی",
"مشاهده و ویرایش اطلاعات دارایی موجود",
ICONS.edit,
"editAsset"
) +
actionCard(
"کالاهای مصرفی",
"مدیریت کالاهای مصرفی",
ICONS.consumable,
"consumable"
) +
'</div>';
bindActions();
mqTreeActivate("logistics");
}
function actionCard(
title,
subtitle,
icon,
action
) {
return (
'<div class="mq-action-card" data-action="' +
action +
'">' +
'<div class="mq-action-icon">' +
'<svg viewBox="0 0 24 24">' +
icon +
'</svg>' +
'</div>' +
'<div>' +
'<div class="mq-action-title">' +
title +
'</div>' +
'<div class="mq-action-sub">' +
subtitle +
'</div>' +
'</div>' +
'</div>'
);
}
/* ============================================================
ASSET SECTION SCREEN
============================================================ */
function renderAssetSections(mode) {
state.screen =
mode;
var isNew =
mode ===
"newAsset";
var title =
isNew
? "ورود دارایی جدید"
: "ویرایش دارایی موجود";
heroTitle.textContent =
title;
heroDesc.textContent =
isNew
? "اطلاعات موردنیاز برای ورود دارایی را انتخاب کنید."
: "بخش موردنظر برای ویرایش دارایی را انتخاب کنید.";
backButton.style.display =
"inline-block";
buildBreadcrumb(
[
"تأمین",
"مدیریت تجهیزات",
"مدیریت تأمین و لجستیک",
title
]
);
view.innerHTML =
'<div class="mq-list-layout">' +
'<div class="mq-list-menu">' +
listOption(
"purchased",
"لیست داراییها"
) +
listOption(
"technical",
"شناسنامه فنی"
) +
listOption(
"financial",
"شناسنامه مالی"
) +
listOption(
"maintenance",
"شناسنامه نگهداری و تعمیر"
) +
listOption(
"commercial",
"شناسنامه بازرگانی"
) +
'</div>' +
'<div class="mq-preview">' +
'<div id="mqPreviewContent"></div>' +
'</div>' +
'</div>';
bindSectionOptions();
renderPreview(
state.selectedAssetSection
);
mqTreeActivate(mode + "-" + state.selectedAssetSection);
}
function listOption(
key,
title
) {
return (
'<div ' +
'class="mq-list-option" ' +
'data-section="' +
key +
'">' +
'<span>' +
title +
'</span>' +
'<span class="mq-option-badge">' +
'‹' +
'</span>' +
'</div>'
);
}
/* ============================================================
PREVIEW CONTENT
============================================================ */
var SECTION_NAMES = {
purchased:
"لیست داراییها",
technical:
"شناسنامه فنی",
financial:
"شناسنامه مالی",
maintenance:
"شناسنامه نگهداری و تعمیر",
commercial:
"شناسنامه بازرگانی"
};
/* ============================================================
SIMPLE PRESENTATION PAGES
============================================================ */
function renderSimplePage(
title
) {
heroTitle.textContent =
title;
heroDesc.textContent =
"نمای پرزنت این بخش";
backButton.style.display =
"inline-block";
buildBreadcrumb(
[
"تأمین",
"مدیریت تجهیزات",
"مدیریت تأمین و لجستیک",
title
]
);
view.innerHTML =
'<div class="mq-empty-cycle">' +
'<strong>' +
title +
'</strong>' +
'<span>' +
'این بخش در ادامه فرآیند طراحی تکمیل میشود.' +
'</span>' +
'</div>';
}
/* ============================================================
OTHER LIFE CYCLE TABS
============================================================ */
function renderOtherCycle(
key,
title
) {
state.cycle =
key;
pageTitle.textContent =
title;
pageDesc.textContent =
"چرخه عمر تجهیزات پزشکی";
heroTitle.textContent =
title;
heroDesc.textContent =
"نمای ساختار این بخش";
backButton.style.display =
"none";
buildBreadcrumb(
[
title
]
);
view.innerHTML =
'<div class="mq-empty-cycle">' +
'<strong>' +
title +
'</strong>' +
'<span>' +
'ساختار این بخش در مرحله بعد طراحی میشود.' +
'</span>' +
'</div>';
}
/* ============================================================
BIND MODULE ACTIONS
============================================================ */
function bindActions() {
var elements =
document.querySelectorAll(
"#mediq-dashboard [data-action]"
);
for (
var i = 0;
i < elements.length;
i++
) {
elements[i].onclick =
function () {
var action =
this.getAttribute(
"data-action"
);
if (
action ===
"logistics"
) {
renderLogistics();
}
else if (
action ===
"newAsset"
) {
renderAssetSections(
"newAsset"
);
}
else if (
action ===
"editAsset"
) {
renderEditAssetWorkspace();
}
else if (
action ===
"purchase"
) {
renderSimplePage(
"خرید دارایی"
);
}
else if (
action ===
"consumable"
) {
renderSimplePage(
"کالاهای مصرفی"
);
}
};
}
}
/* ============================================================
SECTION OPTIONS
============================================================ */
function bindSectionOptions() {
var options =
document.querySelectorAll(
"#mediq-dashboard .mq-list-option"
);
for (
var i = 0;
i < options.length;
i++
) {
options[i].onclick =
function () {
renderPreview(
this.getAttribute(
"data-section"
)
);
};
}
}
/* ============================================================
BACK
============================================================ */
if (backButton) {
backButton.onclick =
function () {
if (
state.screen ===
"logistics"
) {
renderEquipment();
}
else if (
state.screen ===
"newAsset" ||
state.screen ===
"editAsset"
) {
renderLogistics();
}
else if (
state.screen === "property" ||
state.screen === "equipmentMaintenance" ||
state.screen === "finance"
) {
renderEquipment();
}
else if (
state.screen === "purchase" ||
state.screen === "consumable"
) {
renderLogistics();
}
else {
renderLogistics();
}
};
}
/* ============================================================
LIFE CYCLE BUTTONS
============================================================ */
var lifeItems =
document.querySelectorAll(
"#mediq-dashboard .mq-life-item"
);
for (
var i = 0;
i < lifeItems.length;
i++
) {
lifeItems[i].onclick =
function () {
var cycle =
this.getAttribute(
"data-cycle"
);
for (
var x = 0;
x < lifeItems.length;
x++
) {
lifeItems[x]
.classList
.remove(
"active"
);
}
this.classList.add(
"active"
);
if (
cycle ===
"supply"
) {
state.cycle =
"supply";
renderEquipment();
}
else if (
cycle ===
"operation"
) {
renderOtherCycle(
"operation",
"بهرهبرداری"
);
}
else if (
cycle ===
"replacement"
) {
renderOtherCycle(
"replacement",
"جایگزینی"
);
}
else if (
cycle ===
"maintenance"
) {
renderOtherCycle(
"maintenance",
"نگهداری"
);
}
};
}
/* ============================================================
LOGOUT
============================================================ */
var logout =
document.getElementById(
"mqLogout"
);
if (logout) {
logout.onclick =
function () {
window.location.href =
"/logout.action";
};
}
/* ============================================================
CURRENT USER / FULL NAME
============================================================ */
(function loadMediQCurrentUser() {
var fallbackUser = "";
try {
if (window.AJS && AJS.Meta) {
fallbackUser = AJS.Meta.get("remote-user") || "";
}
} catch (e) {}
function setWelcomeName(name) {
var welcomeUser = document.getElementById("mqWelcomeUser");
if (welcomeUser && name) {
welcomeUser.textContent = name;
}
/* -------------------------------------------------
Edit page button - use current Confluence page id
------------------------------------------------- */
var editBtn = document.getElementById("mqEditPageBtn");
if (editBtn) {
var currentPageId = "";
try {
if (window.AJS && AJS.Meta) {
currentPageId = AJS.Meta.get("page-id") || "";
}
}
catch (ignorePageMeta) {}
if (!currentPageId) {
try {
currentPageId =
new URL(window.location.href)
.searchParams
.get("pageId") || "";
}
catch (ignorePageUrl) {}
}
if (currentPageId) {
editBtn.href =
"/pages/editpage.action?pageId=" +
encodeURIComponent(currentPageId);
}
}
}
setWelcomeName(fallbackUser || "کاربر مدیکیو");
try {
var xhr = new XMLHttpRequest();
xhr.open("GET", "/rest/api/user/current", true);
xhr.setRequestHeader("Accept", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState !== 4 || xhr.status < 200 || xhr.status >= 300) return;
try {
var user = JSON.parse(xhr.responseText || "{}");
setWelcomeName(user.displayName || user.fullName || fallbackUser || "کاربر مدیکیو");
} catch (e) {}
};
xhr.send();
} catch (e) {}
})();
/* ============================================================
SIDEBAR TREE
============================================================ */
function mqTreeOpen(group, open) {
var el = document.querySelector('#mediq-dashboard [data-tree-group="' + group + '"]');
var row = document.querySelector('#mediq-dashboard [data-tree-key="' + group + '"]');
if (el) el.classList.toggle("open", !!open);
if (row) row.classList.toggle("open", !!open);
}
function mqTreeReset() {
var rows = document.querySelectorAll("#mediq-dashboard .mq-tree-row");
for (var i = 0; i < rows.length; i++) {
rows[i].classList.remove("active");
rows[i].classList.remove("parent-active");
}
}
function mqTreeActivate(key) {
mqTreeReset();
var group=key;
if(key==='newAsset'||key==='editAsset'||key==='fixed'||key==='property'||key==='newAsset-purchased'||key==='newAsset-all'||key.startsWith('newAsset-')||key.startsWith('editAsset-'))group='property';
else if(key==='consumable'||key==='suppliers'||key==='purchase'||key==='logistics')group='logistics';
else if(key==='maintenance'||key==='equipmentMaintenance')group='equipmentMaintenance';
else if(key==='analysis')group='analysis';
var active=document.querySelector('#mediq-dashboard #mqTree [data-tree-key="'+group+'"]');
if(active)active.classList.add('active');
document.querySelectorAll('#mqTree .mq-tree-row.active').forEach(function(el){if(el!==active)el.classList.remove('active');});
var maintChildren=document.getElementById('mmTreeChildren');if(maintChildren)maintChildren.classList.toggle('open',group==='equipmentMaintenance');
var logisticsOpen=group==='logistics', propertyOpen=group==='property';
var lg=document.querySelector('#mqTree [data-tree-group="logistics"]'),pr=document.querySelector('#mqTree [data-tree-group="property"]');
if(lg)lg.classList.toggle('open',logisticsOpen);
if(pr)pr.classList.toggle('open',propertyOpen);
var sub=key==='suppliers'?'suppliers':key==='consumable'?'consumable':key==='fixed'?'fixed':null;
document.querySelectorAll('#mqTree [data-v32-nav]').forEach(function(el){el.classList.toggle('active',el.getAttribute('data-v32-nav')===sub);});
}
function mqTreeSimpleEquipmentPage(title, key) {
state.screen = key;
pageTitle.textContent = "تأمین";
pageDesc.textContent = "مدیریت فرآیند تأمین تجهیزات پزشکی";
heroTitle.textContent = title;
heroDesc.textContent = "نمای پرزنت این بخش";
backButton.style.display = "inline-block";
buildBreadcrumb(["تأمین", "مدیریت تجهیزات", title]);
view.innerHTML =
'<div class="mq-empty-cycle">' +
'<strong>' + title + '</strong>' +
'<span>این بخش در ادامه فرآیند طراحی تکمیل میشود.</span>' +
'</div>';
mqTreeActivate(key);
}
function bindTree() {
var rows = document.querySelectorAll('#mediq-dashboard #mqTree [data-tree-action]');
rows.forEach(function(row){
row.onclick=function(){
var action=this.getAttribute('data-tree-action');
if(action==='equipmentMaintenance')renderMediqMaintenance();
else if(action==='logistics')renderLogistics();
else if(action==='property')mqV48PropertyHome();
else if(action==='finance')mqTreeSimpleEquipmentPage('مدیریت مالی و بهرهوری','finance');
else if(action==='analysis')vAnalysis();
};
});
}
/* ============================================================
MEDIQ CODE-ONLY ENGINE (standalone)
Reads/writes through ScriptRunner REST endpoints only.
============================================================ */
var CTX = "";
try { if (window.AJS && typeof AJS.contextPath === "function") CTX = AJS.contextPath() || ""; } catch (e0) {}
var API = {
read: CTX + "/rest/scriptrunner/latest/custom/mediqGateway",
write: CTX + "/rest/scriptrunner/latest/custom/mediqGatewayWrite",
pages: CTX + "/rest/scriptrunner/latest/custom/mediqEnsureAssetPages"
};
var ATTR = {
groupParent: 6663, titleGroup: 6668, modelTitle: 6626,
manufacturer: 6627, modelType: 6629, modelGroup: 6630,
groupPersian: 6683,
devName: 6265, devId: 6267, assetNo: 6269, purchase: 6271,
supplier: 6272, department: 6277, status: 6279, model: 6644
};
var STATUS_FA = { "active": "فعال", "inactive": "غیرفعال", "entered-in-error": "دارای خطا" };
function $id(id) { return document.getElementById(id); }
function esc(v) {
var amp = String.fromCharCode(38);
return String(v == null ? "" : v).replace(/[&<>"']/g, function (c) {
var entities = {};
entities[String.fromCharCode(38)] = amp + "amp;";
entities[String.fromCharCode(60)] = amp + "lt;";
entities[String.fromCharCode(62)] = amp + "gt;";
entities[String.fromCharCode(34)] = amp + "quot;";
entities[String.fromCharCode(39)] = amp + "#39;";
return entities[c];
});
}
function clean(v) { return String(v == null ? "" : v).trim(); }
function norm(v) { return clean(v).toLowerCase(); }
function jfetch(url, opts) {
opts = opts || {};
opts.credentials = "same-origin";
opts.headers = opts.headers || {};
opts.headers.Accept = "application/json";
return fetch(url, opts).then(function (r) {
return r.text().then(function (raw) {
var data = null;
try { data = raw ? JSON.parse(raw) : {}; }
catch (e) { data = /^\d+$/.test(clean(raw)) ? { ok: true, id: clean(raw) } : { ok: r.ok, raw: raw }; }
if (!r.ok || (data && data.ok === false)) {
var err = new Error((data && data.message) || ("HTTP " + r.status + (raw ? " - " + raw.slice(0, 200) : "")));
err.status = r.status;
throw err;
}
return data || {};
});
});
}
var cache = {};
var mqPendingReads = {};
function apiGet(kind, force) {
if(!force && cache[kind]) return Promise.resolve(cache[kind]);
if(!force && mqPendingReads[kind]) return mqPendingReads[kind];
function batch(offset,items){
return jfetch(API.read+"?kind="+encodeURIComponent(kind)+"&limit=500&offset="+offset,{method:"GET"}).then(function(x){
var next=x.items || [];items=items.concat(next);
if(x.hasMore){
if(!next.length) throw new Error("دریافت فهرست کامل نشد.");
return batch(offset+next.length,items);
}
cache[kind]=items;return items;
});
}
var promise=batch(0,[]);
mqPendingReads[kind]=promise;
var clearPending=function(){if(mqPendingReads[kind]===promise) delete mqPendingReads[kind];};
promise.then(clearPending,clearPending);
return promise;
}
function apiWrite(op, payload) {
return jfetch(API.write + "?operation=" + encodeURIComponent(op), {
method: "POST",
headers: { "Content-Type": "application/json; charset=UTF-8", "X-Atlassian-Token": "no-check" },
body: JSON.stringify(payload || {})
});
}
function apiPages(payload) {
return jfetch(API.pages, {
method: "POST",
headers: { "Content-Type": "application/json; charset=UTF-8", "X-Atlassian-Token": "no-check" },
body: JSON.stringify(payload || {})
});
}
function attrList(row, id) {
if (!row || !row.attributes) return [];
var v = row.attributes[String(id)];
if (v == null) return [];
return Array.isArray(v) ? v.map(String) : [String(v)];
}
function attr(row, id) { var l = attrList(row, id); return l.length ? l[0] : ""; }
function findRow(kind, id) {
var rows = cache[kind] || [];
for (var i = 0; i < rows.length; i++) if (String(rows[i].id) === String(id)) return rows[i];
return null;
}
function labelOf(row) { return row ? (row.label || row.key || row.id) : ""; }
function groupLabel(row) {
var p = attr(row, ATTR.groupPersian);
return p ? (row.key ? row.key + " - " + p : p) : labelOf(row);
}
/* ---------------- Assets list / detail ---------------- */
function statusText(v) {
v = clean(v);
if (!v) return "—";
if (STATUS_FA[norm(v)]) return STATUS_FA[norm(v)];
return /^\d+$/.test(v) ? "—" : v;
}
var ASSET_PAGE = { page:1, size:"10", request:0 };
function filterAssetItems(items,query){
query=searchNorm(query);
return items.filter(function(row){
if(!query) return true;
var values=[row.key,row.label,row.id,statusText(attr(row,ATTR.status))];
Object.keys(row.attributes || {}).forEach(function(k){values=values.concat(attrList(row,k));});
return searchNorm(values.join(" ")).indexOf(query)>=0;
});
}
function searchNorm(value){
return latinDigits(value).replace(/ي/g,"ی").replace(/ك/g,"ک").toLowerCase().replace(/\s+/g," ").trim();
}
function assetPageSlice(items,page,size){
var count=size==="all"?Math.max(items.length,1):Number(size), pages=Math.max(1,Math.ceil(items.length/count));
page=Math.min(Math.max(1,page),pages);
return {items:items.slice((page-1)*count,page*count),page:page,pages:pages,start:items.length?(page-1)*count+1:0,end:Math.min(page*count,items.length)};
}
function loadAssets(hostId, searchId) {
var host=$id(hostId); if(!host) return;
var request=++ASSET_PAGE.request;
host.innerHTML='<div class="wz-loading">در حال دریافت اطلاعات داراییها...</div>';
apiGet("equipment",true).then(function(items){
if(request!==ASSET_PAGE.request || !$id(hostId)) return;
var input=searchId?$id(searchId):null;
function paint(){
host=$id(hostId);if(!host) return;
var filtered=filterAssetItems(items,input?input.value:""), part=assetPageSlice(filtered,ASSET_PAGE.page,ASSET_PAGE.size);
ASSET_PAGE.page=part.page;
host.innerHTML='<div class="mq-tbl-wrap"><table class="mq-tbl"><thead><tr><th>شناسه دستگاه</th><th>نام دستگاه</th><th>شماره اموال</th><th>وضعیت</th><th>عملیات</th></tr></thead><tbody>'+part.items.map(function(o){
return '<tr><td>'+esc(attr(o,ATTR.devId)||o.key||o.id)+'</td><td>'+esc(attr(o,ATTR.devName)||o.label||"—")+'</td><td>'+esc(attr(o,ATTR.assetNo)||"—")+'</td><td>'+esc(statusText(attr(o,ATTR.status)))+'</td><td><button type="button" class="mq-assets-btn" data-detail="'+esc(o.id)+'">مشاهده</button></td></tr>';
}).join("")+(filtered.length?'':'<tr><td colspan="5">موردی یافت نشد.</td></tr>')+'</tbody></table></div>'+
'<div class="mq-list-controls"><label>تعداد نمایش <select id="mqPageSize">'+["10","20","50","all"].map(function(n){return '<option value="'+n+'"'+(n===ASSET_PAGE.size?' selected':'')+'>'+(n==="all"?'همه':n)+'</option>';}).join("")+'</select></label><span>'+part.start+' تا '+part.end+' از '+filtered.length+' نتیجه — کل داراییها: '+items.length+'</span></div>'+
'<div class="mq-list-controls"><button type="button" class="mq-assets-btn" id="mqPagePrev"'+(part.page===1?' disabled':'')+'>قبلی</button><span>صفحه '+part.page+' از '+part.pages+'</span><button type="button" class="mq-assets-btn" id="mqPageNext"'+(part.page===part.pages?' disabled':'')+'>بعدی</button></div>';
$id("mqPageSize").onchange=function(){ASSET_PAGE.size=this.value;ASSET_PAGE.page=1;paint();};
$id("mqPagePrev").onclick=function(){ASSET_PAGE.page--;paint();};
$id("mqPageNext").onclick=function(){ASSET_PAGE.page++;paint();};
}
if(input)input.oninput=function(){ASSET_PAGE.page=1;paint();};
paint();
}).catch(function(e){if(request===ASSET_PAGE.request && $id(hostId))$id(hostId).innerHTML='<div class="mq-assets-message">خطا در دریافت اطلاعات: '+esc(publicMessage(e.message))+'</div>';});
}
function refName(kind, id) {
id = clean(id);
if (!id) return "—";
var r = findRow(kind, id);
return r ? labelOf(r) : id;
}
function openDetail(id) {
var row = findRow("equipment", id);
if (!row) return;
var box = $id("mqDetailBody");
$id("mqDetailTitle").textContent = attr(row, ATTR.devName) || labelOf(row);
box.innerHTML = '<div class="wz-loading">در حال بارگذاری...</div>';
$id("mqDetail").classList.add("open");
Promise.all([
apiGet("supplier").catch(function () { return []; }),
apiGet("department"),
loadExtraEquipment(),
apiGet("models").catch(function () { return []; })
]).then(function () {
var data = [
["شناسه دستگاه", attr(row, ATTR.devId)],
["نام دستگاه", attr(row, ATTR.devName)],
["مدل", refName("models", attr(row, ATTR.model))],
["شماره اموال", attr(row, ATTR.assetNo)],
["تاریخ خرید", displayJalali(attr(row, ATTR.purchase), false)],
["فروشنده", refName("supplier", attr(row, ATTR.supplier))],
["بخش بهرهبردار", refName("department", attr(row, ATTR.department))],
["وضعیت", statusText(attr(row, ATTR.status))],
["کد سامانه", row.key]
];
EQUIPMENT_FIELDS.forEach(function(f){
var values=attrList(row,f[0]);
if(f[3]==="ref") values=values.map(function(x){return refName(f[4],x);});
if(f[3]==="boolean") values=values.map(function(x){return x==="true"?"بله":x==="false"?"خیر":x;});
if(f[3] === "date" || f[3] === "datetime-local") values=values.map(function(v){return displayJalali(v,f[3] === "datetime-local");});
data.push([f[2],values.join("، ")]);
});
box.innerHTML = data.map(function (d) {
return '<div class="dt-row"><span>' + esc(d[0]) + "</span><span>" + esc(d[1] || "—") + "</span></div>";
}).join("");
});
}
function closeDetail() { $id("mqDetail").classList.remove("open"); }
function renderEditAssetWorkspace() {
state.selectedAssetSection = "purchased";
renderAssetSections("editAsset");
}
function renderPreview(section) {
state.selectedAssetSection = section;
if (state.screen === "newAsset" || state.screen === "editAsset") mqTreeActivate(state.screen + "-" + section);
var box = $id("mqPreviewContent");
if (!box) return;
var title = SECTION_NAMES[section] || "شناسنامه";
var isNew = state.screen === "newAsset";
if (section === "purchased") {
box.innerHTML =
'<div class="mq-preview-title">لیست داراییها</div>' +
'<div class="mq-preview-description">داراییهای ثبتشده در سامانه</div>' +
'<div class="mq-assets-head">' +
'<input id="mqAssetSearch" class="mq-edit-search" type="search" placeholder="جستجو در داراییها…" aria-label="جستجو در داراییها">' +
'<div class="mq-assets-actions">' +
'<button type="button" class="mq-assets-btn" id="mqAssetsRefresh">بهروزرسانی لیست</button>' +
(isNew ? '<button type="button" class="mq-assets-btn primary" id="mqAssetsNew">ثبت دارایی جدید</button>' : "") +
"</div></div>" +
'<div id="mqAssetsHost" class="mq-assets-host"></div>';
var nb = $id("mqAssetsNew"); if (nb) nb.onclick = openWizard;
$id("mqAssetsRefresh").onclick = function () { loadAssets("mqAssetsHost", "mqAssetSearch"); };
loadAssets("mqAssetsHost", "mqAssetSearch");
} else {
box.innerHTML =
'<div class="mq-preview-title">' + esc(title) + "</div>" +
'<div class="mq-preview-description">این بخش در حال آمادهسازی است.</div>' +
'<div class="mq-demo-box"><div class="mq-demo-icon">✓</div><div class="mq-demo-text">' + esc(title) + "</div></div>";
}
var opts = document.querySelectorAll("#mediq-dashboard .mq-list-option");
for (var i = 0; i < opts.length; i++) opts[i].classList.toggle("active", opts[i].getAttribute("data-section") === section);
}
/* ---------------- Registration wizard ---------------- */
var W = { open: false, step: 0, busy: false, token: 0, sel: { group: "", title: "", model: "" }, draft: {} };
var STEPS = [
{ key: "group", kind: "groups", noun: "گروه",
filter: function (r) { return true; }, label: groupLabel },
{ key: "title", kind: "titles", noun: "عنوان دستگاه",
filter: function (r) { return !W.sel.group || attrList(r, ATTR.titleGroup).indexOf(String(W.sel.group)) >= 0; }, label: labelOf },
{ key: "model", kind: "models", noun: "مدل",
filter: function (r) { return !W.sel.title || attrList(r, ATTR.modelTitle).indexOf(String(W.sel.title)) >= 0; }, label: labelOf }
];
var STEP_NAMES = ["گروه", "عنوان دستگاه", "مدل", "دستگاه"];
function publicMessage(value){
return String(value == null ? "" : value).replace(/Jira\s*Assets?/gi,"سامانه داراییها").replace(/Confluence/gi,"سامانه مستندات").replace(/ScriptRunner/gi,"سرویس").replace(/\bAssets?\b/gi,"دارایی").replace(/\bJira\b/gi,"سامانه").replace(/جیرا|کانفلوئنس/g,"سامانه").replace(/\bEndpoint\b/gi,"سرویس");
}
function wzMsg(text, isErr) {
var el = $id("wzMsg");
if (!el) return;
el.textContent = publicMessage(text);
el.className = "wz-msg" + (isErr ? " err" : "");
}
function wzBusy(flag) {
W.busy = !!flag;
var b = document.querySelectorAll("#mqWz button:not(.wz-close)");
for (var i = 0; i < b.length; i++) b[i].disabled = !!flag;
if (!flag) wzHeader();
}
function wzHeader() {
$id("wzTitle").textContent = W.step === 3 ? "ثبت دستگاه" : "انتخاب " + STEP_NAMES[W.step];
$id("wzSteps").innerHTML = STEP_NAMES.map(function (n, i) {
var c = i === W.step ? " active" : (i < W.step ? " done" : "");
var chosen = i < 3 ? findRow(STEPS[i].kind,W.sel[STEPS[i].key]) : null;
var chosenLabel = chosen ? STEPS[i].label(chosen) : (i === 3 ? clean(W.draft.deviceId) : "");
return '<div class="wz-step' + c + '"><div class="wz-step-heading"><b>'+(i+1)+'</b><span>'+esc(n)+'</span></div><small class="wz-step-value" title="'+esc(chosenLabel)+'">'+esc(chosenLabel || "—")+'</small></div>';
}).join("");
var prev = $id("wzPrev"), next = $id("wzNext");
prev.style.visibility = W.step === 0 ? "hidden" : "visible";
next.textContent = W.step === 3 ? "ثبت دستگاه" : "مرحله بعد";
}
function openWizard() {
W.open = true; W.step = 0; W.busy = false;
W.sel = { group: "", title: "", model: "" }; W.draft = {}; W.segment=0;
$id("mqWz").classList.add("open");
$id("mqWz").setAttribute("aria-hidden", "false");
wzPaint();
}
function closeWizard() {
mqCloseDatePopover();
W.open = false;
$id("mqWz").classList.remove("open");
$id("mqWz").setAttribute("aria-hidden", "true");
}
var JALALI_FORMAT = new Intl.DateTimeFormat("en-US-u-ca-persian-nu-latn",{year:"numeric",month:"numeric",day:"numeric",timeZone:"UTC"});
var JALALI_MONTHS=["فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"];
function latinDigits(value){return String(value==null?"":value).replace(/[۰-۹]/g,function(c){return String(c.charCodeAt(0)-1776);}).replace(/[٠-٩]/g,function(c){return String(c.charCodeAt(0)-1632);});}
function jalaliToday(){var d=new Date();return persianParts(new Date(Date.UTC(d.getFullYear(),d.getMonth(),d.getDate())));}
function padDate(n){return String(n).padStart(2,"0");}
function persianParts(date){var p={};JALALI_FORMAT.formatToParts(date).forEach(function(x){if(x.type!=="literal")p[x.type]=Number(x.value);});return {y:p.year,m:p.month,d:p.day};}
function jalaliToISO(y,m,d){
if(y<1200 || y>1600 || m<1 || m>12 || d<1 || d>31)throw new Error("تاریخ شمسی معتبر نیست.");
var low=Math.floor(Date.UTC(y+621,0,1)/86400000),high=Math.floor(Date.UTC(y+623,0,1)/86400000),target=y*10000+m*100+d;
while(low<=high){var middle=Math.floor((low+high)/2),date=new Date(middle*86400000),p=persianParts(date),key=p.y*10000+p.m*100+p.d;
if(key===target)return date.toISOString().slice(0,10);
if(key<target)low=middle+1;else high=middle-1;
}
throw new Error("روز انتخابشده در این ماه وجود ندارد.");
}
function parseJalali(value,withTime){
var raw=latinDigits(value).trim();if(!raw)return "";
var match=raw.match(/^(\d{4})[\/\-](\d{1,2})[\/\-](\d{1,2})(?:[ T]+(\d{1,2}):(\d{2})(?::(\d{2}))?)?$/);
if(!match)throw new Error(withTime?"تاریخ و ساعت را مانند ۱۴۰۵/۰۷/۲۸ ۱۴:۳۰ وارد کنید.":"تاریخ را مانند ۱۴۰۵/۰۷/۲۸ وارد کنید.");
var iso=jalaliToISO(Number(match[1]),Number(match[2]),Number(match[3]));
if(withTime){var hh=Number(match[4]||0),mm=Number(match[5]||0),ss=Number(match[6]||0);if(hh>23 || mm>59 || ss>59)throw new Error("ساعت معتبر نیست.");return iso+"T"+padDate(hh)+":"+padDate(mm)+":"+padDate(ss);}
if(match[4]!=null)throw new Error("این فیلد فقط تاریخ میپذیرد.");
return iso;
}
function displayJalali(value,withTime){
var raw=latinDigits(value).trim();if(!raw)return "";
var match=raw.match(/^(\d{4})[-\/](\d{1,2})[-\/](\d{1,2})(?:[ T](\d{2}):(\d{2}))?/);
if(!match)return raw;
if(Number(match[1])<1700)return raw.replace(/-/g,"/");
var date=new Date(Date.UTC(Number(match[1]),Number(match[2])-1,Number(match[3]))),p=persianParts(date);
return p.y+"/"+padDate(p.m)+"/"+padDate(p.d)+(withTime?" "+(match[4]||"00")+":"+(match[5]||"00"):"");
}
function jalaliField(id,label,value,withTime,required){
return '<div class="wz-field mq-jdate"><label for="'+id+'">'+esc(label)+(required?' *':'')+'</label><div class="wz-inline"><input type="text" dir="ltr" id="'+id+'" data-jalali="'+(withTime?'time':'date')+'" value="'+esc(displayJalali(value,withTime))+'" placeholder="'+(withTime?'۱۴۰۵/۰۷/۲۸ ۱۴:۳۰':'۱۴۰۵/۰۷/۲۸')+'" autocomplete="off"><button type="button" class="wz-plus" data-jcalendar="'+id+'" aria-label="انتخاب تاریخ شمسی">▦</button></div><div class="mq-jcalendar" id="'+id+'Calendar" hidden></div></div>';
}
function gregorianInput(id,withTime){var el=$id(id);return el?parseJalali(el.value,withTime):"";}
function validateJalaliInputs(){
var inputs=document.querySelectorAll('#wzBody [data-jalali]');
for(var i=0;i<inputs.length;i++)try{parseJalali(inputs[i].value,inputs[i].dataset.jalali==="time");inputs[i].setCustomValidity("");}catch(e){inputs[i].setCustomValidity(e.message);revealEquipmentField(inputs[i]);inputs[i].focus();wzMsg(e.message,true);return false;}
return true;
}
var MQ_DATE_POPOVER = null;
function mqDatePopoverRect(anchor,width,height,bounds){
var gap=7,pad=10,leftEdge=bounds.left+pad,rightEdge=bounds.right-pad,topEdge=bounds.top+pad,bottomEdge=bounds.bottom-pad;
var available=Math.max(1,bottomEdge-topEdge),shownHeight=Math.min(height,available);
var below=bottomEdge-anchor.bottom-gap,above=anchor.top-gap-topEdge;
var top=anchor.bottom+gap;
if(below<shownHeight && above>=shownHeight)top=anchor.top-gap-shownHeight;
// If neither side fits, overlap the fields while retaining the full calendar height.
top=Math.max(topEdge,Math.min(top,bottomEdge-shownHeight));
return {left:Math.max(leftEdge,Math.min(anchor.right-width,rightEdge-width)),top:top,maxHeight:available};
}
function mqPositionDatePopover(){
var active=MQ_DATE_POPOVER;if(!active)return;
if(!active.anchor.isConnected || !active.box.isConnected){mqCloseDatePopover();return;}
var body=active.anchor.closest("#vEditBody") || $id("wzBody"),area=body.getBoundingClientRect();
var bounds={left:Math.max(0,area.left),right:Math.min(window.innerWidth,area.right),top:Math.max(0,area.top),bottom:Math.min(window.innerHeight,area.bottom)};
var width=Math.min(330,Math.max(1,bounds.right-bounds.left-20));
active.box.style.width=width+"px";
active.box.style.maxHeight="none";
var field=active.anchor.closest(".wz-inline") || active.anchor;
var rect=mqDatePopoverRect(field.getBoundingClientRect(),width,active.box.scrollHeight+2,bounds);
active.box.style.left=rect.left+"px";active.box.style.top=rect.top+"px";active.box.style.maxHeight=rect.maxHeight+"px";
}
function mqCloseDatePopover(){
var active=MQ_DATE_POPOVER;if(!active)return;MQ_DATE_POPOVER=null;
active.box.hidden=true;active.box.classList.remove("mq-date-floating");
active.box.removeAttribute("style");active.anchor.setAttribute("aria-expanded","false");
if(active.parent.isConnected)active.parent.appendChild(active.box);else active.box.remove();
}
function bindJalaliInputs(){
document.querySelectorAll('#wzBody [data-jcalendar],#vEditBody [data-jcalendar]').forEach(function(button){
button.setAttribute("aria-expanded","false");button.setAttribute("aria-controls",button.dataset.jcalendar+"Calendar");
button.onclick=function(){
var id=this.dataset.jcalendar,box=$id(id+'Calendar'),same=MQ_DATE_POPOVER && MQ_DATE_POPOVER.box===box;
mqCloseDatePopover();if(same)return;
var p=jalaliToday(),raw=latinDigits($id(id).value),match=raw.match(/^(\d{4})\/(\d{1,2})/);
if(match && Number(match[1])>=1200 && Number(match[1])<=1600 && Number(match[2])>=1 && Number(match[2])<=12){p.y=Number(match[1]);p.m=Number(match[2]);}
MQ_DATE_POPOVER={box:box,anchor:this,parent:box.parentNode};
box.classList.add("mq-date-floating");(this.closest("#vDialog") ? this.closest(".v-dialog") : $id("mqWz")).appendChild(box);
box.hidden=false;this.setAttribute("aria-expanded","true");
paintJalaliCalendar(id,p.y,p.m);mqPositionDatePopover();
box.onclick=function(){if(box.hidden)mqCloseDatePopover();else mqPositionDatePopover();};
};
});
}
document.addEventListener("pointerdown",function(e){var active=MQ_DATE_POPOVER;if(active && !active.box.contains(e.target) && !active.anchor.contains(e.target))mqCloseDatePopover();},true);
document.addEventListener("keydown",function(e){if(e.key==="Escape" && MQ_DATE_POPOVER){mqCloseDatePopover();e.preventDefault();e.stopImmediatePropagation();}},true);
document.addEventListener("scroll",function(e){var active=MQ_DATE_POPOVER;if(active && !active.box.contains(e.target))mqCloseDatePopover();},true);
window.addEventListener("resize",mqPositionDatePopover);
function paintJalaliCalendar(id,y,m){
var box=$id(id+'Calendar'),first=new Date(jalaliToISO(y,m,1)+"T00:00:00Z"),offset=(first.getUTCDay()+1)%7,days=m<=6?31:30;
if(m===12){try{jalaliToISO(y,12,30);}catch(e){days=29;}}
box.innerHTML='<div class="mq-jcal-head"><button type="button" data-month="-1">ماه قبل</button><b>'+JALALI_MONTHS[m-1]+' '+y+'</b><button type="button" data-month="1">ماه بعد</button></div><div class="mq-jcal-grid">'+["ش","ی","د","س","چ","پ","ج"].map(function(x){return '<span>'+x+'</span>';}).join("")+Array(offset).fill('<span></span>').join("")+Array.from({length:days},function(_,i){return '<button type="button" data-day="'+(i+1)+'">'+(i+1)+'</button>';}).join("")+'</div><button type="button" data-today>امروز</button> <button type="button" data-clear>پاک کردن</button>';
box.querySelectorAll('[data-month]').forEach(function(b){b.onclick=function(){var next=m+Number(this.dataset.month),year=y;if(next<1){next=12;year--;}if(next>12){next=1;year++;}if(year>=1200 && year<=1600)paintJalaliCalendar(id,year,next);};});
function select(p){var el=$id(id),time=latinDigits(el.value).match(/[ T](\d{1,2}:\d{2}(?::\d{2})?)$/);el.value=p.y+'/'+padDate(p.m)+'/'+padDate(p.d)+(el.dataset.jalali==='time'?' '+(time?time[1]:'00:00'):'');el.setCustomValidity('');box.hidden=true;el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));}
box.querySelectorAll('[data-day]').forEach(function(b){b.onclick=function(){select({y:y,m:m,d:Number(this.dataset.day)});};});
box.querySelector('[data-today]').onclick=function(){select(jalaliToday());};
box.querySelector('[data-clear]').onclick=function(){var el=$id(id);el.value='';el.setCustomValidity('');el.dispatchEvent(new Event('input',{bubbles:true}));el.dispatchEvent(new Event('change',{bubbles:true}));box.hidden=true;};
}
function field(id, label, value, type, req) {
if (type === "date" || type === "datetime-local") return jalaliField(id,label,value,type === "datetime-local",req);
return '<div class="wz-field"><label for="' + id + '">' + esc(label) + (req ? " *" : "") + '</label><input id="' + id + '" type="' + (type || "text") + '" value="' + esc(value || "") + '"></div>';
}
function selectOptions(rows, selected, labelFn) {
return '<option value="">انتخاب کنید</option>' + rows.map(function (r) {
return '<option value="' + esc(r.id) + '"' + (String(r.id) === String(selected) ? " selected" : "") + ">" + esc((labelFn || labelOf)(r)) + "</option>";
}).join("");
}
function selectField(id, label, rows, selected, req, withPlus) {
return '<div class="wz-field"><label for="' + id + '">' + esc(label) + (req ? " *" : "") + "</label>" +
(withPlus ? '<div class="wz-inline"><select id="' + id + '">' + selectOptions(rows, selected) + '</select><button type="button" class="wz-plus" data-plus="' + id + '" title="ثبت جدید" aria-label="ثبت جدید">+</button></div>' +
'<div class="wz-mini" id="' + id + 'Mini" hidden><input type="text" id="' + id + 'MiniName" placeholder="نام جدید"><button type="button" class="wz-primary" data-miniok="' + id + '">ثبت</button></div>'
: '<select id="' + id + '">' + selectOptions(rows, selected) + "</select>") +
"</div>";
}
function wzPaint() {
mqCloseDatePopover();
wzHeader();
var body = $id("wzBody");
var token = ++W.token;
wzMsg("");
if (W.step === 3) return paintEquipment(token);
body.innerHTML = '<div class="wz-loading">در حال دریافت اطلاعات...</div>';
var cfg = STEPS[W.step];
var need = [apiGet(cfg.kind)];
if (W.step === 0) need.push(Promise.resolve([]));
Promise.all(need).then(function (v) {
if (token !== W.token) return;
var all = v[0], rows = all.filter(cfg.filter);
var html =
'<div class="wz-label">' + esc(cfg.noun) + "</div>" +
'<div class="wz-selected" id="wzSel"></div>' +
'<div class="wz-picker" id="wzPicker"><input class="wz-search" id="wzSearch" type="text" placeholder="جستجو..." autocomplete="off"><div class="wz-list" id="wzList"></div></div>' +
'<button type="button" class="wz-link" id="wzToggle">+ ثبت ' + esc(cfg.noun) + " جدید</button>" +
'<div class="wz-create" id="wzCreate" hidden>' + createHtml(cfg) + "</div>";
body.innerHTML = html;
drawPicker(cfg, rows, "");
$id("wzSearch").oninput = function () { drawPicker(cfg, rows, this.value); };
$id("wzList").onclick = function (e) {
var toggle=e.target.closest("[data-group-toggle]");
if(toggle){var groupId=toggle.getAttribute("data-group-toggle");GROUP_COLLAPSED[groupId]=!GROUP_COLLAPSED[groupId];drawPicker(cfg,rows,$id("wzSearch").value);return;}
if(W.busy)return;
var b = e.target.closest(".wz-item"); if (!b) return;
W.sel[cfg.key] = b.getAttribute("data-id");
if (cfg.key === "group") { W.sel.title = ""; W.sel.model = ""; }
if (cfg.key === "title") { W.sel.model = ""; }
drawPicker(cfg, rows, $id("wzSearch").value);
wzHeader();
};
$id("wzToggle").onclick = function () {
var c = $id("wzCreate"); c.hidden = !c.hidden;
if (!c.hidden) { var f = c.querySelector("input,select"); if (f) f.focus(); }
};
bindCreate(cfg);
}).catch(function (e) { if (token === W.token) { body.innerHTML = ""; wzMsg(e.message, true); } });
}
var GROUP_COLLAPSED = {};
function groupTreeData(rows){
var byId=Object.create(null), parent=Object.create(null), children=Object.create(null), roots=[];
rows.forEach(function(r){byId[String(r.id)]=r;children[String(r.id)]=[];});
rows.forEach(function(r){
var id=String(r.id),p=attr(r,ATTR.groupParent),seen={};
while(p && byId[p] && !seen[p]){seen[p]=true;p=attr(byId[p],ATTR.groupParent);}
var direct=attr(r,ATTR.groupParent);
if(!direct || !byId[direct] || seen[id] || (p && seen[p]))direct="";
parent[id]=direct;
if(direct)children[direct].push(r);else roots.push(r);
});
return {byId:byId,parent:parent,children:children,roots:roots};
}
function renderGroupTree(rows,query,selected){
var tree=groupTreeData(rows),q=searchNorm(query),keep=Object.create(null);
rows.forEach(function(r){if(!q || searchNorm(groupLabel(r)).indexOf(q)>=0){var id=String(r.id),seen={};while(id && !seen[id]){seen[id]=true;keep[id]=true;id=tree.parent[id];}}});
function render(nodes){return nodes.filter(function(r){return keep[String(r.id)];}).map(function(r){
var id=String(r.id),kids=tree.children[id].filter(function(x){return keep[String(x.id)];}),closed=!q && GROUP_COLLAPSED[id],has=kids.length>0;
return '<li role="treeitem" aria-selected="'+(String(selected)===id?'true':'false')+'"'+(has?' aria-expanded="'+(!closed)+'"':'')+'><div class="wz-tree-line">'+
(has?'<button type="button" class="wz-tree-toggle" data-group-toggle="'+esc(id)+'" aria-label="'+(closed?'باز کردن':'بستن')+' '+esc(groupLabel(r))+'">'+(closed?'+':'−')+'</button>':'<span class="wz-tree-spacer"></span>')+
'<button type="button" class="wz-item'+(String(selected)===id?' sel':'')+'" data-id="'+esc(id)+'">'+esc(groupLabel(r))+'</button></div>'+
(has && !closed?'<ul role="group">'+render(kids)+'</ul>':'')+'</li>';
}).join("");}
var body=render(tree.roots);
return body?'<ul class="wz-group-tree" role="tree" aria-label="درخت گروهها">'+body+'</ul>':'<div class="wz-empty">گروهی یافت نشد.</div>';
}
function drawPicker(cfg, rows, q) {
var list = $id("wzList"); if (!list) return;
q = norm(q);
var sel = W.sel[cfg.key], html = "", n = 0;
rows.forEach(function (r) {
var l = cfg.label(r);
if (q && norm(l).indexOf(q) < 0) return;
n++;
html += '<button type="button" class="wz-item' + (String(r.id) === String(sel) ? " sel" : "") + '" data-id="' + esc(r.id) + '">' + esc(l) + "</button>";
});
list.innerHTML = cfg.key === "group" ? renderGroupTree(rows,q,sel) : n ? html : '<div class="wz-empty">' + (rows.length ? "موردی با این عبارت پیدا نشد." : "موردی برای نمایش وجود ندارد؛ از دکمهی ثبت جدید استفاده کنید.") + "</div>";
var box = $id("wzSel"), cur = findRow(cfg.kind, sel);
box.className = "wz-selected" + (cur ? " has" : "");
box.textContent = cur ? "انتخابشده: " + cfg.label(cur) : "هنوز " + cfg.noun + "ی انتخاب نشده است.";
}
function groupParentOptions(groups){
var tree=groupTreeData(groups),out=[];
function walk(rows,path){rows.forEach(function(r){var parts=path.concat([attr(r,ATTR.groupPersian)||labelOf(r)]);out.push({id:r.id,label:parts.join(" / ")});walk(tree.children[String(r.id)],parts);});}
walk(tree.roots,[]);return out;
}
function createHtml(cfg) {
if (cfg.key === "group") {
var groups = cache.groups || [];
return "<strong>ثبت گروه جدید</strong>" + field("wzName", "نام گروه", "", "text", true) +
selectField("wzParent", "گروه والد", groupParentOptions(groups), "", false, false) +
'<button type="button" class="wz-primary" id="wzCreateBtn">ثبت و انتخاب گروه</button>';
}
if (cfg.key === "title") {
return "<strong>ثبت عنوان دستگاه جدید</strong>" + field("wzName", "عنوان دستگاه", "", "text", true) +
'<div class="wz-static">گروه: ' + esc(groupLabel(findRow("groups", W.sel.group) || {})) + "</div>" +
'<button type="button" class="wz-primary" id="wzCreateBtn">ثبت و انتخاب عنوان دستگاه</button>';
}
return '<strong>ثبت مدل جدید</strong><div class="wz-loading" id="wzModelLoading">در حال بارگذاری فرم...</div><div id="wzModelForm"></div>';
}
function bindCreate(cfg) {
var btn = $id("wzCreateBtn");
if (cfg.key === "group" && btn) btn.onclick = createGroup;
if (cfg.key === "title" && btn) btn.onclick = createTitle;
var nameInput = $id("wzName");
if (nameInput) nameInput.onkeydown = function (e) { if (e.key === "Enter") { e.preventDefault(); (cfg.key === "group" ? createGroup : createTitle)(); } };
if (cfg.key === "model") loadModelForm();
}
function afterCreate(kind, selKey, id, okText) {
delete cache[kind];
return apiGet(kind,true).then(function(){
W.sel[selKey]=String(id);
if(selKey === "group"){W.sel.title="";W.sel.model="";W.step=1;}
if(selKey === "title"){W.sel.model="";W.step=2;}
if(selKey !== "model")wzPaint();
else wzHeader();
});
}
function createGroup() {
if (W.busy) return;
var name = clean($id("wzName").value);
if (!name) return wzMsg("نام گروه الزامی است.", true);
var parent = $id("wzParent").value, values = {};
values[String(ATTR.groupPersian)] = name;
if (parent) values[String(ATTR.groupParent)] = parent;
wzBusy(true); wzMsg("در حال ثبت گروه...");
apiWrite("reference", { sourceAttributeId: ATTR.modelGroup, name: name, values: values })
.then(function (r) { return afterCreate("groups", "group", r.id, "گروه ثبت شد."); })
.catch(function (e) { wzMsg(e.message, true); })
.then(function () { wzBusy(false); });
}
function createTitle() {
if (W.busy) return;
if (!W.sel.group) return wzMsg("ابتدا گروه را انتخاب کنید.", true);
var name = clean($id("wzName").value);
if (!name) return wzMsg("عنوان دستگاه الزامی است.", true);
var values = {}; values[String(ATTR.titleGroup)] = W.sel.group;
wzBusy(true); wzMsg("در حال ثبت عنوان دستگاه...");
apiWrite("reference", { sourceAttributeId: ATTR.modelTitle, name: name, values: values })
.then(function (r) { return afterCreate("titles", "title", r.id, "عنوان دستگاه ثبت شد."); })
.catch(function (e) { wzMsg(e.message, true); })
.then(function () { wzBusy(false); });
}
function loadModelForm() {
Promise.all([apiGet("manufacturer"), apiGet("facility")]).then(function (v) {
var host = $id("wzModelForm"); if (!host) return;
var ld = $id("wzModelLoading"); if (ld) ld.parentNode.removeChild(ld);
host.innerHTML = '<div class="wz-grid">' +
selectField("wzManufacturer", "شرکت سازنده", v[0], "", true, true) +
selectField("wzFacility", "نوع", v[1], "", false, true) +
field("wzNature", "ماهیت دستگاه", "") +
field("wzFunction", "کارکرد", "") +
field("wzCriticality", "سطح اهمیت", "") +
field("wzTechnology", "فناوری", "") +
field("wzPower", "برق مصرفی", "") +
field("wzWater", "آب مصرفی", "") +
field("wzGas", "گاز مصرفی", "") +
'<div class="wz-field"><label for="wzAvatar">آواتار مدل (PNG/JPEG، حداکثر ۲ مگابایت)</label><input type="file" id="wzAvatar" accept="image/png,image/jpeg"><img id="wzAvatarPreview" hidden style="width:80px;height:80px;object-fit:contain"></div>' +
'</div><button type="button" class="wz-primary" id="wzCreateBtn">ثبت و انتخاب مدل</button>';
$id("wzAvatar").onchange = function(){
var file = this.files[0], preview = $id("wzAvatarPreview");
if (preview.dataset.url) URL.revokeObjectURL(preview.dataset.url);
preview.hidden = true;
if (!file) return;
if (file.size > 2097152 || !/^image\/(png|jpeg)$/.test(file.type)) { this.value=""; wzMsg("تصویر PNG/JPEG تا ۲ مگابایت انتخاب کنید.",true); return; }
preview.dataset.url = URL.createObjectURL(file); preview.src = preview.dataset.url; preview.hidden = false;
};
$id("wzCreateBtn").onclick = createModel;
bindMini();
}).catch(function (e) { wzMsg(e.message, true); });
}
var MINI = { wzManufacturer: { attr: ATTR.manufacturer, kind: "manufacturer" }, wzFacility: { attr: ATTR.modelType, kind: "facility" } };
function bindMini() {
var plus = document.querySelectorAll("#wzModelForm [data-plus]");
for (var i = 0; i < plus.length; i++) plus[i].onclick = function () {
var id = this.getAttribute("data-plus"), m = $id(id + "Mini");
m.hidden = !m.hidden;
if (!m.hidden) $id(id + "MiniName").focus();
};
var oks = document.querySelectorAll("#wzModelForm [data-miniok]");
for (var j = 0; j < oks.length; j++) oks[j].onclick = function () { miniCreate(this.getAttribute("data-miniok")); };
}
function miniCreate(selId) {
if (W.busy) return;
var cfg = MINI[selId], name = clean($id(selId + "MiniName").value);
if (!name) return wzMsg("نام را وارد کنید.", true);
wzBusy(true); wzMsg("در حال ثبت...");
apiWrite("reference", { sourceAttributeId: cfg.attr, name: name, values: {} })
.then(function (r) {
delete cache[cfg.kind];
return apiGet(cfg.kind, true).then(function (rows) {
var s = $id(selId);
s.innerHTML = selectOptions(rows, r.id);
$id(selId + "MiniName").value = "";
$id(selId + "Mini").hidden = true;
wzMsg("مقدار جدید ثبت و انتخاب شد.");
});
})
.catch(function (e) { wzMsg(e.message, true); })
.then(function () { wzBusy(false); });
}
function createModel() {
if (W.busy) return;
var modelName = "-", manufacturer = $id("wzManufacturer").value;
if (!W.sel.title) return wzMsg("ابتدا عنوان دستگاه را انتخاب کنید.", true);
if (!modelName) return wzMsg("سری / مدل دستگاه الزامی است.", true);
if (!manufacturer) return wzMsg("شرکت سازنده الزامی است.", true);
var payload = {
modelName: modelName,
deviceTitleObjectId: W.sel.title,
manufacturerObjectId: manufacturer,
typeObjectId: $id("wzFacility").value,
groupObjectId: W.sel.group,
nature: clean($id("wzNature").value),
modelFunction: clean($id("wzFunction").value),
criticality: clean($id("wzCriticality").value),
technology: clean($id("wzTechnology").value),
powerRequirement: clean($id("wzPower").value),
waterRequirement: clean($id("wzWater").value),
gasRequirement: clean($id("wzGas").value)
};
wzBusy(true); wzMsg("در حال ثبت مدل...");
var newId = "";
readAvatarFile($id("wzAvatar")).then(function(encoded){
if(encoded) payload.avatarBase64 = encoded;
return apiWrite("model", payload);
}).then(function (r) {
W.pageWarning = "";
W.avatarWarning = r.avatarRequested && !r.avatarSaved ? ("مدل ثبت شد؛ آواتار ذخیره نشد: " + (r.avatarError || "خطای نامشخص")) : "";
newId = String(r.id);
return afterCreate("models", "model", newId, "مدل ثبت شد؛ در حال ساخت صفحه اطلاعات فنی...");
}).then(function () {
wzBusy(true);
return apiPages({
modelObjectId: newId,
modelName: modelName,
classificationName: groupLabel(findRow("groups", W.sel.group) || {}),
equipmentTitleName: labelOf(findRow("titles", W.sel.title))
}).then(function () {
wzMsg(W.avatarWarning || "مدل و صفحه اطلاعات فنی ثبت شدند.", !!W.avatarWarning);
}).catch(function (e) {
W.pageWarning = "مدل ساخته شد ولی ساخت صفحه اطلاعات فنی کامل نشد: " + e.message;
});
}).then(function(){
W.step=3;wzPaint();
if(W.avatarWarning || W.pageWarning)showToast([W.avatarWarning,W.pageWarning].filter(Boolean).join("؛ "));
}).catch(function (e) { wzMsg(e.message, true); })
.then(function () { wzBusy(false); });
}
function readAvatarFile(input) {
return new Promise(function(resolve,reject){
var file=input && input.files && input.files[0];
if(!file) return resolve("");
if(file.size>2097152 || !/^image\/(png|jpeg)$/.test(file.type)) return reject(new Error("تصویر PNG/JPEG تا ۲ مگابایت انتخاب کنید."));
var reader=new FileReader();
reader.onerror=function(){reject(new Error("خواندن تصویر ناموفق بود."));};
reader.onload=function(){resolve(String(reader.result).split(",")[1]);};
reader.readAsDataURL(file);
});
}
var EQUIPMENT_FIELDS = [[6268, "serialNumber", "شماره سریال", "text"], [6273, "purchaseValueRial", "ارزش ریالی خرید", "number"], [6274, "purchaseValueDollar", "ارزش دلاری خرید", "number"], [6275, "manufactureDate", "تاریخ تولید", "date"], [6276, "expiryDate", "تاریخ انقضا", "date"], [6392, "ownerDepartmentObjectId", "بخش (مالک)", "ref", "ownerDepartment"], [6280, "availability", "وضعیت دسترسی", "select"], [6281, "statusReason", "علت وضعیت فعلی", "text"], [6282, "responsibleObjectId", "مسئول بهرهبرداری", "ref", "responsible"], [6283, "recipientObjectId", "تحویلگیرنده", "ref", "recipient"], [6284, "accessoriesObjectIds", "متعلقات", "ref", "accessories"], [6285, "assembly", "نحوه ترکیب اجزا", "select"], [6286, "externalOutput", "آیا خروجی این جزء دستگاه ترکیبی ساقط میشود؟", "boolean"], [6400, "combinedFunction", "عملکرد در مجموعههای ترکیبی", "text"], [6287, "aggregateValue", "ارزش ریالی/دلاری تجمیع", "text"], [6288, "priority", "اولویت", "select"], [6289, "emergency", "فوریت", "select"], [6290, "portable", "قابل حمل", "boolean"], [6402, "portability", "قابلیت حمل", "text"], [6291, "clinicalUse", "کاربرد بالینی", "select"], [6365, "entryDateTime", "زمان ورود", "datetime-local"], [6390, "exitDateTime", "زمان خروج", "datetime-local"], [6396, "ownerCompanyObjectId", "مرکز (مالک)", "ref", "ownerCompany"], [6649, "installationDate", "تاریخ نصب", "date"], [6671, "repairCost", "هزینه تعمیرات", "text"], [6672, "downtimeDays", "روز خواب", "text"]];
var equipmentMetadata = {};
function loadExtraEquipment(){
return jfetch(API.read+"?kind=metadata").then(function(r){
equipmentMetadata = {};
((r.metadata.equipment || {}).attributes || []).forEach(function(a){equipmentMetadata[String(a.id)]=a;});
return Promise.all(EQUIPMENT_FIELDS.filter(function(f){return f[3]==="ref";}).map(function(f){return apiGet(f[4]);}));
});
}
function optionCaption(value){
var key=String(value).toLowerCase();
var names={active:"فعال",inactive:"غیرفعال","entered-in-error":"دارای خطا",lost:"گم شده",damaged:"آسیب دیده",destroyed:"از بین رفته",available:"در دسترس",high:"زیاد",medium:"متوسط",low:"کم",critical:"بحرانی",urgent:"فوری",normal:"عادی",routine:"معمول",emergency:"اورژانسی",portable:"قابل حمل",fixed:"ثابت",yes:"بله",no:"خیر"};
return names[key] || value;
}
function extraEquipmentHtml(draft,onlyIds){
return EQUIPMENT_FIELDS.filter(function(f){return !onlyIds || onlyIds.indexOf(f[0])>=0;}).map(function(f){
var id="wzExtra"+f[0], m=equipmentMetadata[String(f[0])] || {}, value=draft[f[1]], rows;
if(f[3]==="ref") rows=cache[f[4]] || [];
if(f[3]==="boolean") rows=[{id:"true",label:"بله"},{id:"false",label:"خیر"}];
if(f[3]==="select") rows=f[0]===6280?v33AccessOptions(m):String(m.options || "").split(/[,;\r\n]+/).map(function(x){return x.trim();}).filter(Boolean).map(function(x){return {id:x,label:optionCaption(x)};});
if(rows){
var multi=f[3]==="ref" && (Number(m.maximumCardinality)>1 || Number(m.maximumCardinality)===-1);
var chosen=Array.isArray(value)?value.map(String):[String(value==null?"":value)];
return '<div class="wz-field"><label for="'+id+'">'+esc(f[2])+'</label><select id="'+id+'"'+(multi?' multiple size="4"':'')+'>'+(!multi?'<option value="">'+(f[3]==="select" && !rows.length ? 'گزینهای برای این فیلد تعریف نشده' : 'انتخاب کنید')+'</option>':'')+rows.map(function(r){return '<option value="'+esc(r.id)+'"'+(chosen.indexOf(String(r.id))>=0?' selected':'')+'>'+esc(labelOf(r))+'</option>';}).join("")+'</select></div>';
}
return field(id,f[2],value,f[3],Number(m.minimumCardinality)>0);
}).join("");
}
function extraEquipmentValue(f){
var el=$id("wzExtra"+f[0]);
if(!el) return "";
if(el.multiple) return Array.prototype.filter.call(el.options,function(x){return x.selected;}).map(function(x){return x.value;});
return (f[3] === "date" || f[3] === "datetime-local") ? gregorianInput(el.id, f[3] === "datetime-local") : el.value;
}
function bindExtraEquipment(){
EQUIPMENT_FIELDS.forEach(function(f){
var el=$id("wzExtra"+f[0]);
if(f[3]==="number") el.step="any";
el.oninput=el.onchange=function(){W.draft[f[1]]=(f[3] === "date" || f[3] === "datetime-local") ? el.value : extraEquipmentValue(f);};
});
}
function selectEquipmentSegment(index){
mqCloseDatePopover();
W.segment=Number(index);
document.querySelectorAll("#wzBody [data-equipment-panel]").forEach(function(panel){panel.hidden=Number(panel.dataset.equipmentPanel)!==W.segment;});
document.querySelectorAll("#wzBody [data-equipment-tab]").forEach(function(button){var active=Number(button.dataset.equipmentTab)===W.segment;button.classList.toggle("active",active);button.setAttribute("aria-pressed",String(active));});
}
function bindEquipmentSegments(){
var body=$id("wzBody"), panels=body.querySelectorAll("[data-equipment-panel]"),nav=document.createElement("div");
nav.className="wz-segment-tabs";nav.setAttribute("role","group");nav.setAttribute("aria-label","بخشهای اطلاعات دارایی");
nav.innerHTML=Array.prototype.map.call(panels,function(panel,i){return '<button type="button" data-equipment-tab="'+i+'">'+esc(panel.querySelector("legend").textContent)+'</button>';}).join("");
body.insertBefore(nav,panels[0]);
nav.onclick=function(e){var b=e.target.closest("[data-equipment-tab]");if(b && !W.busy)selectEquipmentSegment(b.dataset.equipmentTab);};
selectEquipmentSegment(W.segment || 0);
}
function revealEquipmentField(el){var panel=el.closest("[data-equipment-panel]");if(panel)selectEquipmentSegment(panel.dataset.equipmentPanel);}
function paintEquipment(token) {
var body = $id("wzBody");
body.innerHTML = '<div class="wz-loading">در حال دریافت اطلاعات...</div>';
Promise.all([
apiGet("models"),
apiGet("supplier").catch(function () { return []; }),
apiGet("department"),
loadExtraEquipment()
]).then(function (v) {
if (token !== W.token) return;
var d = W.draft;
var statusRows = Object.keys(STATUS_FA).map(function (k) { return { id: k, label: STATUS_FA[k] }; });
var segmentCounter=0;
function segment(title,body){segmentCounter++;return '<fieldset class="wz-segment" data-equipment-panel="'+(segmentCounter-1)+'"><legend>'+esc(title)+'</legend><div class="wz-grid">'+body+'</div></fieldset>';}
body.innerHTML =
'<div class="wz-static">مدل انتخابشده: '+esc(labelOf(findRow("models",W.sel.model)) || "—")+'</div>'+
segment("مشخصات پایه",field("wzDevId","شناسه دستگاه",d.deviceId,"text",true)+field("wzAssetNo","شماره اموال",d.assetNumber)+extraEquipmentHtml(d,[6268]))+
segment("مشخصات فنی و اجزا",extraEquipmentHtml(d,[6284,6285,6286,6400,6290,6402,6291]))+
segment("اطلاعات مالی و خرید",field("wzPurchase","تاریخ خرید",d.purchaseDate,"date")+selectField("wzSupplier","فروشنده",v[1],d.supplierObjectId,false,false)+extraEquipmentHtml(d,[6273,6274,6287,6671]))+
segment("موقعیت و مسئولان",selectField("wzDept","بخش بهرهبردار",v[2],d.departmentObjectId,false,false)+extraEquipmentHtml(d,[6392,6282,6283,6396]))+
segment("وضعیت و تاریخها",selectField("wzStatus","وضعیت",statusRows,d.status,false,false)+extraEquipmentHtml(d,[6280,6281,6288,6289,6275,6276,6365,6390,6649,6672]));
var ids = ["wzDevId", "wzAssetNo", "wzPurchase", "wzSupplier", "wzDept", "wzStatus"];
var keys = ["deviceId", "assetNumber", "purchaseDate", "supplierObjectId", "departmentObjectId", "status"];
ids.forEach(function (id, i) {
var el = $id(id);
var save = function () { W.draft[keys[i]] = el.value; if(id === "wzDevId")wzHeader(); };
el.oninput = save; el.onchange = save;
});
bindEquipmentSegments();
bindExtraEquipment();
bindJalaliInputs();
$id("wzDevId").focus();
}).catch(function (e) { if (token === W.token) { body.innerHTML = ""; wzMsg(e.message, true); } });
}
function saveEquipment() {
if (W.busy) return;
if (!W.sel.model) return wzMsg("مدل انتخاب نشده است.", true);
if (!validateJalaliInputs()) return;
var p = {
modelObjectId: W.sel.model,
deviceName: "دارایی " + clean($id("wzDevId").value),
deviceId: clean($id("wzDevId").value),
assetNumber: clean($id("wzAssetNo").value),
purchaseDate: gregorianInput("wzPurchase", false),
supplierObjectId: $id("wzSupplier").value,
departmentObjectId: $id("wzDept").value,
status: $id("wzStatus").value
};
EQUIPMENT_FIELDS.forEach(function(f){p[f[1]] = extraEquipmentValue(f);});
if (!p.deviceId) { revealEquipmentField($id("wzDevId"));$id("wzDevId").focus();return wzMsg("شناسه دستگاه الزامی است.", true); }
wzBusy(true); wzMsg("در حال ثبت دستگاه...");
apiWrite("equipment", p).then(function (r) {
wzMsg("دستگاه ثبت شد؛ در حال ساخت صفحه...");
return apiPages({
modelObjectId: W.sel.model,
modelName: labelOf(findRow("models", W.sel.model)),
assetObjectId: r.id,
deviceName: p.deviceName,
deviceId: p.deviceId,
classificationName: groupLabel(findRow("groups", W.sel.group) || {}),
equipmentTitleName: labelOf(findRow("titles", W.sel.title))
}).then(function () { return true; }, function (e) {
showToast("دستگاه ساخته شد ولی ساخت صفحه خطا داد: " + e.message);
return true;
});
}).then(function () {
delete cache.equipment;
closeWizard();
showToast("دستگاه با موفقیت ثبت شد.");
if ($id("mqAssetsHost")) loadAssets("mqAssetsHost", "mqAssetSearch");
}).catch(function (e) { wzMsg(e.message, true); })
.then(function () { wzBusy(false); });
}
function wzNext() {
if (W.busy) return;
if (W.step < 3) {
var cfg = STEPS[W.step];
if (!W.sel[cfg.key]) return wzMsg("ابتدا " + cfg.noun + " را انتخاب کنید.", true);
W.step++; return wzPaint();
}
saveEquipment();
}
function wzPrev() { if (W.busy || W.step === 0) return; W.step--; wzPaint(); }
$id("wzNext").onclick = wzNext;
$id("wzPrev").onclick = wzPrev;
$id("wzClose").onclick = closeWizard;
$id("mqWz").addEventListener("mousedown", function (e) { if (e.target === this) closeWizard(); });
$id("mqDetailClose").onclick = closeDetail;
$id("mqDetail").addEventListener("mousedown", function (e) { if (e.target === this) closeDetail(); });
document.addEventListener("click", function (e) {
var b = e.target.closest ? e.target.closest("[data-detail]") : null;
if (b) openDetail(b.getAttribute("data-detail"));
});
document.addEventListener("keydown", function (e) {
if (e.key !== "Escape") return;
if ($id("mqDetail").classList.contains("open")) closeDetail();
else if (W.open && !W.busy) closeWizard();
});
window.MEDIQ = { version: "V14_ASSET_DASHBOARD", openWizard: openWizard, refresh: function () { loadAssets("mqAssetsHost", "mqAssetSearch"); } };
/* V11: operations interface. All current registration code is preserved. */
var V11={selected:{},states:{},attrs:{department:6277,responsible:6282,status:6279,availability:6280,location:0},ready:false,missing:[],filters:[],searchFields:[],row:null,request:0};
var OP_NAMES={handover:'تحویل و تحول کاربری',entry:'ورود دارایی به انبار',exit:'خروج دارایی از انبار',scrap:'اسقاط دارایی'};
function operations(p){return apiWrite('lifecycle',p);}
function vError(e){return publicMessage(e && e.message || e);}
function vRef(kind,row,aid){var ids=attrList(row,aid);return ids.map(function(id){return labelOf(findRow(kind,id))||id;}).join('، ')||'—';}
function vValues(row,key){
if(key==='key')return [row.key||''];
if(key==='label')return [row.label||''];
var raw=attrList(row,key),field=EQUIPMENT_FIELDS.find(function(f){return String(f[0])===String(key);});
var kind=String(key)==='6277'?'department':String(key)==='6644'?'models':field&&field[3]==='ref'?field[4]:null;
if(kind)raw=raw.concat(attrList(row,key).map(function(id){return labelOf(findRow(kind,id));}));
return raw.map(function(x){return optionCaption(x);});
}
function vFilter(items,query){
var q=searchNorm(query);
return items.filter(function(row){
var all=V11.searchFields.length?[]:[row.key,row.label];(V11.searchFields.length?V11.searchFields:Object.keys(row.attributes||{})).forEach(function(k){all=all.concat(vValues(row,k));});
if(q && searchNorm(all.join(' ')).indexOf(q)<0)return false;
var grouped={};
V11.filters.forEach(function(f){(grouped[String(f.key)]||(grouped[String(f.key)]=[])).push(f);});
return Object.keys(grouped).every(function(key){
var vals=vValues(row,key).map(searchNorm);
return grouped[key].some(function(f){
var wanted=searchNorm(f.value);
if(f.op==='empty')return !attrList(row,key).length;
if(f.op==='eq')return vals.some(function(v){return v===wanted;});
if(f.op==='ne')return !vals.some(function(v){return v===wanted;});
return vals.some(function(v){return v.indexOf(wanted)>=0;});
});
});
});
}
function vReadStates(ids){
return operations({action:'state',ids:ids}).then(function(r){V11.ready=r.ready;V11.missing=r.missing||[];Object.keys(r.states||{}).forEach(function(id){V11.states[id]=Object.assign({checked:true},r.states[id]);});Object.assign(V11.attrs,r.attributes||{});return r;});
}
function vState(row){return V11.states[String(row.id)]||{};}
function vPanel(id){
var row=findRow('equipment',id),box=$id('v11Summary');if(!row||!box)return;
V11.row=String(id);var s=vState(row),a=V11.attrs;
var data=[['مسئول بهرهبردار',vRef('responsible',row,a.responsible)],['بخش بهرهبردار',vRef('department',row,a.department)],['موقعیت فعلی',a.location?vRef('location',row,a.location):'نیازمند تنظیم شناسه موقعیت'],['وضعیت',statusText(attr(row,a.status))],['وضعیت دسترسی',vAccessLabel(attr(row,a.availability))],['وضعیت اموالداری',s.active?(s.conflict?'چند فرایند فعال؛ نیازمند بررسی':'در حال '+(OP_NAMES[s.operation]||'پردازش')):s.checked?'پایدار':'در حال بررسی']];
box.innerHTML='<strong>'+esc(attr(row,ATTR.devName)||row.label)+'</strong>'+data.map(function(d){return '<div class="v-summary-row"><span>'+esc(d[0])+'</span><b>'+(d[0]==='وضعیت'?vStatusMark(attr(row,a.status)):'')+esc(d[1])+'</b></div>';}).join('');
if(s.active){
var stages=s.stages||[],at=stages.findIndex(function(x){return String(x.id)===String(s.statusId);});
box.innerHTML+='<h4>روند فرایند</h4><div class="v-steps">'+stages.map(function(x,i){return '<div class="'+(i===at?'current':i<at&&at>=0?'passed':'')+'">'+esc(x.name)+'</div>';}).join('')+'</div><p>'+esc(s.issueKey)+' — '+esc(s.statusName)+'</p>';
if(!stages.length||at<0)box.innerHTML+='<p>مرحلهٔ جاری در مسیر تنظیمشده نیست؛ وضعیت واقعی بالا نمایش داده شده است.</p>';
}
}
function loadAssets(hostId,searchId){
var host=$id(hostId);if(!host)return;var ticket=++V11.request;
host.innerHTML='<div class="wz-loading">در حال دریافت داراییها…</div>';
Promise.all([apiGet('equipment'),apiGet('department'),apiGet('responsible')]).then(function(results){
Promise.all([apiGet('models'),apiGet('location'),loadExtraEquipment()]).catch(function(e){if(window.console)console.warn('MediQ auxiliary data:',e);});
if(ticket!==V11.request||!$id(hostId))return;
var rows=results[0],input=$id(searchId);vRenderStatusDashboard(rows);
function paint(){
host=$id(hostId);if(!host||ticket!==V11.request)return;
var processEl=$id('vProcessFilter'),processValue=processEl?processEl.value:'';
var filtered=vFilter(rows,input?input.value:'').filter(function(row){return (V14_STATUS.filter==='all'||vAssetStatusGroup(row)===V14_STATUS.filter)&&(!processValue||(vState(row).checked&&vState(row).active&&String(vState(row).operation)===processValue));}),part=assetPageSlice(filtered,ASSET_PAGE.page,ASSET_PAGE.size);ASSET_PAGE.page=part.page;
host.innerHTML='<div class="mq-tbl-wrap"><table class="mq-tbl"><thead><tr><th>انتخاب</th><th>شناسه دستگاه</th><th>نام دستگاه</th><th>بخش بهرهبردار</th><th>مسئول بهرهبردار</th><th>وضعیت</th><th>عملیات</th></tr></thead><tbody>'+part.items.map(function(row){var s=vState(row);return '<tr data-vrow="'+esc(row.id)+'"><td><input type="checkbox" data-vselect="'+esc(row.id)+'" aria-label="انتخاب '+esc(row.label)+'" '+(V11.selected[row.id]?'checked ':'')+(s.active?'disabled ':'')+'></td><td>'+esc(attr(row,ATTR.devId)||row.key)+'</td><td>'+esc(attr(row,ATTR.devName)||row.label)+'</td><td><span class="v-tag purple">'+esc(vRef('department',row,6277))+'</span></td><td><span class="v-tag orange">'+esc(vRef('responsible',row,6282))+'</span></td><td><span class="v-status-pill '+vAssetStatusGroup(row)+'">'+vStatusMark(attr(row,ATTR.status))+esc(statusText(attr(row,ATTR.status)))+'</span>'+(s.active?'<small class="v-active">'+esc(OP_NAMES[s.operation]||'فرایند فعال')+'</small>':'')+'</td><td><div class="v-row-actions"><button type="button" class="mq-assets-btn" data-detail="'+esc(row.id)+'"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M2 12s4-7 10-7 10 7 10 7-4 7-10 7S2 12 2 12Z"/><circle cx="12" cy="12" r="3"/></svg>مشاهده</button><button type="button" class="mq-assets-btn" data-vedit="'+esc(row.id)+'" '+(s.active||!s.checked?'disabled':'')+'><svg viewBox="0 0 24 24" aria-hidden="true"><path d="m15 4 5 5M4 20l5-1L20 8a2 2 0 0 0-5-5L4 14Z"/></svg>ویرایش</button></div></td></tr>';}).join('')+(filtered.length?'':'<tr><td colspan="7">موردی یافت نشد.</td></tr>')+'</tbody></table></div><div class="mq-list-controls"><label>تعداد نمایش <select id="vPageSize">'+['10','20','50','all'].map(function(n){return '<option value="'+n+'" '+(ASSET_PAGE.size===n?'selected':'')+'>'+(n==='all'?'همه':n)+'</option>';}).join('')+'</select></label><span>'+part.start+' تا '+part.end+' از '+filtered.length+' — انتخابشده: '+Object.keys(V11.selected).length+'</span></div><div class="mq-list-controls"><button class="mq-assets-btn" id="vPrev" '+(part.page===1?'disabled':'')+'>قبلی</button><span>صفحه '+part.page+' از '+part.pages+'</span><button class="mq-assets-btn" id="vNext" '+(part.page===part.pages?'disabled':'')+'>بعدی</button></div>';
$id('vPageSize').onchange=function(){ASSET_PAGE.size=this.value;ASSET_PAGE.page=1;paint();};$id('vPrev').onclick=function(){ASSET_PAGE.page--;paint();};$id('vNext').onclick=function(){ASSET_PAGE.page++;paint();};
host.querySelectorAll('[data-vselect]').forEach(function(b){b.onchange=function(){if(b.checked)V11.selected[b.dataset.vselect]=true;else delete V11.selected[b.dataset.vselect];paint();};});
host.querySelectorAll('[data-vrow]').forEach(function(tr){tr.onclick=function(){vPanel(tr.dataset.vrow);};});
host.querySelectorAll('[data-vedit]').forEach(function(b){b.onclick=function(){vEdit(b.dataset.vedit);};});
if(V11.row)vPanel(V11.row);
// Lazy status checks: one request per at most 50 rows, cached until refresh.
var unknown=part.items.filter(function(r){return !vState(r).checked;}).map(function(r){return String(r.id);});
if(unknown.length){
var groups=[];for(var i=0;i<unknown.length;i+=50)groups.push(unknown.slice(i,i+50));
groups.reduce(function(p,ids){return p.then(function(){return vReadStates(ids).then(function(r){ids.forEach(function(id){V11.states[id]=Object.assign({checked:true},r.states[id]);if(V11.states[id].active)delete V11.selected[id];});});});},Promise.resolve()).then(function(){if(ticket===V11.request)paint();}).catch(function(e){var warn=$id('vService');if(warn)warn.textContent='وضعیت فرایندها دریافت نشد: '+vError(e);});
}
}
if(input)input.oninput=function(){ASSET_PAGE.page=1;paint();};V11.paint=paint;paint();
}).catch(function(e){if(ticket===V11.request&&$id(hostId))host.innerHTML='<p>'+esc(vError(e))+'</p>';});
}
function vSearch(){
// Attribute -> actual values, fetched from the complete Assets data already loaded.
var defs=[{id:'key',name:'کد دارایی'},{id:'label',name:'نام دستگاه'}];
Object.keys(equipmentMetadata).forEach(function(k){
var a=equipmentMetadata[k];
if([6270,6366,6401].indexOf(Number(k))<0)defs.push({id:k,name:publicMessage((EQUIPMENT_FIELDS.find(function(f){return String(f[0])===k;})||[])[2]||({'6265':'نام دستگاه','6267':'شناسه دستگاه','6269':'شماره اموال','6277':'بخش بهرهبردار','6279':'وضعیت','6644':'مدل دستگاه'})[k]||a.name)});
});
var old=$id('vInlineFilters');
if(old){old.remove();return;}
var button=$id('vFilters');if(!button)return;
var anchor=button.parentNode;
anchor.classList.add('v-filter-anchor');
var panel=document.createElement('div');panel.id='vInlineFilters';panel.className='v-inline-filters';
panel.innerHTML='<div class="v-filter-top"><strong>فیلتر ویژگیها</strong><button type="button" id="vFilterClose" aria-label="بستن">×</button></div>'+
'<div class="v-filter-columns"><div class="v-filter-attributes"><input type="search" id="vAttributeSearch" placeholder="جستوجوی ویژگی…" autocomplete="off"><div id="vAttributeList" class="v-attribute-list"></div></div>'+
'<div class="v-filter-values"><select id="vFilterKey" hidden><option value="">انتخاب ویژگی</option>'+defs.map(function(a){return '<option value="'+esc(a.id)+'">'+esc(a.name)+'</option>';}).join('')+'</select>'+
'<div id="vFilterDetails" hidden><label for="vFilterOp">شرط فیلتر</label><select id="vFilterOp"><option value="eq">برابر باشد</option><option value="ne">برابر نباشد</option><option value="contains">شامل باشد</option><option value="empty">خالی باشد</option></select><label for="vFilterValue">مقدار ویژگی</label><input type="search" id="vFilterFind" placeholder="جستوجو در مقادیر…" autocomplete="off"><div id="vFilterValue" class="v-filter-checklist" role="group" aria-label="مقادیر ویژگی"></div><small id="vFilterCount"></small></div><p id="vFilterPickHint">یک ویژگی را از فهرست انتخاب کنید.</p></div></div>';
anchor.appendChild(panel);
$id('vFilterClose').onclick=function(){panel.remove();};
var attributeSearch=$id('vAttributeSearch');
function paintAttributes(){
var q=searchNorm(attributeSearch.value);
$id('vAttributeList').innerHTML=defs.filter(function(a){return !q||searchNorm(a.name).indexOf(q)>=0;}).map(function(a){
var current=String($id('vFilterKey').value)===String(a.id);
var selected=V11.filters.some(function(f){return String(f.key)===String(a.id);});
return '<button type="button" class="v-attribute-choice'+(current?' v-attribute-current':'')+'" data-attribute="'+esc(a.id)+'" aria-pressed="'+(selected?'true':'false')+'"><span class="v-attribute-tick" aria-hidden="true">'+(selected?'✓':'')+'</span><span>'+esc(a.name)+'</span></button>';
}).join('')||'<p>ویژگی پیدا نشد.</p>';
$id('vAttributeList').querySelectorAll('[data-attribute]').forEach(function(b){b.onclick=function(){var sel=$id('vFilterKey');sel.value=b.getAttribute('data-attribute');sel.onchange();paintAttributes();$id('vFilterPickHint').hidden=true;};});
}
attributeSearch.oninput=paintAttributes;paintAttributes();
var keyEl=$id('vFilterKey'),opEl=$id('vFilterOp'),valueEl=$id('vFilterValue'),findEl=$id('vFilterFind');
var choices=[];
function valuesFor(key){
var found=Object.create(null),all=[];
(cache.equipment||[]).forEach(function(row){
vValues(row,key).forEach(function(raw){
var display=String(raw==null?'':raw).trim();
if(!display)return;
var norm=searchNorm(display);
if(!found[norm]){found[norm]=true;all.push(display);}
});
});
var meta=equipmentMetadata[String(key)]||{};
String(meta.options||'').split(/[,;\r\n]+/).forEach(function(v){
v=v.trim();if(!v)return;var text=String(optionCaption(v)),norm=searchNorm(text);
if(!found[norm]){found[norm]=true;all.push(text);}
});
return all.sort(function(a,b){return a.localeCompare(b,'fa',{numeric:true});});
}
function repaintTable(){ASSET_PAGE.page=1;if(V11.paint)V11.paint();}
function paintChoices(){
var q=searchNorm(findEl.value),matched=choices.filter(function(x){return !q||searchNorm(x).indexOf(q)>=0;}),shown=matched.slice(0,120);
var key=keyEl.value,op=opEl.value;
valueEl.innerHTML=shown.map(function(x){
var checked=V11.filters.some(function(f){return String(f.key)===String(key)&&f.op===op&&String(f.value)===String(x);});
return '<label class="v-filter-check-option"><input type="checkbox" data-filter-value="'+esc(x)+'" '+(checked?'checked':'')+' '+(op==='empty'?'disabled':'')+'><span>'+esc(x)+'</span></label>';
}).join('')||'<p class="v-filter-empty">مقداری پیدا نشد.</p>';
$id('vFilterCount').textContent=matched.length+' مقدار منطبق'+(matched.length>120?' — ۱۲۰ مورد اول نمایش داده شده؛ برای محدودکردن جستوجو کن':'');
findEl.disabled=op==='empty';
valueEl.querySelectorAll('[data-filter-value]').forEach(function(cb){cb.onchange=function(){
var value=this.getAttribute('data-filter-value');
V11.filters=V11.filters.filter(function(f){return !(String(f.key)===String(key)&&String(f.value)===value);});
if(this.checked)V11.filters.push({key:key,op:op,value:value});
repaintTable();
paintAttributes();
};});
}
keyEl.onchange=function(){
var key=keyEl.value,detail=$id('vFilterDetails');detail.hidden=!key;
if(!key)return;
findEl.value='';
var remembered=V11.filters.find(function(f){return String(f.key)===String(key);});
opEl.value=remembered?remembered.op:'eq';
choices=valuesFor(key);paintChoices();
};
opEl.onchange=function(){
var key=keyEl.value,op=opEl.value;
if(op==='empty'){
V11.filters=V11.filters.filter(function(f){return String(f.key)!==String(key);});
V11.filters.push({key:key,op:'empty',value:''});
repaintTable();
}else{
V11.filters=V11.filters.filter(function(f){return !(String(f.key)===String(key)&&f.op==='empty');});
repaintTable();
}
paintChoices();
paintAttributes();
};
findEl.oninput=paintChoices;
}
/* V48.1 Property actions: separate overview from user handover requests. */
function mqV48PropertyHome(){
state.screen='propertyHome';heroTitle.textContent='مدیریت اموال و داراییها';heroDesc.textContent='نمای کلی داراییها و اقدامات تحویل';
backButton.style.display='inline-block';buildBreadcrumb(['مدیریت تجهیزات','مدیریت اموال و داراییها']);mqTreeActivate('property');
var choices=[['assets','نمای کلی داراییها','لیست، وضعیت و فیلتر ویژگیهای داراییها','chart'],['handover','اقدامات تحویل','درخواستهای تحویل و تحول مرتبط با حساب من','files']];
view.innerHTML='<section class="mm-card-home" dir="rtl"><h2>مدیریت اموال و داراییها</h2><div class="mm-category-grid">'+choices.map(function(a){return '<button type="button" class="mm-category-card" data-mq-v48-property="'+a[0]+'"><span class="mm-category-icon">'+mmCardIcon(a[3])+'</span><strong>'+a[1]+'</strong><span>'+a[2]+'</span><i>↙</i></button>';}).join('')+'</div></section>';
view.querySelectorAll('[data-mq-v48-property]').forEach(function(b){b.onclick=function(){if(b.dataset.mqV48Property==='assets')renderAssetSections('newAsset');else mqV48Handover();};});
}
function mqV48Handover(){
state.screen='propertyHandover';heroTitle.textContent='مدیریت اموال و داراییها';heroDesc.textContent='اقدامات تحویل';
buildBreadcrumb(['مدیریت تجهیزات','مدیریت اموال و داراییها','اقدامات تحویل']);mqTreeActivate('property');
view.innerHTML='<section class="mq-preview" dir="rtl"><div class="mq-assets-head"><div><h3>اقدامات تحویل</h3><p>درخواستهای تحویل و تحول اختصاصیافته به کاربر جاری</p></div><div class="mq-assets-actions"><button type="button" id="mqV48RequestHandover" class="mq-assets-btn primary">درخواست تحویل و تحول</button><button type="button" id="mqV48ReloadHandover" class="mq-assets-btn">بهروزرسانی</button></div></div><div class="v-stats" id="mqV48HandoverSummary"></div><div class="mm-actionbar"><input id="mqV48HandoverSearch" type="search" placeholder="جستوجو در درخواستهای من"></div><div id="mqV48HandoverRows">در حال دریافت...</div></section>';
var list=[];
function paint(){var q=searchNorm(document.getElementById('mqV48HandoverSearch').value||'');var match=list.filter(function(r){return searchNorm([r.key,r.summary,r.status].join(' ')).includes(q);});var host=document.getElementById('mqV48HandoverRows');
host.innerHTML=mmTable(['کلید','عنوان','وضعیت','اقدام'],match.map(function(r){return [esc(r.key),esc(r.summary),esc(r.status),'<button class="mq-assets-btn" type="button" data-mq-v48-handover="'+esc(r.key)+'">مشاهده و اقدام</button>'];}));
host.querySelectorAll('[data-mq-v48-handover]').forEach(function(b){b.onclick=function(){mmIssueDetail(b.dataset.mqV48Handover).then(mmOpenIssueModal).catch(function(e){alert(vError(e));});};});
}
function load(){var host=document.getElementById('mqV48HandoverRows');host.textContent='در حال دریافت درخواستهای من...';
mmApi('handover.mine').then(function(d){if(!d||!Array.isArray(d.items))throw Error('سرویس handover.mine باید درخواستهای مجاز و مرتبط با کاربر جاری را در items برگرداند.');list=d.items.filter(function(r){return /^MED-\d+$/.test(r.key||'');});document.getElementById('mqV48HandoverSummary').innerHTML='<div class="mm-kpi-card"><strong>'+list.length+'</strong><span>درخواستهای من</span></div><div class="mm-kpi-card"><strong>'+list.filter(function(r){return r.isNew===true;}).length+'</strong><span>درخواستهای جدید</span></div>';paint();}).catch(function(err){host.innerHTML='<div class="mq-v48-warning">دریافت درخواستهای تخصیصیافته ممکن نشد: '+esc(vError(err))+'</div>';});
}
document.getElementById('mqV48RequestHandover').onclick=function(){renderAssetSections('newAsset');vProcess();};
document.getElementById('mqV48ReloadHandover').onclick=load;
document.getElementById('mqV48HandoverSearch').oninput=paint;
load();
}
function renderAssetSections(mode){
var previousFilter=$id('vInlineFilters');if(previousFilter)previousFilter.remove();
state.screen=mode;state.selectedAssetSection='purchased';heroTitle.textContent='مدیریت اموال و داراییها';heroDesc.textContent='ثبت، ویرایش و پیگیری گردش داراییها';backButton.style.display='inline-block';
buildBreadcrumb(['مدیریت تجهیزات','مدیریت اموال و داراییها']);
view.innerHTML='<section id="vAssetDashboard" aria-label="نمای کلی وضعیت داراییها"></section><div class="mq-list-layout"><aside class="mq-list-menu"><h3>وضعیت دارایی</h3><div id="v11Summary">یک دارایی از لیست انتخاب کنید.</div></aside><div class="mq-preview"><div class="mq-preview-title">لیست داراییها</div><div class="mq-assets-head"><div class="v-search"><input id="mqAssetSearch" type="search" placeholder="جستوجو در داراییها…"><button class="mq-assets-btn" id="vFilters">فیلتر ویژگیها</button><select id="vProcessFilter" class="mq-assets-btn" aria-label="فیلتر فرایند"><option value="">همه فرایندها</option><option value="handover">تحویل و تحول کاربری</option><option value="entry">ورود دارایی به انبار</option><option value="exit">خروج دارایی از انبار</option><option value="scrap">اسقاط دارایی</option></select></div><div class="mq-assets-actions"><button class="mq-assets-btn primary" id="mqAssetsNew">ثبت دارایی جدید</button><button class="mq-assets-btn primary" id="vProcess">تحویل و تحول دارایی</button><button class="mq-assets-btn" id="mqAssetsRefresh">بهروزرسانی لیست</button></div></div><p id="vService" role="status"></p><div id="mqAssetsHost"></div></div></div>';
$id('mqAssetsNew').onclick=openWizard;$id('vProcess').onclick=vProcess;$id('vFilters').onclick=vSearch;var pf=$id('vProcessFilter');if(pf)pf.onchange=function(){
var selected=pf.value,info=$id('vService'),host=$id('mqAssetsHost');
var all=cache.equipment||[],unknown=all.filter(function(r){return !vState(r).checked;}).map(function(r){return String(r.id);});
var token=(V11.processFilterToken||0)+1;V11.processFilterToken=token;
if(!selected){pf.disabled=false;if(info)info.textContent='';ASSET_PAGE.page=1;if(V11.paint)V11.paint();return;}
var chunks=[];for(var i=0;i<unknown.length;i+=50)chunks.push(unknown.slice(i,i+50));
function progress(done){if(token!==V11.processFilterToken)return;if(info)info.textContent='در حال بررسی فرایندها: '+done+' از '+unknown.length+' دارایی — لطفاً تا تکمیل بررسی صبر کنید';}
pf.disabled=true;pf.setAttribute('aria-busy','true');
if(host)host.innerHTML='<div class="v34-process-loading" role="status" aria-live="polite"><span class="v34-spinner" aria-hidden="true"></span><strong>در حال بررسی فرایند داراییها…</strong><small>لطفاً تا پایان بررسی صبر کنید. نتیجه پس از تکمیل نمایش داده میشود.</small></div>';
progress(0);
var pointer=0,done=0,workers=[];
function worker(){if(token!==V11.processFilterToken||pointer>=chunks.length)return Promise.resolve();var ids=chunks[pointer++];return vReadStates(ids).then(function(){done+=ids.length;progress(done);return worker();});}
for(var w=0;w<Math.min(3,chunks.length);w++)workers.push(worker());
Promise.all(workers).then(function(){if(token!==V11.processFilterToken||!pf.isConnected)return;if(info)info.textContent='';ASSET_PAGE.page=1;if(V11.paint)V11.paint();}).catch(function(e){if(token!==V11.processFilterToken)return;if(info)info.textContent='خطا در دریافت وضعیت فرایندها: '+vError(e);if(V11.paint)V11.paint();}).finally(function(){if(token===V11.processFilterToken){pf.disabled=false;pf.removeAttribute('aria-busy');}});
};
$id('mqAssetsRefresh').onclick=function(){V11.states={};delete cache.equipment;loadAssets('mqAssetsHost','mqAssetSearch');};loadAssets('mqAssetsHost','mqAssetSearch');
}
function renderEquipment(){
state.screen='equipment';heroTitle.textContent='مدیریت تجهیزات';heroDesc.textContent='حوزهٔ موردنظر را انتخاب کنید.';backButton.style.display='none';buildBreadcrumb(['مدیریت تجهیزات']);
var cards=[['مدیریت تعمیر و نگهداری',ICONS.maintenance,'maintenance'],['مدیریت تأمین و لجستیک',ICONS.supply,'logistics'],['مدیریت اموال و داراییها',ICONS.property,'property'],['مدیریت مالی و بهرهوری',ICONS.finance,'finance'],['تحلیل و آنالیز','<path d="M4 19h16M6 15V9m6 6V5m6 10v-4M5 7l6-4 7 5"/><circle cx="18" cy="8" r="2"/>','analysis']];
view.innerHTML='<div class="mq-card-grid v-five">'+cards.map(function(c){var children=(c[2]==='property'||c[2]==='logistics'||c[2]==='maintenance');return '<button class="mq-module-card'+(children?' mq-has-children':'')+'" data-vmodule="'+c[2]+'"><span class="mq-module-icon"><svg viewBox="0 0 24 24">'+c[1]+'</svg></span><span class="mq-module-name">'+c[0]+'</span>'+(children?'<span class="mq-hierarchy-arrow" aria-hidden="true">↙</span>':'')+'</button>';}).join('')+'</div>';
view.querySelectorAll('[data-vmodule]').forEach(function(b){b.onclick=function(){var k=b.dataset.vmodule;if(k==='property')mqV48PropertyHome();else if(k==='logistics')renderLogistics();else if(k==='analysis')vAnalysis();else if(k==='maintenance')renderMediqMaintenance();else mqTreeSimpleEquipmentPage(cards.find(function(c){return c[2]===k;})[0],k);};});mqTreeActivate('equipment');
}
function vAnalysis(){
heroTitle.textContent='تحلیل و آنالیز';heroDesc.textContent='نمای آماری داراییهای ثبتشده';backButton.style.display='inline-block';
view.innerHTML='<div class="wz-loading">در حال دریافت آمار…</div>';
apiGet('equipment').then(function(rows){var counts={};rows.forEach(function(r){var key=statusText(attr(r,ATTR.status));counts[key]=(counts[key]||0)+1;});view.innerHTML='<div class="v-stats"><div><strong>'+rows.length+'</strong><span>کل داراییها</span></div>'+Object.keys(counts).map(function(k){return '<div><strong>'+counts[k]+'</strong><span>'+esc(k)+'</span></div>';}).join('')+'</div>';}).catch(function(e){view.textContent=vError(e);});
}
function vDialog(title,body){
if(W.open || $id('mqDetail').classList.contains('open'))return false;
var el=$id('vDialog');if(!el){el=document.createElement('div');el.id='vDialog';el.className='v-overlay';document.getElementById('mediq-dashboard').appendChild(el);}
V11.editSession=(V11.editSession||0)+1;V11.focus=document.activeElement;
el.innerHTML='<section class="v-dialog" role="dialog" aria-modal="true" aria-labelledby="vDialogTitle"><header><h3 id="vDialogTitle">'+esc(title)+'</h3><button id="vClose" aria-label="بستن">×</button></header><div class="v-dialog-body">'+body+'</div><p id="vMessage" role="status"></p></section>';
el.hidden=false;$id('vClose').onclick=vClose;el.onmousedown=function(e){if(e.target===el)vClose();};$id('vClose').focus();return true;
}
function vClose(){if(V11.busy)return;V11.editSession=(V11.editSession||0)+1;mqCloseDatePopover();var el=$id('vDialog');if(el)el.hidden=true;if(V11.focus&&V11.focus.isConnected)V11.focus.focus();}
function vMessage(text){var el=$id('vMessage');if(el)el.textContent=publicMessage(text);}
function vEdit(id){
var row=findRow('equipment',id);if(!row)return;
if(!vDialog('ویرایش دارایی — '+(row.key||id),'<p>ویرایش مشخصات پایه؛ تغییر مسئول، بخش و موقعیت از تحویلوتحول انجام میشود.</p><div class="v-fields">'+[[6268,'شماره سریال'],[6269,'شماره اموال'],[6281,'علت وضعیت فعلی']].map(function(f){return '<label>'+f[1]+'<input id="vEdit'+f[0]+'" maxlength="500" value="'+esc(attr(row,f[0]))+'"></label>';}).join('')+'</div><button class="mq-assets-btn primary" id="vEditSave">ثبت اقدام</button>'))return;
$id('vEditSave').onclick=function(){var vals={};[6268,6269,6281].forEach(function(k){if($id('vEdit'+k).value!==attr(row,k))vals[k]=$id('vEdit'+k).value;});if(!Object.keys(vals).length)return vMessage('تغییری وارد نشده است.');V11.busy=true;this.disabled=true;operations({action:'edit',id:id,values:vals}).then(function(){V11.busy=false;vClose();V11.states={};loadAssets('mqAssetsHost','mqAssetSearch');}).catch(function(e){vMessage(vError(e));}).finally(function(){V11.busy=false;if($id('vEditSave'))$id('vEditSave').disabled=false;});};
}
function vOptions(kind){return '<option value="">انتخاب کنید</option>'+(cache[kind]||[]).map(function(r){return '<option value="'+esc(r.id)+'">'+esc(labelOf(r))+'</option>';}).join('');}
(function(){var header=document.querySelector('#mediq-dashboard .mq-header-left'),hero=document.querySelector('#mediq-dashboard .mq-hero');if(header&&hero)hero.appendChild(header);})();
(function(){var logo=document.querySelector('#mediq-dashboard .mq-logo');if(logo){logo.setAttribute('role','link');logo.setAttribute('tabindex','0');logo.setAttribute('title','صفحه اصلی مدیکیو');logo.onclick=function(){renderEquipment();};logo.onkeydown=function(e){if(e.key==='Enter'||e.key===' '){e.preventDefault();renderEquipment();}};}})();
function vAccessLabel(v){var m={available:'در دسترس',damaged:'آسیب دیده',lost:'گم شده',destroyed:'از بین رفته'};return m[norm(v)]||optionCaption(v)||'—';}
function vStatusMark(value){
var v=norm(value),ok=(v==='active'||v==='فعال');
var off=(v==='inactive'||v==='غیرفعال'||v==='entered-in-error'||v==='ثبت اشتباه');
return '<span class="v33-status-icon '+(ok?'is-active':off?'is-inactive':'is-unknown')+'" aria-hidden="true">'+(ok?'✓':off?'×':'•')+'</span>';
}
function vRequestLink(key){
key=clean(key);if(!/^[A-Z][A-Z0-9_]*-\d+$/i.test(key))return '';
return '<a class="v33-request-link" href="'+esc('https://support.h-soft.ir/browse/'+encodeURIComponent(key))+'" target="_blank" rel="noopener noreferrer" aria-label="باز کردن درخواست '+esc(key)+'">مشاهده درخواست ↗</a>';
}
function v33AccessOptions(meta){
var fixed=[{id:'lost',label:'گم شده'},{id:'damaged',label:'آسیب دیده'},{id:'destroyed',label:'از بین رفته'},{id:'available',label:'در دسترس'}];
var allowed=String(meta&&meta.options||'').split(/[,;\r\n]+/).map(function(x){return norm(x);}).filter(Boolean);
return fixed.map(function(item){
var aliases={lost:['lost','گم شده','مفقود'],damaged:['damaged','آسیب دیده','آسیبدیده'],destroyed:['destroyed','از بین رفته','از رده خارج'],available:['available','در دسترس','موجود']};
var match=allowed.find(function(opt){return aliases[item.id].indexOf(opt)>=0;});
return {id:match||item.id,label:item.label};
});
}
function vProcess(){
if(!vDialog('مدیریت گردش دارایی','<div class="v-operation-choices">'+Object.keys(OP_NAMES).map(function(k){return '<button class="mq-assets-btn" data-vop="'+k+'">'+OP_NAMES[k]+'</button>';}).join('')+'</div><div id="vProcessContent">نوع عملیات را انتخاب کنید.</div>'))return;
var selected=Object.assign({},V11.selected),op='',page=1,token=window.crypto&&crypto.randomUUID?crypto.randomUUID():String(Date.now())+'-'+Math.random().toString(36).slice(2),committed=false;
function fieldSelect(id,label,kind){return '<label>'+label+'<select id="'+id+'">'+vOptions(kind)+'</select></label>';}
function form(){
var labels='';
if(op==='entry')labels=fieldSelect('vTargetLocation','انبار مقصد','location');
else if(op==='exit')labels=fieldSelect('vSourceLocation','انبار مبدأ','location')+fieldSelect('vTargetDepartment','بخش مقصد','department')+fieldSelect('vTargetResponsible','مسئول مقصد','responsible');
else if(op==='scrap')labels=fieldSelect('vSourceLocation','انبار','location');
else labels=fieldSelect('vSourceDepartment','بخش بهرهبردار فعلی','department')+fieldSelect('vSourceResponsible','مسئول فعلی','responsible')+fieldSelect('vTargetDepartment','بخش مقصد','department')+fieldSelect('vTargetResponsible','مسئول مقصد','responsible');
$id('vProcessContent').innerHTML='<h4>'+OP_NAMES[op]+'</h4><div class="v-fields">'+labels+'<label>علت / توضیحات<textarea id="vReason" maxlength="2000"></textarea></label></div>'+(op==='entry'?'<div class="v-process-controls">'+fieldSelect('vFilterDept','فیلتر بخش فعلی','department')+fieldSelect('vFilterUser','فیلتر مسئول فعلی','responsible')+'</div>':'')+'<div class="v-process-searchline"><input type="search" id="vProcessSearch" placeholder="جستوجو در داراییها"></div><div id="vProcessList"></div><div class="mq-list-controls"><button class="mq-assets-btn" id="vProcessPrev">قبلی</button><span id="vProcessCount"></span><button class="mq-assets-btn" id="vProcessNext">بعدی</button></div><p id="vConfigNotice"></p><button class="mq-assets-btn primary" id="vReview">بازبینی و ثبت</button><div id="vReviewBox"></div>';
/* V36: the primary current-section, current-owner and warehouse controls filter the list. */
if(op==='handover'||op==='exit'||op==='scrap'){
$id('vProcessContent').querySelectorAll('.v-process-controls').forEach(function(node){node.remove();});
}
var reviewButton=$id('vReview'),filterBar=$id('vProcessList');
if(reviewButton&&filterBar){reviewButton.classList.add('v32-review-top');filterBar.parentNode.insertBefore(reviewButton,filterBar);var reviewBox=$id('vReviewBox');if(reviewBox)reviewButton.insertAdjacentElement('afterend',reviewBox);}
['vProcessSearch','vFilterDept','vFilterUser','vFilterLocation','vSourceDepartment','vSourceResponsible','vSourceLocation'].forEach(function(id){var el=$id(id);if(el){el.addEventListener(id==='vProcessSearch'?'input':'change',function(){page=1;selected={};paint();});}});
$id('vProcessPrev').onclick=function(){page--;paint();};$id('vProcessNext').onclick=function(){page++;paint();};$id('vReview').onclick=review;paint();
}
function matches(row){
var dept=$id('vFilterDept'),user=$id('vFilterUser'),loc=$id('vFilterLocation'),sd=$id('vSourceDepartment'),su=$id('vSourceResponsible'),sl=$id('vSourceLocation');
if(dept&&dept.value&&attrList(row,V11.attrs.department||ATTR.department).indexOf(dept.value)<0)return false;
if(user&&user.value&&attrList(row,V11.attrs.responsible||6282).indexOf(user.value)<0)return false;
if(sd&&sd.value&&attrList(row,V11.attrs.department||ATTR.department).indexOf(sd.value)<0)return false;
if(su&&su.value&&attrList(row,V11.attrs.responsible||6282).indexOf(su.value)<0)return false;
var locId=V11.attrs.location;if((loc&&loc.value)||(sl&&sl.value)){if(!locId)return false;var vals=attrList(row,locId);if(loc&&loc.value&&vals.indexOf(loc.value)<0)return false;if(sl&&sl.value&&vals.indexOf(sl.value)<0)return false;}
if(op==='exit' || op==='scrap'){
var meta=equipmentMetadata||{};var inStoreAttr=Object.keys(meta).find(function(k){return /^(instore|in store|در انبار)$/i.test(String(meta[k].name||meta[k].label||'').trim());});
if(!inStoreAttr)return false;
if(!attrList(row,inStoreAttr).some(function(x){return /^(true|yes|1)$/i.test(x);}))return false;
}
return true;
}
function paint(){
if(!$id('vProcessList'))return;
var rows=vFilter(cache.equipment||[],$id('vProcessSearch').value).filter(matches),part=assetPageSlice(rows,page,'20');page=part.page;
$id('vProcessList').innerHTML='<div class="mq-tbl-wrap"><table class="v-process-table"><thead><tr><th>انتخاب</th><th>دارایی / عنوان</th><th>بخش فعلی</th><th>مسئول فعلی</th><th>وضعیت دسترسی</th></tr></thead><tbody>'+part.items.map(function(r){var st=vState(r);return '<tr><td><input type="checkbox" data-vpselect="'+esc(r.id)+'" '+(selected[r.id]?'checked ':'')+(st.active||!st.checked?'disabled ':'')+'></td><td>'+esc((attr(r,ATTR.devName)||r.label||r.key))+'</td><td>'+esc(vRef('department',r,V11.attrs.department||6277))+'</td><td>'+esc(vRef('responsible',r,V11.attrs.responsible||6282))+'</td><td>'+esc(vAccessLabel(attr(r,V11.attrs.availability||6280)))+'</td></tr>';}).join('')+(rows.length?'':'<tr><td colspan="5">دارایی مطابق فیلتر پیدا نشد.</td></tr>')+'</tbody></table></div>';
$id('vProcessCount').textContent='صفحه '+part.page+' از '+part.pages+' — '+Object.keys(selected).length+' انتخاب';$id('vProcessPrev').disabled=page===1;$id('vProcessNext').disabled=page===part.pages;
$id('vConfigNotice').textContent=V11.ready?'':'ثبت فرایند پس از تکمیل تنظیمات سرویس فعال میشود.';
$id('vProcessList').querySelectorAll('[data-vpselect]').forEach(function(b){b.onchange=function(){if(b.checked)selected[b.dataset.vpselect]=true;else delete selected[b.dataset.vpselect];paint();};});
var ids=part.items.filter(function(r){return !vState(r).checked;}).map(function(r){return String(r.id);});
if(ids.length)vReadStates(ids).then(function(r){ids.forEach(function(id){if(V11.states[id]&&V11.states[id].active)delete selected[id];});if($id('vProcessList')&&!$id('vDialog').hidden)paint();}).catch(function(e){vMessage(vError(e));});
if((op==='exit'||op==='scrap')&&!Object.keys(equipmentMetadata||{}).some(function(k){return /^(instore|in store|در انبار)$/i.test(String(equipmentMetadata[k].name||equipmentMetadata[k].label||'').trim());}))$id('vConfigNotice').textContent='شناسه فیلد InStore در متادیتا مشخص نیست؛ برای جلوگیری از خروج اشتباه، انتخاب دارایی تا تنظیم فیلد غیرفعال است.';
}
function review(){
var ids=Object.keys(selected),responsible=$id('vTargetResponsible'),department=$id('vTargetDepartment'),location=$id('vTargetLocation'),source=$id('vSourceLocation');
if(!ids.length)return vMessage('حداقل یک دارایی انتخاب کنید.');if(ids.length>50)return vMessage('حداکثر ۵۰ دارایی انتخاب کنید.');
var target={responsible:responsible?responsible.value:'',department:department?department.value:'',location:location?location.value:(source?source.value:'')};
if((op==='handover'||op==='exit')&&(!target.responsible||!target.department))return vMessage('مسئول و بخش مقصد الزامی است.');
if((op==='entry'||op==='exit'||op==='scrap')&&!target.location)return vMessage('انتخاب انبار الزامی است.');
if(op==='scrap'&&!$id('vReason').value.trim())return vMessage('علت اسقاط را بنویسید.');
var reason=$id('vReason').value;
$id('vReviewBox').innerHTML='<h4>بازبینی درخواست</h4><p>'+esc(OP_NAMES[op])+' — '+ids.length+' دارایی</p><ul>'+ids.map(function(id){return '<li>'+esc(labelOf(findRow('equipment',id)))+'</li>';}).join('')+'</ul><button class="mq-assets-btn primary" id="vCommit" '+(!V11.ready||committed?'disabled':'')+'>ثبت نهایی درخواست</button>';
$id('vCommit').onclick=function(){if(committed||V11.busy)return;V11.busy=true;this.disabled=true;
operations({action:'start',operation:op,ids:ids,target:target,reason:reason,dateLabel:new Intl.DateTimeFormat('fa-IR',{year:'numeric',month:'2-digit',day:'2-digit'}).format(new Date()),token:token}).then(function(r){committed=true;V11.selected={};V11.states={};$id('vProcessContent').innerHTML='<h3>درخواست '+esc(r.parentKey)+' ثبت شد</h3><p>'+esc(r.message)+'</p>'+vRequestLink(r.parentKey);loadAssets('mqAssetsHost','mqAssetSearch');}).catch(function(e){vMessage(vError(e));if($id('vCommit'))$id('vCommit').disabled=false;}).finally(function(){V11.busy=false;});
};
}
$id('vDialog').querySelectorAll('[data-vop]').forEach(function(b){b.onclick=function(){if(V11.busy||committed)return;op=b.dataset.vop;$id('vDialog').querySelectorAll('[data-vop]').forEach(function(x){x.classList.toggle('primary',x===b);});Promise.all([apiGet('location').catch(function(){return [];}),apiGet('department'),apiGet('responsible'),loadExtraEquipment().catch(function(){return [];})]).then(function(){if(op)form();}).catch(function(e){vMessage(vError(e));});};});
vReadStates([]).catch(function(e){vMessage(vError(e));});
}
document.addEventListener('keydown',function(e){var el=$id('vDialog');if(!el||el.hidden)return;if(e.key==='Escape')vClose();if(e.key==='Tab'){var list=Array.from(el.querySelectorAll('button:not([disabled]),input:not([disabled]),select,textarea')).filter(function(x){return x.offsetParent!==null;});if(!list.length)return;var first=list[0],last=list[list.length-1];if(e.shiftKey&&document.activeElement===first){e.preventDefault();last.focus();}else if(!e.shiftKey&&document.activeElement===last){e.preventDefault();first.focus();}}});
/* Full metadata-driven equipment editor, V12. */
function vEditDefinitions(){
var excluded=[6265,6270,6366,6401];
var captions={6261:'کد دارایی',6263:'تاریخ ایجاد',6264:'آخرین تغییر',6267:'شناسه دستگاه',6269:'شماره اموال',6271:'تاریخ خرید',6272:'فروشنده',6277:'بخش بهرهبردار / موقعیت مکانی فعلی',6279:'وضعیت',6644:'مدل دستگاه',6698:'آزمایشی'};
var segments=[['مشخصات پایه',[6261,6263,6264,6644,6267,6268,6269]],['فنی و اجزا',[6284,6285,6286,6400,6290,6402,6291]],['مالی و خرید',[6271,6272,6273,6274,6287,6671]],['موقعیت و مسئولان',[6277,6392,6282,6283,6396]],['وضعیت و تاریخها',[6279,6280,6281,6288,6289,6275,6276,6365,6390,6649,6672]]];
var fields=Object.keys(equipmentMetadata).map(function(key){var m=equipmentMetadata[key],id=Number(key),known=EQUIPMENT_FIELDS.find(function(f){return f[0]===id;});
var kind=m.objectReference||String(m.type)==='REFERENCED_OBJECT'?'ref':m.dateTimeType?'datetime-local':m.dateType?'date':m.booleanType?'boolean':m.numericType?'number':String(m.options||'').trim()||id===6279?'select':'text';
var bucket=segments.findIndex(function(s){return s[1].indexOf(id)>=0;});
return {id:id,meta:m,label:captions[id]||(known?known[2]:publicMessage(m.name)),kind:kind,segment:bucket<0?5:bucket,multi:Number(m.maximumCardinality)>1||Number(m.maximumCardinality)===-1,required:Number(m.minimumCardinality)>0,editable:[6261,6263,6264].indexOf(id)<0&&['DEFAULT','REFERENCED_OBJECT'].indexOf(String(m.type))>=0};
}).filter(function(f){return excluded.indexOf(f.id)<0;}).sort(function(a,b){return a.segment-b.segment||a.id-b.id;});
return {fields:fields,segments:segments.map(function(x){return x[0];}).concat(['سایر اطلاعات'])};
}
function vEdit(id){
var row=findRow('equipment',id);if(!row)return;
if(!vDialog('ویرایش دارایی — '+(row.key||id),'<div class="wz-loading">در حال دریافت تمام فیلدهای دارایی…</div>'))return;
var session=++V11.editSession||1;V11.editSession=session;
var dialog=$id('vDialog');
jfetch(API.read+'?kind=metadata').then(function(r){
if(dialog.hidden||session!==V11.editSession)return null;
equipmentMetadata={};((r.metadata.equipment||{}).attributes||[]).forEach(function(a){equipmentMetadata[String(a.id)]=a;});
var def=vEditDefinitions();
return Promise.all(def.fields.filter(function(f){return f.kind==='ref';}).map(function(f){return apiGet('equipmentRef_'+f.id).then(function(rows){f.rows=rows;});})).then(function(){return def;});
}).then(function(def){
if(!def||dialog.hidden||session!==V11.editSession)return;
var fields=def.fields,initial={},editing=true;
function options(f){
var rows=f.kind==='ref'?(f.rows||[]):f.kind==='boolean'?[{id:'true',label:'بله'},{id:'false',label:'خیر'}]:String(f.meta.options||'').split(/[,;\r\n]+/).map(function(s){return s.trim();}).filter(Boolean).map(function(v){return {id:v,label:optionCaption(v)};});
if(f.id===6279&&!rows.length)rows=Object.keys(STATUS_FA).map(function(k){return {id:k,label:STATUS_FA[k]};});
if(f.id===6280)rows=v33AccessOptions(f.meta);
rows=rows.slice();attrList(row,f.id).forEach(function(v){if(!rows.some(function(r){return String(r.id)===String(v);}))rows.push({id:v,label:f.kind==='ref'?'مقدار ثبتشده: '+v:optionCaption(v)});});
return rows;
}
function render(f){
var cid='vAll'+f.id,values=attrList(row,f.id),value=values[0]||'',body='';
if(f.id===6261)value=row.key||value;
if(!f.editable)return '<div class="wz-field"><label>'+esc(f.label)+'</label><input readonly value="'+esc(f.kind==='date'||f.kind==='datetime-local'?displayJalali(value,f.kind==='datetime-local'):f.id===6261?value:values.join('، '))+'"></div>';
if(['ref','select','boolean'].indexOf(f.kind)>=0){
body='<select id="'+cid+'" '+(f.multi?'multiple size="5"':'')+' '+(f.required?'required':'')+'>'+(!f.multi?'<option value="">انتخاب کنید</option>':'')+options(f).map(function(r){return '<option value="'+esc(r.id)+'" '+(values.indexOf(String(r.id))>=0?'selected':'')+'>'+esc(labelOf(r))+'</option>';}).join('')+'</select>';
}else if(f.kind==='date'||f.kind==='datetime-local')return jalaliField(cid,f.label,value,f.kind==='datetime-local',f.required);
else if(f.multi)body='<textarea id="'+cid+'" rows="4" '+(f.required?'required':'')+'>'+esc(values.join('\n'))+'</textarea><small>هر مقدار در یک خط</small>';
else body='<input id="'+cid+'" type="'+(f.kind==='number'?'number':'text')+'" '+(f.kind==='number'?'step="any"':'')+' '+(f.required?'required':'')+' value="'+esc(value)+'">';
return '<div class="wz-field"><label for="'+cid+'">'+esc(f.label)+(f.required?' *':'')+'</label>'+body+'</div>';
}
dialog.querySelector('.v-dialog-body').id='vEditBody';
var groups=def.segments.map(function(label,i){return {index:i,label:label,fields:fields.filter(function(f){return f.segment===i;})};}).filter(function(g){return g.fields.length;});
$id('vEditBody').innerHTML='<div class="v-editor-tabs" role="tablist">'+groups.map(function(g,j){return '<button type="button" role="tab" id="vEditTab'+g.index+'" data-edit-tab="'+g.index+'" aria-controls="vEditPanel'+g.index+'" aria-selected="'+(j===0)+'">'+g.label+'</button>';}).join('')+'</div><div class="v-editor-sections">'+groups.map(function(g,j){return '<section role="tabpanel" id="vEditPanel'+g.index+'" aria-labelledby="vEditTab'+g.index+'" data-edit-panel="'+g.index+'" '+(j?'hidden':'')+'><h4>'+g.label+'</h4><div class="v-fields">'+g.fields.map(render).join('')+'</div></section>';}).join('')+'</div><div class="v-editor-footer"><span>فقط فیلدهای تغییرکرده ذخیره میشوند.</span><button type="button" class="mq-assets-btn primary" id="vEditSave">ثبت اقدام</button></div>';
function tab(index){mqCloseDatePopover();dialog.querySelectorAll('[data-edit-panel]').forEach(function(p){p.hidden=p.dataset.editPanel!==String(index);});dialog.querySelectorAll('[data-edit-tab]').forEach(function(b){var active=b.dataset.editTab===String(index);b.classList.toggle('active',active);b.setAttribute('aria-selected',String(active));b.tabIndex=active?0:-1;});}
dialog.querySelectorAll('[data-edit-tab]').forEach(function(b){b.onclick=function(){tab(b.dataset.editTab);};b.onkeydown=function(e){if(['ArrowLeft','ArrowRight','Home','End'].indexOf(e.key)<0)return;e.preventDefault();var buttons=Array.from(dialog.querySelectorAll('[data-edit-tab]')),i=buttons.indexOf(b);i=e.key==='Home'?0:e.key==='End'?buttons.length-1:(i+(e.key==='ArrowLeft'?1:-1)+buttons.length)%buttons.length;tab(buttons[i].dataset.editTab);buttons[i].focus();};});tab(groups[0].index);
function raw(f){var el=$id('vAll'+f.id);return el.multiple?Array.from(el.selectedOptions).map(function(o){return o.value;}):el.value;}
fields.filter(function(f){return f.editable;}).forEach(function(f){initial[f.id]=JSON.stringify(raw(f));});
bindJalaliInputs();
$id('vEditSave').onclick=function(){
if(V11.busy||!editing)return;
var values={},expected={};
try{fields.filter(function(f){return f.editable;}).forEach(function(f){var el=$id('vAll'+f.id),value=raw(f);if(JSON.stringify(value)===initial[f.id])return;
if(!el.checkValidity()){tab(f.segment);el.focus();el.reportValidity();throw new Error('مقدار «'+f.label+'» معتبر نیست.');}
if(f.kind==='date'||f.kind==='datetime-local'){try{value=parseJalali(value,f.kind==='datetime-local');}catch(e){tab(f.segment);el.focus();throw e;}}
else if(f.multi&&!el.multiple)value=String(value).split(/\r?\n/).map(function(v){return v.trim();}).filter(Boolean);
values[String(f.id)]=value;expected[String(f.id)]=attrList(row,f.id);
});}catch(e){vMessage(vError(e));return;}
if(!Object.keys(values).length)return vMessage('تغییری وارد نشده است.');
mqCloseDatePopover();V11.busy=true;this.disabled=true;
operations({action:'edit',id:String(id),values:values,expected:expected}).then(function(){editing=false;V11.busy=false;vClose();V11.states={};loadAssets('mqAssetsHost','mqAssetSearch');}).catch(function(e){vMessage(vError(e));}).finally(function(){V11.busy=false;if($id('vEditSave'))$id('vEditSave').disabled=false;});
};
}).catch(function(e){if(!dialog.hidden&&session===V11.editSession){dialog.querySelector('.v-dialog-body').textContent='دریافت فرم ویرایش کامل نشد.';vMessage(vError(e));}});
}
/* Live process progress. The only polling action is state (read-only). */
var V13_LIVE={busy:false,sequence:0,lastAsset:null,error:'',updated:0};
function vTimelineStates(s){
var path=s.stages||[],current=path.findIndex(function(step){return String(step.id)===String(s.statusId);});
return path.map(function(step,i){
var left=step.leftAt,entered=step.enteredAt,confirmed=!!(entered&&left&&left>=entered);
var state=i===current?(s.active?'current':s.completed?'done':'pending'):(i<current&&confirmed?'done':'pending');
return {id:step.id,label:step.name,state:state,enteredAt:entered||'',leftAt:left||''};
});
}
function vTimelineHost(){
var root=$id('v11Summary');if(!root)return null;
var host=$id('vLiveTimeline');if(!host){host=document.createElement('section');host.id='vLiveTimeline';host.className='v-live-timeline';host.setAttribute('aria-label','روند فرایند دارایی');root.parentNode.appendChild(host);}
return host;
}
function vRenderTimeline(row,s){
var host=vTimelineHost();if(!host)return;
host.innerHTML='<header><strong>'+(s.active?'روند فرایند':s.hasProcess?'آخرین فرایند':'روند فرایند')+'</strong></header>';
if(!s.checked){host.innerHTML+='<p>در حال دریافت اطلاعات…</p>';return;}
if(!s.hasProcess&&!s.issueKey){host.innerHTML+='<p>فرایند ثبتشدهای برای این دارایی یافت نشد.</p>';return;}
var steps=vTimelineStates(s);
host.innerHTML+='<ol class="v-circle-track" aria-label="مراحل فرایند">'+steps.map(function(step,i){return '<li class="v-circle-step '+step.state+'" '+(step.state==='current'?'aria-current="step"':'')+'><div class="v-circle-rail"><span class="v-circle-node" aria-hidden="true">'+(step.state==='done'?'✓':step.state==='current'?'<i></i>':'')+'</span><span class="v-circle-line '+(steps[i+1]&&step.state==='done'&&(steps[i+1].state==='done'||steps[i+1].state==='current')?'done':'')+'"></span></div><strong>'+esc(step.label)+'</strong><small>'+esc(step.state==='current'?'مرحلهٔ جاری':step.state==='done'?'انجامشده':step.enteredAt?'قبلاً طی شده':'در انتظار')+'</small></li>';}).join('')+'</ol>'+vRequestLink(s.issueKey);
if(s.historyWarning)host.innerHTML+='<p class="v-timeline-warning">اطلاعات سابقهٔ مراحل کامل نیست.</p>';
if(steps.length&&!steps.some(function(x){return String(x.id)===String(s.statusId);}))host.innerHTML+='<p class="v-timeline-warning">وضعیت جاری در مسیر نمایش تنظیمشده نیست.</p>';
}
function vPanel(id){
var row=findRow('equipment',id),box=$id('v11Summary');if(!row||!box)return;
if(V13_LIVE.lastAsset!==String(id)){V13_LIVE.sequence++;V13_LIVE.lastAsset=String(id);V13_LIVE.error='';V13_LIVE.updated=0;}
V11.row=String(id);var s=vState(row),a=V11.attrs;
var labels={handover:'در حال تحویل کاربری',entry:'در حال ورود به انبار',exit:'در حال خروج از انبار',scrap:'در حال اسقاط'};
var data=[['مسئول بهرهبردار',vRef('responsible',row,a.responsible)],['بخش بهرهبردار',vRef('department',row,a.department)],['موقعیت فعلی',vRef('location',row,a.location||6277)],['وضعیت',statusText(attr(row,a.status))],['وضعیت دسترسی',vAccessLabel(attr(row,a.availability))],['وضعیت اموالداری',s.active?(s.conflict?'چند فرایند فعال؛ نیازمند بررسی':labels[s.operation]||'در حال پردازش'):s.checked?'پایدار':'در حال بررسی']];
box.innerHTML='<strong>'+esc(attr(row,ATTR.devName)||row.label)+'</strong>'+data.map(function(d){return '<div class="v-summary-row"><span>'+esc(d[0])+'</span><b>'+(d[0]==='وضعیت'?vStatusMark(attr(row,a.status)):'')+esc(d[1])+'</b></div>';}).join('');
vRenderTimeline(row,s);
}
function vLiveRefresh(){
if(V13_LIVE.busy||V11.busy||document.hidden||!$id('v11Summary')||!V11.row)return;
var id=String(V11.row),seq=V13_LIVE.sequence;V13_LIVE.busy=true;
operations({action:'state',ids:[id]}).then(function(r){
if(seq!==V13_LIVE.sequence||String(V11.row)!==id||!$id('v11Summary'))return;
if(!r.states||!r.states[id])throw new Error('پاسخ بررسی وضعیت کامل نیست.');
V11.states[id]=Object.assign({checked:true},r.states[id]);V13_LIVE.error='';V13_LIVE.updated=Date.now();
V11.ready=r.ready;V11.missing=r.missing||[];Object.assign(V11.attrs,r.attributes||{});
vPanel(id);
document.querySelectorAll('[data-vselect="'+id+'"],[data-vedit="'+id+'"]').forEach(function(b){b.disabled=!!r.states[id].active;if(r.states[id].active&&b.type==='checkbox'){b.checked=false;delete V11.selected[id];}});
}).catch(function(e){if(seq===V13_LIVE.sequence){V13_LIVE.error=vError(e);var row=findRow('equipment',id);if(row)vRenderTimeline(row,vState(row));}}).finally(function(){V13_LIVE.busy=false;});
}
setInterval(vLiveRefresh,5000);
document.addEventListener('visibilitychange',function(){if(!document.hidden)vLiveRefresh();});
window.addEventListener('focus',vLiveRefresh);
/* Equipment status summary is calculated over the complete equipment list. */
var V14_STATUS={filter:'all'};
function vAssetStatusGroup(row){
var raw=searchNorm(attr(row,ATTR.status)).replace(/\s+/g,'');
if(raw==='active'||raw==='فعال')return 'active';
if(raw==='inactive'||raw==='غیرفعال'||raw==='غيرفعال')return 'inactive';
return 'other';
}
function vAssetStatusCounts(rows){
var counts={all:rows.length,active:0,inactive:0,other:0};
rows.forEach(function(row){counts[vAssetStatusGroup(row)]++;});return counts;
}
function vRenderStatusDashboard(rows){
var host=$id('vAssetDashboard');if(!host)return;
var counts=vAssetStatusCounts(rows),fa=new Intl.NumberFormat('fa-IR');
var icons={all:'<rect x="3" y="3" width="7" height="7" rx="2"/><rect x="14" y="3" width="7" height="7" rx="2"/><rect x="3" y="14" width="7" height="7" rx="2"/><rect x="14" y="14" width="7" height="7" rx="2"/>',active:'<circle cx="12" cy="12" r="9"/><path d="m8 12 3 3 5-6"/>',inactive:'<circle cx="12" cy="12" r="9"/><path d="M9 8v8m6-8v8"/>',other:'<path d="m12 3 10 17H2Z"/><path d="M12 9v4m0 3v1"/>'};
var names={all:'کل داراییها',active:'داراییهای فعال',inactive:'داراییهای غیرفعال',other:'سایر وضعیتها'};
host.innerHTML='<div class="v-dashboard-heading"><div><strong>نمای کلی داراییها</strong><span>آمار کل داراییها؛ مستقل از جستوجو و صفحهبندی</span></div><small>برای فیلتر لیست، یک کارت را انتخاب کنید.</small></div><div class="v-status-cards">'+['all','active','inactive','other'].map(function(key){var value=counts[key],percent=counts.all?Math.round(value/counts.all*100):0;return '<button type="button" class="v-stat-card '+key+(V14_STATUS.filter===key?' selected':'')+'" data-status-card="'+key+'" aria-pressed="'+(V14_STATUS.filter===key)+'"><span class="v-stat-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">'+icons[key]+'</svg></span><span class="v-stat-label">'+names[key]+'</span><strong>'+fa.format(value)+'</strong><span class="v-stat-bottom">'+(key==='all'?'نمایش همهٔ وضعیتها':fa.format(percent)+'٪ از کل داراییها')+'</span><span class="v-stat-meter" aria-hidden="true"><i style="width:'+percent+'%"></i></span></button>';}).join('')+'</div>';
host.querySelectorAll('[data-status-card]').forEach(function(b){b.onclick=function(){V14_STATUS.filter=b.dataset.statusCard;ASSET_PAGE.page=1;vRenderStatusDashboard(rows);if(V11.paint)V11.paint();};});
}
/* V30 logistics navigation override: preserve existing backend routes. */
function renderLogistics(){
state.screen='logistics';heroTitle.textContent='مدیریت تأمین و لجستیک';heroDesc.textContent='دسته موردنظر را انتخاب کنید.';backButton.style.display='inline-block';buildBreadcrumb(['مدیریت تجهیزات','مدیریت تأمین و لجستیک']);
var options=[['کالاهای مصرفی','consumable',ICONS.consumable],['داراییهای ثابت','fixed',ICONS.property],['تأمینکنندهها','suppliers',ICONS.supply]];
view.innerHTML='<div class="mq-card-grid">'+options.map(function(o){return '<button type="button" class="mq-module-card mq-has-children" data-logistic="'+o[1]+'"><span class="mq-module-icon"><svg viewBox="0 0 24 24">'+o[2]+'</svg></span><span class="mq-module-name">'+o[0]+'</span><span class="mq-hierarchy-arrow" aria-hidden="true">↙</span></button>';}).join('')+'</div>';
view.querySelectorAll('[data-logistic]').forEach(function(btn){btn.onclick=function(){var k=btn.dataset.logistic;if(k==='suppliers')vSupplierScreen();else if(k==='fixed')renderAssetSections('newAsset');else{state.screen='consumable';renderSimplePage('کالاهای مصرفی');mqTreeActivate('consumable');}};});mqTreeActivate('logistics');
}
function vSupplierScreen(){
state.screen='suppliers';heroTitle.textContent='تأمینکنندهها';heroDesc.textContent='فهرست تأمینکنندگان ثبتشده در سامانه داراییها';backButton.style.display='inline-block';buildBreadcrumb(['مدیریت تجهیزات','مدیریت تأمین و لجستیک','تأمینکنندهها']);
mqTreeActivate('suppliers');view.innerHTML='<div class="mq-preview"><div class="mq-preview-title">تأمینکنندهها</div><div class="mq-assets-head"><input class="mq-edit-search" id="vSupplierSearch" placeholder="جستوجوی تأمینکننده"><button type="button" class="mq-assets-btn" id="vSupplierReload">بهروزرسانی لیست</button></div><div id="vSupplierList" class="mq-assets-host"><div class="wz-loading">در حال دریافت اطلاعات…</div></div></div>';
var rows=[];function paint(){var host=$id('vSupplierList');if(!host)return;var q=searchNorm($id('vSupplierSearch').value);var subset=rows.filter(function(r){return searchNorm([r.key,r.label,r.id].join(' ')).indexOf(q)>=0;}).slice(0,250);host.innerHTML='<div class="mq-tbl-wrap"><table class="mq-tbl"><thead><tr><th>شناسه</th><th>نام تأمینکننده</th></tr></thead><tbody>'+subset.map(function(r){return '<tr><td>'+esc(r.key||r.id)+'</td><td>'+esc(labelOf(r))+'</td></tr>';}).join('')+'</tbody></table></div><p>'+subset.length+' مورد نمایش داده شده</p>';}
function load(force){apiGet('supplier',force).then(function(r){rows=r;paint();}).catch(function(e){$id('vSupplierList').textContent=vError(e);});}
$id('vSupplierSearch').oninput=paint;$id('vSupplierReload').onclick=function(){load(true);};load(false);
}
/* MEDIQ MAINTENANCE V1 - dashboard embedded module */
var MM={tab:'overview',overview:null,plans:[],suppliers:[],equipment:[],activities:[]};
/* MediQ V37.2: maintenance requests always target Confluence root, not AJS.contextPath. */
var MM_PROXY_ROOT = window.location.protocol + '//' + window.location.host + '/rest/scriptrunner/latest/custom/';
function mmRequest(url, options) {
return jfetch(url, options).catch(function(err) {
var message = (err && err.message) ? err.message : String(err);
var enriched = new Error(message + ' | آدرس درخواست: ' + url + ' | لطفاً نسخه صفحه و Network مرورگر را بررسی کنید.');
enriched.status = err && err.status;
throw enriched;
});
}
function mmApi(action,values) {
var q='?action='+encodeURIComponent(action);
if(values&&values.type) q+='&type='+encodeURIComponent(values.type);
return mmRequest(MM_PROXY_ROOT+'mediqMaintenanceProxy'+q,{method:'GET',cache:'no-store'});
}
function mmWrite(action,data) {
return mmRequest(MM_PROXY_ROOT+'mediqMaintenanceProxyWrite',{
method:'POST',headers:{'Content-Type':'application/json','X-Atlassian-Token':'no-check'},
body:JSON.stringify(Object.assign({action:action},data||{}))
});
}
function mmBtn(text,action){return '<button type="button" class="mq-assets-btn" data-mm="'+esc(action)+'">'+esc(text)+'</button>';}
function mmTable(headers,rows){return '<div class="mq-tbl-wrap"><table class="mq-tbl"><thead><tr>'+headers.map(function(h){return '<th>'+esc(h)+'</th>';}).join('')+'</tr></thead><tbody>'+(rows.length?rows.map(function(c){return '<tr>'+c.map(function(v){return '<td>'+v+'</td>';}).join('')+'</tr>';}).join(''):'<tr><td colspan="'+headers.length+'">موردی یافت نشد.</td></tr>')+'</tbody></table></div>';}
function mmSelect(id,label,items,placeholder){return '<label>'+label+'<select id="'+id+'"><option value="">'+(placeholder||'انتخاب کنید')+'</option>'+items.map(function(x){return '<option value="'+esc(x.key)+'">'+esc(x.label||x.name||x.key)+'</option>';}).join('')+'</select></label>';}
function mmField(id,label,type){return '<label>'+label+'<input id="'+id+'" type="'+(type||'text')+'"></label>';}
function mmTxt(id,label){return '<label>'+label+'<textarea id="'+id+'" rows="3"></textarea></label>';}
function mmVal(id){return clean(($id(id)||{}).value);}
function mmFaDate(raw){
if(!raw)return '—';var s=String(raw).trim();var d=null;
var iso=s.match(/^(\d{4})-(\d{2})-(\d{2})/);
if(iso)d=new Date(Date.UTC(+iso[1],+iso[2]-1,+iso[3],12));
else {var y=s.match(/(20\d{2})/), months={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};var en=s.match(/\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(\d{1,2})\b/);if(en&&y)d=new Date(Date.UTC(+y[1],months[en[1]],+en[2],12));else {var ts=Date.parse(s);if(!isNaN(ts))d=new Date(ts);}}
if(!d||isNaN(d.getTime()))return 'تاریخ نامشخص';return new Intl.DateTimeFormat('fa-IR-u-ca-persian',{year:'numeric',month:'2-digit',day:'2-digit',timeZone:'UTC'}).format(d);
}
function mmIsoDate(v){var value=String(v||'').replace(/[۰-۹]/g,function(c){return String('۰۱۲۳۴۵۶۷۸۹'.indexOf(c));}).replace(/[٠-٩]/g,function(c){return String('٠١٢٣٤٥٦٧٨٩'.indexOf(c));});if(/^\d{4}-\d{2}-\d{2}$/.test(value))return value;var m=value.match(/^(\d{4})\/(\d{1,2})\/(\d{1,2})$/);if(!m)throw new Error('تاریخ شمسی را به صورت ۱۴۰۵/۰۸/۰۹ وارد کنید.');var y=+m[1],mo=+m[2],day=+m[3];if(y<1300||y>1600||mo<1||mo>12||day<1||day>31)throw new Error('تاریخ شمسی معتبر نیست.');var fmt=new Intl.DateTimeFormat('en-US-u-ca-persian',{year:'numeric',month:'numeric',day:'numeric',timeZone:'UTC'});var target=y*10000+mo*100+day;var low=Date.UTC(y+620,0,1),high=Date.UTC(y+623,11,31),guess=null;while(low<=high){var mid=Math.floor((low+high)/2/86400000)*86400000;var parts=fmt.formatToParts(new Date(mid));var d={};parts.forEach(function(p){if(p.type==='year'||p.type==='month'||p.type==='day')d[p.type]=+p.value;});var n=d.year*10000+d.month*100+d.day;if(n===target){guess=new Date(mid).toISOString().slice(0,10);break;}if(n<target)low=mid+86400000;else high=mid-86400000;}if(!guess)throw new Error('تاریخ شمسی وارد شده معتبر نیست.');return guess;}
function mmPlanState(p){var end=p.end||p.endDate||p.expiryDate;if(end){/* expiration is enforced in Jira Assets by scheduled job, never a display-only status */}var x=String(p.stateName||p.state||'').trim().toUpperCase();if(x==='1'||x==='ACTIVE'||x==='فعال')return 'فعال';if(x==='6'||x==='2'||x==='INACTIVE'||x==='STOPPED'||x==='غیرفعال'||x==='غیرفعال شده')return 'غیرفعال';return x?('وضعیت تعریفنشده ('+x+')'):'نامشخص';}
function mmKind(k){return String(k||'').toUpperCase()==='INSPECTION'?'بازرسی':'نگهداری پیشگیرانه';}
function mmPlanToggleBtn(p){var active=mmPlanState(p)==='فعال';return '<button type="button" class="mq-assets-btn" data-mm-plan-toggle="'+esc(p.key)+'" data-mm-plan-state="'+(active?'inactive':'active')+'">'+(active?'غیرفعالکردن':'فعالکردن')+'</button>'; }
function mmJDateField(id,label){return '<label>'+label+'<span class="mm-date-line"><input id="'+id+'" type="text" inputmode="none" placeholder="برای انتخاب تاریخ کلیک کنید" dir="ltr" autocomplete="off" readonly aria-label="انتخاب تاریخ شمسی" aria-haspopup="dialog" aria-expanded="false"></span><span id="'+id+'_cal" class="mm-cal" role="dialog" aria-label="تقویم شمسی" hidden></span></label>';}
function mmCalendar(id){var input=$id(id),host=$id(id+'_cal');if(!input||!host)return;var wasOpen=!host.hidden;document.querySelectorAll('#mmContent .mm-cal').forEach(function(h){h.hidden=true;});if(wasOpen){input.setAttribute('aria-expanded','false');return;} var today=new Intl.DateTimeFormat('en-US-u-ca-persian',{year:'numeric',month:'numeric',day:'numeric',timeZone:'UTC'}).formatToParts(new Date());var p={};today.forEach(function(a){if(a.type==='year'||a.type==='month'||a.type==='day')p[a.type]=+a.value;});var match=String(input.value||'').replace(/[۰-۹]/g,function(c){return '۰۱۲۳۴۵۶۷۸۹'.indexOf(c);}).match(/^(\d{4})\/(\d{1,2})\/(\d{1,2})$/);var year=match?+match[1]:p.year,month=match?+match[2]:p.month;var months=['فروردین','اردیبهشت','خرداد','تیر','مرداد','شهریور','مهر','آبان','آذر','دی','بهمن','اسفند'];function render(){var count=month<=6?31:month<=11?30:30;try{mmIsoDate(year+'/'+month+'/30');}catch(e){if(month===12)count=29;}var html='<div class="mm-cal-head"><button type="button" data-cal-shift="-1">ماه قبل</button><strong>'+months[month-1]+' '+year.toLocaleString('fa-IR',{useGrouping:false})+'</strong><button type="button" data-cal-shift="1">ماه بعد</button></div><div class="mm-cal-days">'+['ش','ی','د','س','چ','پ','ج'].map(function(x){return '<b>'+x+'</b>';}).join('');var first=new Date(mmIsoDate(year+'/'+month+'/1')+'T12:00:00Z').getUTCDay();var offset=(first+1)%7;for(var i=0;i<offset;i++)html+='<i></i>';for(var day=1;day<=count;day++){var iso=mmIsoDate(year+'/'+month+'/'+day);var now=new Date(),todayIso=now.getFullYear()+'-'+String(now.getMonth()+1).padStart(2,'0')+'-'+String(now.getDate()).padStart(2,'0');var disabled=id==='mm_start'&&iso<todayIso;html+='<button type="button" data-cal-day="'+day+'"'+(disabled?' disabled title="تاریخ گذشته مجاز نیست"':'')+'>'+day.toLocaleString('fa-IR')+'</button>';}html+='</div>';host.innerHTML=html;host.querySelectorAll('[data-cal-shift]').forEach(function(b){b.onclick=function(){month+=Number(b.dataset.calShift);if(month<1){month=12;year--;}if(month>12){month=1;year++;}render();};});host.querySelectorAll('[data-cal-day]').forEach(function(b){b.onclick=function(){var pad=function(n){return String(n).padStart(2,'0');};input.value=(year+'/'+pad(month)+'/'+pad(+b.dataset.calDay)).replace(/\d/g,function(n){return '۰۱۲۳۴۵۶۷۸۹'[+n];});host.hidden=true;input.setAttribute('aria-expanded','false');};});}host.hidden=false;input.setAttribute('aria-expanded','true');render();requestAnimationFrame(function(){if(host.hidden||!input.isConnected)return;var r=input.getBoundingClientRect(),w=Math.min(340,window.innerWidth-20),h=Math.min(host.offsetHeight,window.innerHeight-20);var top=r.bottom+8;if(top+h>window.innerHeight-8)top=Math.max(8,r.top-h-8);var left=Math.max(8,Math.min(window.innerWidth-w-8,r.right-w));host.style.top=top+'px';host.style.left=left+'px';host.style.width=w+'px';});}
function mmDonut(items,title){var sum=items.reduce(function(n,x){return n+x.n;},0);var angle=0,stops=[];items.forEach(function(x){var a=sum?x.n/sum*100:0;stops.push(x.color+' '+angle+'% '+(angle+a)+'%');angle+=a;});return '<div class="mm-chart-card"><strong>'+esc(title)+'</strong><div class="mm-donut" style="background:conic-gradient('+(stops.join(',')||'#dce9f2 0% 100%')+')"><div>'+sum.toLocaleString('fa-IR')+'<small>مجموع</small></div></div><div class="mm-chart-legend">'+items.map(function(x){return '<span><i style="background:'+x.color+'"></i>'+esc(x.label)+' <b>'+x.n.toLocaleString('fa-IR')+'</b></span>';}).join('')+'</div></div>';}
function mmEvaluationDashboard(rows){var scores=[1,2,3,4,5].map(function(v){return {label:v.toLocaleString('fa-IR')+' ستاره',n:rows.filter(function(r){return +r.score===v;}).length,color:['#e66b61','#f5a35d','#e4c45d','#57a8d3','#29a38b'][v-1]};});return '<div class="mm-chart-row">'+mmDonut(scores,'توزیع امتیازهای تعمیرکاران')+'</div>';}
function mmSupplyForm(){return mmForm(mmField('mm_name','نام شرکت / تعمیرکار')+mmField('mm_phone','تلفن')+mmField('mm_address','آدرس')+mmField('mm_contact','نام رابط')+mmField('mm_contactPhone','تلفن رابط')+'<label>گروه تأمینکننده<select id="mm_category"><option value="">انتخاب کنید</option><option value="(Consumables)">مصرفی</option><option value="(Capital)">سرمایهای</option><option value="(Service)">سرویس</option><option value="(Spare Parts)">قطعات</option><option value="(Indirect)">زیرساخت</option></select></label>','supplier.create',['name','phone','address','contact','contactPhone','category']);}
function mmSave(action,fields){
var button=$id('mmSubmit'),notice=$id('mmNotice'),fileInput=$id('mmLocalAttachment');
if(!button||!notice)return;
var payload={};fields.forEach(function(k){payload[k]=mmVal('mm_'+k);});
try{if(action==='pm.create'||action==='contract.save'){if(payload.start)payload.start=mmIsoDate(payload.start);if(payload.end)payload.end=mmIsoDate(payload.end);if(payload.end&&payload.start&&payload.end<payload.start)throw new Error('تاریخ پایان پیش از شروع است.');}}
catch(e){notice.textContent=e.message;return;}
button.disabled=true;notice.textContent='در حال ثبت...';
var file=fileInput&&fileInput.files&&fileInput.files[0];
var work;
if(action==='contract.save')work=mmCreateContractWithPage(payload,file);
else if(action==='document.save')work=mmCreateDocumentWithPage(payload,file);
else if(file)work=Promise.reject(new Error('پیوست این نوع فرم هنوز به فضای ذخیره متصل نیست. اطلاعات ثبت نشد.'));
else work=mmWrite(action,payload);
work.then(function(res){notice.textContent='با موفقیت ثبت شد'+(res.pageId?' — صفحه '+res.pageId:'');mmLoad(MM.tab);}).catch(function(err){notice.textContent=vError(err)||err.message;}).finally(function(){button.disabled=false;});
}
/* Confluence REST uses the current logged-in user and its native attachment permissions. */
function mmConfCall(path,options){return fetch(window.location.origin+'/rest/api/'+path,Object.assign({credentials:'same-origin',headers:{'Accept':'application/json'}},options||{})).then(async function(res){var raw=await res.text(),value={};try{value=raw?JSON.parse(raw):{};}catch(e){value={message:raw.slice(0,250)};}if(!res.ok)throw new Error('Confluence HTTP '+res.status+': '+(value.message||JSON.stringify(value).slice(0,350)));return value;});}
function mmConfJson(path,method,body){return mmConfCall(path,{method:method,headers:{'Content-Type':'application/json','Accept':'application/json','X-Atlassian-Token':'no-check'},body:JSON.stringify(body)});}
function mmConfClean(t){return String(t||'').replace(/[^\p{L}\p{N} _().،-]/gu,' ').trim().slice(0,120);}
function mmConfPage(id){return mmConfCall('content/'+encodeURIComponent(id)+'?expand=space,ancestors');}
function mmConfEnsure(parent,title,content){var space=parent.space.key,encoded=encodeURIComponent(title);return mmConfCall('content?spaceKey='+encodeURIComponent(space)+'&title='+encoded+'&limit=20').then(function(result){var match=(result.results||[]).find(function(p){return p.title===title;});if(match){var ancestors=match.ancestors;if(!ancestors)return mmConfPage(match.id).then(function(detail){if(!(detail.ancestors||[]).some(function(x){return String(x.id)===String(parent.id);}))throw new Error('صفحه همنام در شاخه دیگری وجود دارد: '+title);return detail;});if(!(ancestors||[]).some(function(x){return String(x.id)===String(parent.id);}))throw new Error('صفحه همنام در شاخه دیگری وجود دارد: '+title);return match;}
return mmConfJson('content','POST',{type:'page',title:title,space:{key:space},ancestors:[{id:String(parent.id)}],body:{storage:{value:content||'<p> </p>',representation:'storage'}}});});}
function mmConfUpload(pageId,file){if(!file)return Promise.resolve(null);if(file.size>10*1024*1024)return Promise.reject(new Error('حداکثر حجم پیوست ۱۰ مگابایت است.'));var data=new FormData();data.append('file',file,file.name);data.append('minorEdit','true');return mmConfCall('content/'+encodeURIComponent(pageId)+'/child/attachment',{method:'POST',headers:{'X-Atlassian-Token':'no-check'},body:data});}
function mmConfText(s){return String(s==null?'':s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"');}
function mmFaMonthYear(iso){var d=new Date(iso+'T12:00:00Z');if(isNaN(+d))throw new Error('تاریخ شروع قرارداد نامعتبر است.');var parts=new Intl.DateTimeFormat('en-US-u-ca-persian',{year:'numeric',month:'2-digit',timeZone:'UTC'}).formatToParts(d);var obj={};parts.forEach(function(x){if(x.type==='year'||x.type==='month')obj[x.type]=x.value;});var names=['فروردین','اردیبهشت','خرداد','تیر','مرداد','شهریور','مهر','آبان','آذر','دی','بهمن','اسفند'];obj.monthName=names[Number(obj.month)-1]||obj.month;return obj;}
/* Contract list visibility is tied to the actual published Confluence page.
Never delete underlying records on a failed request (403/5xx/network). */
function mmVisibleContracts(rows){
return Promise.all((rows||[]).map(function(item){
var id=String(item.pageId||item.pageID||'').trim();
if(!id&&item.url){var match=String(item.url).match(/[?&]pageId=(\d+)/i);if(match)id=match[1];}
if(!/^\d+$/.test(id))return Promise.resolve({item:item,visible:false,unlinked:true});
return fetch(window.location.origin+'/rest/api/content/'+encodeURIComponent(id)+'?expand=version',{
credentials:'same-origin',headers:{'Accept':'application/json'},cache:'no-store'
}).then(function(response){
if(response.status===404||response.status===410)return {item:item,visible:false};
if(!response.ok)throw new Error('HTTP '+response.status);
return response.json().then(function(page){return {item:item,visible:page.status==='current'&&page.type==='page'};});
}).catch(function(error){return {item:item,visible:true,unverified:true};});
})).then(function(results){
return {items:results.filter(function(r){return r.visible;}).map(function(r){return r.item;}),
unverified:results.filter(function(r){return r.unverified;}).length,
unlinked:results.filter(function(r){return r.unlinked;}).length};
});
}
function mmSupplierName(key){var s=(MM.suppliers||[]).find(function(x){return x.key===key;});return s?s.name:key;}
function mmCreateContractWithPage(p,file){if(!p.title||!p.supplier||!p.start||!p.contractType)return Promise.reject(new Error('عنوان، طرف قرارداد، نوع و تاریخ شروع الزامی است.'));
var types={inspection:'بازرسی',maintenance:'نت',calibration:'کالیبراسیون'},name=types[p.contractType];if(!name)return Promise.reject(new Error('نوع قرارداد نامعتبر است.'));
var ym=mmFaMonthYear(p.start),rootId='182714881';return mmConfPage(rootId).then(function(root){if(root.title!=='قراردادهای تعمیراتی')throw new Error('شناسه صفحه قراردادها نیاز به بررسی دارد.');return mmConfEnsure(root,'سال '+ym.year,'<p>قراردادهای سال '+ym.year+'</p>');}).then(function(year){return mmConfPage(year.id).then(function(yr){return mmConfEnsure(yr,ym.monthName,'<p>قراردادهای ماه '+ym.month+'</p>');});}).then(function(month){return mmConfPage(month.id).then(function(m){var title='قرارداد '+mmConfClean(p.number||p.title)+' - '+mmConfClean(p.title);var html='<h2>'+mmConfText(p.title)+'</h2><p>نوع: '+name+'</p><p>شماره: '+mmConfText(p.number)+'</p><p>شروع: '+mmConfText(p.start)+'</p><p>پایان: '+mmConfText(p.end)+'</p><p>طرف قرارداد: '+mmConfText(mmSupplierName(p.supplier))+'</p><p>'+mmConfText(p.coverage)+'</p>';return mmConfEnsure(m,title,html);});}).then(function(page){return mmConfUpload(page.id,file).then(function(){p.pageId=String(page.id);p.url=window.location.origin+'/pages/viewpage.action?pageId='+page.id;return mmWrite('contract.save',p).then(function(r){r.pageId=page.id;return r;});});});}
function mmFindDevicePage(key){
key=String(key||'').trim();
if(!/^[A-Za-z][A-Za-z0-9_]*-[0-9]+$/.test(key))return Promise.reject(new Error('شناسه دستگاه معتبر نیست.'));
var cql='type=page and title~"'+key+'"';
return mmConfCall('content/search?cql='+encodeURIComponent(cql)+'&limit=100').then(function(res){
var choices=(res.results||[]).filter(function(x){return x.title&&x.title.indexOf(key)>=0;});
if(choices.length===1)return mmConfPage(choices[0].id);
if(choices.length>1)throw new Error('برای دستگاه '+key+' چند صفحه پیدا شد؛ باید یک صفحه مرجع مشخص شود.');
return mmConfPage('182714881').then(function(contracts){
var ancestor=(contracts.ancestors||[]).slice(-1)[0];
if(!ancestor)throw new Error('صفحه والد کاتالوگ تجهیزات مشخص نیست.');
return mmConfPage(ancestor.id).then(function(root){
return mmConfEnsure(root,'کاتالوگ تجهیزات پزشکی','<p>فهرست تجهیزات و اسناد فنی مدیکیو</p>');
});
}).then(function(catalog){return mmConfPage(catalog.id);}).then(function(catalog){
var row=(MM.equipment||[]).find(function(r){return r.key===key;});
var caption=mmConfClean(row?labelOf(row):key);
return mmConfEnsure(catalog,key+' - '+caption,'<h2>'+mmConfText(caption)+'</h2><p>شناسه دستگاه: '+mmConfText(key)+'</p>');
}).then(function(page){return mmConfPage(page.id);});
});
}
function mmCreateDocumentWithPage(p,file){if(!p.equipment||!p.title||!p.docType) return Promise.reject(new Error('دستگاه، عنوان و نوع سند الزامی است.'));var names={financial:'مالی',technical:'فنی',administrative:'اداری'},chosen=names[p.docType];if(!chosen)return Promise.reject(new Error('نوع سند نامعتبر است.'));
return mmFindDevicePage(p.equipment).then(function(device){return Promise.all(['مالی','فنی','اداری'].map(function(title){return mmConfEnsure(device,title+' - '+p.equipment,'<p>اسناد '+title+' دستگاه '+mmConfText(p.equipment)+'</p>');}));}).then(function(pages){var folder=pages[['مالی','فنی','اداری'].indexOf(chosen)];return mmConfPage(folder.id);}).then(function(folder){return mmConfEnsure(folder,mmConfClean(p.title)+' - '+mmConfClean(p.equipment),'<h2>'+mmConfText(p.title)+'</h2><p>دستگاه: '+mmConfText(p.equipment)+'</p><p>نوع سند: '+chosen+'</p><p>درخواست: '+mmConfText(p.issue)+'</p>');}).then(function(page){return mmConfUpload(page.id,file).then(function(){p.pageId=String(page.id);p.url=window.location.origin+'/pages/viewpage.action?pageId='+page.id;return mmWrite('document.save',p).then(function(r){r.pageId=page.id;return r;});});});}
function mmForm(content,action,fields){var attachment='<label class="mm-attachment-label">پیوست فایل<input type="file" id="mmLocalAttachment" accept=".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx,.zip,.txt"></label>';if(action==='supplier.create')attachment='';return '<div class="mq-preview" style="margin-top:12px"><div class="mq-preview-title">ثبت اطلاعات</div><div class="v-fields">'+content+attachment+'</div><p id="mmNotice" role="status"></p><button class="mq-assets-btn primary" id="mmSubmit" type="button">ثبت</button></div>';}
function mmNav(tab){
MM.tab=tab;
var group=(tab==='suppliers'||tab==='evaluations')?'تعمیرکاران':(tab==='contracts'||tab==='equipment')?'حقوقی و اداری':'';
var items=group==='تعمیرکاران'?[['suppliers','فهرست تعمیرکاران'],['evaluations','ارزیابی تعمیرکاران']]:[];
// The shared page breadcrumb is displayed above the content; do not render a duplicate.
if(items.length){return '<div class="mm-top-tabs" role="tablist" aria-label="تعمیرکاران">'+items.map(function(item){var selected=item[0]===tab;return '<button type="button" role="tab" aria-selected="'+selected+'" class="mm-top-tab'+(selected?' active':'')+'" data-mm-side="'+item[0]+'">'+esc(item[1])+'</button>';}).join('')+'</div>';}
return '';
}
function mmSyncBreadcrumb(tab){
var labels={overview:'داشبورد فعالیتها',activities:'فهرست فعالیتها',plans:'برنامهریزی پیشگیرانه',em:'ثبت و پیگیری خرابی',suppliers:'فهرست تعمیرکاران',evaluations:'ارزیابی تعمیرکاران',contracts:'قراردادهای تعمیراتی',equipment:'تجهیزات و اسناد',costing:'مدیریت هزینههای نت',risk:'مدیریت ریسک'};
var path=['مدیریت تجهیزات','مدیریت نگهداری و تعمیرات'];
if(tab==='suppliers'||tab==='evaluations')path.push('تعمیرکاران');
if(tab==='contracts'||tab==='equipment')path.push('حقوقی و اداری');
if(labels[tab])path.push(labels[tab]);
buildBreadcrumb(path);
}
document.addEventListener('click',function(event){var b=event.target.closest('#mmTreeChildren [data-mm-tree]');if(b){event.preventDefault();var t=b.getAttribute('data-mm-tree');if(t==='contracts')mmLegalHome();else mmLoad(t);}},true);
document.addEventListener('click',function(event){var nav=event.target.closest('[data-mm-side]');if(nav){event.preventDefault();mmLoad(nav.getAttribute('data-mm-side'));}},true);
document.addEventListener('click',function(event){
if(state.screen!=='maintenance')return;
var n=event.target.closest('.mq-bread-item[data-bread-label]');if(!n)return;
var label=n.getAttribute('data-bread-label');
var routes={'مدیریت نگهداری و تعمیرات':'home','داشبورد فعالیتها':'overview','فهرست فعالیتها':'activities','برنامهریزی پیشگیرانه':'plans','گزارش خرابی':'em','ثبت و پیگیری خرابی':'em','تعمیرکاران':'suppliers','فهرست تعمیرکاران':'suppliers','ارزیابی تعمیرکاران':'evaluations','حقوقی و اداری':'legal','قراردادهای تعمیراتی':'contracts','تجهیزات و اسناد':'equipment','مدیریت هزینههای نت':'costing','مدیریت ریسک':'risk'};
if(label==='مدیریت تجهیزات'){event.preventDefault();event.stopPropagation();if(typeof renderHome==='function')renderHome();else mmHome();return;}
if(Object.prototype.hasOwnProperty.call(routes,label)){event.preventDefault();event.stopPropagation();var route=routes[label];if(route==='home')mmHome();else if(route==='legal')mmLegalHome();else mmLoad(route);}
},true);
function mmTreeSync(tab){var box=document.getElementById('mmTreeChildren');if(!box)return;box.classList.toggle('open',state.screen==='maintenance');box.querySelectorAll('[data-mm-tree]').forEach(function(b){var t=b.dataset.mmTree;b.classList.toggle('active',t===tab||(t==='suppliers'&&tab==='evaluations')||(t==='contracts'&&tab==='equipment'));});}
/* MediQ V48 - connected financial/risk workspaces. Data requires Jira-side
mediqMaintenance action costing.list/risk.list; never invent issue records. */
function mmFinanceRisk(tab,show,fail){
var isCost=tab==='costing',title=isCost?'مدیریت هزینههای نت':'مدیریت ریسک';
var action=isCost?'costing.list':'risk.list';
var filters='<div class="mm-actionbar mq-v48-filters"><input type="search" id="mqV48Search" placeholder="جستوجوی عنوان، کلید و دستگاه"><select id="mqV48Status"><option value="all">همه مرحلهها</option></select><select id="mqV48Order"><option value="new">جدیدترین</option><option value="old">قدیمیترین</option></select><button type="button" class="mq-assets-btn" id="mqV48Reload">بهروزرسانی</button></div>';
show('<div class="mq-v48-title"><h3>'+title+'</h3><p>اطلاعات درخواستهای این بخش از سامانه مرکزی دریافت میشود.</p></div><div id="mqV48Kpis" class="v-stats"></div>'+filters+'<div id="mqV48Rows" aria-live="polite">در حال دریافت اطلاعات...</div>');
var rows=[];
var host=document.getElementById('mqV48Rows'),kpis=document.getElementById('mqV48Kpis');
function draw(){
if(!host||!host.isConnected)return;
var q=searchNorm((document.getElementById('mqV48Search')||{}).value||'');
var status=(document.getElementById('mqV48Status')||{}).value||'all';
var order=(document.getElementById('mqV48Order')||{}).value||'new';
var shown=rows.filter(function(r){return (!q||searchNorm([r.key,r.summary,r.equipment,r.status].join(' ')).includes(q))&&(status==='all'||r.status===status);});
shown.sort(function(a,b){return (order==='old'?1:-1)*(Date.parse(a.updated||a.created||0)-Date.parse(b.updated||b.created||0));});
host.innerHTML=mmTable(['کلید','عنوان درخواست','وضعیت','مسئول','تاریخ','عملیات'],shown.map(function(r){return [esc(r.key),esc(r.summary),esc(r.status),esc(r.assigneeName||r.assignee||'—'),esc(mmFaDate(r.created)), '<button type="button" class="mq-assets-btn" data-mq-v48-issue="'+esc(r.key)+'">'+(isCost?'مشاهده / ثبت سند':'مشاهده / اقدام')+'</button>'];}));
host.querySelectorAll('[data-mq-v48-issue]').forEach(function(b){b.onclick=function(){mmIssueDetail(b.dataset.mqV48Issue).then(mmOpenIssueModal).catch(function(e){alert(vError(e));});};});
}
function fetchRows(){
host.textContent='در حال دریافت اطلاعات...';
mmApi(action).then(function(payload){
if(payload&&payload.ok===false)throw Error(payload.message||'سرویس اطلاعات را برنگرداند.');
if(!payload||!Array.isArray(payload.items))throw Error('خروجی '+action+' باید دارای آرایه items باشد. برای اتصال این صفحه، عملیات '+action+' را در سرویس مدیریت تعمیرات فعال کنید.');
rows=payload.items.filter(function(r){return r&&/^MED-\d+$/.test(r.key||'');});
var statuses=Array.from(new Set(rows.map(function(r){return r.status;}).filter(Boolean)));
var select=document.getElementById('mqV48Status');
select.innerHTML='<option value="all">همه مرحلهها</option>'+statuses.map(function(x){return '<option value="'+esc(x)+'">'+esc(x)+'</option>';}).join('');
var current=rows.filter(function(r){return !r.done;}).length;
kpis.innerHTML='<div class="mm-kpi-card"><strong>'+rows.length+'</strong><span>کل درخواستها</span></div><div class="mm-kpi-card"><strong>'+current+'</strong><span>در جریان</span></div><div class="mm-kpi-card"><strong>'+ (rows.length-current) +'</strong><span>تکمیلشده</span></div>';
draw();
}).catch(function(err){kpis.innerHTML='';host.innerHTML='<div class="mq-v48-warning"><strong>اطلاعات این بخش هنوز از بکاند قابل دریافت نیست.</strong><p>'+esc(vError(err))+'</p><small>برای Costing شناسه 10601 و برای Risk Assessment شناسه 10700 را در تنظیمات سرویس بررسی کنید. اطلاعات نمایشی ساختگی اضافه نشده است.</small></div>';});
}
document.getElementById('mqV48Search').oninput=draw;
document.getElementById('mqV48Status').onchange=draw;
document.getElementById('mqV48Order').onchange=draw;
document.getElementById('mqV48Reload').onclick=fetchRows;
fetchRows();
}
function mmHome(){
MM.tab='home';state.screen='maintenance';
heroTitle.textContent='مدیریت نگهداری و تعمیرات';
heroDesc.textContent='داشبورد، برنامهریزی نت، خرابیها، تعمیرکاران و امور حقوقی';
buildBreadcrumb(['مدیریت تجهیزات','مدیریت نگهداری و تعمیرات']);
mqTreeActivate('maintenance');mmTreeSync('home');
var cards=[
['overview','داشبورد فعالیتها','آمار، فیلتر و گزارش فعالیتها','chart'],
['plans','برنامهریزی پیشگیرانه','برنامهریزی پیشگیرانه و بازرسی تجهیزات','calendar'],
['em','ثبت و پیگیری خرابی','ثبت خرابی و مشاهده وضعیت درخواستها','repair'],
['suppliers','تعمیرکاران','فهرست تعمیرکاران و ارزیابی تعمیرکاران','people'],
['costing','مدیریت هزینههای نت','ثبت و پیگیری اسناد هزینه','files'],
['risk','مدیریت ریسک','مشاهده و ارزیابی ریسکهای تجهیزات','files']
];
mmRenderCards(cards,'مدیریت نگهداری و تعمیرات');
}
function mmCardIcon(icon){
var shapes={
chart:'<path d="M4 19V12M10 19V7M16 19V4M3 21h18"/>',
calendar:'<rect x="3" y="5" width="18" height="16" rx="2"/><path d="M7 3v4m10-4v4M3 10h18m-12 5 2 2 4-5"/>',
repair:'<path d="M14 6a5 5 0 0 0 6 6l-9 9-5-5 9-9z"/><path d="M5 3l6 6"/>',
people:'<circle cx="8" cy="8" r="3"/><path d="M2 20v-2a6 6 0 0 1 12 0v2M17 5a3 3 0 0 1 0 6m0 3a5 5 0 0 1 5 5"/>',
files:'<path d="M4 4h8l3 3h5v13H4zM7 11h10M7 15h8"/>'
};
return '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">'+(shapes[icon]||shapes.files)+'</svg>';
}
function mmRenderCards(cards,title){
view.innerHTML='<section class="mm-card-home" dir="rtl"><h2>'+esc(title)+'</h2><div class="mm-category-grid">'+cards.map(function(c){return '<button type="button" class="mm-category-card" data-mm-card="'+esc(c[0])+'"><span class="mm-category-icon">'+mmCardIcon(c[3])+'</span><strong>'+esc(c[1])+'</strong><span>'+esc(c[2])+'</span><i aria-hidden="true">↙</i></button>';}).join('')+'</div></section>';
view.querySelectorAll('[data-mm-card]').forEach(function(b){b.onclick=function(){if(b.dataset.mmCard==='legal')mmLegalHome();else mmLoad(b.dataset.mmCard);};});
}
function mmLegalHome(){
MM.tab='legal';state.screen='maintenance';mqTreeActivate('maintenance');mmTreeSync('legal');
heroTitle.textContent='حقوقی و اداری';heroDesc.textContent='مدیریت قراردادهای تعمیراتی و اسناد تجهیزات';
buildBreadcrumb(['مدیریت تجهیزات','مدیریت نگهداری و تعمیرات','حقوقی و اداری']);
mmRenderCards([
['contracts','قراردادهای تعمیراتی','ثبت، مدیریت و مشاهده قراردادها','files'],
['equipment','تجهیزات و اسناد','فهرست دستگاهها و مدارک تعمیراتی','repair']
],'حقوقی و اداری');
}
function mmSide(tab){var a=tab==='contracts'?[['contracts','قراردادهای تعمیراتی'],['equipment','تجهیزات و اسناد']]:tab==='suppliers'?[['suppliers','فهرست تعمیرکاران'],['evaluations','ارزیابی تعمیرکاران']]:tab==='overview'?[['overview','داشبورد فعالیتها']]:tab==='plans'?[['plans','برنامهریزی پیشگیرانه']]:[['em','ثبت و پیگیری خرابی']];return '<aside class="mm-sidebar"><strong>بخشهای مرتبط</strong>'+a.map(function(x){return '<button type="button" data-mm-side="'+x[0]+'">'+x[1]+'</button>';}).join('')+'</aside>';}
function mmIsPm(r){return /^PM\s*-/i.test(r.summary||'')||/برنامه بازرسی|^Inspection\s*-/i.test(r.summary||'');}
function mmActivityFilterUI(){return '<div class="mm-actionbar"><input id="mmSearch" placeholder="جستوجوی فعالیت و دستگاه"><select id="mmType"><option value="all">همه فعالیتها</option><option value="pm">برنامههای پیشگیرانه</option><option value="em">فعالیتهای اصلاحی</option></select><select id="mmStatus"><option value="all">همه مرحلهها</option><option value="open">باز</option><option value="done">تکمیلشده</option>'+Array.from(new Set((MM.activities||[]).map(function(r){return String(r.status||'').trim();}).filter(Boolean))).map(function(status){return '<option value="'+esc(status)+'">'+esc(status)+'</option>';}).join('')+'</select><select id="mmOrder"><option value="" selected>ترتیب نمایش</option><option value="new">جدیدترین</option><option value="old">قدیمیترین</option><option value="priority">مهمترین</option></select><select id="mmPriority"><option value="all">همه اهمیتها</option><option value="مسدودکننده">مسدودکننده</option><option value="بسیار مهم">بسیار مهم</option><option value="مهم">مهم</option><option value="میانه">میانه</option><option value="پایین">پایین</option><option value="جزئی">جزئی</option><option value="ناچیز">ناچیز</option><option value="نامشخص">نامشخص</option></select></div><div id="mmRows"></div>';}
function mmPriorityText(r){
var raw=String(r.priorityName||r.priority||r.importance||'').trim();
if(!raw)return 'نامشخص';
var k=raw.toLowerCase().replace(/[\s_-]+/g,'');
if(/blocker|مسدودکننده|مسدود/.test(k))return 'مسدودکننده';
if(/minor|جزئی|جزیی/.test(k))return 'جزئی';
if(/critical|highest|بسیارمهم|خیلیزیاد|veryhigh/.test(k))return 'بسیار مهم';
if(/major|high|important|مهم|بالا/.test(k))return 'مهم';
if(/medium|normal|moderate|میانه|متوسط|عادی/.test(k))return 'میانه';
if(/lowest|trivial|ناچیز/.test(k))return 'ناچیز';
if(/low|پایین|کم/.test(k))return 'پایین';
return raw;
}
function mmPriorityWeight(value){var ranks={'مسدودکننده':7,'بسیار مهم':6,'مهم':5,'میانه':4,'پایین':3,'جزئی':2,'ناچیز':1,'نامشخص':0};return ranks[mmPriorityText({priorityName:value})]||0;}
function mmIsOverdue(r){if(r.overdue===true||r.isOverdue===true)return true;var due=r.due||r.dueDate||r.deadline||r.nextExecutionDate||'';var date=Date.parse(due);return mmIsPm(r)&&!r.done&&Number.isFinite(date)&&date<Date.now();}
function mmWeekLate(r){if(r.done)return false;var date=Date.parse(r.created||r.createdDate||r.start||'');return Number.isFinite(date)&&Date.now()-date>7*86400000;}
function mmApplyCardFilter(r){var f=MM.cardFilter||'all';if(f==='all')return !r.done;if(f==='pm')return mmIsPm(r)&&!r.done;if(f==='em')return !mmIsPm(r)&&!r.done;if(f==='done')return !!r.done;if(f==='overdue')return mmWeekLate(r);return true;}
function mmEnsureDefaultPanel(){
var host=document.getElementById('mmContent');if(!host||!document.getElementById('mmRows')||host.querySelector('#mmPermanentIssue'))return;
host.classList.add('mm-with-fixed-side');
var panel=document.createElement('aside');panel.id='mmPermanentIssue';panel.className='mm-permanent-panel';panel.dir='rtl';
panel.innerHTML='<header><strong>جزئیات فعالیت</strong></header><div class="mm-panel-empty"><div class="mm-panel-empty-icon">▤</div><strong>یک فعالیت را انتخاب کنید</strong><p>مشخصات، روند فعالیت و اقدامات مرتبط در این قسمت نمایش داده میشوند.</p></div>';
var heading=host.querySelector('#mmActivitiesHeading');if(heading)heading.insertAdjacentElement('afterend',panel);else{var bar=host.querySelector('.mm-actionbar');if(bar)bar.before(panel);}
}
function mmPaintActivities(){var host=$id('mmRows');if(!host)return;var q=($id('mmSearch')||{}).value||'',t=($id('mmType')||{}).value||'all',st=($id('mmStatus')||{}).value||'all',order=($id('mmOrder')||{}).value||'new',pri=($id('mmPriority')||{}).value||'all';var rows=(MM.activities||[]).filter(function(r){return mmApplyCardFilter(r)&&(r.key+' '+r.summary+' '+r.status).toLowerCase().includes(q.toLowerCase())&&(t==='all'||(t==='pm'===mmIsPm(r)))&&(st==='all'||(st==='done'?r.done:(st==='open'?!r.done:String(r.status||'')===st)))&&(pri==='all'||mmPriorityText(r)===pri);});if(order==='old')rows.sort(function(a,b){return Date.parse(a.created||0)-Date.parse(b.created||0);});else if(order==='new')rows.sort(function(a,b){return Date.parse(b.created||0)-Date.parse(a.created||0);});else if(order==='priority')rows.sort(function(a,b){return mmPriorityWeight(b.priorityName||b.priority)-mmPriorityWeight(a.priorityName||a.priority);});host.innerHTML=mmActivities(rows);host.querySelectorAll('tbody tr').forEach(function(tr){var k=tr.querySelector('[data-mm-issue]');if(k){tr.style.cursor='pointer';tr.onclick=function(e){if(e.target.closest('a,button'))return;mmOpenIssue(k.dataset.mmIssue);};}});}
function mmDateNotPast(){var inp=$id('mm_start');if(!inp||!inp.value)return true;try{var chosen=mmIsoDate(inp.value);var now=new Date();var local=[now.getFullYear(),String(now.getMonth()+1).padStart(2,'0'),String(now.getDate()).padStart(2,'0')].join('-');if(chosen<local){$id('mmNotice').textContent='تاریخ شروع نمیتواند قبل از امروز باشد.';return false;}}catch(e){$id('mmNotice').textContent=e.message;return false;}return true;}
function renderMediqMaintenance(){state.screen='maintenance';heroTitle.textContent='مدیریت نگهداری و تعمیرات';heroDesc.textContent='برنامهریزی پیشگیرانه، تعمیرات EM، پیمانکاران، قراردادها و مستندات';buildBreadcrumb(['مدیریت تجهیزات','مدیریت نگهداری و تعمیرات']);mqTreeActivate('maintenance');mmHome();}
/* MEDIQ V45 - isolated self-service requests (no admin access, no internal links) */
var MUF={rows:[],notes:[],deviceRows:[],filter:'open',timer:null,lastSeen:0};
function mufFetch(action,key){
var url=MM_PROXY_ROOT+'mediqUserFaultProxy?action='+encodeURIComponent(action||'list');
if(key)url+='&key='+encodeURIComponent(key);
return mmRequest(url,{method:'GET',cache:'no-store'});
}
function mufCreate(payload){return mmRequest(MM_PROXY_ROOT+'mediqUserFaultProxyWrite',{
method:'POST',headers:{'Content-Type':'application/json','X-Atlassian-Token':'no-check'},
body:JSON.stringify(Object.assign({action:'create'},payload))
});}
function mufToTs(value){
if(value==null||value==='')return 0;
if(typeof value==='number')return isFinite(value)?value:0;
var direct=Date.parse(String(value));
if(!isNaN(direct))return direct;
var numeric=Number(value);
return isFinite(numeric)?numeric:0;
}
function mufDone(r){return !!(r&&(r.done===true||r.completed===true||r.state==='history'||String(r.statusCategory||'').toLowerCase()==='done'||/بسته|بستن|تحویل|تکمیل|انجام شده|closed|done|resolved/i.test(String(r.status||''))));}
function mufNormalizeRow(r){r=r||{};r.done=mufDone(r);r.createdTs=mufToTs(r.created||r.createdDate||r.createdAt);r.updatedTs=mufToTs(r.updated||r.updatedDate||r.updatedAt||r.created);r.priorityText=r.priorityName||r.priority||r.urgency||'عادی';return r;}
function mufPrettyDate(value){
var ts=mufToTs(value);if(!ts)return '—';
try{return new Intl.DateTimeFormat('fa-IR-u-ca-persian',{dateStyle:'medium',timeStyle:'short',timeZone:'Asia/Tehran'}).format(new Date(ts));}catch(e){return '—';}
}
function mufScoped(){return MM.tab==='em'&&state.screen==='maintenance'&&!!document.getElementById('mufRoot');}
function mufRows(){
var q=searchNorm((document.getElementById('mufSearch')||{}).value||'');
var f=(document.getElementById('mufStatus')||{}).value||'open';
var sort=(document.getElementById('mufSort')||{}).value||'new';
var rows=MUF.rows.filter(function(r){
return (!q||searchNorm([r.key,r.summary,r.status,r.description].join(' ')).includes(q))&&
(f==='all'||(f==='open'&&!r.done)||(f==='closed'&&r.done));
});
rows.sort(function(a,b){
return sort==='old'?(a.createdTs-b.createdTs):sort==='priority'?String(b.priorityText||'').localeCompare(String(a.priorityText||'')):(b.updatedTs-a.updatedTs);
});
return rows;
}
var MQ_MEDIQ_PRIORITY_ASSETS={"critical":"data:image/png;base64,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","highest":"data:image/png;base64,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","high":"data:image/png;base64,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","normal":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACI0lEQVR42u3Yv2pUQRTH8e+ZuX+yLonkGSwE8wJiqyhYCqYTLEQljYJIwGYTbRRRbNPYaBWLlDbaiGCjoKBvoRZult27d+4cCzdBsMvOhbt4Pg/wm7nz58zMBWOMMcYYY4wxxhhjjDH/D2kzXBPly2HcgtBd/CJktrICFERms6UfyfmUoJM3qBdiC+gAJ9vE6dPyZl6yEYL2NSLIEdtRVBzqvEyaSp8Xd6ZPDtro3ADoZby8oqmflWezHm+ogZiwhR6Efb2U357u6S5e1mlSxGbJpv/U7FNjvIBKqCqCQJ4ovS4KvDZcBPb4lm7i0g3A2qxKR3mPcLdwZJroGFDwOHBR3y1EDage5VtZyfUmyJIqbq4OCtF5nTaBF8V+vQnQyRrwz2A8ps8KveFwvpxlgIZKNhmyKHSHXDVhgQXRnWT1pOWP1xZXVQvZWeoOiqCT+8XJsqdXQ8PxGI/ecREUB5lnNB7zUqT+ctBG5wZABzgEHT8oT/g8fqBgNWsShTsoGzaqh/lppP6a8jKUcgU4gVARr2Qlq5NfTETS5KsSlvocm4y4JnBLwc+uWd3aAgAa9ScIojjS7VmHgET50dl7gMKfnbnFcvD566zHmWSntYMw1s+ZD+e5x/fD+tC5i9DsJagDslD6cxJ0pZmzDngP6mSU1c1b2Wby92uzm8dgm5erFrKltY7u4pI9WtZQ1omySH+FjDHGGGOMMcYYY4wxxpju+Q3ioMyi7z2gLQAAAABJRU5ErkJggg==","low":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAElElEQVR42u2YW2hcRRjH/9/MnHM2m42bNC01BasvSm0FEQSx4iU+iPgmmEArWBApCSXSQNsItW4OfZDaeqPUVvFSqIomPvShzwbx1tq+FImVIoi2KqZkt0k2ezlnZj4fzuZSW6Uk2ySa+cHCHtj95jvf5f/NDOBwOBwOh8PhcDgcDofD4XA4HMsIqqu1jgGJ9R0EwCIkW1fbORYABH4YZAx2mqUXysTBf35eorbrVAFMALHaM3YfNTSu42pxWIfNZ8Cc2CfiuZllQj8IIVmVu3wvBZkNXJ78Ue/Nnppac76ei/pkh1juzh+AnznJVhyFTJ+WL43tAxGDiOeUsRwLkGCEZOWLYy9DNp5mK47Cz5yUu/MHgDnarWsFdLDEIBm5Z6KdgsznKI1ZMFsQCaSzAtXJz3TlwrPYf+cEckMKYbu+LrsDLNFJBj3nA5lte5tSmS2JbWtBQiCdFVwtPmr2Ng1N+bA4FbA+CSAZsxEMDbYGIAVmgWJBk9f4lPLXfum/MHIHwnaNHKvryLxCJ5lUX36tzK4ZEn5mC4oFDWYBCAW2BgxNxmyc7cPiBGADGADY0lmyUGQBshbEAIEUinlNwrubZeYbuWP0cYSkMcAy6d9r6EiOFULSqm/kISNT3wqRuh/FvCaQIgbIMpI1oNjS2dk+LJ4I1vpQlQrHqLFlM0oFA2YBEolttgbSlxCS2cS9el/2zeRlE3FLbOQE0A+EZL2dhefg+W+B4UGXDUjKmh0GyKCxRfHk6Cc63fo0AMx33FJdJgAnSq925HPkZ/qhy4CJk35N1NyCBJDKCkST78QNZ7YhbNfoYAkMYmque7suvwavqRfROMManvm/tRCS4DcR4uL++JXmXWCmWgMucgVMl2+SUW/7aCf84D2QyCAqaQihAAaYGYBBQ6tCtfhFXM5vxqFbfwcA9P66wpPNxxA0PYHyqAEgQEQAAWwMVFoCqMKUu+NXV36AHAuE4HqMwfruBGs97PWM3MN++lPyUrejUtAgMSN+bDVSzYpN9ReqlJ4kQSXrp4+TTK1DJX/1b4OsYlO9AF3apN9Y/XVtDQOA6+FyfQMwKwjoOb/K81Z/SH7TYyjnNcASoBld8DMScWkSYAM/cxOqEwYk5NQOCAyDdKvieOIrFY1vKh+85eK07SV7Fvjb/gDICW977+vkNT6Paq2vRa2vrbWQSgCU6IWYpRcgINUiEE+8H/12sRuDd0XznfcLG4DZ+/WQrNp2qUuo4CDACroyk+lEF5D0OwDmqYkBxJWd0aFVB66aGP+ZAMyIo0RIOuj+o92q9Mck/ZtRHb+y16f63W9SsLqAePKZ6EjbiSTrsPUQuxt3Fvj3+DJC0sixqh5uGxLlwkbEle8QrFCwNoa1tvaJEbQomOh76OID0ZG2E8ixSkr+xr38AgSgRkgaDw+p6ru3/RyNnHsElfGPKFjpkUgJEilBwUqPK8Xj0Z8/PRgdXnMuOTfUV+yW3J2Bv/VSX9BVGA668sP+1tG+Ky5V/t8wTd8TXHWnwIRlQwfLa35fhneSBIfD4XA4HA6Hw+FwOBwOh8PhcDgWhL8AvnIfxoIQFo0AAAAASUVORK5CYII=","lowest":"data:image/png;base64,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","urgent":"data:image/png;base64,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","minor":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAEPElEQVR42u3YX4gVVRwH8O/vzJm5s/fuHwOh2sdegi49RPQgIq0k2GvSnRYCy6LMonYlLCrXuaMSirK1UNFabKzRH+YGPhQFvlSCBT6EBCtBBL4Zmu26e/fOv3POr4frmqnQ06xcPR+Yl8vMZX6/+Z1/P8CyLMuyLMuyLMuyLMuyLMtaHcxMzEy3VdBhyCIMv5fX/x7KRhw7t3LsdG2AB6bjoXc+Obbm2gQBq1cVtFqlTkQMAG+//+VD0nG3sjEbDOthggAJ+pMgfgaKo6/tGD157TM9nYBuIMD09BH5t7pj0nGcl6R0qSjy/9znui601tBKzSRy/uVo+/bOaiSBSo6eGkFLbNp0j7hY/P51rX9oc3txQUnXk0I4yLO0AJi9iu8xM/IsVQODa2RnuX1SJtnmdvuPpNlscplJEGXG32i1RKsV6PPpb5O12tDmpcX5pOJXpdHmx7zIn9DG1A3TfSpXW7RSx/2+mlxavJT2VfvXp9L5MIoiEwQt0ZMVEIYsoojM3qnPH3Cl+4sq8sLvq7pZlk3tfmV0/EbP7J/6Yp/nV3ZnSSev+FUvS/KHJ3aOnmjEsdMKAl3Ge8ryctsUAAzYPOdIB2BXpknn5MT4k+NhGApgRAA/mO69I6Jev8BBEEzsffezBz2v8igzs4HaAeBEA0Crx4YARVGkmZnA2FDkOYQQpFhNdqtuRETRRhVFkeleG9Xc3BwxM5HRh5mZiiIngNeFYewFQaDLWhpFOXMfAwAfPNIaZDZ3MTOSJCnA8jQA/vfLX1UvzaYmIu4kci7LsqXu/2At1qq13SHVpJ6bBJPOMhkGdRPC7JMw//eM5ykGG2ZmgJncPC91pSolAUSX33nh7CIY55kB16t4HVXc3937j4gbVIAThqEQDt0rXW+QDYMNXxyQl/4CgChqci9VAIdhKKMoMsaYn6SUbIxhEjxGRFyvX+AwDOXKYSiOY+fcuWGKoshobXYCBEdKZuDU2NhYFsexA5SzFyhtFThzpt59YRIfaa2fzbOsqPT1PbLn8Oy+IAgmul81WrldA9B7Ds3u8iqVx7I0Kfy+mstE0z29FW40YqfVCvTugzMz/QNrtrXbC6nvV/28yL9h5ve0EL+6SrERqBOcF1zXezzL0rRWG/CX25eO7X/9mS0r+4meTAAzU7PZJGDY1/3+8Wq1tn55abHwKhWXGVAqX2Jmdl1vkIRAnqZFtX/ATdPOaeGYjVg4u1j2VniVDkPErx46WquCP5DS3QoCVFFcmSyZGVK6ICIoVXyVF+3nD7zx4vxqHIZk6WOMiC8HsgzgqbcOzcw6JLexMes0850AIEhcUEqdAszsvl1Pf3e5QSKIyiv9m9EAo+4WeOWsEHtvTn56d3jw4+GpqW8rV3WGxC3dJms0Yie+QeurEcfOrd4Su250MF+piturMWpZlmVZlmVZlmVZlmVZlnWz/AMf0i8C5IeKOgAAAABJRU5ErkJggg=="};
function mqPriorityAsset(name){
var v=String(name||'').toLowerCase().trim();
if(/blocker|مسدود|بازدارنده/.test(v))return 'critical';
if(/highest|بسیار مهم|خیلی بالا/.test(v))return 'highest';
if(/urgent|فوری|اضطراری/.test(v))return 'urgent';
if(/critical|بحرانی/.test(v))return 'critical';
if(/minor/.test(v))return 'minor';
if(/lowest|trivial|ناچیز|خیلی کم/.test(v))return 'lowest';
if(/low|پایین|کم/.test(v))return 'low';
if(/high|مهم|بالا/.test(v))return 'high';
return 'normal';
}
function mqPriorityImageHtml(name, cssClass){
var label=String(name||'نامشخص');
return '<img class="'+(cssClass||'mq-real-priority-icon')+'" src="'+MQ_MEDIQ_PRIORITY_ASSETS[mqPriorityAsset(label)]+'" alt="'+esc(label)+'" title="'+esc(label)+'" />';
}
function mufPriorityIcon(name){return '<span class="muf-urgency-icon" title="'+esc(name||'نامشخص')+'" aria-label="فوریت '+esc(name||'نامشخص')+'">'+mqPriorityImageHtml(name,'mq-real-priority-icon')+'</span>';}
function mufIcon(kind){
var icons={all:'▦',open:'🛠',closed:'✔',device:'🖥',priority:'⚑',status:'◉',notes:'🔔',user:'👤',time:'🕘'};
return '<span class="muf-icon" aria-hidden="true">'+(icons[kind]||'•')+'</span>';
}
function mufWorkflowHtml(status){
var current=mmMaintenanceStage(status);
var steps=[['new','ثبت و شروع'],['work','در حال انجام'],['repair','تعمیر و پیگیری'],['handover','آماده تحویل / تحویل'],['close','بستن و محاسبه']];
return '<div class="muf-workflow">'+steps.map(function(s){var cls='muf-work-step';if(s[0]===current)cls+=' current';else if(['new','work','repair','handover','close'].indexOf(s[0])<['new','work','repair','handover','close'].indexOf(current))cls+=' done';return '<div class="'+cls+'"><span class="muf-step-dot"></span><small>'+s[1]+'</small></div>';}).join('')+'</div>';
}
function mufPanelEmpty(){return '<div class="muf-panel-empty"><div class="muf-panel-empty-icon">▤</div><strong>یک درخواست را انتخاب کنید</strong><p>جزئیات درخواست، روند رسیدگی و پیامهای مرتبط در این قسمت نمایش داده میشود.</p></div>';}
function mufFriendlyError(err){var msg=vError(err)||'';msg=String(msg).replace(/\s*\|\s*آدرس درخواست:.*/,'');return msg;}
function mufPaint(){
if(!mufScoped())return;
var rows=mufRows(), all=MUF.rows||[], closed=all.filter(function(r){return r.done;}).length, open=all.length-closed;
var activeTab=(MUF.tab||'list');
var stats=document.getElementById('mufStats');
if(stats){
stats.hidden=activeTab!=='list';
stats.innerHTML=[['all','کل درخواستها',all.length,'#288cbf'],['open','خرابیهای جاری',open,'#e18f35'],['closed','خرابیهای رسیدگیشده',closed,'#18a077']].map(function(s){return '<button type="button" class="muf-kpi '+(MUF.filter===s[0]?'selected':'')+'" data-muf-kpi="'+s[0]+'" style="--kpi-color:'+s[3]+'">'+mufIcon(s[0])+'<span class="muf-kpi-text"><strong>'+s[2].toLocaleString('fa-IR')+'</strong><span>'+s[1]+'</span></span></button>';}).join('');
}
var list=document.getElementById('mufList');
if(list){
list.innerHTML=rows.length?rows.map(function(r){return '<button type="button" class="muf-ticket'+(MUF.currentKey===r.key?' active':'')+'" data-muf-issue="'+esc(r.key)+'"><span class="muf-ticket-main"><strong>'+esc(r.key)+'</strong><em>'+esc(r.summary||'—')+'</em></span><span class="muf-ticket-meta"><b class="'+(r.done?'muf-done':'muf-open')+'">'+esc(r.status||'—')+'</b><small>'+esc(mufPrettyDate(r.updated||r.updatedTs))+'</small></span></button>';}).join(''):'<div class="muf-empty">درخواستی مطابق فیلترهای انتخابشده وجود ندارد.</div>';
}
var unseen=MUF.notes.filter(function(x){return (x.at||0)>MUF.lastSeen;});
var count=document.getElementById('mufUnread');if(count)count.textContent=unseen.length?'('+unseen.length.toLocaleString('fa-IR')+')':'';
var notice=document.getElementById('mufNotes');if(notice)notice.innerHTML=MUF.notes.length?MUF.notes.slice(0,50).map(function(x){return '<div class="muf-note"><strong>'+esc(x.title)+'</strong><small>'+esc(mufPrettyDate(x.at))+' · '+esc(x.issue||'')+'</small><p>'+esc(x.body||'')+'</p></div>';}).join(''):'<div class="muf-empty">اعلان تازهای برای نمایش وجود ندارد.</div>';
document.querySelectorAll('[data-muf-kpi]').forEach(function(b){b.onclick=function(){MUF.filter=b.dataset.mufKpi;var status=document.getElementById('mufStatus');if(status)status.value=MUF.filter==='all'?'all':MUF.filter==='open'?'open':'closed';mufPaint();};});
document.querySelectorAll('[data-muf-issue]').forEach(function(b){b.onclick=function(){mufOpen(b.dataset.mufIssue);};});
if(activeTab==='list' && rows.length && (!MUF.currentKey || !rows.some(function(r){return r.key===MUF.currentKey;}))){mufOpen(rows[0].key,true);} else if(activeTab!=='list'){var panel=document.getElementById('mufSidePanel');if(panel)panel.innerHTML='';}
}
function mufPriorityBadge(name){
var txt=String(name||'نامشخص');
return '<span class="muf-priority-badge" aria-label="فوریت '+esc(txt)+'">'+mqPriorityImageHtml(txt,'mq-real-priority-icon')+'<span>'+esc(txt)+'</span></span>';
}
function mufRenderSidePanel(data){
var panel=document.getElementById('mufSidePanel');if(!panel)return;
var r=mufNormalizeRow(data.issue||data.request||data.data||{});
var comments=(data.comments||data.messages||[]);
var asset=data.asset||{};
if(!asset.key){var refs=String(r.summary||'').match(/MED-[0-9]+/g)||[];var found=refs.find(function(k){return k!==r.key;});if(found){asset={key:found,label:found};}}
var imageSource=String(asset.imageUrl||asset.avatarUrl||asset.thumbnailUrl||'');
var docs=(data.attachments||[]).map(function(a){
var url=mqResolveIssueAttachmentUrl(a);
var name=esc(a.name||a.filename||'فایل پیوست');
return url?'<a class="mm-doc-pill" target="_blank" rel="noopener noreferrer" href="'+esc(url)+'" title="مشاهده پیوست">📎 '+name+'</a>':'<span class="mm-doc-pill" title="نشانی فایل معتبر نیست">📎 '+name+'</span>';
}).join('');
var transitions=(data.transitions||[]);
panel.innerHTML=''+
'<div class="muf-side-head"><strong>جزئیات درخواست</strong><button type="button" id="mufPanelClose" class="muf-close-mini" aria-label="بستن">×</button></div>'+
'<div class="muf-inline-request">'+
'<div class="muf-side-title compact"><h4>'+esc(r.key||'')+'</h4><p>'+esc(r.summary||'')+'</p></div>'+
'<div class="muf-request-box">'+
'<div class="muf-request-grid">'+
'<div class="muf-field muf-status-inline"><span>وضعیت فعلی</span><strong>'+esc(r.status||'—')+'</strong></div>'+
'<div class="muf-field muf-priority-inline"><span>اهمیت</span><strong>'+mufPriorityBadge(r.priorityText||r.priority||'—')+'</strong></div>'+
'<div class="muf-field"><span>عنوان درخواست</span><strong>'+esc(r.summary||'—')+'</strong></div>'+
'<div class="muf-field"><span>شرح درخواست</span><p>'+(r.description?esc(r.description).replace(/\n/g,'<br>'):'شرحی ثبت نشده است.')+'</p></div>'+
'<div class="muf-field muf-attachments"><span>پیوستها</span><div>'+(docs||'<div class="muf-empty">پیوستی ثبت نشده است.</div>')+'</div></div>'+
'<div class="muf-field muf-device">'+(imageSource?'<img class="muf-device-image" src="'+esc(imageSource)+'" alt="تصویر دستگاه" loading="lazy">':'')+'<span>دستگاه</span><strong>'+esc(asset.label||asset.key||'دستگاه مرتبط ثبت نشده')+'</strong></div>'+
'</div>'+
'</div>'+
'<div class="muf-side-box muf-action-box">'+
'<h5>اقدام</h5>'+
'<div class="muf-inline-flow"><div class="muf-inline-flow-head"><span class="muf-mini-status">وضعیت فعلی: <strong>'+esc(r.status||'—')+'</strong></span></div>'+mufWorkflowHtml(r.status||'')+'</div>'+
'<div class="muf-assign-row"><label>ارجاع به<input id="mufInlineAssignee" autocomplete="off" placeholder="جستوجوی نام مسئول"><input id="mufInlineAssigneeId" type="hidden" value="'+esc(r.assigneeKey||'')+'"></label><button type="button" id="mufTakeSelf" class="mq-assets-btn">ارجاع به خودم</button></div>'+
'<small class="muf-help-inline">برای پیام به کارشناس تعمیرات، کاربر را از فهرست انتخاب کنید و در صورت نیاز یادداشت ثبت کنید.</small>'+
'<div class="muf-transition-wrap"><span>تغییر وضعیت</span><div class="muf-transition-tiles">'+(transitions.length?transitions.map(function(t){return '<button type="button" class="muf-transition-tile" data-transition-id="'+esc(t.id)+'">'+esc(t.name)+'</button>';}).join(''):'<div class="muf-empty">مرحلهای برای اقدام در دسترس نیست.</div>')+'</div></div>'+
'<label class="muf-note-entry">ثبت یادداشت<textarea id="mufInlineNote" rows="2" placeholder="اگر لازم است پیام یا توضیحی برای کارشناس یا پیگیری ثبت کنید، اینجا بنویسید."></textarea></label>'+
'<div class="muf-inline-actions"><button class="mq-assets-btn" type="button" id="mufSendInlineNote">ثبت یادداشت</button><button class="mq-assets-btn primary" type="button" id="mufSaveInlineAction">ثبت اقدام</button></div>'+
'<p id="mufInlineResult" role="status"></p>'+
'</div>'+
'<div class="muf-side-box"><h5>یادداشتها و سوابق</h5><div>'+(comments.length?comments.map(function(c){return '<div class="muf-note compact"><strong>'+esc(mmCleanFullName(c.authorName||c.author||'کاربر'))+'</strong><small>'+esc(mufPrettyDate(c.created||c.at))+'</small><p>'+esc(c.body||c.text||'')+'</p></div>';}).join(''):'<div class="muf-empty">پیامی برای نمایش وجود ندارد.</div>')+'</div></div>'+
'</div>';
var selectedTransition='';
var close=document.getElementById('mufPanelClose');if(close)close.onclick=function(){MUF.currentKey='';panel.innerHTML=mufPanelEmpty();document.querySelectorAll('[data-muf-issue]').forEach(function(x){x.classList.remove('active');});};
var assignee=panel.querySelector('#mufInlineAssignee'),assigneeId=panel.querySelector('#mufInlineAssigneeId');
if(assignee&&assigneeId){mmIssueUserPicker(assignee,assigneeId);assignee.value=mmCleanFullName(r.assigneeName||r.assigneeDisplayName||r.assignee||'');}
var result=panel.querySelector('#mufInlineResult');
function setStatus(t){if(result)result.textContent=t||'';}
panel.querySelectorAll('[data-transition-id]').forEach(function(tile){tile.onclick=function(){selectedTransition=tile.dataset.transitionId||'';panel.querySelectorAll('[data-transition-id]').forEach(function(x){x.classList.toggle('chosen',x===tile);});setStatus('مرحله «'+tile.textContent.trim()+'» انتخاب شد. برای اعمال، دکمه ثبت اقدام را بزنید.');};});
var meBtn=panel.querySelector('#mufTakeSelf'); if(meBtn)meBtn.onclick=function(){var user=document.getElementById('mqWelcomeUser');var name=user?user.textContent.trim():'';if(assignee){assignee.focus();assignee.value=name;assignee.dispatchEvent(new Event('input',{bubbles:true}));}setStatus('نام شما وارد شد؛ لطفاً از فهرست بازشده حساب خود را انتخاب کنید.');};
var noteBtn=panel.querySelector('#mufSendInlineNote'); if(noteBtn)noteBtn.onclick=function(){var body=(panel.querySelector('#mufInlineNote').value||'').trim(); if(!body){setStatus('متن یادداشت را وارد کنید.');return;} var b=this;b.disabled=true; setStatus('در حال ثبت یادداشت...'); mmWrite('issue.comment',{key:r.key,body:body,visibility:'internal'}).then(function(){setStatus('یادداشت ثبت شد.'); panel.querySelector('#mufInlineNote').value=''; mufOpen(r.key,true);}).catch(function(e){setStatus(vError(e));}).finally(function(){b.disabled=false;});};
var saveBtn=panel.querySelector('#mufSaveInlineAction'); if(saveBtn)saveBtn.onclick=function(){
var body=(panel.querySelector('#mufInlineNote').value||'').trim();
var changedAssignee=assigneeId && assigneeId.value!==(r.assigneeKey||'');
if(!selectedTransition && !changedAssignee && !body){setStatus('ابتدا یک مرحله انتخاب کنید یا ارجاع/یادداشتی ثبت کنید.');return;}
var b=this;b.disabled=true; setStatus('در حال ثبت اقدام...');
Promise.resolve().then(function(){
if(body){return mmWrite('issue.comment',{key:r.key,body:body,visibility:'internal'});}return null;
}).then(function(){
if(changedAssignee){return mmWrite('issue.update',{key:r.key,assignee:assigneeId.value});}return null;
}).then(function(){
if(selectedTransition){return mmTransitionExecute(r.key,selectedTransition,{},'');}return null;
}).then(function(){
setStatus('اقدام با موفقیت ثبت شد.');
panel.querySelector('#mufInlineNote').value='';
return mmApi('overview').then(function(x){MUF.items=(x.items||x.activities||MUF.items||[]);mufPaint();}).catch(function(){});
}).then(function(){mufOpen(r.key,true);}).catch(function(e){setStatus('ثبت اقدام کامل نشد: '+vError(e));}).finally(function(){b.disabled=false;});
};
}
function mufOpen(key,silent){
MUF.currentKey=key;
var panel=document.getElementById('mufSidePanel');if(panel)panel.innerHTML='<div class="muf-panel-loading">در حال دریافت جزئیات درخواست...</div>';
document.querySelectorAll('[data-muf-issue]').forEach(function(x){x.classList.toggle('active',x.dataset.mufIssue===key);});
mmIssueDetail(key).catch(function(){return mufFetch('detail',key);}).then(function(data){if(!mufScoped())return;mufRenderSidePanel(data||{});}).catch(function(err){if(panel)panel.innerHTML='<div class="muf-panel-loading muf-error">'+esc(mufFriendlyError(err))+'</div>';if(!silent){var host=document.getElementById('mufMessage');if(host)host.textContent=mufFriendlyError(err);}});
}
function mufRefresh(){
if(!mufScoped())return;
var msg=document.getElementById('mufMessage');if(msg)msg.textContent='';
mufFetch('list').then(function(x){
if(!mufScoped())return;
var items=(x.items||x.requests||x.issues||((x.data||{}).items)||[]).map(mufNormalizeRow);
MUF.rows=items;
MUF.notes=(x.notifications||((x.data||{}).notifications)||[]).map(function(n){n=n||{};n.at=mufToTs(n.at||n.created||n.updated);return n;});
mufPaint();
}).catch(function(e){var host=document.getElementById('mufMessage');if(host)host.textContent=mufFriendlyError(e);});
}
function mufActivateTab(t){
MUF.tab=t;
document.querySelectorAll('#mufRoot [data-muf-tab]').forEach(function(n){n.classList.toggle('active',n.dataset.mufTab===t);});
[['list','mufPaneList'],['notes','mufPaneNotes'],['new','mufPaneNew']].forEach(function(p){var el=document.getElementById(p[1]);if(el)el.hidden=p[0]!==t;});
var stats=document.getElementById('mufStats');if(stats)stats.hidden=t!=='list';
var body=document.getElementById('mufBody');if(body)body.classList.toggle('show-side',t==='list');
if(t==='notes' || t==='new'){var msg=document.getElementById('mufMessage');if(msg)msg.textContent='';}
if(t==='list')mufPaint();
}
function mufBindDeviceSearch(){
var inp=document.getElementById('mufDeviceSearch'), box=document.getElementById('mufDeviceResults'), sel=document.getElementById('mufDevice');
if(!inp||!box||!sel)return;
function paint(){
var q=searchNorm(inp.value.trim());
var hits=(MUF.deviceRows||[]).filter(function(x){return !q||searchNorm(labelOf(x)+' '+x.key).includes(q);}).slice(0,75);
box.innerHTML=hits.map(function(x){return '<button type="button" data-muf-device="'+esc(x.key)+'">'+esc(labelOf(x))+'</button>';}).join('')||'<p>دستگاهی با این مشخصات یافت نشد.</p>';
box.hidden=false;inp.setAttribute('aria-expanded','true');
box.querySelectorAll('[data-muf-device]').forEach(function(b){b.onclick=function(){sel.value=b.dataset.mufDevice;inp.value=b.textContent;box.hidden=true;inp.setAttribute('aria-expanded','false');};});
}
inp.addEventListener('focus',paint);
inp.addEventListener('input',function(){sel.value='';paint();});
inp.addEventListener('keydown',function(e){if(e.key==='Escape'){box.hidden=true;inp.setAttribute('aria-expanded','false');}if(e.key==='Enter'&&!box.hidden){var first=box.querySelector('[data-muf-device]');if(first){e.preventDefault();first.click();}}});
document.addEventListener('click',function(e){if(!inp.isConnected)return;if(!e.target.closest('.muf-device-combo')){box.hidden=true;inp.setAttribute('aria-expanded','false');}},true);
}
function mmUserFaultScreen(show,fail){
if(MUF.timer){clearInterval(MUF.timer);MUF.timer=null;}
MUF.filter='open';MUF.tab='list';
try{MUF.lastSeen=Number(localStorage.getItem('mediq.userfault.notifications.lastseen')||0);}catch(e){MUF.lastSeen=0;}
show('<section id="mufRoot" dir="rtl"><div class="muf-heading"><div><h3>ثبت و پیگیری خرابی</h3><p>وضعیت درخواستهای ثبتشده، سوابق رسیدگی و اعلانهای مرتبط را مشاهده کنید.</p></div><button id="mufRefresh" class="mq-assets-btn">بهروزرسانی</button></div><div id="mufStats" class="muf-stats"></div><div class="muf-tabs"><button type="button" data-muf-tab="list" class="active">درخواستهای من</button><button type="button" data-muf-tab="notes">اعلانها <span id="mufUnread"></span></button><button type="button" data-muf-tab="new">ثبت خرابی جدید</button></div><div id="mufBody" class="muf-body show-side"><div id="mufPaneList"><div class="muf-filters"><input id="mufSearch" placeholder="جستوجوی درخواست یا دستگاه"><select id="mufStatus"><option value="open">خرابیهای جاری</option><option value="closed">خرابیهای گذشته</option><option value="all">همه درخواستها</option></select><select id="mufSort"><option value="new">آخرین تغییرات</option><option value="old">قدیمیترین</option><option value="priority">فوریت</option></select></div><div class="muf-list-shell"><div id="mufList" class="muf-list"><p>در حال دریافت درخواستها...</p></div><aside id="mufSidePanel" class="muf-side-panel">'+mufPanelEmpty()+'</aside></div></div><div id="mufPaneNotes" hidden><button type="button" id="mufMarkRead" class="mq-assets-btn">علامتگذاری اعلانها بهعنوان خواندهشده</button><div id="mufNotes"></div></div><div id="mufPaneNew" hidden><div class="muf-create"><h3>ثبت گزارش خرابی</h3><div class="muf-create-row"><label class="muf-device-label">دستگاه<div class="muf-device-combo"><input id="mufDeviceSearch" type="text" autocomplete="off" role="combobox" aria-expanded="false" aria-controls="mufDeviceResults" placeholder="نام یا شناسه دستگاه را جستوجو کنید"><div id="mufDeviceResults" class="muf-device-results" hidden></div><select id="mufDevice" tabindex="-1" aria-label="دستگاه انتخابشده" hidden><option value="">انتخاب دستگاه</option></select></div></label><label>فوریت<select id="mufUrgency"><option value="عادی">عادی</option><option value="بالا">بالا</option><option value="بحرانی">بحرانی</option></select></label><label>وضعیت دستگاه<select id="mufDeviceStatus"><option value="active">فعال</option><option value="down">خارج از سرویس</option></select></label><label class="muf-grow">شرح خرابی<textarea id="mufDescription" rows="2" placeholder="شرح خرابی و علائم مشاهدهشده را وارد کنید."></textarea></label><button id="mufSubmit" type="button" class="mq-assets-btn primary">ثبت درخواست</button></div><p id="mufCreateMsg" role="status"></p></div></div></div><div id="mufMessage" role="status"></div></section>');
var newFaultButton=document.querySelector('#mufRoot [data-muf-tab="new"]');
var faultHeading=document.querySelector('#mufRoot .muf-heading');
if(newFaultButton&&faultHeading){
newFaultButton.classList.add('mq-v47-newfault');
var updateButton=document.getElementById('mufRefresh');
if(updateButton){
var tools=document.createElement('div');tools.className='mq-v49-fault-toolbar';
updateButton.parentNode.insertBefore(tools,updateButton);
tools.appendChild(newFaultButton);tools.appendChild(updateButton);
}
}
document.querySelectorAll('#mufRoot [data-muf-tab]').forEach(function(b){b.onclick=function(){mufActivateTab(b.dataset.mufTab);};});
document.getElementById('mufRefresh').onclick=mufRefresh;
document.getElementById('mufMarkRead').onclick=function(){MUF.lastSeen=Date.now();try{localStorage.setItem('mediq.userfault.notifications.lastseen',String(MUF.lastSeen));}catch(e){}mufPaint();};
['mufSearch','mufStatus','mufSort'].forEach(function(id){var x=document.getElementById(id);x.oninput=x.onchange=function(){if(id==='mufStatus')MUF.filter=x.value;mufPaint();};});
document.getElementById('mufSubmit').onclick=function(){
var b=this,msg=document.getElementById('mufCreateMsg');
var p={device:document.getElementById('mufDevice').value,urgency:document.getElementById('mufUrgency').value,deviceStatus:document.getElementById('mufDeviceStatus').value,description:document.getElementById('mufDescription').value.trim()};
if(!p.device||!p.description){msg.textContent='لطفاً دستگاه و شرح خرابی را تکمیل کنید.';return;}
b.disabled=true;msg.textContent='در حال ثبت درخواست...';
mufCreate(p).then(function(r){msg.textContent='درخواست '+(r.key||'')+' ثبت شد.';document.getElementById('mufDescription').value='';mufActivateTab('list');mufRefresh();}).catch(function(e){msg.textContent=mufFriendlyError(e);}).finally(function(){b.disabled=false;});
};
mufRefresh();
apiGet('equipment').then(function(rows){if(!mufScoped())return;MUF.deviceRows=rows;var select=document.getElementById('mufDevice');select.innerHTML='<option value="">انتخاب دستگاه</option>'+rows.map(function(r){return '<option value="'+esc(r.key)+'">'+esc(labelOf(r))+'</option>';}).join('');mufBindDeviceSearch();}).catch(function(e){var el=document.getElementById('mufCreateMsg');if(el)el.textContent='فهرست دستگاهها بارگذاری نشد: '+mufFriendlyError(e);});
MUF.timer=setInterval(function(){if(mufScoped()&&!document.hidden)mufRefresh();else if(!mufScoped()){clearInterval(MUF.timer);MUF.timer=null;}},30000);
}
function mmLoad(tab){MM.tab=tab;state.screen='maintenance';heroTitle.textContent='مدیریت نگهداری و تعمیرات';heroDesc.textContent='بخش '+({overview:'داشبورد فعالیتها',plans:'برنامهریزی پیشگیرانه',em:'ثبت و پیگیری خرابی',suppliers:'تعمیرکاران',evaluations:'ارزیابی تعمیرکاران',contracts:'قراردادهای تعمیراتی',equipment:'تجهیزات و اسناد',costing:'مدیریت هزینههای نت',risk:'مدیریت ریسک'}[tab]||'نگهداری و تعمیرات');mqTreeActivate('maintenance');mmTreeSync(tab);mmSyncBreadcrumb(tab);view.innerHTML=mmNav(tab)+'<div class="mm-two-pane">'+'<main class="mm-main"><div id="mmContent" class="mq-preview" style="margin-top:14px"><div class="wz-loading">در حال دریافت اطلاعات...</div></div></main></div>';view.querySelector('.mm-two-pane').classList.add('mm-full-width');view.querySelectorAll('[data-mm-side]').forEach(function(b){b.onclick=function(){mmLoad(b.dataset.mmSide);};});view.querySelectorAll('[data-mm-home]').forEach(function(b){b.onclick=mmHome;});view.querySelectorAll('[data-mm-legal]').forEach(function(b){b.onclick=function(){if(b.dataset.mmLegal==='1')mmLegalHome();else mmHome();};});var host=$id('mmContent');function show(html){if(host&&host.isConnected){host.innerHTML=html;mmBind();if($id('mmRows')){mmEnsureDefaultPanel();mmPaintActivities();}}}function fail(e){show('<p role="alert">'+esc(vError(e))+'</p>');}
if(tab==='overview'||tab==='activities')mmApi('overview').then(function(x){MM.overview=x;MM.activities=x.activities||[];if(tab==='overview'){var cards=[['کل فعالیتهای جاری',MM.activities.filter(function(r){return !r.done;}).length],['فعالیتهای پیشگیرانه جاری',MM.activities.filter(function(r){return !r.done&&mmIsPm(r);}).length],['فعالیتهای اصلاحی جاری',MM.activities.filter(function(r){return !r.done&&!mmIsPm(r);}).length],['فعالیتهای تکمیلشده',MM.activities.filter(function(r){return !!r.done;}).length],['فعالیتهای تأخیرشده (بیش از یک هفته)',MM.activities.filter(mmWeekLate).length]];MM.cardFilter='all';show('<div class="v-stats">'+cards.map(function(k,i){return '<button type="button" class="mm-kpi-card'+(i===0?' active':'')+'" data-mm-kpi="'+['all','pm','em','done','overdue'][i]+'" aria-pressed="'+(i===0?'true':'false')+'"><strong>'+k[1]+'</strong><span>'+k[0]+'</span></button>';}).join('')+'</div><h3 id="mmActivitiesHeading">فعالیتها</h3>'+mmActivityFilterUI());}else show('<h3>فهرست فعالیتهای PM و EM</h3>'+mmActivityFilterUI());}).catch(fail);
else if(tab==='plans')mmApi('plans').then(function(x){MM.plans=(x.items||[]).slice().sort(function(a,b){var da=Date.parse(a.next||a.nextExecutionDate||''),db=Date.parse(b.next||b.nextExecutionDate||'');return (isNaN(da)?Infinity:da)-(isNaN(db)?Infinity:db);});show('<h3 id="mmPlanListHeading">برنامههای پیشگیرانه و بازرسی</h3>'+mmTable(['برنامه','عنوان','نوع','دوره (روز)','اجرای بعدی','وضعیت','عملیات'],MM.plans.map(function(p){return [esc(p.key),esc(p.name),esc(mmKind(p.kind)),esc(p.kind==='INSPECTION'?'یکبار':p.period),esc(mmFaDate(p.next)),esc(mmPlanState(p)),mmPlanToggleBtn(p)+' <button type="button" class="mq-assets-btn" data-mm-plan-edit="'+esc(p.key)+'">ویرایش</button>'];}))+'<h3 id="mmPlanFormHeading">ایجاد برنامه پیشگیرانه / بازرسی</h3><div class="mm-plan-form">'+mmForm('<label>نوع برنامه<select id="mm_kind"><option value="PM">برنامه پیشگیرانه</option><option value="INSPECTION">برنامه بازرسی</option></select></label><label>مبنای برنامه<select id="mm_scope"><option value="DEVICE">دستگاه خاص</option><option value="MODEL">بر اساس مدل</option><option value="TITLE">عنوان دستگاه</option><option value="GROUP">بر اساس گروه</option></select></label><label>انتخاب دارایی<div class="mm-combo"><input id="mm_targetQuery" type="search" autocomplete="off" placeholder="جستوجو یا انتخاب هدف" role="combobox" aria-expanded="false" aria-controls="mm_targetOptions"><div id="mm_targetOptions" class="mm-combo-menu" hidden></div><select id="mm_target" aria-label="هدف انتخابشده" style="display:none"><option value="">انتخاب کنید</option></select></div></label>'+mmJDateField('mm_start','تاریخ شروع (شمسی)')+mmJDateField('mm_end','تاریخ پایان (شمسی)')+'<label>دوره<select id="mm_period"><option value="" disabled>انتخاب دوره</option><option value="1">روزانه</option><option value="7">هفتگی</option><option value="30">ماهانه (۳۰ روز)</option><option value="90">سهماهه (۹۰ روز)</option><option value="180">ششماهه (۱۸۰ روز)</option><option value="365">سالانه (۳۶۵ روز)</option></select></label><label>وضعیت برنامه<select id="mm_active"><option value="active">فعال</option><option value="inactive">غیرفعال</option></select></label><label>قرارداد مرتبط<select id="mm_contract"><option value="">بدون قرارداد</option></select></label>','pm.create',['kind','scope','target','start','end','period','active','contract'])+'</div>');mmScope();mmBindTargetCombo();mmApi('contracts').then(function(z){return mmVisibleContracts(z.items||[]);}).then(function(z){var s=$id('mm_contract');if(s){(z.items||[]).forEach(function(c){var op=document.createElement('option');op.value=c.id;op.textContent=c.title+' - '+(c.number||'');s.appendChild(op);});}}).catch(function(){});}).catch(fail);
else if(tab==='costing'||tab==='risk')mmFinanceRisk(tab,show,fail);
else if(tab==='suppliers')mmApi('suppliers').then(function(x){MM.suppliers=x.items||[];show('<h3>افزودن تعمیرکار</h3>'+mmSupplyForm()+'<h3>فهرست تأمینکنندگان و تعمیرکاران</h3><div class="mm-actionbar mm-search-spaced"><input id="mmSupplierSearch" placeholder="جستوجوی تعمیرکار"><select id="mmSupplierGroupFilter" aria-label="فیلتر گروه تأمینکننده"><option value="">همه گروهها</option>'+Array.from(new Set(MM.suppliers.map(function(s){return String(s.category||'').trim();}).filter(Boolean))).map(function(c){return '<option value="'+esc(c)+'">'+esc(c)+'</option>';}).join('')+'</select></div><div id="mmSupplierRows">'+mmTable(['نام','گروه تأمینکننده','تلفن','رابط','تلفن رابط'],MM.suppliers.map(function(s){return [esc(s.name),esc(s.category),esc(s.phone),esc(s.contact),esc(s.contactPhone)];}))+'</div>');}).catch(fail);
else if(tab==='em')mmUserFaultScreen(show,fail);
else if(tab==='evaluations')Promise.all([mmApi('evaluations'),mmApi('suppliers'),mmApi('overview')]).then(function(v){MM.suppliers=v[1].items;MM.activities=v[2].activities;show('<h3>ارزیابی عملکرد تعمیرکاران برای هر درخواست</h3>'+mmEvaluationDashboard(v[0].items||[])+mmTable(['تسک','تعمیرکار','امتیاز از ۵','توضیحات'],v[0].items.map(function(r){return [esc(r.issue),esc(r.supplier),esc(r.score),esc(r.note)];}))+'<h3>ارزیابی جدید</h3>'+mmForm(mmSelect('mm_issue','تسک',MM.activities.map(function(r){return {key:r.key,label:r.key+' — '+r.summary};}))+mmSelect('mm_supplier','تعمیرکار',MM.suppliers.map(function(s){return {key:s.key,label:s.name};}))+mmField('mm_score','امتیاز ۱ تا ۵','number')+mmTxt('mm_note','توضیحات'),'evaluation.save',['issue','supplier','score','note']));}).catch(fail);
else if(tab==='contracts')Promise.all([mmApi('contracts').then(function(z){return mmVisibleContracts(z.items||[]);}),mmApi('suppliers')]).then(function(v){MM.suppliers=v[1].items||[];show('<h3>ثبت قرارداد</h3>'+mmForm(mmField('mm_title','عنوان')+mmSelect('mm_contractType','نوع قرارداد',[{key:'inspection',label:'بازرسی'},{key:'maintenance',label:'نت'},{key:'calibration',label:'کالیبراسیون'}])+mmField('mm_number','شماره قرارداد')+mmSelect('mm_supplier','طرف قرارداد',v[1].items.map(function(s){return {key:s.key,label:s.name};}))+mmJDateField('mm_start','شروع قرارداد (شمسی)')+mmJDateField('mm_end','پایان قرارداد (شمسی)')+mmTxt('mm_coverage','تجهیزات/خدمات تحت پوشش'),'contract.save',['title','contractType','number','supplier','start','end','coverage'])+'<h3>قراردادهای نگهداری و تعمیرات</h3>'+mmTable(['عنوان','شماره','تأمینکننده','شروع','پایان','سند'],v[0].items.map(function(r){return [esc(r.title),esc(r.number),esc(mmSupplierName(r.supplier)),esc(r.start),esc(r.end),mmLink(r.url)];}))+((v[0].unverified||v[0].unlinked)?'<p class="mm-sync-note">'+(v[0].unverified?'تأیید وضعیت '+v[0].unverified+' صفحه به دلیل خطای دسترسی یا ارتباط ممکن نشد. ':'')+(v[0].unlinked?v[0].unlinked+' رکورد بدون شناسه صفحه از فهرست پنهان شد.':'')+'</p>':'') );}).catch(fail);
else if(tab==='equipment')Promise.all([apiGet('equipment'),mmApi('documents')]).then(function(v){MM.equipment=v[0];var docs=v[1].items;show('<h3>ثبت سند تعمیراتی</h3>'+mmForm(mmSelect('mm_equipment','دستگاه',MM.equipment.map(function(r){return {key:r.key,label:labelOf(r)};}))+mmField('mm_title','عنوان سند')+mmSelect('mm_docType','نوع سند',[{key:'financial',label:'مالی'},{key:'technical',label:'فنی'},{key:'administrative',label:'اداری'}])+mmField('mm_issue','شماره درخواست مرتبط (اختیاری)'),'document.save',['equipment','title','docType','issue'])+'<h3>فهرست تجهیزات و اسناد تعمیراتی</h3><input id="mmEquipSearch" class="mq-edit-search" placeholder="جستوجوی دستگاه"><div id="mmEquipRows">'+mmEquipTable(MM.equipment,docs)+'</div>');MM.documents=docs;}).catch(fail);
}
function mmLink(url){return /^https:\/\//i.test(url||'')?'<a href="'+esc(url)+'" target="_blank" rel="noopener noreferrer">مشاهده سند</a>':'—';}
function mmActivities(rows){return mmTable(['کلید','فعالیت','اهمیت','وضعیت','مسئول','ایجاد'],rows.map(function(r){return ['<button type="button" class="mm-issue-link" data-mm-issue="'+esc(r.key)+'">'+esc(r.key)+'</button>',esc(r.summary),esc(mmPriorityText(r)),esc(r.status),esc(mmCleanFullName(r.assigneeName||r.assigneeDisplayName||r.assignee||'تخصیص داده نشده')),esc(mmFaDate(r.created))];}));}
function mmShamsiToday(){return new Intl.DateTimeFormat('fa-IR-u-ca-persian',{year:'numeric',month:'2-digit',day:'2-digit',timeZone:'Asia/Tehran'}).format(new Date()).replace(/\u200e/g,'');}
function mmDetailField(label,value){return '<div class="mm-detail-line"><span>'+esc(label)+'</span><strong>'+esc(value==null?'—':String(value))+'</strong></div>';}
function mmIssueDetail(key){return mmApi('issue.detail',{type:key});}
function mmIssueUserPicker(input,hidden){
var menu=document.createElement('div');menu.className='mm-user-menu';input.parentNode.appendChild(menu);
var requestNo=0;
input.oninput=function(){var q=input.value.trim();hidden.value='';var n=++requestNo;if(q.length<2){menu.innerHTML='';return;}
mmApi('issue.users',{type:q}).then(function(x){if(n!==requestNo)return;menu.innerHTML=(x.items||[]).map(function(u){return '<button type="button" data-user="'+esc(u.name)+'">'+esc(u.displayName||u.name)+'</button>';}).join('');menu.querySelectorAll('button').forEach(function(b){b.onclick=function(){hidden.value=b.dataset.user;input.value=b.textContent;menu.innerHTML='';};});}).catch(function(){menu.innerHTML='';});
};
}
function mmOpenIssue(key){
var r=(MM.activities||[]).find(function(x){return x.key===key;});if(!r)return;
var base=document.getElementById('mediq-dashboard');if(!base)return;
var old=base.querySelector('.mm-issue-overlay');if(old)old.remove();
var panel=base.querySelector('#mmPermanentIssue');
if(!panel){panel=document.createElement('aside');panel.id='mmPermanentIssue';panel.className='mm-permanent-panel';panel.dir='rtl';var content=document.getElementById('mmContent');if(content){content.classList.add('mm-with-fixed-side');var heading=content.querySelector('#mmActivitiesHeading');if(heading)heading.insertAdjacentElement('afterend',panel);else content.prepend(panel);}else base.appendChild(panel);}
panel.hidden=false; panel.innerHTML='<header><strong>گزارش فعالیت '+esc(key)+'</strong><button type="button" id="mmClosePermanent" aria-label="بستن">×</button></header><p>در حال دریافت اطلاعات درخواست...</p>';
panel.querySelector('#mmClosePermanent').onclick=function(){panel.innerHTML='<header><strong>جزئیات فعالیت</strong></header><div class="mm-panel-empty">یک فعالیت را انتخاب کنید.</div>';};
mmIssueDetail(key).then(function(d){if(!panel.isConnected||panel.hidden)return;mmRenderPermanentIssue(panel,d);}).catch(function(e){panel.innerHTML='<header><strong>'+esc(key)+'</strong><button type="button" id="mmClosePermanent">×</button></header><p class="mm-error">'+esc(vError(e))+'</p>';panel.querySelector('button').onclick=function(){panel.hidden=true;};});
}
function mmMaintenanceStage(status){
var x=String(status||'').trim();
if(/محاسبه|بسته|بستن|closed|calculated/i.test(x))return 'close';
if(/تحویل|ارسال به انبار|handover|deliver/i.test(x))return 'handover';
if(/تعمیر|repair/i.test(x))return 'repair';
if(/انجام|progress|working/i.test(x))return 'work';
return 'new';
}
function mmMakePanelAccordion(panel){
var cards=Array.prototype.slice.call(panel.querySelectorAll(':scope > .mm-detail-card'));
cards.forEach(function(card,index){
if(card.querySelector('#mmShowRequest')){card.classList.add('mm-standalone-request');return;}
var h=card.querySelector(':scope > h4');
var name=h?h.textContent.trim():(index===0?'خلاصه وضعیت':'بخش اطلاعات');
if(h)h.remove();
var body=document.createElement('div');body.className='mm-accordion-body';
while(card.firstChild)body.appendChild(card.firstChild);
var trigger=document.createElement('button');trigger.type='button';trigger.className='mm-accordion-toggle';
trigger.innerHTML='<span>'+name+'</span><span class="mm-accordion-chevron" aria-hidden="true">⌄</span>';
card.appendChild(trigger);card.appendChild(body);
if(index<2){card.classList.add('mm-always-open');trigger.setAttribute('aria-expanded','true');body.hidden=false;trigger.disabled=true;if(index===0){trigger.remove();card.classList.add('mm-summary-card');}}
else {trigger.setAttribute('aria-expanded','false');body.hidden=true;trigger.onclick=function(){body.hidden=!body.hidden;trigger.setAttribute('aria-expanded',String(!body.hidden));};}
});
}
function mmCleanFullName(value){return String(value||'').replace(/\s*\([^()]*\)\s*$/,'').trim();}
function mmRenderPermanentIssue(panel,data){
var r=data.issue||{}, key=r.key||'';
var comments=(data.comments||[]).map(function(c){return '<div class="mm-comment"><b>'+esc(mmCleanFullName(c.author||''))+'</b><small>'+esc(mmFaDate(c.created||''))+'</small><p>'+esc(c.body||'')+'</p></div>';}).join('');
var fields=(data.fields||[]).map(function(f){return mmDetailField(f.name,f.value);}).join('');
var stage=mmMaintenanceStage(r.status);
var flowHtml='<div class="mm-detail-card mm-workflow"><h4>روند فعالیت</h4><div class="mm-stage-grid">'+[['new','ثبت و شروع'],['work','در حال انجام'],['repair','تعمیر و پیگیری'],['handover','آماده تحویل / تحویل'],['close','بستن و محاسبه']].map(function(a,i,all){var pos=all.findIndex(function(z){return z[0]===stage;});return '<span class="mm-stage '+(i<pos?'done':(i===pos?'current':''))+'">'+a[1]+'</span>';}).join('')+'</div></div>';
panel.innerHTML='<header><strong>گزارش فعالیت '+esc(key)+'</strong><button id="mmClosePermanent" type="button">×</button></header>'+
'<h3 class="mm-panel-summary">'+esc(r.summary||'')+'</h3><div class="mm-detail-card mm-summary-fields">'+mmDetailField('وضعیت',r.status)+mmDetailField('مسئول',mmCleanFullName(r.assignee))+mmDetailField('اهمیت',r.priority)+mmDetailField('تاریخ ایجاد',mmFaDate(r.created))+'</div>'+
flowHtml+
'<div class="mm-detail-card mm-report-section"><h4>ثبت گزارش</h4><div class="mm-report-inner"><textarea id="mmPanelReport" rows="3" placeholder="شرح اقدامات و نتیجه بررسی را وارد کنید"></textarea><button type="button" id="mmPanelReportSave" class="mq-assets-btn primary">ثبت گزارش</button><div id="mmPanelReportStatus" role="status"></div></div></div>'+
'<div class="mm-detail-card mm-handover-card"><h4>فرم تحویل دستگاه</h4><div class="mm-handover-grid"><label>نام دستگاه<input id="mmReceiptDevice" value="'+esc(r.device||r.summary||'')+'"></label><label>تاریخ تحویل<div class="mm-receipt-date"><input id="mmReceiptDate" readonly placeholder="انتخاب تاریخ" value="'+esc(mmShamsiToday())+'"><div id="mmReceiptDate_cal" class="mm-cal" hidden></div></div></label><label>تحویلدهنده<input id="mmReceiptFrom" autocomplete="off" placeholder="جستوجوی نام کاربر"><input type="hidden" id="mmReceiptFromId"></label><label>تحویلگیرنده<input id="mmReceiptTo" autocomplete="off" placeholder="جستوجوی نام کاربر"><input type="hidden" id="mmReceiptToId"></label></div><button id="mmPrintReceipt" type="button" class="mq-assets-btn primary">چاپ فرم تحویل</button></div>'+
'<div class="mm-detail-card"><button type="button" id="mmShowRequest" class="mq-assets-btn primary">اقدام</button></div>';
mmMakePanelAccordion(panel);
panel.querySelector('#mmClosePermanent').onclick=function(){panel.innerHTML='<header><strong>جزئیات فعالیت</strong></header><div class="mm-panel-empty">یک فعالیت را انتخاب کنید.</div>';};
panel.querySelector('#mmPanelReportSave').onclick=function(){var message=panel.querySelector('#mmPanelReport').value.trim(),out=panel.querySelector('#mmPanelReportStatus'),button=this;if(!message){out.textContent='متن گزارش را وارد کنید.';return;}button.disabled=true;mmWrite('issue.comment',{key:key,body:message,visibility:'public'}).then(function(){out.textContent='گزارش ثبت شد.';panel.querySelector('#mmPanelReport').value='';}).catch(function(e){out.textContent=vError(e);}).finally(function(){button.disabled=false;});};
panel.querySelector('#mmReceiptDate').onclick=function(){mmReceiptCalendar();};
mmIssueUserPicker(panel.querySelector('#mmReceiptFrom'),panel.querySelector('#mmReceiptFromId'));
mmIssueUserPicker(panel.querySelector('#mmReceiptTo'),panel.querySelector('#mmReceiptToId'));
panel.querySelector('#mmPrintReceipt').onclick=function(){var printKey='mediq.receipt.print.'+key;var n=Number(sessionStorage.getItem(printKey)||0);if(n>=2){alert('سقف مجاز چاپ این فرم از طریق این نشست به پایان رسیده است.');return;}var get=function(n){return panel.querySelector('#'+n).value.trim();};var device=get('mmReceiptDevice'),date=get('mmReceiptDate'),from=mmCleanFullName(get('mmReceiptFrom')),to=mmCleanFullName(get('mmReceiptTo'));if(!device||!date||!get('mmReceiptFromId')||!get('mmReceiptToId')){alert('دستگاه، تاریخ و هر دو کاربر را از فهرست انتخاب کنید.');return;}if(!confirm('توجه: از این فرم فقط میتوانید ۲ بار چاپ بگیرید.\nآیا مایل به ادامه و باز کردن صفحه چاپ هستید؟'))return;var w=window.open('','_blank');if(!w){alert('مرورگر اجازه باز شدن پنجره چاپ را نداد. لطفاً Pop-up را مجاز کنید.');return;}w.document.write('<!doctype html><html lang="fa" dir="rtl"><meta charset="utf-8"><title>فرم تحویل</title><style>@page{size:A4;margin:16mm}@font-face{font-family:"MediQAttachedVazir";src:url("https://kb.h-soft.ir/download/attachments/174855060/Vazir-Regular.woff2") format("woff2"),url("https://kb.h-soft.ir/download/attachments/174855060/Vazir-Regular.woff") format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:"MediQAttachedVazir";src:url("https://kb.h-soft.ir/download/attachments/174855060/Vazir-Bold.woff2") format("woff2"),url("https://kb.h-soft.ir/download/attachments/174855060/Vazir-Bold.woff") format("woff");font-weight:700 900;font-style:normal;font-display:block}html,body,body *{font-family:"MediQAttachedVazir",Vazir,Tahoma,Arial,sans-serif!important;letter-spacing:normal!important}html{-webkit-print-color-adjust:exact;print-color-adjust:exact}body{font-size:15px}h2{font-size:22px}.statement{font-size:15px!important;line-height:2.65!important;word-spacing:normal!important}.sign b{font-size:14px!important}.sign p{font-size:14px!important}body{font-family:"MediQAttachedVazir",Vazir,Tahoma,Arial,sans-serif;direction:rtl;color:#16415c;line-height:2.5;margin:0;padding:28px;border:3px double #2b94bf;min-height:245mm;box-sizing:border-box}.brand{font-size:30px;font-weight:900;color:#268fbd;border-bottom:2px solid #d0e6f1;padding-bottom:15px}.sub{font-size:11px;color:#55788e}h2{text-align:center;margin:45px 0 35px}.statement{border:1px solid #c6deed;border-radius:12px;padding:20px;line-height:3}.sign{display:flex;gap:26px;margin-top:75px}.sign>div{flex:1;min-height:140px;border:1px solid #c6deed;border-radius:12px;padding:14px}.sign b{font-size:13px;color:#16415c}.sign p{margin-top:42px}.statement{text-align:justify;text-justify:inter-word;font-size:14px}.brand{text-align:right}.footer{font-size:10px;color:#66869a;border-top:1px solid #d1e3ed;margin-top:60px;padding-top:9px}</style><div class="brand">MediQ <span class="sub"> | مدیریت تجهیزات پزشکی</span></div><h2>صورتجلسه تحویل دستگاه</h2><p class="statement">در تاریخ '+esc(date)+' دستگاه '+esc(device)+' از خانم/آقای '+esc(from)+' تحویل گرفته شد و به خانم/آقای '+esc(to)+' تحویل داده شد.</p><div class="sign"><div><b>تحویلدهنده: '+esc(from)+'</b><p>امضا:</p></div><div><b>تحویلگیرنده: '+esc(to)+'</b><p>امضا:</p></div></div></html>');w.document.close();sessionStorage.setItem(printKey,String(n+1));if(n+1>=2)panel.querySelector('#mmPrintReceipt').disabled=true;w.focus();var runPrint=function(){if(!w.closed){w.focus();w.print();}};if(w.document.fonts&&w.document.fonts.ready){w.document.fonts.ready.then(runPrint).catch(runPrint);}else{runPrint();}};
panel.querySelector('#mmShowRequest').onclick=function(){mmOpenIssueModal(data);};
}
/* MediQ V46.7: transitions are submitted ONLY after the modal validates its screen. */
function mmTransitionMeta(key){return mmRequest(MM_PROXY_ROOT+'mediqTransitionScreen?key='+encodeURIComponent(key),{method:'GET',cache:'no-store'});}
function mmTransitionExecute(key,transitionId,fields,comment){
return mmRequest(MM_PROXY_ROOT+'mediqTransitionScreenWrite',{method:'POST',headers:{'Content-Type':'application/json','X-Atlassian-Token':'no-check'},body:JSON.stringify({key:key,transitionId:transitionId,fields:fields,comment:comment||''})});
}
function mmTIsAsset(m){return /rlabs-customfield-default-object|insight|assets/i.test((m.schema||{}).custom||'');}
function mmTField(name,meta){
var sc=meta.schema||{}, type=sc.type||'string', items=meta.allowedValues||[], req=!!meta.required;
var label='<label class="mm-transition-field" data-mm-field="'+esc(name)+'"><span>'+esc(meta.name||name)+(req?' <b class="mm-t-required">*</b>':'')+'</span>';
var initial=meta.hasOwnProperty('value')?meta.value:null;
if(mmTIsAsset(meta))return label+'<input data-mm-lookup="'+esc(name)+'" type="search" autocomplete="off" placeholder="نام یا شناسه را جستوجو کنید" value="'+esc(Array.isArray(initial)?initial.map(function(x){return x.label||x.name||x.key||'';}).join('، '):'')+'"><input data-mm-value="'+esc(name)+'" type="hidden"><div class="mm-t-asset-results" data-mm-results="'+esc(name)+'"></div></label>';
if((sc.system||'')==='user'||/userpicker|multiuserpicker/i.test(sc.custom||''))return label+'<input type="search" data-mm-lookup="'+esc(name)+'" autocomplete="off" placeholder="جستوجوی نام فرد"><input type="hidden" data-mm-value="'+esc(name)+'"><div class="mm-t-asset-results" data-mm-results="'+esc(name)+'"></div></label>';
if((sc.system||'')==='group'||/grouppicker/i.test(sc.custom||''))return label+'<input type="search" data-mm-lookup="'+esc(name)+'" autocomplete="off" placeholder="جستوجوی گروه"><input type="hidden" data-mm-value="'+esc(name)+'"><div class="mm-t-asset-results" data-mm-results="'+esc(name)+'"></div></label>';
if(/cascadingselect/i.test(sc.custom||'')){
var parents=items.map(function(v){return '<option value="'+esc(v.id||'')+'">'+esc(v.value||v.name||'')+'</option>';}).join('');
return label+'<select data-mm-value="'+esc(name)+'" data-mm-cascade="'+esc(name)+'"><option value="">انتخاب گزینه اصلی</option>'+parents+'</select><select data-mm-child="'+esc(name)+'"><option value="">انتخاب گزینه فرعی</option></select></label>';
}
if(items.length){
var isMulti=type==='array';
if(isMulti)return label+'<div class="mm-t-checklist" data-mm-value="'+esc(name)+'">'+items.map(function(v){var id=String(v.id||v.key||v.value||v.name||'');return '<label><input type="checkbox" value="'+esc(id)+'"> '+esc(v.value||v.name||v.displayName||v.key||v.id||'')+'</label>';}).join('')+'</div></label>';
return label+'<select data-mm-value="'+esc(name)+'"><option value="">انتخاب کنید</option>'+items.map(function(v){var id=String(v.id||v.key||v.value||v.name||'');return '<option value="'+esc(id)+'">'+esc(v.value||v.name||v.displayName||v.key||v.id||'')+'</option>';}).join('')+'</select></label>';
}
if(type==='array' || /select|checkboxes/i.test(sc.custom||''))return label+'<div class="mm-transition-error">گزینههای این فیلد در متادیتای مرحله ارائه نشدهاند؛ ثبت مقدار بدون انتخاب معتبر انجام نمیشود.</div></label>';
if(type==='boolean')return label+'<label class="mm-t-check"><input data-mm-value="'+esc(name)+'" type="checkbox"> بله</label></label>';
if(type==='string'||type==='number'||type==='date'||type==='datetime'||!type){
var large=/description|comment|توضیح|شرح/i.test(name+' '+(meta.name||''));
return label+(large?'<textarea rows="3" data-mm-value="'+esc(name)+'"></textarea>':'<input data-mm-value="'+esc(name)+'" type="'+(type==='number'?'number':type==='date'?'date':type==='datetime'?'datetime-local':'text')+'">')+'</label>';
}
return label+'<div class="mm-transition-error">نوع این فیلد در رابط فعلی پشتیبانی نمیشود؛ از ثبت مقدار حدسی جلوگیری شد.</div></label>';
}
function mmTGather(overlay,tr){
var values={}, fields=tr.fields||{};
Object.keys(fields).forEach(function(name){
if(name==='comment')return;
var m=fields[name],sc=m.schema||{}, el=overlay.querySelector('[data-mm-value="'+name+'"]');
if(!el){if(m.required)throw Error('فیلد الزامی «'+(m.name||name)+'» پشتیبانی نمیشود.');return;}
var list=el.classList&&el.classList.contains('mm-t-checklist');
var value=list?Array.from(el.querySelectorAll('input:checked')).map(function(c){return c.value;}):el.type==='checkbox'?el.checked:String(el.value||'').trim();
if(m.required&&(value===''||value===null||(Array.isArray(value)&&!value.length)))throw Error('تکمیل فیلد «'+(m.name||name)+'» الزامی است.');
if(value==='' || (Array.isArray(value)&&!value.length))return;
if(/cascadingselect/i.test(sc.custom||'')){var child=overlay.querySelector('[data-mm-child="'+name+'"]');value={id:value};if(child&&child.value)value.child={id:child.value};}
else if(mmTIsAsset(m))value=[{key:value}];
else if((sc.system||'')==='user'||/userpicker/i.test(sc.custom||''))value=(sc.type==='array'?[{name:value}]:{name:value});
else if((sc.system||'')==='group'||/grouppicker/i.test(sc.custom||''))value={name:value};
else if(list)value=value.map(function(x){return (sc.items&&sc.items.type==='string')?x:{id:x};});
else if(el.tagName==='SELECT')value={id:value};
else if(sc.type==='number')value=Number(value);
else if(sc.type==='datetime')value=value+':00.000+0330';
values[name]=value;
});
return values;
}
function mmTransitionLookup(key,field,q){return mmRequest(MM_PROXY_ROOT+'mediqTransitionLookup?key='+encodeURIComponent(key)+'&field='+encodeURIComponent(field)+'&q='+encodeURIComponent(q),{method:'GET',cache:'no-store'});}
function mmOpenTransitionDialog(modal,meta,tid,issueKey,onAccept,inlineHost){
document.querySelectorAll('.mm-t-screen-overlay').forEach(function(x){x.remove();});
var tr=(meta.transitions||[]).find(function(x){return String(x.id)===String(tid);});
if(!tr)throw Error('اطلاعات این مرحله از سرویس دریافت نشده است.');
var fields=tr.fields||{},names=Object.keys(fields).filter(function(k){return k!=='comment';});
var overlay=document.createElement('div');overlay.className='mm-t-screen-overlay';overlay.dir='rtl';
overlay.innerHTML='<div class="mm-t-screen-backdrop"></div><section class="mm-t-screen-card" role="dialog" aria-modal="true" aria-labelledby="mmTTitle"><header><div><strong id="mmTTitle">'+esc(tr.name)+'</strong><p>اطلاعات موردنیاز این مرحله را تکمیل کنید.</p></div><button class="mm-t-x" type="button" aria-label="بستن">×</button></header><div class="mm-t-screen-body">'+
(names.length?'<div class="mm-transition-grid">'+names.map(function(k){return mmTField(k,fields[k]);}).join('')+'</div>':'<p class="mm-t-empty">برای این انتقال فیلد اضافی تعریف نشده است.</p>')+
'<label class="mm-transition-field mm-t-comment"><span>توضیحات انتقال '+(fields.comment&&fields.comment.required?'(الزامی)':'(اختیاری)')+'</span><textarea id="mmTransitionComment" rows="3" placeholder="در صورت نیاز، توضیحات مربوط به این اقدام را وارد کنید."></textarea></label><p class="mm-t-screen-error" role="alert"></p></div><footer><button class="mm-t-cancel" type="button">انصراف</button><button class="mm-t-ok" type="button">تأیید اطلاعات مرحله</button></footer></section>';
if(inlineHost){overlay.classList.add('mq-v49-transition-inline');inlineHost.replaceChildren(overlay);}else{document.body.appendChild(overlay);}
function close(){overlay.remove();}
overlay.querySelector('.mm-t-x').onclick=close;overlay.querySelector('.mm-t-cancel').onclick=close;overlay.querySelector('.mm-t-screen-backdrop').onclick=close;
overlay.querySelectorAll('[data-mm-cascade]').forEach(function(parent){
var field=parent.getAttribute('data-mm-cascade'),child=overlay.querySelector('[data-mm-child="'+field+'"]');
parent.onchange=function(){
var m=fields[field]||{}, selected=(m.allowedValues||[]).find(function(v){return String(v.id)===parent.value;});
child.innerHTML='<option value="">انتخاب گزینه فرعی</option>'+(selected&&selected.children||[]).map(function(v){return '<option value="'+esc(v.id||'')+'">'+esc(v.value||v.name||'')+'</option>';}).join('');
};
});
overlay.querySelectorAll('[data-mm-lookup]').forEach(function(inp){
var field=inp.getAttribute('data-mm-lookup'), result=overlay.querySelector('[data-mm-results="'+field+'"]'),hidden=overlay.querySelector('[data-mm-value="'+field+'"]'),serial=0,timer;
function lookup(){var mine=++serial;hidden.value='';result.textContent='در حال دریافت فهرست...';
mmTransitionLookup(issueKey,field,inp.value.trim()).then(function(d){
if(!overlay.isConnected||mine!==serial)return;result.textContent='';var rows=d.items||[];
if(!rows.length){result.textContent='موردی پیدا نشد.';return;}
rows.slice(0,40).forEach(function(item){var btn=document.createElement('button');btn.type='button';btn.textContent=item.label||item.key;btn.onclick=function(){hidden.value=item.key;inp.value=item.label||item.key;result.textContent='';};result.appendChild(btn);});
}).catch(function(e){if(mine===serial)result.textContent='جستوجو ناموفق بود: '+vError(e);});
}
inp.addEventListener('input',function(){hidden.value='';clearTimeout(timer);timer=setTimeout(lookup,280);});inp.addEventListener('focus',lookup);
});
overlay.querySelector('.mm-t-ok').onclick=function(){
var err=overlay.querySelector('.mm-t-screen-error');err.textContent='';
try{var values=mmTGather(overlay,tr),comment=overlay.querySelector('#mmTransitionComment').value.trim();if(fields.comment&&fields.comment.required&&!comment)throw Error('تکمیل توضیحات انتقال الزامی است.');onAccept(values,comment);close();}
catch(e){err.textContent=e.message;}
};
}
/* MEDIQ V49.10: resolve request attachment links on the file-owning server. */
function mqResolveIssueAttachmentUrl(a) {
if (!a || typeof a !== 'object') return '';
var raw = String(a.url || a.downloadUrl || a.content || '').trim();
var id = String(a.id || '').trim();
if (!/^\d+$/.test(id)) {
var match = raw.match(/\/(?:secure\/attachment|rest\/api\/2\/attachment\/content)\/(\d+)(?:\/|[?#]|$)/i);
if (match) id = match[1];
}
var name = String(a.name || a.filename || 'attachment').trim();
if (/^\d+$/.test(id)) {
return 'https://support.h-soft.ir/secure/attachment/' +
encodeURIComponent(id) + '/' + encodeURIComponent(name);
}
// Never send attachment requests to the content portal by accident.
if (/^https:\/\/support\.h-soft\.ir\/(?:secure\/attachment|rest\/api\/2\/attachment\/content)\//i.test(raw))
return raw;
return '';
}
function mmOpenIssueModal(data){
var r=data.issue||{};
document.querySelectorAll('.mm-request-modal').forEach(function(x){x.remove();});
var modal=document.createElement('div');modal.className='mm-request-modal';modal.dir='rtl';
var asset=data.asset||{};
if(!asset.key){var refs=String(r.summary||'').match(/MED-[0-9]+/g)||[];var found=refs.find(function(k){return k!==r.key;});if(found){asset={key:found,label:found};}}
var choices=(data.transitions||[]).map(function(t){return '<option value="'+esc(t.id)+'">'+esc(t.name)+'</option>';}).join('');
var noTransitions=!((data.transitions||[]).length);
var docs=(data.attachments||[]).map(function(a){
var url=mqResolveIssueAttachmentUrl(a);
var name=esc(a.name||a.filename||'فایل پیوست');
return url
? '<a class="mm-doc-pill" target="_blank" rel="noopener noreferrer" href="'+esc(url)+'" title="نمایش پیوست">📎 '+name+'</a>'
: '<span class="mm-doc-pill" title="نشانی معتبر برای این پیوست دریافت نشده است">📎 '+name+' (لینک نامعتبر)</span>';
}).join('');
modal.innerHTML='<div class="mm-request-backdrop"></div><section class="mm-request-box"><header><h3>مشخصات درخواست <span dir="ltr">'+esc(r.key)+'</span></h3><button id="mmCloseModal" type="button" aria-label="بستن">×</button></header><div class="mm-request-body">'+
'<div class="mm-form-section"><h4>اطلاعات درخواست</h4><div class="mm-request-grid"><label>عنوان درخواست<input readonly id="mmEditSummary" value="'+esc(r.summary||'')+'"></label><label>مسئول<input id="mmEditAssignee" autocomplete="off" placeholder="جستوجوی نام مسئول"><input id="mmEditAssigneeId" type="hidden" value="'+esc(r.assigneeKey||'')+'"></label><label>اهمیت<select id="mmEditPriority"><option value="">بدون تغییر</option>'+((data.priorities||[]).map(function(p){return '<option value="'+esc(p.id)+'" '+(p.name===r.priority?'selected':'')+'>'+esc(p.name)+'</option>';}).join(''))+'</select></label><label>تغییر وضعیت<select id="mmNextTransition"><option value="">انتخاب تغییر وضعیت</option>'+choices+'</select></label><label class="mm-wide">شرح درخواست<textarea readonly id="mmEditDescription" rows="3">'+esc(r.description||'')+'</textarea></label></div><div class="mm-actions"><button id="mmSaveIssue" type="button" class="mq-assets-btn primary">ثبت اقدام</button></div><p id="mmSaveIssueResult" role="status"></p>'+(noTransitions?'<p class="mm-hint">در این وضعیت انتقال مجازی برای حساب فعلی برگردانده نشده است؛ مجوزها، شرطها و اعتبارسنجهای گردشکار را بررسی کنید.</p>':'')+'</div>'+
'<div class="mm-form-section mm-related-asset"><h4>دستگاه</h4><button id="mmAssetButton" type="button" class="mm-asset-button" '+(!asset.key?'disabled':'')+'>'+esc(asset.label||asset.key||'دستگاه مرتبط ثبت نشده')+'</button><div id="mmAssetTickets" hidden></div></div>'+
'<div class="mm-form-section"><h4>یادداشتها</h4><div id="mmCommentList">'+((data.comments||[]).map(function(c){return '<div class="mm-comment"><strong>'+esc(mmCleanFullName(c.author||''))+'</strong><p>'+esc(c.body||'')+'</p></div>';}).join('')||'')+'</div><label>ثبت یادداشت<textarea id="mmNewComment" rows="3" placeholder="متن پیام را وارد کنید"></textarea></label><input id="mmCommentVisibility" type="hidden" value="public"><div class="mm-comment-actions"><button id="mmSendCommentInternal" class="mq-assets-btn" type="button">ثبت یادداشت داخلی</button><button id="mmSendComment" class="mq-assets-btn primary" type="button">یادداشت برای مشتری</button></div><p id="mmCommentResult" role="status"></p></div>'+
'<div class="mm-compact-attachments"><h4>پیوستها</h4><div class="mm-documents">'+(docs||'<p class="mm-hint">پیوستی ثبت نشده است.</p>')+'</div><div class="mm-attach-controls"><label class="mm-attach-trigger"><span class="mm-file-label">انتخاب فایل</span><input id="mmIssueFile" type="file" aria-label="انتخاب فایل پیوست"></label><button id="mmUploadIssue" class="mq-assets-btn" type="button" disabled hidden>بارگذاری فایل</button></div></div></div></section>';
document.body.appendChild(modal);
var uploadInput=modal.querySelector('#mmIssueFile');
var uploadButton=modal.querySelector('#mmUploadIssue');
var uploadMessage=document.createElement('div');uploadMessage.className='mm-upload-message';uploadMessage.setAttribute('role','status');
uploadButton.insertAdjacentElement('afterend',uploadMessage);
uploadButton.hidden=false;uploadButton.disabled=true;uploadButton.textContent='افزودن پیوست';
uploadInput.addEventListener('change',function(){
uploadButton.disabled=!(uploadInput.files&&uploadInput.files.length);
uploadMessage.textContent=uploadInput.files&&uploadInput.files[0]?'فایل انتخاب شد؛ برای بارگذاری «افزودن پیوست» را بزنید.':'';
});
uploadButton.onclick=function(){
var file=uploadInput.files&&uploadInput.files[0];if(!file)return;
if(file.size>6291456){uploadMessage.textContent='حجم فایل نباید بیشتر از ۶ مگابایت باشد.';return;}
uploadButton.disabled=true;uploadMessage.textContent='در حال بارگذاری فایل...';
var reader=new FileReader();
reader.onerror=function(){uploadMessage.textContent='خواندن فایل ناموفق بود.';uploadButton.disabled=false;};
reader.onload=function(){
var content=String(reader.result||'').split(',')[1]||'';
mmWrite('issue.attachment',{key:r.key,filename:file.name,contentType:file.type||'application/octet-stream',base64:content})
.then(function(result){
if(!result||result.ok!==true)throw Error(result&&result.message||'ثبت پیوست تأیید نشد.');
uploadMessage.textContent='پیوست با موفقیت ثبت شد.';
uploadInput.value='';
return mmIssueDetail(r.key).then(function(fresh){
if(!modal.isConnected)return;
var list=modal.querySelector('.mm-documents');
if(list)list.innerHTML=(fresh.attachments||[]).map(function(a){var url=mqResolveIssueAttachmentUrl(a);var name=esc(a.name||a.filename||'پیوست');return url?'<a class="mm-doc-pill" href="'+esc(url)+'" target="_blank" rel="noopener noreferrer">📎 '+name+'</a>':'<span class="mm-doc-pill">'+name+'</span>';}).join('')||'پیوستی ثبت نشده است.';
});
}).catch(function(err){uploadMessage.textContent='بارگذاری ناموفق بود: '+(err&&err.message?String(err.message).slice(0,180):'خطای ارتباط با سرویس');})
.finally(function(){uploadButton.disabled=false;});
};
reader.readAsDataURL(file);
};
var formSections=modal.querySelectorAll('.mm-request-body > .mm-form-section');
var attachSection=modal.querySelector('.mm-compact-attachments');
var relatedSection=modal.querySelector('.mm-related-asset');
if(attachSection&&relatedSection)relatedSection.parentNode.insertBefore(attachSection,relatedSection);
var firstSection=modal.querySelector('.mm-request-body > .mm-form-section');if(attachSection&&firstSection){firstSection.querySelector('.mm-request-grid').appendChild(attachSection);}
var originalFields={summary:r.summary||'',description:r.description||'',assignee:r.assigneeKey||'',priority:(modal.querySelector('#mmEditPriority')||{}).value||''};
function hasUnsaved(){return modal.querySelector('#mmEditSummary').value!==originalFields.summary||modal.querySelector('#mmEditDescription').value!==originalFields.description||modal.querySelector('#mmEditAssigneeId').value!==originalFields.assignee||modal.querySelector('#mmEditPriority').value!==originalFields.priority||!!modal.querySelector('#mmNextTransition').value;}
function safeClose(){var ask=modal.querySelector('#mmConfirmDiscard');if(ask){ask.hidden=false;}}
modal.querySelector('#mmCloseModal').onclick=safeClose;modal.querySelector('.mm-request-backdrop').onclick=safeClose;
var acts=modal.querySelector('.mm-actions');acts.insertAdjacentHTML('beforeend','<button id="mmCancelIssue" type="button" class="mq-assets-btn">انصراف</button>');modal.querySelector('#mmCancelIssue').onclick=safeClose;
modal.querySelector('.mm-request-box').insertAdjacentHTML('beforeend','<div id="mmConfirmDiscard" class="mm-discard-overlay" hidden><div class="mm-discard-card"><strong>تغییرات ذخیرهنشده</strong><p>تغییرات این فرم ذخیره نشدهاند. آیا از بستن فرم بدون ذخیره تغییرات اطمینان دارید؟</p><div><button type="button" id="mmDiscardYes" class="mq-assets-btn">بستن بدون ذخیره</button><button type="button" id="mmDiscardNo" class="mq-assets-btn primary">ادامه ویرایش</button></div></div></div>');
modal.querySelector('#mmDiscardYes').onclick=function(){modal.remove();};modal.querySelector('#mmDiscardNo').onclick=function(){modal.querySelector('#mmConfirmDiscard').hidden=true;};
// Transition is selected in the existing action form; screen fields appear in a separate modal.
var transitionSelect=modal.querySelector('#mmNextTransition');
var cards=document.createElement('div');cards.className='mm-transition-tiles';
cards.innerHTML=(data.transitions||[]).map(function(t){return '<button type="button" class="mm-transition-tile" data-transition-id="'+esc(t.id)+'">'+esc(t.name)+'</button>';}).join('');
transitionSelect.parentNode.appendChild(cards);transitionSelect.style.display='none';
var screenMeta=null,screenLoadToken=0,confirmedTransition=null;
cards.querySelectorAll('[data-transition-id]').forEach(function(tile){tile.onclick=function(){
var tid=tile.dataset.transitionId;transitionSelect.value=tid;confirmedTransition=null;
cards.querySelectorAll('[data-transition-id]').forEach(function(x){x.classList.toggle('chosen',x===tile);});
var token=++screenLoadToken;status('در حال دریافت فیلدهای مرحله...');
mmTransitionMeta(r.key).then(function(meta){
if(!modal.isConnected||token!==screenLoadToken)return;
screenMeta=meta;status('');
var host=modal.querySelector('#mqV49InlineStageFields');
if(!host)return;
mmOpenTransitionDialog(modal,meta,tid,r.key,function(values,comment){
confirmedTransition={id:String(tid),fields:values,comment:comment};
status('اطلاعات مرحله تأیید شد. برای اعمال وضعیت، «ثبت اقدام» را بزنید.');
},host);
}).catch(function(e){if(token===screenLoadToken){status('دریافت فیلدهای مرحله ناموفق بود: '+vError(e));transitionSelect.value='';tile.classList.remove('chosen');}});
};});
// MEDIQ V47.0 – presentation only; keep original identifiers and explicit save behavior.
var infoSection=modal.querySelector('.mm-request-body > .mm-form-section');
var infoGrid=infoSection.querySelector('.mm-request-grid');
var priorityLabel=modal.querySelector('#mmEditPriority').closest('label');
var priorityInput=modal.querySelector('#mmEditPriority');
priorityInput.style.display='none';
var importance=String(r.priority||'نامشخص');
var MQ_V494_ICONS=MQ_MEDIQ_PRIORITY_ASSETS;
var mqImportanceLevel=mqPriorityAsset(importance);
var mqImportanceIcons=MQ_V494_ICONS;
priorityLabel.firstChild.textContent='اهمیت : ';
priorityLabel.insertAdjacentHTML('beforeend','<span class="mq-v47-priority" aria-label="اهمیت '+esc(importance)+'" title="'+esc(importance)+'"><img class="mq-v494-icon" src="'+mqImportanceIcons[mqImportanceLevel]+'" alt="'+esc(importance)+'"><span class="mq-v494-importance-text">'+esc(importance)+'</span></span>');
var assetBox=modal.querySelector('.mm-related-asset');
if(assetBox){
assetBox.classList.add('mq-v47-device');infoGrid.appendChild(assetBox);
var imageSource=String(asset.imageUrl||asset.avatarUrl||asset.thumbnailUrl||'');
if(imageSource && (/^\/[^/]/.test(imageSource)||/^https:\/\/[^\s]+$/i.test(imageSource))){
var image=document.createElement('img');image.className='mq-v47-product-image';image.alt='تصویر دستگاه';image.loading='lazy';image.src=imageSource;assetBox.insertBefore(image,assetBox.firstChild.nextSibling);
}
}
var currentStatus=document.createElement('div');currentStatus.className='mq-v47-status';currentStatus.innerHTML='<span>وضعیت فعلی :</span><strong>'+esc(r.status||'نامشخص')+'</strong>';
infoGrid.appendChild(currentStatus);
var actionSection=document.createElement('div');actionSection.className='mm-form-section mq-v47-action';
actionSection.innerHTML='<h4>اقدام</h4><p class="mq-v47-help">مرحله بعد را انتخاب کنید؛ تغییر فقط پس از ثبت اقدام اعمال میشود.</p>';
var actionBox=document.createElement('div');actionBox.className='mq-v47-actions-container';actionSection.appendChild(actionBox);
var workflow=document.createElement('div');workflow.className='mq-v497-flow mm-workflow';
var workflowStages=[['new','ثبت و شروع'],['work','در حال انجام'],['repair','تعمیر و پیگیری'],['handover','آماده تحویل / تحویل'],['close','بستن و محاسبه']];
var currentStage=mmMaintenanceStage(r.status||'');
var currentStageIndex=workflowStages.findIndex(function(step){return step[0]===currentStage;});
workflow.innerHTML='<h4>روند فعالیت</h4><div class="mm-stage-grid">'+workflowStages.map(function(step,index){
var state=index===currentStageIndex?' current':index<currentStageIndex?' done':'';
return '<span class="mm-stage'+state+'"'+(index===currentStageIndex?' aria-current="step"':'')+'>'+step[1]+'</span>';
}).join('')+'</div>';
actionBox.appendChild(workflow);
var transitionLabel=transitionSelect.closest('label');
var actionRow=document.createElement('div');actionRow.className='mq-v494-action-row';actionBox.appendChild(actionRow);
if(transitionLabel){transitionLabel.classList.add('mq-v49-stage-label');transitionLabel.firstChild.textContent='تغییر وضعیت';actionRow.appendChild(transitionLabel);}
var inlineFields=document.createElement('div');inlineFields.id='mqV49InlineStageFields';inlineFields.className='mq-v49-inline-stage-host';actionBox.appendChild(inlineFields);
var assigneeLabel=modal.querySelector('#mmEditAssignee').closest('label');if(assigneeLabel)actionRow.appendChild(assigneeLabel);
var selfAssign=document.createElement('button');selfAssign.type='button';selfAssign.className='mq-v47-self';selfAssign.textContent='ارجاع به خودم';
selfAssign.onclick=function(){
var btn=this;btn.disabled=true;
mmApi('issue.me').then(function(me){
if(!me||me.ok===false||!me.name)throw Error('حساب کاربر فعلی شناسایی نشد.');
assigneeId.value=me.name;
assignee.value=me.displayName||me.name;
var menu=assignee.parentNode.querySelector('.mm-user-menu');if(menu)menu.innerHTML='';
status('مسئول انتخاب شد. برای اعمال ارجاع، دکمه «ثبت اقدام» را بزنید.');
}).catch(function(e){status('ارجاع به خودم: '+vError(e));}).finally(function(){btn.disabled=false;});
};
if(assigneeLabel)assigneeLabel.appendChild(selfAssign);
var actionButtons=infoSection.querySelector('.mm-actions');if(actionButtons)actionSection.appendChild(actionButtons);
var actionResult=infoSection.querySelector('#mmSaveIssueResult');if(actionResult)actionSection.appendChild(actionResult);
infoSection.insertAdjacentElement('afterend',actionSection);
var noteSection=modal.querySelector('#mmCommentList')?.closest('.mm-form-section');
if(noteSection){noteSection.classList.add('mq-v47-notes');var noteButtons=noteSection.querySelector('.mm-comment-actions');if(noteButtons)noteButtons.insertAdjacentHTML('afterend','<h5>سوابق یادداشت</h5>');}
modal.querySelector('#mmEditAssignee').closest('label').firstChild.textContent='ارجاع به';
var assignee=modal.querySelector('#mmEditAssignee'),assigneeId=modal.querySelector('#mmEditAssigneeId');mmIssueUserPicker(assignee,assigneeId);assignee.value=mmCleanFullName(r.assignee||'');
function status(t){modal.querySelector('#mmSaveIssueResult').textContent=t;}
modal.querySelector('#mmSaveIssue').onclick=function(){
var summary=modal.querySelector('#mmEditSummary').value.trim();
var description=modal.querySelector('#mmEditDescription').value;
var transitionId=modal.querySelector('#mmNextTransition').value;
var transitionFields={};if(transitionId){if(!confirmedTransition||confirmedTransition.id!==String(transitionId)){status('ابتدا مرحله موردنظر را انتخاب و فرم آن را تأیید کنید.');return;}transitionFields=confirmedTransition.fields;}
var b=this;
b.disabled=true;
status('در حال ذخیره تغییرات...');
var changed=summary!==(r.summary||'')||description!==(r.description||'')||assigneeId.value!==(r.assigneeKey||'');
(changed?mmWrite('issue.update',{
key:r.key,summary:summary,description:description,
assignee:assigneeId.value,
priorityId:originalFields.priority
}):Promise.resolve({ok:true})).then(function(updateResponse){
if(updateResponse && updateResponse.ok === false){
throw new Error(updateResponse.message || 'ثبت تغییرات تأیید نشد.');
}
if(!transitionId)return false;
status('تغییرات ذخیره شد؛ در حال تغییر وضعیت...');
return mmTransitionExecute(r.key,transitionId,transitionFields,confirmedTransition.comment).then(function(transitionResponse){
if(transitionResponse && transitionResponse.ok === false){
throw new Error(transitionResponse.message || 'تغییر وضعیت تأیید نشد.');
}
return true;
});
}).then(function(changedStatus){
// Close the existing dialog ONLY after Jira has accepted all requested writes.
if(modal.isConnected)modal.remove();
// Refresh the selected activity panel without reopening the action modal.
var panel=document.getElementById('mmPermanentIssue');
if(panel && panel.isConnected && !panel.hidden){
mmIssueDetail(r.key).then(function(d){
if(panel.isConnected && !panel.hidden)mmRenderPermanentIssue(panel,d);
}).catch(function(e){
console.warn('MediQ: activity detail refresh failed after successful save',e);
});
}
// Refresh KPI counts and the activity list; a refresh error must not undo success.
mmApi('overview').then(function(x){
MM.activities=x.activities||[];
if(MM.tab==='overview'){
// Preserve the existing dashboard renderer and current filters.
mmPaintActivities();
}
}).catch(function(e){
console.warn('MediQ: dashboard refresh failed after successful save',e);
});
}).catch(function(e){
if(modal.isConnected)status('ذخیره یا انتقال وضعیت کامل نشد: '+vError(e));
}).finally(function(){b.disabled=false;});
};
modal.querySelector('#mmSendComment').onclick=function(){var message=modal.querySelector('#mmNewComment').value.trim();if(!message){modal.querySelector('#mmCommentResult').textContent='متن پیام را وارد کنید.';return;}var b=this;b.disabled=true;mmWrite('issue.comment',{key:r.key,body:message,visibility:modal.querySelector('#mmCommentVisibility').value}).then(function(){modal.querySelector('#mmCommentResult').textContent='پیام ثبت شد.';modal.querySelector('#mmNewComment').value='';}).catch(function(e){modal.querySelector('#mmCommentResult').textContent=vError(e);}).finally(function(){b.disabled=false;});};
modal.querySelector('#mmSendCommentInternal').onclick=function(){modal.querySelector('#mmCommentVisibility').value='internal';modal.querySelector('#mmSendComment').click();};
modal.querySelector('#mmSendComment').addEventListener('click',function(e){if(e.isTrusted)modal.querySelector('#mmCommentVisibility').value='public';},true);
modal.querySelector('#mmAssetButton').onclick=function(){var host=modal.querySelector('#mmAssetTickets');if(!asset.key)return;host.hidden=false;host.textContent='در حال بررسی درخواستهای مرتبط...';mmApi('asset.tickets',{type:asset.key}).then(function(x){var items=x.items||[];host.innerHTML='<h4>درخواستهای مرتبط با '+esc(asset.label||asset.key)+'</h4>'+(items.length?items.map(function(it){return '<button type="button" class="mm-related-ticket" data-related="'+esc(it.key)+'">'+esc(it.key)+' — '+esc(it.summary)+'</button>';}).join(''):'درخواستی با شناسه این دارایی پیدا نشد.');host.querySelectorAll('[data-related]').forEach(function(b){b.onclick=function(){mmIssueDetail(b.dataset.related).then(mmOpenIssueModal);};});}).catch(function(e){host.textContent=vError(e);});};
}
function mmReceiptCalendar(){
var input=document.getElementById('mmReceiptDate'),host=document.getElementById('mmReceiptDate_cal');if(!input||!host)return;
if(!host.hidden){host.hidden=true;return;}
var parts=String(input.value).replace(/[۰-۹]/g,function(c){return '۰۱۲۳۴۵۶۷۸۹'.indexOf(c);}).match(/(\d{4})\/(\d{1,2})\/(\d{1,2})/);
var now=new Intl.DateTimeFormat('en-US-u-ca-persian',{year:'numeric',month:'numeric',day:'numeric',timeZone:'Asia/Tehran'}).formatToParts(new Date()),today={};now.forEach(function(v){if(['year','month'].includes(v.type))today[v.type]=+v.value;});
var y=parts?+parts[1]:today.year,m=parts?+parts[2]:today.month;
var months=['فروردین','اردیبهشت','خرداد','تیر','مرداد','شهریور','مهر','آبان','آذر','دی','بهمن','اسفند'];
function render(){var len=m<7?31:m<12?30:29;if(m===12){try{mmIsoDate(y+'/12/30');len=30;}catch(e){}}
var first=new Date(mmIsoDate(y+'/'+m+'/1')+'T12:00:00Z').getUTCDay(),offset=(first+1)%7;
host.innerHTML='<div class="mm-cal-head"><button type="button" data-step="-1">قبل</button><strong>'+months[m-1]+' '+y+'</strong><button type="button" data-step="1">بعد</button></div><div class="mm-cal-days">'+['ش','ی','د','س','چ','پ','ج'].map(function(a){return '<b>'+a+'</b>';}).join('')+'<i></i>'.repeat(offset)+Array.from({length:len},function(_,i){return '<button type="button" data-day="'+(i+1)+'">'+(i+1).toLocaleString('fa-IR')+'</button>';}).join('')+'</div>';
host.querySelectorAll('[data-step]').forEach(function(b){b.onclick=function(){m+=+b.dataset.step;if(m===0){m=12;y--;}if(m===13){m=1;y++;}render();};});host.querySelectorAll('[data-day]').forEach(function(b){b.onclick=function(){input.value=(y+'/'+String(m).padStart(2,'0')+'/'+String(+b.dataset.day).padStart(2,'0')).replace(/\d/g,function(d){return '۰۱۲۳۴۵۶۷۸۹'[+d];});host.hidden=true;};});}
host.hidden=false;render();
}
function mmEquipTable(rows,docs){return mmTable(['شناسه','دستگاه','اسناد تعمیراتی'],rows.slice(0,500).map(function(r){var d=docs.filter(function(x){return x.equipment===r.key;});return [esc(r.key),esc(labelOf(r)),d.length?d.map(function(x){return mmLink(x.url)+' ('+esc(x.title)+')';}).join(' | '):'سندی ثبت نشده'];}));}
function mmScope(){var s=$id('mm_scope'),t=$id('mm_target');if(!s||!t)return;var load=function(){t.innerHTML='<option value="">در حال بارگذاری...</option>';mmApi('scope',{type:s.value}).then(function(x){if(!t.isConnected)return;t.innerHTML='<option value="">انتخاب کنید</option>'+x.items.map(function(o){return '<option value="'+esc(o.key)+'">'+esc(o.label)+'</option>';}).join('');}).catch(function(e){t.innerHTML='<option value="">'+esc(vError(e))+'</option>';});};s.onchange=load;load();var search=$id('mm_targetSearch');if(search){search.oninput=function(){var q=searchNorm(search.value);Array.from(t.options).forEach(function(o){o.hidden=!!q&&searchNorm(o.textContent).indexOf(q)<0;});};}t.onchange=function(){var key=t.value, text=t.options[t.selectedIndex]?t.options[t.selectedIndex].textContent:'';var table=document.querySelector('#mmContent .mq-tbl-wrap table');if(!table)return;Array.from(table.querySelectorAll('tbody tr')).forEach(function(tr){var hay=searchNorm(tr.textContent);tr.hidden=!!key&&hay.indexOf(searchNorm(key))<0&&hay.indexOf(searchNorm(text))<0;});};}
function mmBindTargetCombo(){
var input=$id('mm_targetQuery'),menu=$id('mm_targetOptions'),select=$id('mm_target');if(!input||!menu||!select)return;
function fill(){var term=searchNorm(input.value||'');var options=Array.from(select.options).filter(function(o){return o.value&&(!term||searchNorm(o.textContent).includes(term));}).slice(0,70);menu.innerHTML=options.length?options.map(function(o){return '<button type="button" data-target-key="'+esc(o.value)+'">'+esc(o.textContent)+'</button>';}).join(''):'<span class="mm-combo-empty">موردی یافت نشد</span>';menu.hidden=false;input.setAttribute('aria-expanded','true');}
input.addEventListener('focus',fill);input.addEventListener('input',function(){select.value='';fill();});
menu.addEventListener('click',function(e){var button=e.target.closest('[data-target-key]');if(!button)return;select.value=button.dataset.targetKey;input.value=select.options[select.selectedIndex].textContent;menu.hidden=true;input.setAttribute('aria-expanded','false');select.dispatchEvent(new Event('change',{bubbles:true}));});
document.addEventListener('click',function(e){if(!input.isConnected)return;if(!e.target.closest('.mm-combo')){menu.hidden=true;input.setAttribute('aria-expanded','false');}},true);
var scope=$id('mm_scope');if(scope)scope.addEventListener('change',function(){input.value='';menu.hidden=true;});
}
function mmAttachSearchSelect(id,filterCallback){
var select=$id(id);if(!select||select.dataset.comboReady)return;select.dataset.comboReady='1';
var parent=select.parentNode;var wrapper=document.createElement('div');wrapper.className='mm-combo mm-combo-device';parent.insertBefore(wrapper,select);
var inp=document.createElement('input');inp.type='search';inp.autocomplete='off';inp.placeholder='برای جستوجو نام یا شناسه را تایپ کنید';inp.setAttribute('aria-label','جستوجو و انتخاب');
var menu=document.createElement('div');menu.className='mm-combo-menu';menu.hidden=true;wrapper.appendChild(inp);wrapper.appendChild(menu);wrapper.appendChild(select);select.style.display='none';
var opts=Array.from(select.options).filter(function(x){return x.value;}).map(function(x){return {value:x.value,text:x.textContent};});
function paint(){var q=searchNorm(inp.value);var list=opts.filter(function(x){return !q||searchNorm(x.text).indexOf(q)>=0;}).slice(0,80);menu.innerHTML=list.length?list.map(function(x){return '<button type="button" data-combo-val="'+esc(x.value)+'">'+esc(x.text)+'</button>';}).join(''):'<span class="mm-combo-empty">موردی یافت نشد</span>';menu.hidden=false;}
inp.addEventListener('focus',paint);inp.addEventListener('input',function(){select.value='';paint();if(filterCallback)filterCallback('','');});
menu.addEventListener('click',function(e){var option=e.target.closest('[data-combo-val]');if(!option)return;select.value=option.getAttribute('data-combo-val');var entry=opts.find(function(x){return x.value===select.value;});inp.value=entry?entry.text:'';menu.hidden=true;select.dispatchEvent(new Event('change',{bubbles:true}));if(filterCallback)filterCallback(select.value,inp.value);});
document.addEventListener('click',function(e){if(inp.isConnected&&!wrapper.contains(e.target))menu.hidden=true;},true);
}
function mmBind(){
document.querySelectorAll('#mmContent [data-mm-kpi]').forEach(function(btn){btn.onclick=function(){MM.cardFilter=btn.getAttribute('data-mm-kpi');document.querySelectorAll('#mmContent [data-mm-kpi]').forEach(function(x){var selected=x===btn;x.classList.toggle('active',selected);x.setAttribute('aria-pressed',selected?'true':'false');});var t=$id('mmType'),st=$id('mmStatus');if(t)t.value='all';if(st)st.value='all';mmPaintActivities();};});
if(MM.tab==='plans'){var form=document.querySelector('#mmContent .mm-plan-form'),table=document.querySelector('#mmContent .mq-tbl-wrap');if(form&&table&&table.parentElement){var formHeading=$id('mmPlanFormHeading'),listHeading=$id('mmPlanListHeading');if(formHeading)table.parentElement.insertBefore(formHeading,table);table.parentElement.insertBefore(form,table);if(listHeading)table.parentElement.insertBefore(listHeading,table);}}
document.querySelectorAll('[data-mm-side]').forEach(function(btn){btn.onclick=function(){mmLoad(btn.getAttribute('data-mm-side'));};});
if(MM.tab==='em')mmAttachSearchSelect('mm_device');
if(MM.tab==='equipment')mmAttachSearchSelect('mm_equipment',function(key,label){var search=$id('mmEquipSearch');if(search){search.value=key||label||'';search.dispatchEvent(new Event('input',{bubbles:true}));}});
if(MM.tab==='evaluations'){mmAttachSearchSelect('mm_issue');mmAttachSearchSelect('mm_supplier');}
if(MM.tab==='contracts')mmAttachSearchSelect('mm_supplier');
document.querySelectorAll('#mmContent .mm-date-line input').forEach(function(input){input.onclick=function(e){e.stopPropagation();mmCalendar(input.id);};input.onkeydown=function(e){if(e.key==='Enter'||e.key===' '){e.preventDefault();mmCalendar(input.id);}};});var b=$id('mmSubmit');if(b){var map={plans:['pm.create',['kind','scope','target','start','end','period','active','contract']],em:['em.create',['device','priority','downtime','description']],suppliers:['supplier.create',['name','phone','address','contact','contactPhone','category']],evaluations:['evaluation.save',['issue','supplier','score','note']],contracts:['contract.save',['title','contractType','number','supplier','start','end','coverage']],equipment:['document.save',['equipment','title','docType','issue']]};var f=map[MM.tab];if(f)b.onclick=function(){if(f[0]==='pm.create'&&!mmDateNotPast())return;mmSave(f[0],f[1]);};}
document.querySelectorAll('[data-mm-plan-edit]').forEach(function(btn){btn.onclick=function(){var plan=(MM.plans||[]).find(function(p){return p.key===btn.dataset.mmPlanEdit;});if(!plan)return;var form=$id('mmPlanFormHeading');if(form)form.scrollIntoView({block:'start',behavior:'smooth'});var kind=$id('mm_kind'),scope=$id('mm_scope'),period=$id('mm_period'),status=$id('mm_active'),start=$id('mm_start'),end=$id('mm_end'),identity=$id('mmEditIdentity');document.querySelectorAll('#mmContent .mq-tbl tbody tr').forEach(function(tr){tr.classList.toggle('mm-plan-row-selected',!!tr.querySelector('button[data-mm-plan-edit=\"'+plan.key+'\"]'));});if(form)form.textContent='ویرایش برنامه '+plan.key;if(kind)kind.value=plan.kind||'PM';if(period){period.value='';var requested=String(plan.period==null?'':plan.period);if(Array.from(period.options).some(function(o){return o.value===requested;}))period.value=requested;else period.selectedIndex=0;}if(status)status.value=mmPlanState(plan)==='غیرفعال'?'inactive':'active';if(start)start.value=mmFaDate(plan.start||plan.next||'').replace(/\u200e/g,'');if(end)end.value=plan.end?mmFaDate(plan.end).replace(/\u200e/g,''):'';var contractSelect=$id('mm_contract');if(contractSelect){contractSelect.value=plan.contract||'';}if(scope)scope.value=plan.scope||scope.value;var submit=$id('mmSubmit');if(submit){submit.textContent='ذخیره ویرایش';submit.onclick=function(){var obj={key:plan.key,kind:mmVal('mm_kind'),scope:mmVal('mm_scope'),target:mmVal('mm_target'),period:mmVal('mm_period'),active:mmVal('mm_active'),end:mmVal('mm_end'),contract:mmVal('mm_contract')};try{obj.start=mmIsoDate(mmVal('mm_start'));if(obj.end)obj.end=mmIsoDate(obj.end);if(obj.end&&obj.end<obj.start)throw new Error('تاریخ پایان نمیتواند قبل از تاریخ شروع باشد.');if(!obj.period&&obj.kind==='PM')throw new Error('دوره این برنامه نامشخص است؛ دوره جدید را انتخاب کنید.');}catch(e){$id('mmNotice').textContent=e.message;return;}submit.disabled=true;mmWrite('pm.update',obj).then(function(){mmLoad('plans');}).catch(function(e){$id('mmNotice').textContent='ویرایش ثبت نشد: '+vError(e);}).finally(function(){submit.disabled=false;});};}};});
document.querySelectorAll('[data-mm-plan-toggle]').forEach(function(btn){btn.onclick=function(){var key=btn.getAttribute('data-mm-plan-toggle'),next=btn.getAttribute('data-mm-plan-state');btn.disabled=true;mmWrite('pm.toggle',{key:key,state:next}).then(function(){mmLoad('plans');}).catch(function(err){btn.disabled=false;window.alert('تغییر وضعیت ثبت نشد: '+vError(err));});};});
['mmSearch','mmType','mmStatus','mmOrder','mmPriority'].forEach(function(id){var x=$id(id);if(x){x.oninput=mmPaintActivities;x.onchange=mmPaintActivities;}});var nameInput=$id('mm_name');if(nameInput)nameInput.oninput=function(){var search=$id('mmSupplierSearch');if(search){search.value=nameInput.value;search.dispatchEvent(new Event('input',{bubbles:true}));}};var sq=$id('mmSupplierSearch'),sg=$id('mmSupplierGroupFilter');var filterSuppliers=function(){var dest=$id('mmSupplierRows'),q=(sq?sq.value:'').toLowerCase(),group=sg?sg.value:'';if(dest)dest.innerHTML=mmTable(['نام','گروه تأمینکننده','تلفن','رابط','تلفن رابط'],MM.suppliers.filter(function(s){return (!group||String(s.category||'')===group)&&(s.name+' '+s.phone+' '+s.contact+' '+s.category).toLowerCase().includes(q);}).map(function(s){return [esc(s.name),esc(s.category),esc(s.phone),esc(s.contact),esc(s.contactPhone)];}));};if(sq)sq.oninput=filterSuppliers;if(sg)sg.onchange=filterSuppliers;var formGroup=$id('mm_category');if(formGroup)formGroup.addEventListener('change',function(){if(sg){sg.value=formGroup.value;filterSuppliers();}});var e=$id('mmEquipSearch');if(e)e.oninput=function(){$id('mmEquipRows').innerHTML=mmEquipTable(MM.equipment.filter(function(r){return (r.key+' '+labelOf(r)).toLowerCase().indexOf(e.value.toLowerCase())>=0;}),MM.documents||[]);};}
document.addEventListener('click',function(e){if(!e.target.closest('#mmContent .mm-date-line,#mmContent .mm-cal'))document.querySelectorAll('#mmContent .mm-cal').forEach(function(c){c.hidden=true;});},true);
/* V31: internal navigation history. Capture real entry routes, not hard-coded previous screens. */
var MQ_V31_HISTORY=[];
var MQ_V31_CURRENT=null;
var MQ_V31_REPLAY=false;
var MQ_V31_NESTING=0;
function mqV31Route(key,args){return {key:key,args:Array.prototype.slice.call(args||[])};}
function mqV31Equal(a,b){return !!a&&!!b&&a.key===b.key&&JSON.stringify(a.args)===JSON.stringify(b.args);}
function mqV31Track(key,fn){
return function(){
var next=mqV31Route(key,arguments),top=MQ_V31_NESTING===0;
if(top&&!MQ_V31_REPLAY&&!mqV31Equal(MQ_V31_CURRENT,next)){
if(MQ_V31_CURRENT)MQ_V31_HISTORY.push(MQ_V31_CURRENT);
MQ_V31_CURRENT=next;
}
MQ_V31_NESTING++;
try { return fn.apply(this,arguments); }
finally { MQ_V31_NESTING--;mqV31BackVisibility(); }
};
}
function mqV31BackVisibility(){
if(backButton)backButton.style.display=MQ_V31_HISTORY.length?'inline-block':'none';
}
var MQ_V31_RENDERERS={
equipment:renderEquipment,
logistics:renderLogistics,
property:renderAssetSections,
simple:renderSimplePage,
generic:mqTreeSimpleEquipmentPage,
analysis:vAnalysis,
suppliers:vSupplierScreen,
cycle:renderOtherCycle,
maintenance:renderMediqMaintenance
};
renderEquipment=mqV31Track('equipment',MQ_V31_RENDERERS.equipment);
renderLogistics=mqV31Track('logistics',MQ_V31_RENDERERS.logistics);
renderAssetSections=mqV31Track('property',MQ_V31_RENDERERS.property);
renderSimplePage=mqV31Track('simple',MQ_V31_RENDERERS.simple);
mqTreeSimpleEquipmentPage=mqV31Track('generic',MQ_V31_RENDERERS.generic);
vAnalysis=mqV31Track('analysis',MQ_V31_RENDERERS.analysis);
vSupplierScreen=mqV31Track('suppliers',MQ_V31_RENDERERS.suppliers);
renderOtherCycle=mqV31Track('cycle',MQ_V31_RENDERERS.cycle);
renderMediqMaintenance=mqV31Track('maintenance',MQ_V31_RENDERERS.maintenance);
backButton.onclick=function(){
if(!MQ_V31_HISTORY.length)return;
var prev=MQ_V31_HISTORY.pop(),renderer=MQ_V31_RENDERERS[prev.key];
if(!renderer)return;
MQ_V31_REPLAY=true;
try { MQ_V31_CURRENT=prev;renderer.apply(null,prev.args); }
finally { MQ_V31_REPLAY=false;mqV31BackVisibility(); }
};
/* ============================================================
INITIAL
============================================================ */
function mqBoot(){
try {
bindTree();
document.querySelectorAll('#mqTree [data-v32-nav]').forEach(function(el){el.onclick=function(){
var k=this.getAttribute('data-v32-nav');
if(k==='suppliers')vSupplierScreen();
else if(k==='fixed'||k==='assets')renderAssetSections('newAsset');
else if(k==='handover'){mqV48Handover();}
else if(k==='consumable')renderSimplePage('کالاهای مصرفی');
mqTreeActivate(k==='assets'||k==='handover'?'property':k);
};});
renderEquipment();
} catch (initErr) {
mqShowFatal(initErr && initErr.message ? initErr.message : String(initErr));
if (window.console && console.error) console.error("MEDIQ INIT ERROR", initErr);
}
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", mqBoot, { once: true });
} else {
mqBoot();
}
})();
</script>
</div>
<style>
/* MediQ V40: stable dashboard and repaired fixed activity inspector */
#mediq-dashboard #mmContent .v-stats{display:grid!important;grid-template-columns:repeat(5,minmax(0,1fr))!important;gap:14px!important;direction:rtl!important;grid-auto-flow:row!important;width:100%!important;clear:both!important}
#mediq-dashboard #mmContent .v-stats>.mm-kpi-card{width:100%!important;min-width:0!important;float:none!important;direction:rtl!important;text-align:right!important;display:flex!important;flex-direction:column!important;align-items:stretch!important;justify-content:center!important;min-height:126px!important;gap:9px!important;padding:19px!important}
#mediq-dashboard #mmContent .v-stats>.mm-kpi-card:nth-child(1){border-top:4px solid #218ccb!important}#mediq-dashboard #mmContent .v-stats>.mm-kpi-card:nth-child(2){border-top:4px solid #21a77a!important}#mediq-dashboard #mmContent .v-stats>.mm-kpi-card:nth-child(3){border-top:4px solid #ec9e3b!important}#mediq-dashboard #mmContent .v-stats>.mm-kpi-card:nth-child(4){border-top:4px solid #5da3cd!important}#mediq-dashboard #mmContent .v-stats>.mm-kpi-card:nth-child(5){border-top:4px solid #d66b6b!important}
#mediq-dashboard #mmContent .v-stats>.mm-kpi-card::before{content:'▦';position:absolute;left:16px;top:14px;font-size:24px;color:#258dc4;background:#e8f5fc;width:40px;height:40px;display:grid;place-items:center;border-radius:11px}#mediq-dashboard #mmContent .v-stats>.mm-kpi-card:nth-child(2)::before{content:'✓';color:#158e6d;background:#e7f8f1}#mediq-dashboard #mmContent .v-stats>.mm-kpi-card:nth-child(3)::before{content:'⚒';color:#bc7c25;background:#fff6e9}#mediq-dashboard #mmContent .v-stats>.mm-kpi-card:nth-child(4)::before{content:'✔'}#mediq-dashboard #mmContent .v-stats>.mm-kpi-card:nth-child(5)::before{content:'!';color:#b85252;background:#fff0f0}
#mediq-dashboard #mmContent.mm-with-fixed-side{display:grid!important;grid-template-columns:minmax(350px,36%) minmax(0,1fr)!important;grid-template-rows:auto auto auto minmax(0,1fr)!important;column-gap:16px!important;row-gap:10px!important;direction:ltr!important;align-items:start!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>.v-stats{grid-column:1/-1!important;grid-row:1!important;direction:rtl!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmActivitiesHeading{grid-column:1/-1!important;grid-row:2!important;direction:rtl!important;margin:4px 0!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmPermanentIssue{grid-column:1!important;grid-row:3 / span 2!important;position:sticky!important;top:14px!important;float:none!important;width:100%!important;max-width:100%!important;min-width:0!important;height:auto!important;max-height:calc(100vh - 52px)!important;overflow-x:hidden!important;overflow-y:auto!important;margin:0!important;padding:13px!important;direction:rtl!important;display:block!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>.mm-actionbar{grid-column:2!important;grid-row:3!important;margin:0!important;width:100%!important;min-width:0!important;direction:rtl!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmRows{grid-column:2!important;grid-row:4!important;margin:0!important;width:100%!important;min-width:0!important;direction:rtl!important;overflow:auto!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-card:first-of-type .mm-accordion-body{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;column-gap:15px!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-line{display:flex!important;flex-direction:row!important;flex-wrap:wrap!important;gap:4px 10px!important;white-space:normal!important;word-break:normal!important;overflow-wrap:anywhere!important;width:100%!important;min-width:0!important;line-height:1.8!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-line span{flex:0 1 auto!important;min-width:48px!important;max-width:100%!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-line strong{flex:1 1 95px!important;text-align:right!important;min-width:0!important;word-break:break-word!important;overflow-wrap:anywhere!important}
#mediq-dashboard #mmPermanentIssue .mm-accordion-toggle{width:100%!important;min-width:0!important;direction:rtl!important}
#mediq-dashboard #mmPermanentIssue .mm-accordion-body{min-width:0!important;max-width:100%!important}
#mediq-dashboard .mm-panel-empty{min-height:210px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;color:#527c98;background:#f4faff;border:1px dashed #c2dfef;border-radius:13px;padding:20px;font-size:13px}.mm-panel-empty-icon{font-size:28px;color:#268bbd}
#mediq-dashboard #mmContent .mm-permanent-panel[hidden]{display:block!important}
.mm-discard-overlay{position:absolute!important;inset:0!important;z-index:999!important;display:grid!important;place-items:center!important;background:rgba(21,53,78,.48)!important;backdrop-filter:blur(2px)}.mm-discard-overlay[hidden]{display:none!important}.mm-discard-card{width:min(90%,470px)!important;max-width:470px!important;box-sizing:border-box!important;padding:28px!important;border:1px solid #cbe3f2!important;border-radius:18px!important;background:#fff!important;box-shadow:0 22px 70px #193e5a40!important}.mm-discard-card strong{display:block;color:#11628e!important;font-size:18px!important;margin-bottom:11px}.mm-discard-card p{font-size:14px;line-height:2;color:#456c85}.mm-discard-card>div{gap:12px!important;margin-top:17px}
.mm-comment-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px}.mm-comment-actions button{background:#15976d!important;border-color:#15976d!important;color:white!important;border-radius:9px!important;padding:10px 17px!important;font-weight:800!important}
.mm-compact-attachments{padding:13px!important}.mm-compact-attachments .mm-documents{max-height:90px;overflow:auto}.mm-attach-trigger{display:inline-flex;align-items:center;gap:12px;max-width:100%;background:#f2fafc;border:1px solid #c9e3ee;border-radius:9px;padding:7px 12px}.mm-attach-trigger input{max-width:230px!important}
#mediq-dashboard #mmTreeChildren [data-mm-tree='contracts']{display:none!important}
@media(max-width:1000px){#mediq-dashboard #mmContent .v-stats{grid-template-columns:repeat(2,minmax(0,1fr))!important}#mediq-dashboard #mmContent.mm-with-fixed-side{grid-template-columns:minmax(0,1fr)!important}#mediq-dashboard #mmContent.mm-with-fixed-side>#mmPermanentIssue{grid-column:1!important;grid-row:3!important;position:relative!important;max-height:440px!important}#mediq-dashboard #mmContent.mm-with-fixed-side>.mm-actionbar{grid-column:1!important;grid-row:4!important}#mediq-dashboard #mmContent.mm-with-fixed-side>#mmRows{grid-column:1!important;grid-row:5!important}}
@media(max-width:600px){#mediq-dashboard #mmContent .v-stats{grid-template-columns:1fr!important}}
/* MediQ V41 panel and print presentation refinements */
#mediq-dashboard #mmContent.mm-with-fixed-side{grid-template-rows:auto auto auto minmax(0,1fr)!important}
#mediq-dashboard #mmPermanentIssue .mm-always-open .mm-accordion-toggle{background:transparent!important;border:0!important;pointer-events:none!important;color:#11608c!important;font-size:15px!important;font-weight:900!important;padding:12px 5px!important;text-align:right!important}
#mediq-dashboard #mmPermanentIssue .mm-always-open .mm-accordion-chevron{display:none!important}
#mediq-dashboard #mmPermanentIssue .mm-always-open .mm-accordion-body{display:block!important;visibility:visible!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-card:first-of-type .mm-accordion-body{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:8px 12px!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-line{display:flex!important;flex-direction:column!important;gap:3px!important;padding:10px!important;border:1px solid #e1edf4!important;border-radius:9px!important;align-items:flex-start!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-line span,#mediq-dashboard #mmPermanentIssue .mm-detail-line strong{flex:none!important;width:100%!important;text-align:right!important;overflow-wrap:anywhere!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-line strong{font-size:13px!important;font-weight:800!important}
#mediq-dashboard #mmPermanentIssue .mm-handover-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:12px!important;direction:rtl!important}
#mediq-dashboard #mmPermanentIssue .mm-handover-grid label{min-width:0!important;text-align:right!important}
#mediq-dashboard #mmPermanentIssue .mm-handover-grid input{width:100%!important;min-width:0!important;box-sizing:border-box!important}
#mediq-dashboard #mmPermanentIssue #mmPrintReceipt{background:#298dc3!important;color:#fff!important;border-radius:9px!important;margin-top:14px!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-accordion-body{display:block!important}
.mm-request-modal .mm-request-body,.mm-request-modal .mm-request-body label,.mm-request-modal .mm-form-section{direction:rtl!important;text-align:right!important}
.mm-request-modal #mmSaveIssue{background:#139c71!important;border-color:#139c71!important;color:white!important}
.mm-request-modal #mmCancelIssue{background:#d9515a!important;border-color:#d9515a!important;color:white!important}
.mm-request-modal .mm-comment-actions button{background:#16946d!important;border-color:#16946d!important;color:white!important}
.mm-request-modal .mm-comment-actions{justify-content:flex-start!important}
.mm-request-modal .mm-compact-attachments{background:#f3fbfe!important;border:1px solid #c9e2f1!important}
@media(max-width:690px){#mediq-dashboard #mmPermanentIssue .mm-handover-grid{grid-template-columns:1fr!important}}
</style>
<style>
/* MediQ V42 — horizontal workflow and clear header/overview */
#mediq-dashboard #mmPermanentIssue>header{background:#eaf6fd!important;border-bottom:1px solid #b9dbed!important;border-radius:12px 12px 0 0!important;min-height:46px!important;padding:10px 12px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;direction:rtl!important}
#mediq-dashboard #mmPermanentIssue>header strong{font-size:14px!important;font-weight:900!important;color:#075b8f!important}
#mediq-dashboard #mmPermanentIssue>h3{margin:10px 2px 12px!important;padding:0 3px!important;font-size:14px!important;line-height:2!important;color:#154c70!important;font-weight:850!important;text-align:right!important;direction:rtl!important;overflow-wrap:anywhere!important}
#mediq-dashboard #mmPermanentIssue>.mm-detail-card:first-of-type{display:block!important}
#mediq-dashboard #mmPermanentIssue>.mm-detail-card:first-of-type .mm-accordion-toggle{font-size:15px!important}
#mediq-dashboard #mmPermanentIssue>.mm-detail-card:first-of-type .mm-accordion-body{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:9px!important;padding:5px 9px 12px!important}
#mediq-dashboard #mmPermanentIssue>.mm-detail-card:first-of-type .mm-detail-line{display:flex!important;flex-direction:column!important;min-height:74px!important;margin:0!important;justify-content:center!important;align-items:stretch!important;background:#fff!important;border:1px solid #cce3f0!important;border-radius:10px!important;padding:10px 12px!important;box-sizing:border-box!important}
#mediq-dashboard #mmPermanentIssue>.mm-detail-card:first-of-type .mm-detail-line span{color:#738ca2!important;font-size:12px!important}
#mediq-dashboard #mmPermanentIssue>.mm-detail-card:first-of-type .mm-detail-line strong{color:#095e92!important;font-weight:850!important;line-height:1.8!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-accordion-body{min-width:0!important;overflow-x:auto!important;overflow-y:hidden!important;padding:6px 8px 12px!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage-grid{display:flex!important;flex-direction:row!important;align-items:flex-start!important;justify-content:space-between!important;direction:rtl!important;gap:0!important;margin:8px 0!important;min-width:485px!important;width:100%!important;box-sizing:border-box!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage{display:flex!important;flex:1 1 0!important;flex-direction:column!important;align-items:center!important;justify-content:flex-start!important;text-align:center!important;min-height:85px!important;gap:10px!important;padding:5px 2px!important;line-height:1.8!important;font-size:11px!important;white-space:normal!important;border:0!important;background:transparent!important;position:relative!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage::before{position:relative!important;right:auto!important;left:auto!important;top:auto!important;flex:0 0 19px!important;order:0!important;margin:0 auto!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage:not(:last-child)::after{content:''!important;position:absolute!important;right:calc(50% + 14px)!important;left:auto!important;top:15px!important;bottom:auto!important;width:calc(100% - 28px)!important;height:3px!important;background:#d4e4ed!important;z-index:0!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage.done:not(:last-child)::after{background:#17a873!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage.current::before{animation:mediqV3820Pulse 1.1s ease-in-out infinite!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-accordion-body>p{direction:rtl!important;text-align:right!important;line-height:1.9!important;margin:5px 3px!important}
@media(max-width:690px){#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage-grid{min-width:480px!important}}
@media(prefers-reduced-motion:reduce){#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage.current::before{animation:none!important}}
</style>
<style>
/* MEDIQ V43: alignment, compact forms, restored reporting & vivid horizontal workflow */
#mediq-dashboard .mm-card-home .mm-category-grid{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:16px!important}
#mediq-dashboard .mm-card-home .mm-category-card{min-height:174px!important;padding:19px!important;box-sizing:border-box!important}
#mediq-dashboard .mm-card-home .mm-category-card strong{font-size:17px!important;line-height:1.8!important}
#mediq-dashboard .mm-card-home .mm-category-card .mm-category-icon{width:75px!important;height:75px!important}
#mediq-dashboard .mm-card-home .mm-category-card .mm-category-icon svg{width:45px!important;height:45px!important}
#mediq-dashboard #mmContent.mm-with-fixed-side{direction:ltr!important;grid-template-columns:minmax(370px,39%) minmax(0,1fr)!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmPermanentIssue{grid-column:1!important;grid-row:4!important;align-self:start!important;min-width:0!important;max-width:100%!important;overflow-x:hidden!important;box-sizing:border-box!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>.mm-actionbar{grid-column:2!important;grid-row:3!important}
#mediq-dashboard #mmContent.mm-with-fixed-side>#mmRows{grid-column:2!important;grid-row:4!important}
#mediq-dashboard #mmPermanentIssue{background:#fff!important;padding:13px!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-card{min-width:0!important;overflow:hidden!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-card:first-of-type{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:9px!important;padding:12px!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-card:first-of-type .mm-accordion-body{display:contents!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-card:first-of-type .mm-accordion-toggle{grid-column:1/-1!important;display:block!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-card:first-of-type .mm-detail-line{min-width:0!important;word-break:break-word!important;white-space:normal!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow{padding:12px!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-accordion-body{display:block!important;overflow:visible!important;padding:7px 0 0!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage-grid{display:flex!important;flex-flow:row nowrap!important;direction:rtl!important;justify-content:space-between!important;min-width:0!important;width:100%!important;gap:3px!important;padding:10px 0!important;overflow:visible!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage{flex:1 1 20%!important;min-width:0!important;min-height:68px!important;padding:3px 0!important;font-size:10px!important;font-weight:750!important;white-space:normal!important;overflow-wrap:anywhere!important;line-height:1.65!important;}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage::before{content:''!important;display:block!important;width:18px!important;height:18px!important;flex:0 0 18px!important;border-radius:50%!important;box-sizing:border-box!important;}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage.done::before{content:'✓'!important;line-height:16px!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage.current::before{animation:mediqV43Active 1.25s ease-in-out infinite!important;background:#199ad0!important;border:4px solid #b6e4fa!important;box-shadow:0 0 0 4px #e8f7ff!important;opacity:1!important}
@keyframes mediqV43Active{0%,100%{box-shadow:0 0 0 3px #e8f7ff,0 0 0 5px rgba(23,157,212,.65);transform:scale(1)}50%{box-shadow:0 0 0 3px #e8f7ff,0 0 0 13px rgba(23,157,212,0);transform:scale(1.17)}}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage:not(:last-child)::after{top:12px!important;right:calc(50% + 12px)!important;width:calc(100% - 24px)!important;height:3px!important;bottom:auto!important}
#mediq-dashboard #mmPermanentIssue .mm-report-section .mm-report-inner{display:flex!important;flex-direction:column!important;gap:12px!important;padding:12px!important}
#mediq-dashboard #mmPermanentIssue .mm-report-section textarea{display:block!important;width:100%!important;min-height:95px!important;box-sizing:border-box!important;border-radius:10px!important;border:1px solid #cbdfee!important;padding:12px!important;text-align:right!important;direction:rtl!important;font:inherit!important}
#mediq-dashboard #mmPermanentIssue .mm-report-section button{align-self:flex-start!important;margin-top:8px!important;margin-bottom:3px!important;background:#328fbe!important;color:white!important}
#mediq-dashboard #mmPermanentIssue .mm-handover-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:12px!important}
#mediq-dashboard #mmPermanentIssue .mm-handover-grid label{min-width:0!important;overflow:hidden!important}
#mediq-dashboard #mmPermanentIssue .mm-handover-grid input{min-width:0!important;max-width:100%!important;box-sizing:border-box!important}
.mm-request-modal .mm-request-grid>.mm-compact-attachments{grid-column:1!important;grid-row:3!important;align-self:stretch!important;margin:0!important;padding:9px!important;min-width:0!important}
.mm-request-modal .mm-request-grid>.mm-compact-attachments h4{font-size:12px!important;margin:0 0 5px!important}
.mm-request-modal .mm-request-grid>.mm-compact-attachments .mm-documents{max-height:54px!important;overflow:auto!important;font-size:11px!important}
.mm-request-modal .mm-request-grid>.mm-compact-attachments .mm-attach-trigger{max-width:100%!important}
.mm-request-modal .mm-request-grid>.mm-wide{grid-column:2!important;grid-row:3!important;min-width:0!important}
.mm-request-modal #mmCancelIssue,.mm-request-modal #mmDiscardYes,.mm-request-modal #mmDiscardNo{background:#e8f4fc!important;color:#12699b!important;border:1px solid #afd4e8!important;border-radius:9px!important;font-weight:800!important}
.mm-request-modal .mm-discard-card button{font:inherit!important;padding:9px 16px!important;cursor:pointer!important}
@media(max-width:1150px){#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}#mediq-dashboard #mmContent.mm-with-fixed-side{grid-template-columns:minmax(320px,40%) minmax(0,1fr)!important}}
@media(max-width:850px){#mediq-dashboard #mmContent.mm-with-fixed-side{grid-template-columns:1fr!important}#mediq-dashboard #mmContent.mm-with-fixed-side>#mmPermanentIssue{grid-column:1!important;grid-row:4!important;position:relative!important;max-height:none!important}#mediq-dashboard #mmContent.mm-with-fixed-side>.mm-actionbar{grid-column:1!important;grid-row:3!important}#mediq-dashboard #mmContent.mm-with-fixed-side>#mmRows{grid-column:1!important;grid-row:5!important}.mm-request-modal .mm-request-grid>.mm-compact-attachments,.mm-request-modal .mm-request-grid>.mm-wide{grid-column:1!important;grid-row:auto!important}}
@media(max-width:550px){#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:1fr!important}#mediq-dashboard #mmPermanentIssue .mm-handover-grid{grid-template-columns:1fr!important}}
</style>
<style>
/* MediQ V44 - scoped visual fixes; existing endpoint identifiers remain unchanged */
#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:repeat(4,minmax(0,1fr))!important}
#mediq-dashboard .mm-card-home .mm-category-icon{width:88px!important;height:88px!important}
#mediq-dashboard .mm-card-home .mm-category-icon svg{width:54px!important;height:54px!important}
#mediq-dashboard #mmPermanentIssue .mm-summary-card{padding:12px!important;display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:10px!important}
#mediq-dashboard #mmPermanentIssue .mm-summary-card .mm-accordion-body{display:contents!important}
#mediq-dashboard #mmPermanentIssue .mm-summary-card .mm-detail-line{min-width:0!important;border:1px solid #d1e4ee!important;border-radius:10px!important;padding:12px!important;background:#fff!important;overflow-wrap:anywhere!important}
#mediq-dashboard #mmPermanentIssue .mm-panel-summary{font-size:15px!important;line-height:1.9!important;margin:10px 2px!important;text-align:right!important}
#mediq-dashboard #mmPermanentIssue .mm-report-section .mm-accordion-toggle{background:#e8f5fd!important;border:1px solid #b6dcef!important;color:#176890!important;border-radius:10px!important}
#mediq-dashboard #mmPermanentIssue .mm-report-section .mm-report-inner{gap:14px!important}
#mediq-dashboard #mmPermanentIssue .mm-report-section #mmPanelReportSave{margin-top:10px!important}
.mm-request-modal .mm-request-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;align-items:start!important;gap:15px!important}
.mm-request-modal .mm-request-grid > label,.mm-request-modal .mm-request-grid > div{min-width:0!important}
.mm-request-modal .mm-request-grid > .mm-wide{grid-column:2!important;grid-row:auto!important}
.mm-request-modal .mm-request-grid > .mm-compact-attachments{grid-column:1!important;grid-row:auto!important;align-self:stretch!important;background:#fff!important;border:1px solid #cbdfea!important;border-radius:10px!important;box-shadow:none!important;padding:10px!important;margin:0!important}
.mm-request-modal .mm-request-grid > .mm-compact-attachments .mm-attach-trigger{background:#fff!important;border:1px dashed #aacfe4!important;border-radius:9px!important;padding:8px!important}
.mm-request-modal .mm-request-grid > .mm-compact-attachments .mm-documents{max-height:112px!important;overflow:auto!important}
.mm-request-modal #mmCancelIssue{background:#e6525b!important;color:#fff!important;border:1px solid #c93f48!important}
.mm-request-modal #mmDiscardYes{background:#e6525b!important;color:#fff!important;border:1px solid #c93f48!important}
.mm-request-modal #mmDiscardNo{background:#e9f6ff!important;color:#12699b!important}
.mm-request-modal .mm-discard-overlay:not([hidden]){z-index:999!important;display:grid!important;position:absolute!important;inset:0!important;place-items:center!important;background:rgba(20,49,69,.55)!important}
.mm-request-modal .mm-discard-card{width:min(90%,450px)!important;padding:28px!important;box-sizing:border-box!important}
.mm-request-modal .mm-request-body,.mm-request-modal .mm-request-grid,.mm-request-modal .mm-form-section{direction:rtl!important;text-align:right!important}
@media(max-width:850px){.mm-request-modal .mm-request-grid{grid-template-columns:1fr!important}.mm-request-modal .mm-request-grid>.mm-wide,.mm-request-modal .mm-request-grid>.mm-compact-attachments{grid-column:1!important;grid-row:auto!important}#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}}
@media(max-width:550px){#mediq-dashboard .mm-card-home .mm-category-grid{grid-template-columns:1fr!important}}
/* V44.1 — uniform accordion appearance: report matches device handover */
#mediq-dashboard #mmPermanentIssue .mm-report-section,
#mediq-dashboard #mmPermanentIssue .mm-handover-card {
border:1px solid #d1e6f3!important;
border-radius:12px!important;
background:#fff!important;
overflow:hidden!important;
}
#mediq-dashboard #mmPermanentIssue .mm-report-section > .mm-accordion-toggle,
#mediq-dashboard #mmPermanentIssue .mm-handover-card > .mm-accordion-toggle {
background:#f2f8fd!important;
border:0!important;
border-radius:11px!important;
color:#125d85!important;
min-height:43px!important;
padding:12px 11px!important;
box-shadow:none!important;
text-align:right!important;
}
#mediq-dashboard #mmPermanentIssue .mm-report-section > .mm-accordion-toggle[aria-expanded="true"],
#mediq-dashboard #mmPermanentIssue .mm-handover-card > .mm-accordion-toggle[aria-expanded="true"] {
background:#e6f4fc!important;
border-bottom:1px solid #cbe5f4!important;
border-radius:11px 11px 0 0!important;
}
#mediq-dashboard #mmPermanentIssue .mm-report-section > .mm-accordion-body,
#mediq-dashboard #mmPermanentIssue .mm-handover-card > .mm-accordion-body {
padding:11px!important;
background:#fff!important;
}
#mediq-dashboard #mmPermanentIssue .mm-report-section .mm-report-inner {
padding:0!important;
gap:10px!important;
}
#mediq-dashboard #mmPermanentIssue .mm-report-section #mmPanelReportSave {
margin-top:8px!important;
margin-bottom:2px!important;
}
</style>
<style>
/* MEDIQ V45 - compact activity panel and self-service layout */
#mediq-dashboard #mmPermanentIssue{padding:9px!important;line-height:1.55!important}
#mediq-dashboard #mmPermanentIssue>header{min-height:43px!important;padding:7px 10px!important;margin:0 0 7px!important}
#mediq-dashboard #mmPermanentIssue>header strong{font-size:12px!important}
#mediq-dashboard #mmPermanentIssue>header button{width:28px!important;height:28px!important}
#mediq-dashboard #mmPermanentIssue>h3{font-size:12px!important;line-height:1.65!important;margin:4px 1px 7px!important}
#mediq-dashboard #mmPermanentIssue .mm-detail-card{margin:7px 0!important;padding:8px!important;border-radius:10px!important}
#mediq-dashboard #mmPermanentIssue .mm-summary-fields,
#mediq-dashboard #mmPermanentIssue .mm-summary-card{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:6px!important}
#mediq-dashboard #mmPermanentIssue .mm-summary-fields .mm-detail-line,
#mediq-dashboard #mmPermanentIssue .mm-summary-card .mm-detail-line{display:flex!important;flex-flow:row wrap!important;align-items:center!important;justify-content:flex-start!important;gap:3px!important;min-height:34px!important;margin:0!important;padding:7px 8px!important;background:#fff!important;border:1px solid #d5e6f2!important;border-radius:8px!important;line-height:1.5!important}
#mediq-dashboard #mmPermanentIssue .mm-summary-fields .mm-detail-line span,
#mediq-dashboard #mmPermanentIssue .mm-summary-card .mm-detail-line span{flex:0 0 auto!important;width:auto!important;min-width:0!important;font-size:11px!important}
#mediq-dashboard #mmPermanentIssue .mm-summary-fields .mm-detail-line span::after,
#mediq-dashboard #mmPermanentIssue .mm-summary-card .mm-detail-line span::after{content:' :'!important}
#mediq-dashboard #mmPermanentIssue .mm-summary-fields .mm-detail-line strong,
#mediq-dashboard #mmPermanentIssue .mm-summary-card .mm-detail-line strong{flex:1 1 auto!important;width:auto!important;min-width:0!important;font-size:11px!important;text-align:right!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow{padding:9px 10px!important;min-height:0!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow h4{font-size:12px!important;margin:0 0 3px!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-accordion-body{padding:0!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage-grid{padding:2px 0!important;margin:3px 0 0!important;gap:0!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage{min-height:45px!important;padding:3px 1px!important;gap:4px!important;font-size:9px!important;line-height:1.5!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage::before{width:14px!important;height:14px!important;flex-basis:14px!important}
#mediq-dashboard #mmPermanentIssue .mm-workflow .mm-stage:not(:last-child)::after{top:10px!important;height:2px!important}
#mediq-dashboard #mmPermanentIssue .mm-report-section,
#mediq-dashboard #mmPermanentIssue .mm-handover-card{padding:0!important}
#mediq-dashboard #mmPermanentIssue .mm-report-section>.mm-accordion-toggle,
#mediq-dashboard #mmPermanentIssue .mm-handover-card>.mm-accordion-toggle{min-height:42px!important;padding:8px 12px!important}
#mediq-dashboard #mmPermanentIssue .mm-standalone-request{padding:8px!important}
#mediq-dashboard #mmPermanentIssue .mm-standalone-request #mmShowRequest{min-height:37px!important}
#mediq-dashboard #mufRoot{direction:rtl;text-align:right}
#mediq-dashboard .muf-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
#mediq-dashboard .muf-heading h3{margin:0 0 3px!important}
#mediq-dashboard .muf-heading p{font-size:12px;color:#6b879a;margin:0}
#mediq-dashboard .muf-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:10px 0 16px}
#mediq-dashboard .muf-kpi{background:white;border:1px solid #cde2ee;border-top:3px solid var(--kpi-color);border-radius:12px;padding:14px;display:flex;align-items:center;justify-content:space-between;gap:10px;font:inherit;color:#315873;cursor:pointer}
#mediq-dashboard .muf-kpi strong{font-size:23px;color:var(--kpi-color);line-height:1}
#mediq-dashboard .muf-kpi .muf-kpi-text{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%}
#mediq-dashboard .muf-kpi .muf-kpi-text>span:last-child{font-size:13px;color:#547389}
#mediq-dashboard .muf-icon{display:inline-grid;place-items:center;min-width:34px;height:34px;border-radius:10px;background:#eef6fb;font-size:18px;line-height:1}
#mediq-dashboard .muf-kpi.selected{background:#f0f9fe;box-shadow:0 0 0 1px var(--kpi-color) inset}
#mediq-dashboard .muf-tabs{display:flex;gap:8px;border-bottom:1px solid #d5e6ef;margin-bottom:14px;padding-bottom:9px;flex-wrap:wrap}
#mediq-dashboard .muf-tabs button{border:1px solid #d0e2ee;border-radius:9px;background:#fff;color:#245f82;padding:9px 14px;font:inherit;font-weight:750;cursor:pointer}
#mediq-dashboard .muf-tabs button.active{background:#318fbe;color:#fff;border-color:#318fbe}
#mediq-dashboard .muf-filters{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 14px}
#mediq-dashboard .muf-filters input{flex:2;min-width:190px}
#mediq-dashboard .muf-filters select{flex:1;min-width:145px}
#mediq-dashboard .muf-filters input,#mediq-dashboard .muf-filters select{border:1px solid #cfe2ed;border-radius:9px;background:white;padding:10px;color:#24506a;font:inherit;direction:rtl}
#mediq-dashboard .muf-list-shell{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr);gap:14px;align-items:start}
#mediq-dashboard .muf-list{min-width:0}
#mediq-dashboard .muf-ticket{width:100%;display:flex;justify-content:space-between;gap:12px;align-items:center;padding:14px 12px;background:white;border:1px solid #dbe8f0;border-radius:9px;text-align:right;direction:rtl;color:#234e68;cursor:pointer;font:inherit;margin:7px 0}
#mediq-dashboard .muf-ticket:hover,#mediq-dashboard .muf-ticket.active{background:#f2f9fd;border-color:#8fc6e1}
#mediq-dashboard .muf-ticket-main{display:flex;flex-direction:column;align-items:flex-start;gap:4px;min-width:0}
#mediq-dashboard .muf-ticket strong{color:#1384b8}
#mediq-dashboard .muf-ticket em{font-style:normal;color:#36566b;white-space:normal}
#mediq-dashboard .muf-ticket-meta{white-space:nowrap;font-size:11px;color:#6c8798;display:flex;flex-direction:column;align-items:flex-end;gap:3px}
#mediq-dashboard .muf-open{color:#d48929}.muf-done{color:#189569}
#mediq-dashboard .muf-empty{padding:22px;border:1px dashed #cde1ee;border-radius:10px;background:#f8fcff;color:#68869a;text-align:center}
#mediq-dashboard .muf-create{padding:18px;border:1px solid #d1e6f2;border-radius:12px;background:#fff}
#mediq-dashboard .muf-create h3{margin:0 0 12px!important}
#mediq-dashboard .muf-create-row{display:grid;grid-template-columns:1.2fr .7fr .8fr 1.5fr auto;gap:12px;align-items:end}
#mediq-dashboard .muf-create label{display:flex;flex-direction:column;gap:6px;font-size:12px;font-weight:750;color:#2b607f;min-width:0}
#mediq-dashboard .muf-create .muf-grow{min-width:0}
#mediq-dashboard .muf-create input,#mediq-dashboard .muf-create select,#mediq-dashboard .muf-create textarea{padding:10px;border:1px solid #cfe2ee;border-radius:9px;background:#fff;font:inherit;min-width:0;direction:rtl;text-align:right}
#mediq-dashboard .muf-create textarea{resize:vertical;min-height:48px}
#mediq-dashboard .muf-create button{align-self:end;white-space:nowrap}
#mediq-dashboard .muf-note{border:1px solid #dae8f1;border-radius:10px;padding:12px;margin:9px 0;background:#fff}
#mediq-dashboard .muf-note.compact{padding:10px}
#mediq-dashboard .muf-note strong,#mediq-dashboard .muf-note small{display:block}
#mediq-dashboard .muf-note small{color:#7995a7;margin:5px 0}
#mediq-dashboard .muf-note p{margin:5px 0;white-space:pre-wrap}
#mediq-dashboard .muf-side-panel{position:sticky;top:16px;border:1px solid #d1e6f2;border-radius:14px;background:#fff;min-height:320px;padding:14px;box-shadow:0 12px 28px #0f39550f}
#mediq-dashboard .muf-panel-empty,#mediq-dashboard .muf-panel-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-height:250px;color:#67859a;gap:8px}
#mediq-dashboard .muf-panel-empty-icon{font-size:28px;color:#2d8dc0}
#mediq-dashboard .muf-side-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}
#mediq-dashboard .muf-close-mini{border:1px solid #cfe2ee;background:#f2f8fc;color:#25678f;border-radius:9px;padding:4px 10px;cursor:pointer;font:inherit}
#mediq-dashboard .muf-side-title h4{margin:0;color:#167bb0}
#mediq-dashboard .muf-side-title p{margin:5px 0 0;color:#42657b;line-height:1.8}
#mediq-dashboard .muf-side-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}
#mediq-dashboard .muf-side-grid>div{padding:10px;background:#f3f9fc;border:1px solid #d6e7f0;border-radius:9px;display:grid;grid-template-columns:34px 1fr;column-gap:8px;align-items:center}
#mediq-dashboard .muf-side-grid>div span{font-size:11px;color:#7891a2;display:block}
#mediq-dashboard .muf-side-grid>div strong{display:block;color:#244b63}
#mediq-dashboard .muf-side-grid>div .muf-icon{grid-row:1/span 2}
#mediq-dashboard .muf-side-box{margin-top:12px;border:1px solid #d8e8f1;border-radius:11px;padding:12px;background:#fbfdff}
#mediq-dashboard .muf-side-box h5{margin:0 0 8px!important;color:#225c7f}
#mediq-dashboard .muf-description{white-space:pre-wrap;line-height:1.9;margin:0}
#mediq-dashboard .muf-workflow{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;align-items:start}
#mediq-dashboard .muf-work-step{text-align:center;position:relative;padding-top:4px}
#mediq-dashboard .muf-work-step:not(:last-child)::after{content:"";position:absolute;top:14px;left:-50%;width:100%;height:2px;background:#d9e8f2;z-index:0}
#mediq-dashboard .muf-work-step:first-child::after{display:none}
#mediq-dashboard .muf-step-dot{width:16px;height:16px;border-radius:50%;display:inline-block;background:#cfe1ec;border:3px solid #eef7fc;position:relative;z-index:1}
#mediq-dashboard .muf-work-step.done .muf-step-dot{background:#60bce8}
#mediq-dashboard .muf-work-step.current .muf-step-dot{background:#1e9dd9;box-shadow:0 0 0 0 rgba(30,157,217,.55);animation:mufPulse 1.4s infinite}
#mediq-dashboard .muf-work-step small{display:block;margin-top:8px;color:#567186;line-height:1.7}
#mediq-dashboard .muf-error{color:#b42e38}
#mediq-dashboard #mufRoot [hidden]{display:none!important}
@keyframes mufPulse{0%{box-shadow:0 0 0 0 rgba(30,157,217,.45)}70%{box-shadow:0 0 0 12px rgba(30,157,217,0)}100%{box-shadow:0 0 0 0 rgba(30,157,217,0)}}
@media(max-width:980px){#mediq-dashboard .muf-list-shell{grid-template-columns:1fr}#mediq-dashboard .muf-side-panel{position:static}#mediq-dashboard .muf-create-row{grid-template-columns:1fr 1fr}}
@media(max-width:700px){#mediq-dashboard .muf-stats{grid-template-columns:1fr}#mediq-dashboard .muf-create-row{grid-template-columns:1fr}#mediq-dashboard .muf-side-grid,#mediq-dashboard .muf-workflow{grid-template-columns:1fr}#mediq-dashboard .muf-ticket{flex-direction:column;align-items:flex-start}#mediq-dashboard .muf-ticket-meta{align-items:flex-start;white-space:normal}}
</style>
<style>
/* MediQ V46.3 — notification spacing and consistent dashboard workflow */
#mediq-dashboard #mufRoot #mufPaneNotes{
padding:16px 14px 18px!important;
margin-top:12px!important;
background:#fff!important;
border:1px solid #d5e7f2!important;
border-radius:13px!important;
box-sizing:border-box!important;
}
#mediq-dashboard #mufRoot #mufMarkRead{
display:inline-flex!important;
align-items:center!important;
justify-content:center!important;
min-height:38px!important;
margin:0 0 16px!important;
padding:8px 15px!important;
}
#mediq-dashboard #mufRoot #mufNotes{margin-top:4px!important;clear:both!important;}
#mediq-dashboard #mufRoot #mufNotes>.muf-empty{
margin:0!important;
padding:20px 16px!important;
min-height:75px!important;
display:flex!important;
align-items:center!important;
justify-content:center!important;
}
#mediq-dashboard #mufRoot #mufNotes>.muf-note:first-child{margin-top:0!important;}
#mediq-dashboard #mufRoot .muf-side-panel{
border-color:#c6e1f1!important;
box-shadow:0 5px 18px rgba(25,83,123,.07)!important;
min-height:0!important;
}
#mediq-dashboard #mufRoot .muf-side-box{margin-top:11px!important;padding:12px!important;background:#fff!important;}
#mediq-dashboard #mufRoot .muf-side-grid>div{padding:9px!important;}
#mediq-dashboard #mufRoot .muf-side-panel{padding:12px!important}
#mediq-dashboard #mufRoot .muf-side-title.compact{margin-bottom:8px!important}
#mediq-dashboard #mufRoot .muf-request-box{border:1px solid #d6e8f2;border-radius:12px;padding:10px;background:#fbfdff}
#mediq-dashboard #mufRoot .muf-request-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
#mediq-dashboard #mufRoot .muf-field{border:1px solid #dbe8f0;border-radius:10px;padding:10px;background:#fff;min-width:0}
#mediq-dashboard #mufRoot .muf-field span{display:block;font-size:12px;color:#6f8a9d;margin-bottom:5px}
#mediq-dashboard #mufRoot .muf-field strong{display:block;color:#244b63;line-height:1.9}
#mediq-dashboard #mufRoot .muf-field p{margin:0;color:#37576d;line-height:1.9}
#mediq-dashboard #mufRoot .muf-field.muf-priority-inline strong{display:flex;align-items:center}
#mediq-dashboard #mufRoot .muf-priority-badge{display:inline-flex;align-items:center;gap:6px}
#mediq-dashboard #mufRoot .muf-attachments{grid-column:1}
#mediq-dashboard #mufRoot .muf-device{grid-column:1/-1;display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:center}
#mediq-dashboard #mufRoot .muf-device>span,#mediq-dashboard #mufRoot .muf-device>strong{grid-column:2}
#mediq-dashboard #mufRoot .muf-device-image{width:58px;height:58px;object-fit:cover;border-radius:12px;border:1px solid #d9e8f2;background:#f5fbff;grid-row:1/span 2}
#mediq-dashboard #mufRoot .muf-action-box .muf-workflow{margin-top:8px}
#mediq-dashboard #mufRoot .muf-inline-flow-head{margin-bottom:8px}
#mediq-dashboard #mufRoot .muf-mini-status{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;background:#eef8fd;border:1px solid #cae4f2;color:#205a79;font-size:12px}
#mediq-dashboard #mufRoot .muf-assign-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:end;margin-top:10px}
#mediq-dashboard #mufRoot .muf-assign-row label,#mediq-dashboard #mufRoot .muf-note-entry{display:block}
#mediq-dashboard #mufRoot .muf-assign-row input,#mediq-dashboard #mufRoot .muf-note-entry textarea{width:100%;box-sizing:border-box;padding:9px 10px;border:1px solid #cddfea;border-radius:10px;font:inherit}
#mediq-dashboard #mufRoot .muf-help-inline{display:block;margin-top:6px;color:#6a8597;line-height:1.8}
#mediq-dashboard #mufRoot .muf-transition-wrap{margin-top:10px}
#mediq-dashboard #mufRoot .muf-transition-wrap>span{display:block;font-size:12px;color:#6f8a9d;margin-bottom:6px}
#mediq-dashboard #mufRoot .muf-transition-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:8px}
#mediq-dashboard #mufRoot .muf-transition-tile{padding:10px 8px;border:1px solid #cfe3ef;border-radius:10px;background:#fff;color:#1f5978;font:inherit;cursor:pointer;transition:.18s ease}
#mediq-dashboard #mufRoot .muf-transition-tile:hover,#mediq-dashboard #mufRoot .muf-transition-tile.chosen{background:#eaf7ff;border-color:#49a6d8;transform:translateY(-1px)}
#mediq-dashboard #mufRoot .muf-note-entry{margin-top:10px}
#mediq-dashboard #mufRoot .muf-note-entry textarea{min-height:72px;resize:vertical}
#mediq-dashboard #mufRoot .muf-inline-actions{display:flex;gap:8px;justify-content:flex-start;flex-wrap:wrap;margin-top:10px}
#mediq-dashboard #mufRoot #mufInlineResult{margin:8px 0 0;color:#2b6787;line-height:1.8}
@media(max-width:980px){#mediq-dashboard #mufRoot .muf-request-grid{grid-template-columns:1fr}#mediq-dashboard #mufRoot .muf-device{grid-template-columns:1fr}#mediq-dashboard #mufRoot .muf-device>span,#mediq-dashboard #mufRoot .muf-device>strong{grid-column:1}#mediq-dashboard #mufRoot .muf-device-image{grid-row:auto;justify-self:start;margin-bottom:8px}#mediq-dashboard #mufRoot .muf-assign-row{grid-template-columns:1fr}}
#mediq-dashboard #mufRoot .muf-workflow{
display:flex!important;
flex-direction:row!important;
direction:rtl!important;
gap:0!important;
width:100%!important;
padding:9px 0 0!important;
margin:0!important;
align-items:flex-start!important;
}
#mediq-dashboard #mufRoot .muf-work-step{
flex:1 1 0!important;
min-width:0!important;
padding:0 2px!important;
text-align:center!important;
position:relative!important;
}
#mediq-dashboard #mufRoot .muf-work-step::after{
content:''!important;
position:absolute!important;
z-index:0!important;
top:8px!important;
right:calc(50% + 9px)!important;
left:auto!important;
width:calc(100% - 18px)!important;
height:2px!important;
background:#d3e5ef!important;
}
#mediq-dashboard #mufRoot .muf-work-step:first-child::after{display:block!important;}
#mediq-dashboard #mufRoot .muf-work-step:last-child::after{display:none!important;}
#mediq-dashboard #mufRoot .muf-step-dot{
display:block!important;
width:15px!important;
height:15px!important;
margin:0 auto!important;
border-radius:50%!important;
background:#e2edf3!important;
border:2px solid #c7deeb!important;
box-shadow:0 0 0 3px white!important;
position:relative!important;
z-index:2!important;
}
#mediq-dashboard #mufRoot .muf-work-step.done .muf-step-dot{
background:#72bfdf!important;
border-color:#72bfdf!important;
}
#mediq-dashboard #mufRoot .muf-work-step.current .muf-step-dot{
background:#158fc9!important;
border:3px solid #b8e7fb!important;
animation:mediqUserFaultCurrentPulse 1.15s ease-in-out infinite!important;
will-change:box-shadow,transform!important;
}
#mediq-dashboard #mufRoot .muf-work-step small{
display:block!important;
margin-top:9px!important;
font-size:10px!important;
line-height:1.65!important;
color:#6e8da0!important;
overflow-wrap:normal!important;
}
#mediq-dashboard #mufRoot .muf-work-step.current small{color:#097dae!important;font-weight:850!important;}
@keyframes mediqUserFaultCurrentPulse{
0%,100%{box-shadow:0 0 0 3px #e6f5fc,0 0 0 5px rgba(28,150,210,.48);transform:scale(1);opacity:1;}
50%{box-shadow:0 0 0 3px #e6f5fc,0 0 0 11px rgba(28,150,210,0);transform:scale(1.16);opacity:.65;}
}
@media(max-width:700px){
#mediq-dashboard #mufRoot .muf-workflow{display:flex!important;flex-direction:row!important;}
#mediq-dashboard #mufRoot .muf-work-step small{font-size:9px!important;}
#mediq-dashboard #mufRoot #mufPaneNotes{padding:12px!important;}
}
@media(prefers-reduced-motion:reduce){
#mediq-dashboard #mufRoot .muf-work-step.current .muf-step-dot{animation:none!important;}
}
</style>
<style>
/* MediQ V46.4 - isolated fixes */
#mediq-dashboard #mufRoot .muf-device-combo{position:relative;width:100%;min-width:0}
#mediq-dashboard #mufRoot #mufDeviceSearch{display:block;width:100%;min-height:43px;padding:10px 12px;border:1px solid #cfe2ee;border-radius:9px;background:white;box-sizing:border-box;font:inherit;text-align:right;direction:rtl}
#mediq-dashboard #mufRoot .muf-device-results{position:absolute;top:calc(100% + 3px);right:0;left:0;max-height:300px;overflow:auto;z-index:1005;padding:5px;border:1px solid #b9d9ec;background:white;border-radius:10px;box-shadow:0 12px 28px #123d5529}
#mediq-dashboard #mufRoot .muf-device-results[hidden]{display:none!important}
#mediq-dashboard #mufRoot .muf-device-results button{display:block;width:100%;padding:10px 9px;background:white;border:0;border-radius:7px;text-align:right;direction:rtl;font:inherit;font-size:12px;color:#215b7b;cursor:pointer;white-space:normal}
#mediq-dashboard #mufRoot .muf-device-results button:hover,#mediq-dashboard #mufRoot .muf-device-results button:focus{background:#e7f5fe}
#mediq-dashboard #mufRoot #mufPaneNew{overflow:visible!important}
#mediq-dashboard #mufRoot #mufNotes{margin-top:18px!important}
#mediq-dashboard #mqTree [data-tree-key="property"].parent-active,#mediq-dashboard #mqTree [data-tree-key="property"].active{background:#287fb1!important;color:white!important;box-shadow:inset -3px 0 0 #c7efff!important}
#mediq-dashboard #mmContent .v-stats>.mm-kpi-card{display:grid!important;grid-template-columns:minmax(0,1fr) 43px!important;grid-template-rows:auto auto!important;gap:5px 10px!important;min-height:106px!important;padding:14px!important;align-content:center!important}
#mediq-dashboard #mmContent .v-stats>.mm-kpi-card strong{grid-column:1!important;grid-row:1!important;font-size:26px!important;align-self:center}
#mediq-dashboard #mmContent .v-stats>.mm-kpi-card span{grid-column:1/-1!important;grid-row:2!important;font-size:12px!important}
#mediq-dashboard #mmContent .v-stats>.mm-kpi-card::before{grid-column:2!important;grid-row:1!important;position:static!important;display:grid!important;width:37px!important;height:37px!important;font-size:22px!important;align-self:center!important}
.mm-request-box .mm-form-section:first-child .mm-request-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:15px!important;align-items:start!important}
.mm-request-box .mm-form-section:first-child .mm-request-grid>label{display:flex!important;flex-direction:column!important;min-width:0!important;grid-column:auto!important}
.mm-request-box .mm-form-section:first-child .mm-request-grid>label.mm-wide{grid-column:1!important}
.mm-request-box .mm-compact-attachments{grid-column:2!important;grid-row:auto!important;min-width:0!important;margin:0!important;padding:0!important;border:0!important;align-self:stretch!important}
.mm-request-box .mm-compact-attachments .mm-attach-trigger{display:flex!important;flex-direction:column!important;align-items:stretch!important;justify-content:center!important;width:100%!important;min-height:94px!important;background:#fff!important;border:1px solid #c7dfed!important}
.mm-request-box .mm-compact-attachments input[type=file]{max-width:100%!important;width:100%!important}
.mm-request-box .mm-request-grid textarea#mmEditDescription{min-height:94px!important}
.mm-request-box .mm-transition-screen{grid-column:1/-1;border:1px solid #d1e5f1;border-radius:10px;padding:14px;margin:10px 0;background:#f9fcff;min-width:0}
.mm-request-box .mm-transition-screen[hidden]{display:none!important}
.mm-request-box .mm-transition-screen h4{margin:0 0 12px!important;color:#17638c}
.mm-request-box .mm-transition-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.mm-request-box .mm-transition-field{display:flex;flex-direction:column;gap:5px;min-width:0}
.mm-request-box .mm-transition-field input,.mm-request-box .mm-transition-field select,.mm-request-box .mm-transition-field textarea{display:block;width:100%;min-width:0;font:inherit;font-size:13px;border:1px solid #bfdbe9;border-radius:8px;padding:9px;box-sizing:border-box;background:white}
.mm-request-box .mm-transition-error,.mm-request-box .mm-transition-unsupported{color:#b53c48;font-size:12px;line-height:1.9}
.mm-request-box .mm-actions{justify-content:flex-start!important;gap:9px!important}
@media(max-width:680px){.mm-request-box .mm-form-section:first-child .mm-request-grid,.mm-request-box .mm-transition-grid{grid-template-columns:1fr!important}.mm-request-box .mm-form-section:first-child .mm-request-grid>label.mm-wide,.mm-request-box .mm-compact-attachments{grid-column:1!important}}
</style>
<style id="mediq-v46-5-layout-fixes">
/* Correct action form: description and attachments share the same row. */
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid{
display:grid!important;grid-template-columns:minmax(0,1fr) minmax(0,1fr)!important;
gap:12px 14px!important;align-items:stretch!important;
}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label.mm-wide{
grid-column:1!important;grid-row:3!important;margin:0!important;
min-width:0!important;height:100%!important;
}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mm-compact-attachments{
grid-column:2!important;grid-row:3!important;margin:0!important;
min-width:0!important;padding:0!important;align-self:stretch!important;
background:transparent!important;border:0!important;
display:flex!important;flex-direction:column!important;justify-content:flex-end!important;
}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label.mm-wide textarea#mmEditDescription{
width:100%!important;min-height:110px!important;height:110px!important;
box-sizing:border-box!important;resize:vertical!important;
}
.mm-request-modal .mm-compact-attachments > h4{margin:0 0 5px!important;font-size:12px!important}
.mm-request-modal .mm-compact-attachments .mm-documents{
margin:0 0 4px!important;max-height:35px!important;overflow-y:auto!important;font-size:11px!important;
}
.mm-request-modal .mm-compact-attachments .mm-attach-trigger{
flex:1!important;min-height:64px!important;max-height:110px!important;
background:#fff!important;border:1px dashed #a9d2e7!important;
border-radius:9px!important;padding:8px!important;
display:flex!important;justify-content:center!important;align-items:center!important;
}
.mm-request-modal .mm-compact-attachments input[type=file]{box-sizing:border-box!important;width:100%!important;max-width:100%!important}
.mm-request-modal .mm-transition-screen:empty{display:none!important}
.mm-request-modal .mm-transition-screen .mm-transition-note{display:none!important}
@media(max-width:700px){
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid{grid-template-columns:minmax(0,1fr)!important}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label.mm-wide,
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mm-compact-attachments{
grid-column:1!important;grid-row:auto!important;height:auto!important;
}
}
</style>
<style>
/* MediQ V46.6 - independent workflow transition screen */
.mm-t-screen-overlay{position:fixed;inset:0;z-index:2147483000;display:grid;place-items:center;padding:18px;font-family:Vazir,IRANSans,Tahoma,sans-serif;box-sizing:border-box;direction:rtl}
.mm-t-screen-backdrop{position:absolute;inset:0;background:rgba(14,45,67,.57);backdrop-filter:blur(3px)}
.mm-t-screen-card{position:relative;z-index:1;width:min(760px,96vw);max-height:88vh;display:flex;flex-direction:column;overflow:hidden;border-radius:18px;border:1px solid #c4e1f2;box-shadow:0 22px 65px rgba(13,50,78,.25);background:#fff;color:#205477;text-align:right}
.mm-t-screen-card header{padding:20px 24px;background:#eef8ff;border-bottom:1px solid #d3e9f7;display:flex;align-items:flex-start;justify-content:space-between;gap:15px}
.mm-t-screen-card header strong{font-size:19px;color:#11668f}.mm-t-screen-card header p{font-size:12px;margin:7px 0 0;color:#718b9c}
.mm-t-screen-card button{cursor:pointer;font-family:inherit}.mm-t-x{background:#fff;border:1px solid #cce4f2;border-radius:10px;color:#25648b;padding:5px 12px;font-size:20px}
.mm-t-screen-body{padding:20px 24px;overflow:auto;min-height:75px}
.mm-t-screen-card .mm-transition-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.mm-t-screen-card .mm-transition-field{display:flex;flex-direction:column;gap:8px;min-width:0;font-weight:700;font-size:13px}
.mm-t-screen-card .mm-transition-field>input:not([type=hidden]),.mm-t-screen-card .mm-transition-field>select,.mm-t-screen-card .mm-transition-field>textarea{width:100%;box-sizing:border-box;min-height:43px;border-radius:10px;border:1px solid #bedced;background:#fff;color:#254e67;padding:10px;font-family:inherit;font-size:13px}
.mm-t-screen-card .mm-transition-field>textarea{resize:vertical}.mm-t-required{color:#d43e54}
.mm-t-checklist{display:grid;gap:9px;padding:12px;border:1px solid #d8e7f0;border-radius:10px}.mm-t-checklist label{font-weight:500}
.mm-t-asset-results{max-height:185px;overflow:auto;display:flex;flex-direction:column;gap:4px}.mm-t-asset-results button{text-align:right;background:#f1f8fc;border:1px solid #dceaf3;border-radius:8px;padding:8px;color:#245b79}
.mm-t-asset-results button:hover{background:#dff2fd}.mm-t-screen-error,.mm-transition-error{color:#c33d4e;font-size:12px;line-height:1.8}
.mm-t-screen-card footer{display:flex;justify-content:flex-start;gap:10px;padding:15px 24px;border-top:1px solid #e1edf5;background:#fbfdff}
.mm-t-screen-card footer button{font-size:13px;font-weight:700;border:1px solid #bcddec;border-radius:10px;min-height:40px;padding:9px 19px;background:#eff8ff;color:#1b678f}
.mm-t-screen-card footer .mm-t-ok{color:#fff;background:#129b72;border-color:#129b72}
@media(max-width:650px){.mm-t-screen-card .mm-transition-grid{grid-template-columns:1fr}.mm-t-screen-card header,.mm-t-screen-body{padding:15px}}
</style>
<style id="mediq-v467-transition-style">
.mm-t-screen-card{width:min(830px,96vw)!important}
.mm-t-screen-card .mm-t-comment{margin-top:18px}
.mm-t-screen-card .mm-t-comment textarea{width:100%;min-height:86px;box-sizing:border-box;border:1px solid #bedced;border-radius:10px;padding:12px;font:inherit;color:#254e67;resize:vertical}
.mm-t-screen-card footer .mm-t-ok{background:#159b70!important;border-color:#159b70!important;color:#fff!important;font-weight:800}
/* V46.8: restore action footer hidden by the global Confluence-shell footer rule. */
.mm-t-screen-overlay .mm-t-screen-card > footer{
display:flex!important;
visibility:visible!important;
opacity:1!important;
flex-shrink:0!important;
align-items:center!important;
justify-content:flex-start!important;
gap:12px!important;
padding:14px 24px!important;
background:#f6fbff!important;
border-top:1px solid #d5e9f5!important;
position:relative!important;
z-index:2!important;
}
.mm-t-screen-overlay .mm-t-screen-card > footer > button{display:inline-flex!important;align-items:center;justify-content:center;min-height:42px}
.mm-t-screen-card .mm-t-screen-error:not(:empty){margin-top:12px;padding:10px;border:1px solid #edbbc2;border-radius:8px;background:#fff4f4}
.mm-t-screen-card .mm-transition-field{position:relative}
.mm-t-screen-card .mm-t-asset-results{max-height:185px;overflow:auto}
</style>
<style id="mediq-v49-3-ui-fix">
/* Preserve the original dashboard and tighten ONLY the existing request/action interfaces. */
#mediq-dashboard #mufRoot .muf-heading{display:flex!important;align-items:center!important;justify-content:space-between!important;gap:12px!important;flex-wrap:wrap!important}
#mediq-dashboard #mufRoot .muf-heading>div:first-child{margin-inline-start:0!important;margin-inline-end:auto!important}
#mediq-dashboard #mufRoot .mq-v49-fault-toolbar{display:flex!important;flex-direction:row!important;align-items:center!important;gap:9px!important;flex-shrink:0!important;margin-inline-start:auto!important}
#mediq-dashboard #mufRoot .mq-v49-fault-toolbar>button{position:static!important;margin:0!important;min-width:unset!important;white-space:nowrap!important}
#mediq-dashboard #mufRoot .mq-v49-fault-toolbar .mq-v47-newfault{background:#df4451!important;color:white!important;border-color:#df4451!important}
#mediq-dashboard #mufRoot .mq-v49-fault-toolbar .mq-v47-newfault:hover{background:#c72f3c!important;transform:translateY(-3px) rotate(-1deg)!important}
.mm-request-box .mm-request-body{padding-top:4px!important}
.mm-request-box .mm-form-section{padding:10px 12px!important;margin:7px 0!important}
.mm-request-box .mm-request-grid{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:7px 10px!important}
.mm-request-box .mm-request-grid>label{min-width:0!important;margin:0!important}
.mm-request-box .mm-request-grid>label:has(#mmEditAssignee){display:none!important}
.mm-request-box .mm-request-grid .mq-v49-stage-label{grid-column:1/-1!important;order:15!important}
.mm-request-box .mq-v49-stage-label>select{display:none!important}
.mm-request-box .mq-v49-stage-label .mm-transition-tiles{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;margin:6px 0!important;gap:8px!important}
.mm-request-box .mq-v49-stage-label .mm-transition-tile{min-height:42px!important}
.mm-request-box .mm-request-grid .mq-v47-status{min-height:39px!important;padding:5px 9px!important;align-self:center!important}
.mm-request-box .mm-request-grid .mq-v47-priority{padding:5px 8px!important;min-height:35px!important}
.mm-request-box .mm-request-grid>label:has(#mmEditSummary){order:0!important}
.mm-request-box .mm-request-grid>label:has(#mmEditPriority){order:1!important}
.mm-request-box .mm-request-grid>label.mm-wide{order:5!important}
.mm-request-box .mm-request-grid .mm-compact-attachments{order:6!important}
.mm-request-box .mm-request-grid .mq-v47-device{order:8!important;grid-column:1/-1!important;margin:1px 0!important}
.mm-request-box .mm-request-grid>label:has(#mmEditDescription) textarea{min-height:55px!important;height:75px!important;resize:vertical!important}
.mm-request-box .mm-request-grid .mm-compact-attachments{border:0!important;box-shadow:none!important}
.mm-request-box .mq-v47-action .mq-v47-help{margin:4px 0!important}
.mm-request-box .mq-v47-action .mq-v47-actions-container{display:flex!important;flex-direction:column!important;gap:8px!important}
.mm-request-box .mq-v49-inline-stage-host:empty{display:none!important}
.mm-request-box .mq-v49-transition-inline{position:relative!important;inset:auto!important;z-index:auto!important;display:block!important;background:none!important;overflow:visible!important;padding:0!important}
.mm-request-box .mq-v49-transition-inline .mm-t-screen-backdrop{display:none!important}
.mm-request-box .mq-v49-transition-inline .mm-t-screen-card{position:relative!important;inset:auto!important;transform:none!important;display:block!important;max-height:none!important;overflow:visible!important;max-width:none!important;width:100%!important;margin:0!important;border:1px solid #c8e3f3!important;box-shadow:none!important;border-radius:10px!important}
.mm-request-box .mq-v49-transition-inline .mm-t-screen-card header{padding:9px 12px!important}
.mm-request-box .mq-v49-transition-inline .mm-t-screen-body{padding:10px!important;max-height:320px!important;overflow-y:auto!important}
.mm-request-box .mq-v49-transition-inline .mm-t-screen-card footer{padding:8px 10px!important}
.mm-request-box .mq-v49-transition-inline .mm-transition-grid{gap:8px!important}
@media(max-width:750px){.mm-request-box .mm-request-grid{grid-template-columns:1fr!important}.mm-request-box .mq-v49-stage-label .mm-transition-tiles{grid-template-columns:1fr!important}#mediq-dashboard #mufRoot .muf-heading{align-items:flex-start!important}}
</style>
<style id="mediq-v49-4-request-layout">
/* V49.4: precise rearrangement of existing nodes, retaining their IDs and save handlers */
.mm-request-box .mm-request-grid{grid-template-columns:minmax(0,1.8fr) minmax(0,1fr) minmax(0,.78fr)!important;gap:8px!important;align-items:end!important}
.mm-request-box .mm-request-grid>label:has(#mmEditSummary){grid-column:1!important;grid-row:1!important;order:0!important}
.mm-request-box .mm-request-grid>.mq-v47-status{grid-column:3!important;grid-row:1!important;order:0!important;min-height:40px!important;display:flex!important;flex-direction:row!important;align-items:center!important;justify-content:flex-start!important;gap:7px!important;white-space:nowrap!important}
.mm-request-box .mm-request-grid>.mq-v47-status span{font-weight:700!important;font-size:12px!important}
.mm-request-box .mm-request-grid>.mq-v47-status strong{font-size:12px!important}
.mm-request-box .mm-request-grid>label:has(#mmEditPriority){grid-column:2!important;grid-row:1!important;order:0!important;min-height:40px!important;display:flex!important;align-items:center!important;justify-content:flex-start!important;gap:7px!important;margin:0!important;font-weight:750!important}
.mm-request-box .mm-request-grid>label:has(#mmEditPriority) .mq-v47-priority{display:inline-flex!important;min-height:36px!important;padding:2px 4px!important;gap:5px!important;background:transparent!important;border:0!important}
.mm-request-box .mq-v494-icon{display:block!important;width:32px!important;height:32px!important;object-fit:cover!important;border-radius:8px!important}
.mm-request-box .mq-v494-importance-text{font-size:11px!important;color:#52728b!important}
.mm-request-box .mm-request-grid>label:has(#mmEditDescription){grid-column:1/3!important;grid-row:2!important;order:0!important;align-self:stretch!important}
.mm-request-box .mm-request-grid>label:has(#mmEditDescription) textarea{height:92px!important;min-height:92px!important;max-height:105px!important}
.mm-request-box .mm-request-grid>.mm-compact-attachments{grid-column:3!important;grid-row:2!important;order:0!important;align-self:stretch!important;padding:0!important}
.mm-request-box .mm-request-grid>.mm-compact-attachments .mm-documents{max-height:35px!important;min-height:15px!important;margin:0 0 4px!important}
.mm-request-box .mm-request-grid>.mm-compact-attachments .mm-attach-trigger{margin-top:3px!important}
.mm-request-box .mq-v47-device{grid-column:1/-1!important;grid-row:3!important;order:0!important;min-height:66px!important;margin:0!important}
.mm-request-box .mq-v47-device .mq-v47-product-image{max-height:82px!important}
.mm-request-box .mq-v47-action{padding:11px 12px!important}
.mm-request-box .mq-v47-action .mq-v47-help{margin:0 0 8px!important}
.mm-request-box .mq-v494-action-row{display:grid!important;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr)!important;gap:14px!important;align-items:start!important;direction:rtl!important}
.mm-request-box .mq-v494-action-row>label{min-width:0!important;margin:0!important}
.mm-request-box .mq-v494-action-row>.mq-v49-stage-label{grid-column:1!important;grid-row:1!important;order:0!important;display:block!important}
.mm-request-box .mq-v494-action-row>.mq-v49-stage-label>.mm-transition-tiles{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:7px!important;margin:6px 0!important}
.mm-request-box .mq-v494-action-row>.mq-v49-stage-label .mm-transition-tile{min-height:43px!important;cursor:pointer!important}
.mm-request-box .mq-v494-action-row>label:has(#mmEditAssignee){grid-column:2!important;grid-row:1!important;display:flex!important;flex-direction:column!important;gap:6px!important}
.mm-request-box .mq-v494-action-row .mq-v47-self{align-self:flex-start!important;padding:0!important;margin:0!important}
.mm-request-box .mq-v49-inline-stage-host{margin-top:4px!important}
.mm-request-box .mq-v47-action .mm-actions{margin-top:7px!important}
.mm-request-box .mq-v47-notes{margin-top:8px!important}
@media(max-width:780px){.mm-request-box .mm-request-grid{grid-template-columns:1fr 1fr!important}.mm-request-box .mm-request-grid>label:has(#mmEditSummary){grid-column:1/-1!important;grid-row:1!important}.mm-request-box .mm-request-grid>.mq-v47-status{grid-column:2!important;grid-row:2!important}.mm-request-box .mm-request-grid>label:has(#mmEditPriority){grid-column:1!important;grid-row:2!important}.mm-request-box .mm-request-grid>label:has(#mmEditDescription){grid-column:1/-1!important;grid-row:3!important}.mm-request-box .mm-request-grid>.mm-compact-attachments{grid-column:1/-1!important;grid-row:4!important}.mm-request-box .mq-v47-device{grid-row:5!important}.mm-request-box .mq-v494-action-row{grid-template-columns:1fr!important}.mm-request-box .mq-v494-action-row>.mq-v49-stage-label{grid-column:1!important;grid-row:1!important}.mm-request-box .mq-v494-action-row>label:has(#mmEditAssignee){grid-column:1!important;grid-row:2!important}}
</style>
<style id="mediq-v49-5-alignment-fix">
/* V49.5 - targeted layout correction only; no endpoint or event handler changes. */
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid{
display:grid!important;
grid-template-columns:repeat(6,minmax(0,1fr))!important;
grid-template-rows:auto auto auto!important;
column-gap:10px!important;row-gap:12px!important;
align-items:stretch!important;direction:rtl!important;
}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditSummary){grid-column:1/3!important;grid-row:1!important;order:0!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditPriority){grid-column:3/5!important;grid-row:1!important;order:0!important;display:flex!important;flex-direction:row!important;justify-content:center!important;align-items:center!important;gap:8px!important;padding:8px 10px!important;min-height:70px!important;background:#f5faff!important;border:1px solid #c9e1f1!important;border-radius:9px!important;box-sizing:border-box!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mq-v47-status{grid-column:5/7!important;grid-row:1!important;order:0!important;display:flex!important;flex-direction:row!important;align-items:center!important;justify-content:center!important;gap:7px!important;min-height:70px!important;height:auto!important;padding:8px 10px!important;box-sizing:border-box!important;background:#f5faff!important;border:1px solid #c9e1f1!important;border-radius:9px!important;white-space:normal!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditSummary){display:flex!important;flex-direction:column!important;justify-content:center!important;align-items:stretch!important;gap:7px!important;min-height:70px!important;padding:7px 10px!important;box-sizing:border-box!important;background:#f5faff!important;border:1px solid #c9e1f1!important;border-radius:9px!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditSummary) input{width:100%!important;min-height:34px!important;margin:0!important;box-sizing:border-box!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditPriority) .mq-v47-priority{display:inline-flex!important;align-items:center!important;justify-content:center!important;gap:7px!important;padding:0!important;margin:0!important;border:0!important;background:transparent!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditPriority) .mq-v494-icon{width:28px!important;height:28px!important;object-fit:contain!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditDescription){grid-column:1/4!important;grid-row:2!important;order:0!important;display:flex!important;flex-direction:column!important;min-height:127px!important;height:127px!important;gap:6px!important;box-sizing:border-box!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditDescription) textarea#mmEditDescription{flex:1!important;display:block!important;min-height:0!important;height:100%!important;max-height:none!important;resize:none!important;box-sizing:border-box!important;width:100%!important;margin:0!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mm-compact-attachments{grid-column:4/7!important;grid-row:2!important;order:0!important;min-height:127px!important;height:127px!important;display:flex!important;flex-direction:column!important;justify-content:flex-start!important;box-sizing:border-box!important;margin:0!important;padding:0!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mm-compact-attachments > h4{margin:0 0 6px!important;line-height:20px!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mm-compact-attachments .mm-documents{flex:0 0 auto!important;min-height:19px!important;max-height:32px!important;overflow:auto!important;margin:0 0 5px!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mm-compact-attachments .mm-attach-trigger{flex:1!important;min-height:0!important;max-height:none!important;width:100%!important;box-sizing:border-box!important;margin:0!important;display:flex!important;justify-content:center!important;align-items:center!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mq-v47-device{grid-column:1/7!important;grid-row:3!important;order:0!important;width:100%!important;box-sizing:border-box!important;min-height:62px!important;margin:0!important;padding:8px 10px!important;}
.mm-request-modal .mm-request-box .mq-v47-action .mq-v494-action-row{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;align-items:start!important;gap:12px!important;direction:rtl!important;}
.mm-request-modal .mm-request-box .mq-v47-action .mq-v494-action-row > .mq-v49-stage-label{grid-column:1!important;grid-row:1!important;min-width:0!important;display:flex!important;flex-direction:column!important;gap:6px!important;align-items:stretch!important;margin:0!important;}
.mm-request-modal .mm-request-box .mq-v47-action .mq-v494-action-row > label:has(#mmEditAssignee){grid-column:2!important;grid-row:1!important;min-width:0!important;display:flex!important;flex-direction:column!important;gap:6px!important;align-items:stretch!important;margin:0!important;}
.mm-request-modal .mm-request-box .mq-v47-action .mq-v494-action-row > label:has(#mmEditAssignee) input#mmEditAssignee{box-sizing:border-box!important;width:100%!important;min-height:42px!important;margin:0!important;}
.mm-request-modal .mm-request-box .mq-v47-action .mq-v494-action-row .mm-transition-tiles{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:8px!important;margin:0!important;}
.mm-request-modal .mm-request-box .mq-v47-action .mq-v494-action-row .mm-transition-tile{min-height:42px!important;margin:0!important;}
.mm-request-modal .mm-request-box .mq-v47-action .mq-v494-action-row .mq-v47-self{margin-top:1px!important;align-self:flex-start!important;}
@media(max-width:700px){
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditSummary){grid-column:1/3!important;grid-row:1!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditPriority){grid-column:1!important;grid-row:2!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mq-v47-status{grid-column:2!important;grid-row:2!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > label:has(#mmEditDescription){grid-column:1/3!important;grid-row:3!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mm-compact-attachments{grid-column:1/3!important;grid-row:4!important;}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid > .mq-v47-device{grid-column:1/3!important;grid-row:5!important;}
.mm-request-modal .mm-request-box .mq-v47-action .mq-v494-action-row{grid-template-columns:1fr!important;}
.mm-request-modal .mm-request-box .mq-v47-action .mq-v494-action-row > .mq-v49-stage-label{grid-column:1!important;grid-row:1!important;}
.mm-request-modal .mm-request-box .mq-v47-action .mq-v494-action-row > label:has(#mmEditAssignee){grid-column:1!important;grid-row:2!important;}
}
</style>
<style id="mediq-v49-6-attachments-flow-report">
/* V49.6: preserves existing IDs and action submission semantics */
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid>.mq-v47-status{
width:100%!important;min-width:0!important;min-height:70px!important;height:70px!important;
justify-content:center!important;align-self:stretch!important;box-sizing:border-box!important;
font-size:12px!important;display:flex!important;gap:5px!important;
}
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid>label:has(#mmEditPriority),
.mm-request-modal .mm-request-box .mm-form-section:first-child .mm-request-grid>label:has(#mmEditSummary){height:70px!important;min-height:70px!important;box-sizing:border-box!important}
.mm-request-modal .mm-compact-attachments{background:#f8fbfe!important;border:1px solid #c9e1f1!important;border-radius:9px!important;padding:8px!important;overflow:hidden!important}
.mm-request-modal .mm-compact-attachments>.mm-documents{display:flex!important;flex-flow:row wrap!important;align-content:flex-start!important;gap:5px!important;max-height:65px!important;min-height:28px!important;overflow-y:auto!important;overflow-x:hidden!important;margin-bottom:7px!important}
.mm-request-modal .mm-compact-attachments .mm-doc-pill{display:inline-flex!important;max-width:100%!important;min-width:0!important;overflow-wrap:anywhere!important;white-space:normal!important;text-decoration:none!important;background:white!important;border:1px solid #b6dff0!important;border-radius:7px!important;padding:4px 7px!important;color:#145b85!important;font-size:11px!important}
.mm-request-modal .mm-compact-attachments .mm-attach-trigger{min-height:39px!important;flex:0 0 auto!important;display:flex!important;flex-direction:row!important;align-items:center!important;justify-content:space-between!important;padding:6px!important}
.mm-request-modal .mm-compact-attachments input[type=file]{width:100%!important;min-width:0!important}
.mm-request-modal .mm-compact-attachments .mm-attach-trigger:not(:has(input[type=file]:focus)){box-shadow:none!important}
.mm-request-modal .mq-v496-flow{direction:rtl;grid-column:1/-1;width:100%;box-sizing:border-box;background:#f4faff;border:1px solid #d0e7f6;border-radius:9px;padding:9px 11px;margin:0 0 6px}
.mm-request-modal .mq-v496-flow-title{font-size:12px;font-weight:800;color:#155a80;margin-bottom:7px;text-align:right}
.mm-request-modal .mq-v496-flow-content{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:11px;color:#2f6887}
.mm-request-modal .mq-v496-stage-current{background:#e8f7ff;color:#00699b;border:1px solid #a8d6ef;border-radius:8px;padding:7px 11px;display:inline-flex;align-items:center;gap:7px;font-weight:800}
.mm-request-modal .mq-v496-stage-current i{display:inline-block;height:9px;width:9px;background:#159bd1;border-radius:50%;animation:mqV496Pulse 1.3s ease-in-out infinite}
.mm-request-modal .mq-v496-next{background:#fff;border:1px solid #c4dfef;padding:7px 10px;border-radius:8px}
@keyframes mqV496Pulse{0%,100%{box-shadow:0 0 0 2px #d6f0fd;opacity:1}50%{box-shadow:0 0 0 7px #d6f0fd;opacity:.45}}
@media(prefers-reduced-motion:reduce){.mm-request-modal .mq-v496-stage-current i{animation:none}}
</style>
<style id="mediq-v49-7-action-workflow">
/* V49.7 – action timeline mirrors the five-stage activity dashboard. */
.mm-request-modal .mq-v497-flow{display:block!important;width:100%!important;min-width:0!important;box-sizing:border-box!important;direction:rtl!important;padding:9px 12px 7px!important;margin:0 0 8px!important;border:1px solid #c8e2f4!important;border-radius:11px!important;background:#fff!important;overflow:hidden!important}
.mm-request-modal .mq-v497-flow h4{font-size:12px!important;font-weight:800!important;text-align:right!important;color:#12618a!important;margin:0 0 5px!important;padding:0!important}
.mm-request-modal .mq-v497-flow .mm-stage-grid{display:flex!important;flex-flow:row nowrap!important;direction:rtl!important;align-items:flex-start!important;justify-content:space-between!important;gap:0!important;margin:0!important;padding:4px 0 0!important;min-width:0!important;width:100%!important;overflow:visible!important}
.mm-request-modal .mq-v497-flow .mm-stage{position:relative!important;display:flex!important;flex:1 1 20%!important;min-width:0!important;min-height:44px!important;flex-direction:column!important;align-items:center!important;justify-content:flex-start!important;gap:5px!important;padding:2px 1px!important;border:0!important;background:transparent!important;color:#718da1!important;font-size:10px!important;line-height:1.6!important;font-weight:650!important;text-align:center!important;white-space:normal!important;overflow-wrap:anywhere!important}
.mm-request-modal .mq-v497-flow .mm-stage::before{content:''!important;position:relative!important;display:block!important;order:0!important;flex:0 0 13px!important;width:13px!important;height:13px!important;margin:0 auto!important;background:#e3eff6!important;border:2px solid #c5deeb!important;border-radius:50%!important;box-sizing:border-box!important;z-index:2!important}
.mm-request-modal .mq-v497-flow .mm-stage:not(:last-child)::after{content:''!important;position:absolute!important;display:block!important;top:8px!important;right:calc(50% + 9px)!important;left:auto!important;bottom:auto!important;width:calc(100% - 18px)!important;height:2px!important;background:#d3e5ee!important;z-index:1!important}
.mm-request-modal .mq-v497-flow .mm-stage.done::before{background:#70c5e4!important;border-color:#70c5e4!important}
.mm-request-modal .mq-v497-flow .mm-stage.done:not(:last-child)::after{background:#70c5e4!important}
.mm-request-modal .mq-v497-flow .mm-stage.current{color:#087cb6!important;font-weight:800!important}
.mm-request-modal .mq-v497-flow .mm-stage.current::before{background:#159bd1!important;border:3px solid #b6e7fb!important;box-shadow:0 0 0 4px #e5f6fd!important;animation:mqV497Active 1.25s ease-in-out infinite!important}
@keyframes mqV497Active{0%,100%{box-shadow:0 0 0 3px #d9f2fc;transform:scale(1)}50%{box-shadow:0 0 0 7px #e7f7ff;transform:scale(1.12)}}
@media (prefers-reduced-motion:reduce){.mm-request-modal .mq-v497-flow .mm-stage.current::before{animation:none!important}}
</style>
<style id="mediq-v49-12-upload-layout">
/* Repair upload controls inside the existing request modal. Scoped and responsive. */
.mm-request-modal .mm-request-grid > .mm-compact-attachments{
display:flex!important;flex-direction:column!important;gap:5px!important;
overflow:hidden!important;padding:8px 10px!important;min-width:0!important;
justify-content:flex-start!important;box-sizing:border-box!important;
}
.mm-request-modal .mm-compact-attachments>h4{flex:none!important;margin:0!important;line-height:17px!important;font-size:11px!important}
.mm-request-modal .mm-compact-attachments .mm-documents{
flex:none!important;display:flex!important;flex-flow:row wrap!important;align-items:center!important;
gap:4px!important;overflow-y:auto!important;overflow-x:hidden!important;
max-height:30px!important;min-height:18px!important;margin:0!important;padding:0!important;
}
.mm-request-modal .mm-compact-attachments .mm-doc-pill{white-space:nowrap!important;max-width:100%!important;overflow:hidden!important;text-overflow:ellipsis!important;padding:2px 6px!important;font-size:10px!important}
.mm-request-modal .mm-compact-attachments .mm-attach-controls{
display:grid!important;grid-template-columns:minmax(0,1fr) auto!important;align-items:center!important;
gap:7px!important;width:100%!important;min-width:0!important;flex:none!important;
}
.mm-request-modal .mm-compact-attachments .mm-attach-trigger{
display:flex!important;align-items:center!important;justify-content:flex-start!important;flex-direction:column!important;
width:100%!important;min-width:0!important;min-height:0!important;max-height:none!important;
height:auto!important;padding:4px 6px!important;margin:0!important;gap:3px!important;
box-sizing:border-box!important;border:1px solid #c6e1ef!important;background:#fff!important;
}
.mm-request-modal .mm-compact-attachments .mm-file-label{display:none!important}
.mm-request-modal .mm-compact-attachments input#mmIssueFile{
position:static!important;display:block!important;width:100%!important;max-width:100%!important;
min-width:0!important;height:27px!important;margin:0!important;padding:2px!important;
border:0!important;box-shadow:none!important;outline-offset:1px!important;background:transparent!important;
font-size:10px!important;line-height:20px!important;direction:ltr!important;box-sizing:border-box!important;
}
.mm-request-modal .mm-compact-attachments #mmUploadIssue{
flex:none!important;position:static!important;display:inline-flex!important;align-items:center!important;
justify-content:center!important;width:auto!important;min-width:90px!important;min-height:33px!important;
padding:6px 9px!important;margin:0!important;white-space:nowrap!important;font-size:10px!important;
}
.mm-request-modal .mm-compact-attachments #mmUploadIssue:disabled{opacity:.48!important;cursor:not-allowed!important}
.mm-request-modal .mm-compact-attachments .mm-upload-message{
flex:none!important;display:block!important;width:100%!important;min-width:0!important;
font-size:10px!important;line-height:1.6!important;overflow:hidden!important;
white-space:nowrap!important;text-overflow:ellipsis!important;color:#35617a!important;margin:0!important;
}
@media(max-width:650px){
.mm-request-modal .mm-compact-attachments .mm-attach-controls{grid-template-columns:minmax(0,1fr)!important}
.mm-request-modal .mm-compact-attachments #mmUploadIssue{width:100%!important}
.mm-request-modal .mm-request-grid > .mm-compact-attachments{height:auto!important;min-height:125px!important}
}
</style>
<style id="mediq-receipt-dana-two-copies">
#mediq-dashboard .mm-handover-card,
#mediq-dashboard .mm-handover-card *,
#mediq-dashboard .mm-handover-card input,
#mediq-dashboard .mm-handover-card button,
#mediq-dashboard .mm-handover-card label{font-family:inherit!important}
</style> |