/* ============================================================ */
/*  CSP-compliant utility classes  (v2026042304)                */
/*  Replaces all inline style="..." attributes and JS .css()    */
/*  to satisfy strict style-src 'self' without 'unsafe-inline'  */
/* ============================================================ */

/* --- Visibility --- */
.csp-hidden { display: none !important; }

/* --- forceFixPopup overlay (static parts; dynamic widths via adoptedStyleSheets) --- */
.csp-popup-overlay {
  position: fixed !important;
  top: 50% !important;
  left: 50% !important;
  transform: translate(-50%, -50%) !important;
  height: auto !important;
  z-index: 99999 !important;
  margin: 0 !important;
  box-sizing: border-box !important;
  overflow: hidden !important;
  display: flex !important;
  flex-direction: column !important;
}

.csp-popup-content {
  overflow-y: auto !important;
  overflow-x: hidden !important;
  flex: 1 !important;
  flex-shrink: 1 !important;
  padding: 5px 10px 15px 8px !important;
  margin: 0 !important;
  box-sizing: border-box !important;
}

.csp-flex-noshrink {
  flex-shrink: 0 !important;
}

.csp-flex-bottom {
  flex-shrink: 0 !important;
  margin-top: auto !important;
}

/* --- Image viewer fade transitions --- */
.csp-image-viewer-show {
  display: flex !important;
  align-items: center;
  justify-content: center;
  animation: cspFadeIn 0.3s ease forwards;
}
.csp-image-viewer-hide {
  animation: cspFadeOut 0.3s ease forwards;
}
@keyframes cspFadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}
@keyframes cspFadeOut {
  from { opacity: 1; }
  to   { opacity: 0; }
}

/* --- Rating star backgrounds (relative to stylesheet location) --- */
.csp-star-off {
  background: url(../img/star.png) 0% 0% / contain no-repeat !important;
}
.csp-star-on {
  background: url(../img/star_on.png) 0% 0% / contain no-repeat !important;
}

/* --- Upload button states --- */
.btn-upload.csp-uploading {
  background-image: url(../img/uploading.gif) !important;
}

/* --- TalkingView generated‑HTML replacement classes --- */
.csp-sticker-img {
  height: auto;
  width: auto;
  max-height: 120px;
  max-width: 120px;
}

.csp-file-img {
  position: relative;
  max-width: 500px;
  display: block;
  width: 100%;
}

.csp-file-video {
  max-width: 500px;
  display: block;
  width: 100%;
}

.csp-file-link {
  width: 100%;
}

/* ============================================================ */
/*  File Card — styled file download cards for staff uploads    */
/* ============================================================ */

/* --- Message bubble transparency when containing file/image cards --- */
.msg-bubble.csp-bubble-transparent {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
}
.msg-bubble.csp-bubble-transparent::before,
.msg-bubble.csp-bubble-transparent::after {
  display: none !important;
  content: none !important;
  opacity: 0 !important;
  visibility: hidden !important;
}
.msg:has(.csp-bubble-transparent)::before,
.msg:has(.csp-bubble-transparent)::after,
.inline-msg:has(.csp-bubble-transparent)::before,
.inline-msg:has(.csp-bubble-transparent)::after {
  display: none !important;
  content: none !important;
  opacity: 0 !important;
  visibility: hidden !important;
}
.inline-msg:has(.csp-bubble-transparent) {
  background: transparent !important;
  padding: 0 !important;
}

/* --- File card --- */
/* Scenario A: a message bubble that contains ONLY file cards (one or many,
   no text). We neutralise the bubble chrome so the cards stand alone.
   Detection: the .inline-msg (or .msg-bubble direct) has at least one
   .csp-file-card AND has no element children that are not file cards or
   <br>. Text/whitespace between cards is ignored by :has(), which is what
   we want for server-rendered `{{FILE:MKEY}}` sequences. */
.msg-bubble:has(> .inline-msg > .csp-file-card):not(:has(> .inline-msg > *:not(.csp-file-card):not(br))),
.msg-bubble:has(> .csp-file-card):not(:has(> *:not(.csp-file-card):not(br):not(.inline-msg))) {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  padding: 0 !important;
}
.msg-bubble:has(> .inline-msg > .csp-file-card):not(:has(> .inline-msg > *:not(.csp-file-card):not(br)))::before,
.msg-bubble:has(> .inline-msg > .csp-file-card):not(:has(> .inline-msg > *:not(.csp-file-card):not(br)))::after,
.msg-bubble:has(> .csp-file-card):not(:has(> *:not(.csp-file-card):not(br):not(.inline-msg)))::before,
.msg-bubble:has(> .csp-file-card):not(:has(> *:not(.csp-file-card):not(br):not(.inline-msg)))::after {
  display: none !important;
}
.inline-msg:has(> .csp-file-card):not(:has(> *:not(.csp-file-card):not(br))) {
  background: transparent !important;
  padding: 0 !important;
}
.inline-msg:has(> .csp-file-card):not(:has(> *:not(.csp-file-card):not(br)))::before,
.inline-msg:has(> .csp-file-card):not(:has(> *:not(.csp-file-card):not(br)))::after {
  display: none !important;
}
.msg:has(> .msg-bubble > .inline-msg > .csp-file-card):has(> .msg-bubble:not(:has(> .inline-msg > *:not(.csp-file-card):not(br))))::before,
.msg:has(> .msg-bubble > .inline-msg > .csp-file-card):has(> .msg-bubble:not(:has(> .inline-msg > *:not(.csp-file-card):not(br))))::after {
  display: none !important;
}

