/* Shared action + feedback language for every Hotel Board work page.
   Action colors describe what a press WILL DO; room-card colors describe current room state. */
:root{
  --action-positive:#12a563;
  --action-positive-hover:#0d8a52;
  --action-positive-soft:#ddf5e8;
  --action-info:#2a50e8;
  --action-info-hover:#1e3fc8;
  --action-info-soft:#e3e9ff;
  --action-warning:#d99a12;
  --action-warning-soft:#fff0bf;
  --action-warning-ink:#5b4100;
  --action-danger:#e1503c;
  --action-danger-hover:#c33f2d;
  --action-danger-soft:#fce4de;
  --action-disabled:#d5d9d5;
  --action-disabled-ink:#8a9290;
  /* พื้นตั้งต้นของแถบข้อความสั้น — สีกลาง ไม่ใช่สีสถานะ (สีมาจาก data-tone เท่านั้น) */
  --toast-bg:#343a40;
}

/* Positive: complete, continue, save, check in/out and cleaning. */
.action-positive,
.primary[data-act="checkin"],
.primary[data-act="checkout"],
.primary[data-act="checkout-real"],
.primary[data-act="housekeeping"],
.rsave,
.rsubmit,
.confirm,
.close-primary,
.btn.primary:not(.danger){
  background:var(--action-positive)!important;
  border-color:var(--action-positive)!important;
  color:#fff!important;
  box-shadow:0 10px 22px -8px rgba(18,165,99,.48)!important;
}

/* Information tools: edit, view, print and INV. */
.action-info,
.btn.blue{
  background:var(--action-info-soft)!important;
  border-color:#aebcf5!important;
  color:var(--action-info-hover)!important;
}
.btn.blue.action-solid,
.action-info.action-solid{
  background:var(--action-info)!important;
  border-color:var(--action-info)!important;
  color:#fff!important;
}