.csp-file-card {
  display: block;
  border-radius: 12px;
  padding: 18px;
  box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  font-family: sans-serif;
  background-color: #fff;
  box-sizing: border-box;
  /* No outer margin by default: the card must fit within the space the
     bubble would have occupied, so it never pushes past the message's
     timestamp or crowds the following .msg-click-list.
     margin-left: 10px gives a small indent so the card doesn't sit flush
     against the avatar / bubble's left edge. */
  margin: 0 0 0 10px;
  width: fit-content;
  max-width: 500px;
  min-width: 250px;
}

/* Scenario B: bubble has chrome (text + file). Give the FIRST card a small
   top gap so it sits comfortably below the text. Bottom margin stays 0 so
   the bubble's own padding-bottom governs the distance to the timestamp. */
.msg-bubble:has(> .inline-msg > *:not(.csp-file-card):not(br)) .csp-file-card,
.msg-bubble:has(> *:not(.csp-file-card):not(br):not(.inline-msg)) .csp-file-card {
  margin: 8px 0 0 10px;
}

/* Scenarios C/D (text + file cards): TalkingView#_extractFileCardsFromBubble
   relocates the cards to be direct children of .msg, sitting between the
   bubble and the timestamp. Give the FIRST extracted card a clear gap
   below the bubble. */
.msg > .msg-bubble + .csp-file-card {
  margin-top: 25px;
}

/* When multiple file cards stack (scenario A with many files, scenario B
   with text + many files, or scenarios C/D after extraction), keep them
   clearly separated. Placed after the first-card rule so it wins for
   cards 2..N. */
.csp-file-card + .csp-file-card,
.csp-file-card + br + .csp-file-card {
  margin-top: 25px;
}

/* When a quick-reply follows, give the LAST file card in the .msg a
   bottom gap so it doesn't hug the quick-reply block. Uses :has(~ ...)
   because .msg-status-indicator and .msg-wraper sit between .msg and
   .msg-click-list in the template. This replaces any margin-top on the
   quick-reply itself (avoid stacking gaps). */
.msg:has(~ .msg-click-list.csp-click-quickreply) .csp-file-card:last-child {
  margin-bottom: 25px;
}

/* QuickReply \u5834\u666f\uff1a.csp-quickreply-bubble \u8207 .link-btn-wrapper \u540c\u5c45
   .msg-click-list \u5167\uff0c_extractFileCardsFromBubble \u6703\u5c07 .csp-file-card
   \u5f9e\u6c23\u6ce1\u62bd\u51fa\u63d2\u5230\u6c23\u6ce1\u4e4b\u5f8c\u3001.link-btn-wrapper \u4e4b\u524d\u3002
   \u5728\u9019\u7a2e\u60c5\u5883\u4e0b\u7d66\u6700\u5f8c\u4e00\u5f35\u5361\u7247\u4e00\u500b\u4e0b\u5916\u8ddd\uff0c\u8207\u4e0b\u65b9\u7684\u5feb\u9078\u6309\u9215\u5340\u9694\u958b\u3002 */
.msg-click-list.csp-click-quickreply .csp-file-card:last-child {
  margin-bottom: 25px;
}

.csp-file-card-content {
  display: flex;
  align-items: center;
  gap: 8px;
  /* Use rem so the filename follows .csp-font-16/18/20/24 on <html>
     (toggled by .font-size-btn). */
  font-size: 1rem;
  width: auto;
  padding-bottom: 10px;
  border-bottom: 1px solid #e8e8e8;
}

.csp-file-card-icon {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  background-repeat: no-repeat;
  background-position: center center;
  background-size: contain;
  border-radius: 6px;
  padding: 2px;
}

.csp-file-card-name {
  flex: 0 1 auto;
  min-width: 0;
  max-width: calc(500px - 120px);
  word-break: break-word;
  overflow-wrap: break-word;
  line-height: 1.3;
  overflow: hidden;
  text-overflow: ellipsis;
}

.csp-file-card-tools {
  display: flex;
  align-items: center;
  margin-left: 48px;
  padding-top: 10px;
  flex-shrink: 0;
}

.csp-file-card-download {
  display: inline-flex;
  align-items: center;
  color: #1a73e8;
  text-decoration: none;
  /* rem: follows the global font-size toggled by .font-size-btn. */
  font-size: 0.875rem;
  min-width: 48px;
  justify-content: flex-start;
  cursor: pointer;
}
.csp-file-card-download:hover {
  text-decoration: underline;
}

.csp-file-card-dl-icon {
  width: 16px;
  height: 16px;
  background: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTggMTFMNCA3SDdWMUg5VjdIMTJMOCAxMVoiIGZpbGw9IiMxYTczZTgiLz4KPHBhdGggZD0iTTEgMTNIMTVWMTVIMVYxM1oiIGZpbGw9IiMxYTczZTgiLz4KPC9zdmc+") no-repeat center center;
  background-size: contain;
  margin-right: 6px;
  margin-left: -40px;
  display: inline-block;
  flex-shrink: 0;
}

.csp-file-card-dl-text {
  font-size: inherit;
}

.csp-file-card-size {
  /* rem: follows the global font-size toggled by .font-size-btn. */
  font-size: 0.875rem;
  color: #666;
  margin-left: auto;
  white-space: nowrap;
}

/* --- File type icons (PNG base64) --- */
.csp-ficon-pdf {
  background-image: url("data:image/png;base64,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");
}
.csp-ficon-word {
  background-image: url("data:image/png;base64,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");
}
.csp-ficon-excel {
  background-image: url("data:image/png;base64,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");
}
.csp-ficon-ppt {
  background-image: url("data:image/png;base64,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");
}
.csp-ficon-txt {
  background-image: url("data:image/png;base64,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");
}
.csp-ficon-csv {
  background-image: url("data:image/png;base64,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");
}
.csp-ficon-json {
  background-image: url("data:image/png;base64,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");
}
.csp-ficon-generic {
  background-image: url("data:image/png;base64,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");
}

/* --- Image card --- */
.csp-image-card {
  max-width: 100% !important;
  width: auto !important;
}

.csp-image-card-img {
  max-width: 100%;
  height: auto;
  cursor: pointer;
  pointer-events: auto;
  border-radius: 8px;
}

/* --- Image zoom modal --- */
.csp-image-modal {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0,0,0,0.9);
  z-index: 999999;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.csp-image-modal-img {
  max-width: 90%;
  max-height: 90%;
  object-fit: contain;
  border-radius: 8px;
  box-shadow: 0 4px 20px rgba(255,255,255,0.2);
}

.csp-image-modal-close {
  position: absolute;
  top: 20px;
  right: 30px;
  color: white;
  font-size: 40px;
  font-weight: bold;
  cursor: pointer;
  z-index: 1000000;
  user-select: none;
}

/* --- Preview modal --- */
.csp-preview-modal {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0,0,0,0.8);
  z-index: 999999;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 10px;
  box-sizing: border-box;
}

.csp-preview-modal--visible {
  display: flex !important;
}

.csp-preview-modal-content {
  background: white;
  border-radius: 8px;
  width: 90%;
  height: 90%;
  position: relative;
  display: flex;
  flex-direction: column;
  box-shadow: 0 4px 20px rgba(0,0,0,0.3);
}

.csp-preview-modal-content--mobile {
  width: 100%;
  height: 100%;
}

.csp-preview-modal-header {
  padding: 10px 20px;
  border-bottom: 1px solid #eee;
  display: flex;
  justify-content: flex-end;
  align-items: center;
  background: #f8f9fa;
  border-radius: 8px 8px 0 0;
  min-height: 40px;
  flex-shrink: 0;
}

.csp-preview-modal-close {
  background: none;
  border: none;
  font-size: 24px;
  cursor: pointer;
  padding: 0;
  width: 40px;
  height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  transition: background 0.2s;
}

.csp-preview-modal-close:hover {
  background: #f0f0f0;
}

.csp-preview-modal-body {
  flex: 1;
  padding: 0;
  overflow: auto;
  position: relative;
}

/* --- PDF canvas viewer (PDF.js) --- */
.csp-pdf-viewer {
  display: flex;
  flex-direction: column;
  height: 100%;
}

.csp-pdf-toolbar {
  padding: 8px 12px;
  background: #f0f0f0;
  border-bottom: 1px solid #ddd;
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  flex-shrink: 0;
}