/* Secondary actions stay quiet but remain visibly pressable. */
.action-secondary{
  background:var(--surface,#f2f1ed)!important;
  border:1.5px solid var(--line-2,#cfd3ce)!important;
  color:var(--ink-2,#565e60)!important;
  box-shadow:none!important;
}

/* Selected choices use blue tint; execution buttons use solid semantic colors. */
.action-choice.on,
.bp-dialog button.sel,
.bp-dialog button.on{
  background:var(--action-info-soft)!important;
  border-color:var(--action-info)!important;
  color:var(--action-info-hover)!important;
  box-shadow:none!important;
}
.action-choice:not(.on){
  background:var(--surface,#f2f1ed)!important;
  border-color:var(--line-2,#cfd3ce)!important;
  color:var(--ink-2,#565e60)!important;
}

/* Warning: reversible recovery or action that needs attention. */
.action-warning,
.primary[data-act="undo"],
.ms-undo-btn{
  background:var(--action-warning-soft)!important;
  border-color:var(--action-warning)!important;
  color:var(--action-warning-ink)!important;
  box-shadow:none!important;
}

/* Danger: cancel, delete or remove an existing business record/state. */
.action-danger,
.cancelin,
.delete-confirm-go,
.btn.danger,
#cancelBtn{
  background:var(--action-danger-soft)!important;
  border-color:var(--action-danger)!important;
  color:var(--action-danger-hover)!important;
  box-shadow:none!important;
}
.action-danger.action-solid,
.btn.danger.action-solid,
.bp-button-danger.action-solid{
  background:var(--action-danger)!important;
  color:#fff!important;
}

/* Popup inventory: every card uses the same semantic hierarchy, including
   legacy cards whose buttons still carry inline styles. */
.bp-dialog :is(
  .bp-button-primary,.move-room-confirm,.go,
  #_aok,#_ts,#q-save,#mi-save,#_roc2,
  #np-saveclose,#ep-save,#ed-save,
  #ni-saveclose,#rSubmit,#roSave,#roomAdd,
  [data-close-save]
){
  background:var(--action-positive)!important;
  border-color:var(--action-positive)!important;
  color:#fff!important;
  box-shadow:0 10px 22px -8px rgba(18,165,99,.42)!important;
}
.bp-dialog :is(#_ro,#np-save,#ni-save){
  background:var(--action-info-soft)!important;
  border:1.5px solid var(--action-info)!important;
  color:var(--action-info-hover)!important;
  box-shadow:none!important;
}
.bp-dialog :is(
  .bp-button:not(.bp-button-primary):not(.bp-button-danger),
  .move-room-cancel,#_acan,#_tc,#q-cancel,#mi-close,#_rc,
  #np-cancel,#ep-cancel,#ed-cancel,#ni-cancel,
  #roomCancel,#confirmNo,[data-close-cancel]
){
  background:var(--surface,#f2f1ed)!important;
  border:1.5px solid var(--line-2,#cfd3ce)!important;
  color:var(--ink-2,#565e60)!important;
  box-shadow:none!important;
}
.bp-dialog :is(.bp-button-danger,#confirmYes){
  background:var(--action-danger)!important;
  border-color:var(--action-danger)!important;
  color:#fff!important;
  box-shadow:none!important;
}

/* Domain choices inside popup cards. */
.bp-dialog :is([data-v="close"].sel,[data-close-state][data-v="closed"].on,[data-m="out"].sel){
  background:var(--action-danger)!important;
  border-color:var(--action-danger)!important;
  color:#fff!important;
}
.bp-dialog :is([data-v="sell"].sel,[data-close-state][data-v="sell"].on,[data-m="in"].sel){
  background:var(--action-positive)!important;
  border-color:var(--action-positive)!important;
  color:#fff!important;
}
.bp-dialog [data-r].sel{
  background:var(--action-warning-soft)!important;
  border-color:var(--action-warning)!important;
  color:var(--action-warning-ink)!important;
}

/* Room popup cards are not .bp-dialog, so their meanings are mapped here. */
.qmenu .invtog.on{background:var(--action-info-soft)!important;border-color:var(--action-info)!important;color:var(--action-info-hover)!important}
.qmenu .invcancel,
.qmenu .cancelin{background:var(--action-danger-soft)!important;border-color:var(--action-danger)!important;color:var(--action-danger-hover)!important}
.move-room-panel .move-room-choice button.on{background:var(--action-info-soft)!important;border-color:var(--action-info)!important;color:var(--action-info-hover)!important}

.action-positive:disabled,
.action-info:disabled,
.action-warning:disabled,
.action-danger:disabled,
.bp-dialog button:disabled,
.rsave:disabled,
.rsubmit:disabled,
.confirm:disabled,
.close-primary:disabled,
.btn.primary:disabled,
.btn.blue:disabled{
  background:var(--action-disabled)!important;
  border-color:var(--action-disabled)!important;
  color:var(--action-disabled-ink)!important;
  box-shadow:none!important;
}

/* Feedback has one fixed home: action failures and warnings at bottom.
   Connectivity remains the persistent top banner owned by each page. */
/* ---- แถบข้อความสั้น (toast) — หน้าตาชุดเดียวของทุกหน้า ----
   เดิมก๊อป CSS ชุดนี้ไว้ 5 หน้าแล้วดริฟต์: index กับ maid ประกาศพื้นแดง (--broke-dk) ส่วน
   maintenance/consignment/supply ประกาศพื้นกลาง (--ink) — แต่ทั้งห้าหน้าถูกกฎ !important
   ในไฟล์นี้ทับเป็น #343a40 อยู่แล้ว พื้นแดงจึงเป็น CSS ตายที่ไม่เคยได้ใช้ (อ่านโค้ดแล้วเข้าใจผิดได้)
   ตอนนี้เหลือกฎฐานชุดเดียวใช้ token --toast-bg แล้วให้ data-tone เป็นตัวเปลี่ยนสีเท่านั้น
   ตำแหน่ง bottom ยังเป็นของแต่ละหน้า เพราะต้องหลบแถบล่างคนละแบบ (ดู .toast{bottom:...} ในหน้านั้น)
   ห้ามใส่ bottom ในกฎฐานนี้: ไฟล์นี้ถูก <link> ไว้หลัง <style> ของหน้า กฎที่ specificity เท่ากัน
   จะทับของหน้าทิ้ง — เคยพลาดมาแล้ว toast ของ maid หล่นจาก 84px มาทับแถบเมนูล่าง
   กลไกโชว์ใช้ class .show ชุดเดียว — เดิม index กับ maid สั่งด้วย style.opacity คนละทางกับอีกสามหน้า */
#apiToast,#toast,.toast,#feedbackToast{
  position:fixed;left:50%;transform:translateX(-50%) translateY(8px);
  z-index:500;max-width:calc(100vw - 32px);
  background:var(--toast-bg,#343a40);color:#fff;
  padding:10px 18px;border-radius:999px;text-align:center;font-size:12.5px;font-weight:750;
  box-shadow:0 10px 26px rgba(10,16,28,.3);pointer-events:none;
  opacity:0;transition:opacity 200ms,transform 200ms;
}
/* folio/invoice ใช้ #feedbackToast เหมือนกันทั้งคู่ ตำแหน่งจึงอยู่ที่นี่ ไม่ใช่ของรายหน้า
   ยกพ้นแถบเมนูล่างมือถือด้วย --mobbar-h เหมือน #apiToast ของหน้า Room */
#feedbackToast{bottom:max(26px,calc(var(--mobbar-h,0px) + 8px))}
#apiToast.show,#toast.show,.toast.show,#feedbackToast.show{
  opacity:1;transform:translateX(-50%);
}
#apiToast[data-tone="error"],#toast[data-tone="error"],.toast[data-tone="error"],#feedbackToast[data-tone="error"]{
  background:var(--action-danger-hover)!important;
}
#apiToast[data-tone="warning"],#toast[data-tone="warning"],.toast[data-tone="warning"],#feedbackToast[data-tone="warning"]{
  background:var(--action-warning)!important;
  color:var(--action-warning-ink)!important;
}
#apiToast[data-tone="success"],#toast[data-tone="success"],.toast[data-tone="success"],#feedbackToast[data-tone="success"]{
  background:var(--action-positive-hover)!important;
}

/* Field validation stays next to its field. */
.bp-error,.err,[data-field-error]{color:var(--action-danger-hover)!important}