.csp-pdf-filename {
  font-family: sans-serif;
  font-size: 14px;
  color: #333;
  font-weight: 500;
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.csp-pdf-nav {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}

.csp-pdf-page-info {
  font-size: 13px;
  color: #555;
  min-width: 60px;
  text-align: center;
}

.csp-pdf-btn {
  padding: 5px 10px;
  border: 1px solid #ccc;
  border-radius: 4px;
  background: #fff;
  font-size: 13px;
  cursor: pointer;
  color: #333;
  text-decoration: none;
  display: inline-block;
  transition: background 0.2s;
}

.csp-pdf-btn:hover {
  background: #e8e8e8;
}

.csp-pdf-btn-download {
  background: #1976d2;
  color: #fff;
  border-color: #1565c0;
}

.csp-pdf-btn-download:hover {
  background: #1565c0;
}

.csp-pdf-zoom {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-shrink: 0;
}

.csp-pdf-zoom-select {
  padding: 4px 6px;
  border: 1px solid #ccc;
  border-radius: 4px;
  background: #fff;
  font-size: 13px;
  color: #333;
  cursor: pointer;
  min-width: 100px;
}

.csp-pdf-zoom-select:focus {
  outline: none;
  border-color: #1976d2;
}

.csp-pdf-btn-zoomin,
.csp-pdf-btn-zoomout {
  min-width: 28px;
  padding: 4px 8px;
  font-weight: bold;
  font-size: 14px;
}

.csp-pdf-canvas-container {
  flex: 1;
  overflow: auto;
  background: #525659;
  display: flex;
  justify-content: center;
  align-items: flex-start;
  padding: 16px 8px;
  touch-action: pan-x pan-y pinch-zoom;
  -webkit-overflow-scrolling: touch;
}

.csp-pdf-canvas {
  display: block;
  background: #fff;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.5);
  max-width: none;
  height: auto;
}

.csp-preview-error {
  text-align: center;
  padding: 40px;
  color: #666;
  font-size: 14px;
}

.csp-preview-error a {
  color: #1976d2;
  text-decoration: underline;
}

/* --- Text preview --- */
.csp-text-preview {
  background: #f8f9fa;
  padding: 20px;
  border-radius: 4px;
  overflow: auto;
  white-space: pre-wrap;
  font-family: "Courier New", monospace;
  font-size: 14px;
  line-height: 1.5;
}

/* --- Body scroll lock --- */
.csp-body-no-scroll {
  overflow: hidden !important;
}

/* --- Preview fallback --- */
.csp-preview-fallback {
  text-align: center;
  padding: 40px;
}

.csp-preview-fallback-icon {
  font-size: 48px;
  margin-bottom: 20px;
}

/* --- Shared states --- */
.csp-body-no-scroll {
  overflow: hidden !important;
}

.csp-loading {
  pointer-events: none;
  opacity: 0.6;
}

/* --- Responsive --- */
@media (max-width: 768px) {
  .csp-file-card {
    width: 90% !important;
    max-width: 90% !important;
  }

  .csp-file-card-name {
    max-width: calc(90vw - 160px) !important;
  }
}

/* --- Font size toggle classes (applied to html, body) --- */
.csp-font-16 { font-size: 16px !important; }
.csp-font-18 { font-size: 18px !important; }
.csp-font-20 { font-size: 20px !important; }
.csp-font-24 { font-size: 24px !important; }

/* --- Scroll overflow helpers --- */
.csp-overflow-hidden { overflow-y: hidden !important; }

/* --- Opacity transition for restart flow --- */
.csp-fade-transition { transition: opacity 0.3s ease; }
.csp-opacity-dim     { opacity: 0.3; }

/* --- msg-click-list positioning variants --- */
.msg-click-list.csp-click-quickreply {
  left: 35px;
  top: 10px;
}
.msg-click-list.csp-click-buttons {
  position: static;
  left: auto;
  top: auto;
  margin-left: 35px;
}

/* --- Rich message scroll container (applied directly to .msg) --- */
.csp-swiper-scroll-padding {
  padding: 0 !important;
}

/* --- Color utilities (for template content) --- */
.csp-color-red {
  color: rgb(230, 0, 0);
}
.csp-color-green-bold {
  color: green;
  font-weight: bold;
}

/* --- Image upload preview (background set via adoptedStyleSheets) --- */
.csp-bg-cover {
  background-size: cover !important;
  background-position: center !important;
}

/* --- Bottom menu icon backgrounds --- */
.mmenu-icon-1 { background-image: url(../img/menu-icon1@2x.png); }
.mmenu-icon-2 { background-image: url(../img/menu-icon2@2x.png); }
.mmenu-icon-3 { background-image: url(../img/menu-icon3@2x.png); }
.mmenu-icon-4 { background-image: url(../img/menu-icon4@2x.png); }

/* --- RichMessage inline style replacements --- */
.csp-link-btn-nopad { padding-left: 0px; }
.csp-card-full-width { width: 100%; }
.csp-img-container-500 { width: 500px !important; }
.csp-imagemap-block {
  padding: 0;
  width: calc(100vw - 94px) !important;
  min-width: 226px;
  max-width: 460px;
}
.csp-action-list { margin-top: 5px; }
.csp-clear-both { clear: both; }
.csp-quickreply-bubble {
  position: relative;
  left: 35px;
  margin: 10px;
}

/* --- Dialog button disabled state --- */
.csp-dialog-disabled {
  pointer-events: none;
  opacity: 0.5;
}

/* --- Template form styles --- */
.csp-question-text {
  text-align: center;
  font-size: 1rem; /* 跟隨 .font-size-btn */
}
.csp-question-text-left {
  font-size: 1rem; /* 跟隨 .font-size-btn */
}
.csp-textarea-full {
  resize: none;
  width: 100%;
}
.csp-image-preview {
  margin-top: 10px;
}
.csp-image-preview-img {
  max-width: 100%;
  height: auto;
}

/* ============================================================ */
/*  RWD fixes for chat alignment, images, button containers,    */
/*  input bar overflow, and real supporter avatar                */
/* ============================================================ */

/* --- msg-bubble responsive max-width --- */
.msg .msg-bubble {
  max-width: 650px;
  width: auto;
}

@media (max-width: 768px) {
  .msg .msg-bubble {
    max-width: 90%;
  }
}

@media (max-width: 480px) {
  .msg .msg-bubble {
    max-width: 95%;
  }
}

/* --- msg-click-list positioning and layout --- */
.msg-click-list {
  position: static;
  left: auto;
  top: auto;
  margin-left: 35px;
}

@media (max-width: 768px) {
  .msg-click-list {
    margin-left: 45px;
  }
}

/* When msg is empty but click-list has buttons, remove gap */
.msg-box .msg:empty + .msg-status-indicator + .msg-wraper + .msg-click-list,
.msg-click-list.csp-click-list-no-gap {
  margin-top: -38px;
}

/* --- msg-click-list bubble items --- */
.msg-click-list .msg-bubble {
  max-width: 650px;
  width: auto;
  position: relative;
  left: 0;
  margin: 10px;
}

@media (max-width: 768px) {
  .msg-click-list .msg-bubble {
    max-width: 90%;
    margin: 5px 0;
  }
}

@media (max-width: 480px) {
  .msg-click-list .msg-bubble {
    max-width: 95%;
  }
}

/* --- link-btn-wrapper: remove left padding (align with message) --- */
.link-btn-wrapper {
  padding-left: 0 !important;
}

/* --- inline-msg text handling --- */
.inline-msg {
  line-height: 1.8rem;
  word-break: normal;
  word-wrap: break-word;
  overflow-wrap: break-word;
}

/* --- Image sizing: inline-msg and msg-bubble images --- */
.inline-msg img,
.msg-bubble img {
  width: 100%;
  max-width: 650px;
  height: auto !important;
  display: block;
  margin: 10px 0;
}

/* --- Button message containers full-width --- */
.buttons-message-container,
.buttons-message-block {
  width: 100% !important;
  max-width: 100% !important;
}

.buttons-message-container img,
.buttons-message-block img {
  width: 100%;
  max-width: 100%;
  height: auto;
  display: block;
  margin: 10px 0;
}

/* --- Input bar overflow fix for mobile --- */
@media (max-width: 768px) {
  .input-bar {
    max-width: 100vw;
    box-sizing: border-box;
  }

  .input-bar .inputfield {
    max-width: calc(100vw - 20px);
    box-sizing: border-box;
  }
}

/* --- Real supporter avatar (active when body has .real-supporter-active) --- */
body.real-supporter-active .msg-box-robot .avatar.real-supporter-avatar {
  background-size: cover;
}


/* ============================================================================ */
/*  Mobile modal scroll-lock + z-index layering                                 */
/*  Activated by front/js/mobile-modal-scroll-lock.js on Android/iOS only       */
/*  (adds .csp-mobile-fix to <html>). Desktop is unaffected.                    */
/* ============================================================================ */

html.csp-mobile-fix,
html.csp-mobile-fix body {
  overscroll-behavior: none !important;
  -webkit-overflow-scrolling: touch !important;
}

/* Body scroll-lock while .customForm-wrapper is visible (iOS pattern). */
html.csp-mobile-fix body.csp-mobile-modal-open {
  overflow: hidden !important;
  position: fixed !important;
  width: 100% !important;
  height: 100% !important;
  top: 0 !important;
  left: 0 !important;
}

/* --- z-index layering (mobile only) ---
 *   top-banner-outer   9997
 *   customForm-wrapper 9998
 *   top-bar-outer     10000
 *   image-viewer      10001 / close 10002
 *   #survey-overlay   10003 / wrapper 10004 / close-btn 10005
 */
html.csp-mobile-fix .top-bar-outer {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  width: 100% !important;
  z-index: 10000 !important;
  pointer-events: auto !important;
}
html.csp-mobile-fix .top-bar-outer * {
  pointer-events: auto !important;
}

html.csp-mobile-fix .top-banner-outer {
  position: fixed !important;
  top: 50px !important;
  left: 0 !important;
  width: 100% !important;
  z-index: 9997 !important;
  pointer-events: auto !important;
}
html.csp-mobile-fix .top-banner-outer * {
  pointer-events: auto !important;
}

html.csp-mobile-fix .customForm-wrapper {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  width: 100% !important;
  height: 100vh !important;
  height: 100dvh !important;
  padding-top: 50px !important;
  overscroll-behavior: none !important;
  touch-action: pan-y !important;
  z-index: 9998 !important;
}

html.csp-mobile-fix .image-viewer {
  z-index: 10001 !important;
}
html.csp-mobile-fix .image-viewer .close {
  z-index: 10002 !important;
  pointer-events: auto !important;
}

html.csp-mobile-fix #survey-overlay {
  z-index: 10003 !important;
  pointer-events: auto !important;
}
html.csp-mobile-fix #survey-overlay * {
  pointer-events: auto !important;
}
html.csp-mobile-fix .survey-wrapper {
  z-index: 10004 !important;
}
html.csp-mobile-fix .survey .close-btn {
  z-index: 10005 !important;
  pointer-events: auto !important;
}


/* --- Custom form validation (CSP-safe replacements for XSS #10) --- */
.required-asterisk {
    color: red;
    margin-left: 3px;
}

.error-message {
    color: red;
    font-size: 0.875rem; /* 跟隨 .font-size-btn */
    margin-top: 5px;
    display: none;
}

.error-message.is-visible {
    display: block;
}

.error-border {
    border: 2px solid red !important;
}

.custom-upload-box.error-border {
    border: 2px solid red !important;
    border-radius: 4px;
}

.btn-disabled-visual {
    opacity: 0.5;
    cursor: not-allowed;
}

/* ============================================================ */
/*  Alert 攔截自訂 UI（取代 customForm 原生 alert）              */
/*  對應 XSS #11 修補，全部以 CSS class 呈現，符合 strict CSP    */
/*  由 front/js/AlertInterceptor.js 觸發                         */
/* ============================================================ */

/* --- body scroll-lock（在 custom modal 開啟時） --- */
body.csp-alert-scroll-lock {
    overflow: hidden !important;
    position: fixed !important;
    width: 100% !important;
    touch-action: none !important;
}

/* --- loading 遮罩 --- */
.csp-alert-loading {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100vh;
    background: rgba(0, 0, 0, 0.7);
    z-index: 2147483647;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    -webkit-overflow-scrolling: touch;
}

.csp-alert-loading-box {
    background: #fff;
    padding: 30px 40px;
    border-radius: 12px;
    text-align: center;
    box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
    max-width: 90%;
    box-sizing: border-box;
}

.csp-alert-loading-spinner {
    width: 50px;
    height: 50px;
    border: 4px solid #f3f3f3;
    border-top: 4px solid #1976d2;
    border-radius: 50%;
    margin: 0 auto 20px auto;
    animation: cspSpin 1s linear infinite;
    -webkit-animation: cspSpin 1s linear infinite;
}

.csp-alert-loading-text {
    color: #333;
    font-size: 1.125rem; /* 跟隨 .font-size-btn */
    font-weight: 600;
    word-wrap: break-word;
}

@keyframes cspSpin {
    0%   { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}
@-webkit-keyframes cspSpin {
    0%   { -webkit-transform: rotate(0deg); }
    100% { -webkit-transform: rotate(360deg); }
}

@media (max-width: 768px) {
    .csp-alert-loading-box   { padding: 24px 20px; border-radius: 16px; }
    .csp-alert-loading-text  { font-size: 1rem; }
}

/* --- 成功 / 失敗 modal --- */
.csp-alert-backdrop {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100vh;
    background: rgba(0, 0, 0, 0.6);
    z-index: 2147483646;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    box-sizing: border-box;
    -webkit-overflow-scrolling: touch;
}

.csp-alert-modal {
    width: 400px;
    max-width: 90vw;
    background: #fff;
    border-radius: 12px;
    padding: 32px 28px 28px;
    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);
    position: relative;
    box-sizing: border-box;
    max-height: 90vh;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
}

.csp-alert-modal-icon {
    width: 70px;
    height: 70px;
    margin: 0 auto 24px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
}
.csp-alert-modal-icon.is-success { background: #4CAF50; }
.csp-alert-modal-icon.is-error   { background: #f44336; }

.csp-alert-modal-title {
    color: #333;
    text-align: center;
    margin: 0 0 20px 0;
    font-weight: 700;
    font-size: 1.5rem; /* 跟隨 .font-size-btn */
    line-height: 1.3;
}

.csp-alert-modal-content {
    color: #666;
    text-align: center;
    margin: 0 0 28px 0;
    line-height: 1.6;
    font-size: 1rem;
    padding: 0 12px;
    word-wrap: break-word;
}

.csp-alert-modal-btn-wrapper {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.csp-alert-modal-btn {
    display: block;
    width: 100%;
    padding: 16px 32px;
    border: none;
    border-radius: 8px;
    font-weight: 600;
    font-size: 1rem; /* 跟隨 .font-size-btn */
    cursor: pointer;
    min-height: 52px;
    touch-action: manipulation;
    box-sizing: border-box;
    -webkit-tap-highlight-color: transparent;
    transition: background 0.2s;
}

.csp-alert-modal-btn.is-primary {
    background: #1976d2;
    color: #fff;
}
.csp-alert-modal-btn.is-primary:hover,
.csp-alert-modal-btn.is-primary:active {
    background: #1565c0;
}

/* ============================================================ */
/*  九宮格 (3x3) Rich Message imagemap grid mode                 */
/*  策略：包住 grid 的 .msg-bubble 透明化並撐滿容器寬度，grid      */
/*  以 static block 正常排版，版面流向：文字 bubble → 九宮格 →     */
/*  datetime。避免多 bubble 情境下 absolute 被錨定到窄 bubble。    */
/* ============================================================ */
.msg-bubble:has(.ninegrid-message-block) {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0 !important;
    margin: 8px 0 !important;
    max-width: none !important;
    width: 100% !important;
    display: block !important;
    position: static !important;
}

/* 只讓「包 grid 的那顆 bubble」撐寬；.msg 本身不動，
   避免影響同一則訊息內其他文字 bubble 與 avatar 的 flex 排列 */

.ninegrid-message-block {
    position: static;
    display: block;
    width: 100%;
    max-width: 800px;
    min-width: 226px;
    margin: 6px 0 0 0;
    background: linear-gradient(135deg, #fff8e1 0%, #f3e5f5 100%);
    border-radius: 12px;
    box-shadow: 0 6px 30px rgba(255, 167, 38, 0.15);
    overflow: hidden;
    backdrop-filter: blur(10px);
    border: 1px solid rgba(255, 167, 38, 0.2);
    box-sizing: border-box;
    padding: 0;
}

.ninegrid-message-block * {
    -webkit-tap-highlight-color: transparent;
}

.ninegrid-message-block .grid-wrapper {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    padding: 20px 18px;
}

.ninegrid-message-block .row {
    display: flex;
    gap: 8px;
}

.ninegrid-message-block .item {
    position: relative;
    flex: 1;
    min-height: 120px;
    background: rgba(255, 255, 255, 0.85);
    border-radius: 10px;
    overflow: hidden;
    cursor: pointer;
    transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.25s ease;
    opacity: 0;
    animation: fadeInScale 0.4s ease-out forwards;
}

.ninegrid-message-block .item::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 4px;
    background: #FFA726;
    border-radius: 4px 0 0 4px;
}

.ninegrid-message-block .item:nth-child(4n+2)::before { background: #1976D2; }
.ninegrid-message-block .item:nth-child(4n+3)::before { background: #4CAF50; }
.ninegrid-message-block .item:nth-child(4n)::before   { background: #E91E63; }

.ninegrid-message-block .item::after {
    content: '';
    position: absolute;
    top: 0;
    left: -75%;
    width: 50%;
    height: 100%;
    background: linear-gradient(120deg, transparent 0%, rgba(255, 255, 255, 0.35) 50%, transparent 100%);
    transform: skewX(-20deg);
    pointer-events: none;
    transition: left 0.6s ease;
}

.ninegrid-message-block .item:hover {
    transform: translateY(-3px);
    background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(255, 248, 225, 0.95) 100%);
    box-shadow: 0 8px 20px rgba(255, 167, 38, 0.25);
}

.ninegrid-message-block .item:hover::after {
    left: 125%;
}

.ninegrid-message-block .item:active {
    transform: scale(0.97);
}

.ninegrid-message-block .item:focus {
    outline: none;
    box-shadow: 0 0 0 4px rgba(255, 167, 38, 0.3);
}

.ninegrid-message-block .item:nth-child(1) { animation-delay: 0.05s; }
.ninegrid-message-block .item:nth-child(2) { animation-delay: 0.10s; }
.ninegrid-message-block .item:nth-child(3) { animation-delay: 0.15s; }
.ninegrid-message-block .item:nth-child(4) { animation-delay: 0.20s; }
.ninegrid-message-block .item:nth-child(5) { animation-delay: 0.25s; }
.ninegrid-message-block .item:nth-child(6) { animation-delay: 0.30s; }
.ninegrid-message-block .item:nth-child(7) { animation-delay: 0.35s; }
.ninegrid-message-block .item:nth-child(8) { animation-delay: 0.40s; }
.ninegrid-message-block .item:nth-child(9) { animation-delay: 0.45s; }

.ninegrid-message-block .item a,
.ninegrid-message-block .item .item-link {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 10px;
    padding: 14px 10px;
    width: 100%;
    height: 100%;
    min-height: 120px;
    color: #2c3e50;
    text-decoration: none;
    box-sizing: border-box;
}

.ninegrid-message-block .item .grid-img {
    width: 40px;
    height: 40px;
    object-fit: contain;
    display: block;
    border-radius: 50%;
    box-shadow: 0 0 0 2px #FFA726;
    background: #fff;
    padding: 4px;
    box-sizing: border-box;
}

.ninegrid-message-block .item:nth-child(4n+2) .grid-img { box-shadow: 0 0 0 2px #1976D2; }
.ninegrid-message-block .item:nth-child(4n+3) .grid-img { box-shadow: 0 0 0 2px #4CAF50; }
.ninegrid-message-block .item:nth-child(4n)   .grid-img { box-shadow: 0 0 0 2px #E91E63; }

.ninegrid-message-block .item-name {
    font-family: "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", sans-serif;
    font-size: 1em;
    font-weight: 500;
    line-height: 1.3;
    text-align: center;
    color: #2c3e50;
    word-break: break-word;
}

@keyframes fadeInScale {
    0%   { opacity: 0; transform: scale(0.85); }
    100% { opacity: 1; transform: scale(1); }
}

@keyframes spin {
    to { transform: rotate(360deg); }
}

@keyframes rippleEffect {
    0%   { transform: scale(0); opacity: 0.6; }
    100% { transform: scale(2.2); opacity: 0; }
}

@media (max-width: 480px) {
    .ninegrid-message-block .grid-wrapper {
        padding: 14px 10px;
        gap: 8px;
    }
    .ninegrid-message-block .row {
        gap: 6px;
    }
    .ninegrid-message-block .item a,
    .ninegrid-message-block .item .item-link {
        padding: 10px 6px;
        min-height: 100px;
    }
    .ninegrid-message-block .item .grid-img {
        width: 32px;
        height: 32px;
    }
    .ninegrid-message-block .item-name {
        font-size: 0.8125em;
    }
}

@media (prefers-color-scheme: dark) {
    .ninegrid-message-block {
        background: linear-gradient(135deg, #2a1f14 0%, #2a1e2e 100%);
        border-color: rgba(255, 167, 38, 0.35);
    }
    .ninegrid-message-block .item {
        background: rgba(40, 40, 40, 0.85);
    }
    .ninegrid-message-block .item:hover {
        background: linear-gradient(135deg, rgba(50, 50, 50, 0.95) 0%, rgba(60, 45, 20, 0.95) 100%);
    }
    .ninegrid-message-block .item a,
    .ninegrid-message-block .item .item-link,
    .ninegrid-message-block .item-name {
        color: #eee;
    }
}


.csp-alert-modal-btn.is-secondary {
    background: #fff;
    color: #666;
    border: 2px solid #ddd;
}
.csp-alert-modal-btn.is-secondary:hover,
.csp-alert-modal-btn.is-secondary:active {
    background: #f5f5f5;
}

@media (max-width: 768px) {
    .csp-alert-backdrop      { padding: 20px; }
    .csp-alert-modal         {
        width: 100%;
        max-width: 100%;
        border-radius: 20px;
        padding: 28px 24px 24px;
    }
    .csp-alert-modal-icon    { margin-bottom: 20px; }
    .csp-alert-modal-title   { margin-bottom: 16px; font-size: 1.375rem; }
    .csp-alert-modal-content { margin-bottom: 24px; padding: 0 8px; }
    .csp-alert-modal-btn     {
        padding: 16px 24px;
        border-radius: 12px;
        font-size: 1.0625rem;
    }
}

@media (max-width: 375px) {
    .csp-alert-modal-icon   { width: 60px; height: 60px; }
    .csp-alert-modal-icon svg { width: 32px; height: 32px; }
    .csp-alert-modal-title  { font-size: 1.25rem; }
    .csp-alert-modal-content{ font-size: 0.9375rem; }
}

/* --- 霓虹 Toast --- */
@property --csp-neon-angle {
    syntax: '<angle>';
    initial-value: 0deg;
    inherits: false;
}
@keyframes cspNeonRotate {
    from { --csp-neon-angle: 0deg;   }
    to   { --csp-neon-angle: 360deg; }
}

.csp-alert-toast {
    position: fixed;
    top: 20px;
    left: 50%;
    transform: translateX(-50%) translateY(-20px);
    -webkit-transform: translateX(-50%) translateY(-20px);
    z-index: 2147483647;
    max-width: 90vw;
    width: auto;
    opacity: 0;
    transition: opacity 0.3s ease, transform 0.3s ease, top 0.3s ease;
    -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease, top 0.3s ease;
    pointer-events: auto;
    will-change: transform, opacity;
}

.csp-alert-toast.is-visible {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
    -webkit-transform: translateX(-50%) translateY(0);
}

.csp-alert-toast-card {
    position: relative;
    background: #fff;
    border-radius: 10px;
    padding: 14px 20px;
    color: #333;
    text-align: center;
    font-size: 1rem; /* 跟隨 .font-size-btn */
    line-height: 1.6;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    white-space: nowrap;
}

.csp-alert-toast-card.is-wrap {
    white-space: normal;
    word-wrap: break-word;
}

.csp-alert-toast-card::before,
.csp-alert-toast-card::after {
    content: '';
    position: absolute;
    inset: -4px;
    background-image: conic-gradient(
        from var(--csp-neon-angle),
        #F7B731, #1976D2, #E91E63, #43A047, #F7B731
    );
    border-radius: 12px;
    animation: cspNeonRotate 3s linear infinite;
    -webkit-animation: cspNeonRotate 3s linear infinite;
}
.csp-alert-toast-card::after {
    z-index: -1;
}
.csp-alert-toast-card::before {
    filter: blur(2rem);
    -webkit-filter: blur(2rem);
    opacity: 0.7;
    z-index: -2;
}

.csp-alert-toast-icon {
    width: 24px;
    height: 24px;
    flex-shrink: 0;
    display: flex;
    align-items: center;
    justify-content: center;
}

.csp-alert-toast-text {
    display: inline-block;
    color: #333;
    word-wrap: break-word;
    max-width: 100%;
    font-weight: 700;
}

@media (max-width: 768px) {
    .csp-alert-toast       { max-width: calc(100vw - 40px); width: 80%; }
    .csp-alert-toast-card  { white-space: normal; }
}

@media (max-width: 480px) {
    .csp-alert-toast       { max-width: calc(100vw - 24px); }
    .csp-alert-toast-card  { padding: 10px 12px; }
    .csp-alert-toast-icon  { width: 18px; height: 18px; }
    .csp-alert-toast-icon svg { width: 18px; height: 18px; }
}

