.ddv-app-launch{position:fixed;bottom:calc(83px + env(safe-area-inset-bottom));right:12px;z-index:119;padding:10px 14px;border-radius:999px;border:1px solid #b7d7cb;background:#075d45;color:#fff;font:700 12px system-ui;box-shadow:0 9px 27px #062b2040;cursor:pointer}.ddv-app-overlay,.ddv-promo-mask{position:fixed;inset:0;z-index:260;background:#061b18a9;display:grid;place-items:center;padding:14px;overflow-y:auto}.ddv-app-overlay[hidden],.ddv-promo-mask[hidden],.ddv-pwa-update[hidden]{display:none!important}.ddv-app-dialog,.ddv-promo-dialog{width:min(100%,540px);max-height:90dvh;overflow-y:auto;padding:20px;border-radius:19px;background:#fff;color:#172720;box-shadow:0 22px 68px #0005}.ddv-app-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.ddv-app-head h2{font-size:21px;margin:0}.ddv-app-close,.ddv-promo-dismiss{border:0;background:transparent;font-size:28px;cursor:pointer;color:#20332c}.ddv-app-content{display:grid;gap:10px;padding-top:12px}.ddv-app-small,.ddv-app-status{color:#566b60;font-size:12px;margin:6px 0}.ddv-app-control{background:#ecf5f0;border:1px solid #cfe2d8;color:#164936;text-align:left;border-radius:12px;padding:12px;cursor:pointer;font-weight:700}.ddv-app-control:hover{background:#dfefe6}.ddv-app-inbox{border:1px solid #dbe7df;border-radius:10px;padding:12px}.ddv-app-inbox b{display:block}.ddv-app-copy{font-size:13px;overflow-wrap:anywhere}.ddv-app-copy img{max-width:100%;height:auto}.ddv-promo-dialog{position:relative;text-align:center}.ddv-promo-dismiss{position:absolute;right:12px;top:8px}.ddv-promo-image{display:block;margin:auto auto 12px;max-width:100%;max-height:245px;object-fit:contain;border-radius:12px}.ddv-promo-dialog h2{font-size:clamp(19px,4vw,26px);margin:12px 0}.ddv-promo-body{line-height:1.55}.ddv-promo-body img{max-width:100%;height:auto}.ddv-promo-link{display:inline-flex;margin-top:13px;background:#087d59;color:#fff;padding:10px 23px;text-decoration:none;border-radius:10px;font-weight:700}.ddv-pwa-update{z-index:248;position:fixed;left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));max-width:660px;margin:auto;display:flex;gap:11px;align-items:center;justify-content:space-between;flex-wrap:wrap;background:#0b3125;color:white;border-radius:14px;padding:14px 17px;box-shadow:0 15px 40px #0005}.ddv-pwa-update span{flex:1;min-width:190px}.ddv-pwa-update button{border:0;border-radius:9px;background:#bcf5d1;color:#0b3125;padding:8px 11px;font-weight:bold;cursor:pointer}.ddv-pwa-update-later{background:transparent!important;color:white!important;border:1px solid #ffffff55!important}@media(max-width:760px){.ddv-app-launch{bottom:calc(86px + env(safe-area-inset-bottom));right:9px;padding:7px 10px;font-size:11px}.ddv-app-dialog,.ddv-promo-dialog{padding:15px;max-height:86dvh}.ddv-pwa-update{bottom:calc(82px + env(safe-area-inset-bottom))}}

/* DDV permission controls: three actions, explicit consent, no automatic onboarding. */
.ddv-app-dialog>.ddv-app-status{display:block;margin:12px 0 0;padding:10px 12px;background:#f4f7f5;border-radius:11px;color:#244c3b;line-height:1.55;overflow-wrap:anywhere}
.ddv-app-dialog .ddv-app-control:focus-visible{outline:3px solid #1b8160;outline-offset:2px}

/* In-app campaign inbox cards */
.ddv-app-inbox-title{margin:10px 0 0;font-size:16px}.ddv-app-inbox-image{display:block;width:100%;max-height:180px;object-fit:cover;margin:9px 0;border-radius:10px}
.ddv-app-inbox-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:11px}
.ddv-app-inbox-actions .ddv-btn{background:#087d59;color:white;border-radius:10px;text-decoration:none;padding:9px 13px;font-weight:700;font-size:12px}
.ddv-app-inbox-actions .ddv-app-control{padding:8px 11px;font-weight:500}

/* DDV V1014 · update surfaces and administrator-managed controls; mobile bottom navigation untouched. */
.ddv-app-launch[hidden],.ddv-pwa-update-mask[hidden],.ddv-pwa-update-later[hidden]{display:none!important}
.ddv-app-dialog{background:var(--ddv-pwa-dialog-bg,#fff)}
.ddv-app-control{background:var(--ddv-pwa-control-bg,#eaf4ed);color:var(--ddv-pwa-control-color,#164936)}
.ddv-app-control:hover{filter:brightness(.96);background:var(--ddv-pwa-control-bg,#eaf4ed)}
.ddv-pwa-footer-privacy{display:block;margin:14px auto 0;background:transparent;border:1px solid currentColor;border-radius:9px;padding:9px 13px;cursor:pointer;color:inherit;font:inherit}
.ddv-pwa-update{background:var(--ddv-pwa-update-bg,#123d2d);color:var(--ddv-pwa-update-color,#fff);border:1px solid #ffffff24;align-items:center;gap:16px;padding:16px 18px}
.ddv-pwa-update-copy{flex:1;min-width:170px;display:grid;gap:4px}
.ddv-pwa-update-copy strong{font-size:15px;line-height:1.3;font-weight:850;color:inherit}
.ddv-pwa-update-copy span{min-width:0;font-size:12px;line-height:1.5;color:inherit;opacity:.86}
.ddv-pwa-update-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ddv-pwa-update .ddv-pwa-update-action{background:var(--ddv-pwa-update-accent,#f0440c);color:#fff;font-size:12px;border-radius:11px;padding:10px 14px}
.ddv-pwa-update .ddv-pwa-update-later{border:1px solid #ffffff60!important;color:inherit!important;padding:9px 13px;font-size:12px}
.ddv-pwa-update-mask{position:fixed;z-index:246;inset:0;background:#041a14b3}
.ddv-pwa-update-card{max-width:430px;left:auto;right:14px;margin:0}
.ddv-pwa-update-dialog{position:fixed;top:50%;left:50%;bottom:auto;right:auto;width:min(94vw,480px);max-width:480px;transform:translate(-50%,-50%);border-radius:20px;z-index:249;flex-direction:column;align-items:stretch;padding:24px}
.ddv-pwa-update-dialog .ddv-pwa-update-actions{justify-content:flex-end;width:100%}
.ddv-pwa-update-dialog .ddv-pwa-update-copy{width:100%}
.ddv-pwa-update-dialog .ddv-pwa-update-title{font-size:20px}

@media(max-width:760px){.ddv-pwa-update{left:10px;right:10px;bottom:calc(88px + env(safe-area-inset-bottom));padding:13px 14px}.ddv-pwa-update-card{max-width:none}.ddv-pwa-update-dialog{left:50%;right:auto;bottom:auto;padding:20px}.ddv-pwa-update-actions{width:100%}.ddv-pwa-update-actions button{flex:1}}
@media(prefers-reduced-motion:reduce){.ddv-pwa-update{animation:none!important;transition:none!important}}

.ddv-pwa-update .ddv-pwa-update-close{position:absolute;top:5px;right:5px;border:0!important;background:transparent!important;color:inherit!important;font-size:20px;line-height:1;padding:6px 8px;opacity:.75}

.ddv-app-launch{background:var(--ddv-pwa-launch-bg,#075d45);color:var(--ddv-pwa-launch-text,#fff)}
.ddv-app-launch-left{left:12px;right:auto}
.ddv-pwa-update .ddv-pwa-update-glyph{font-size:22px;min-width:0;flex:none;display:grid;place-items:center;width:38px;height:38px;background:#ffffff14;border-radius:12px}
.ddv-pwa-update .ddv-pwa-update-glyph[hidden]{display:none!important}
@media(max-width:760px){.ddv-app-launch-left{left:9px;right:auto}.ddv-pwa-update .ddv-pwa-update-glyph{width:30px;height:30px;font-size:18px}}

/* DDV V1016 · Compact PWA control center. No nested scrolling and no change to mobile footer menu. */
.ddv-app-launch{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:var(--ddv-pwa-launch-size,48px);min-width:var(--ddv-pwa-launch-size,48px);font:750 12px/1.2 system-ui,sans-serif;line-height:1.2;max-width:min(210px,calc(100vw - 24px));white-space:nowrap;isolation:isolate}
.ddv-app-launch[hidden]{display:none!important}
.ddv-app-launch-icon{width:24px;height:24px;display:grid;place-items:center;font-size:22px;line-height:1;flex:none}
.ddv-app-launch-icon[hidden]{display:none!important}
.ddv-app-launch-branding{width:23px;height:23px;object-fit:contain;border-radius:6px}
.ddv-app-launch-unread{font-size:10px;min-width:19px;height:19px;padding:2px 4px;border-radius:12px;background:#f0440c;color:#fff;text-align:center}
.ddv-app-launch-unread[hidden]{display:none!important}
.ddv-app-shape-rounded{border-radius:12px}.ddv-app-shape-circle{border-radius:50%;width:var(--ddv-pwa-launch-size,48px);padding:0!important}
.ddv-app-shape-circle .ddv-app-launch-label{position:absolute;width:1px;height:1px;clip-path:inset(50%);overflow:hidden;white-space:nowrap}
.ddv-app-shape-circle .ddv-app-launch-unread{position:absolute;right:-5px;top:-5px}
.ddv-app-pos-top_left,.ddv-app-pos-top_center,.ddv-app-pos-top_right,.ddv-app-pos-middle_left,.ddv-app-pos-middle_right,.ddv-app-pos-bottom_left,.ddv-app-pos-bottom_center,.ddv-app-pos-bottom_right{top:auto;right:auto;left:auto;bottom:auto;transform:none}
.ddv-app-pos-top_left{top:calc(76px + env(safe-area-inset-top));left:12px}
.ddv-app-pos-top_center{top:calc(76px + env(safe-area-inset-top));left:50%;transform:translateX(-50%)}
.ddv-app-pos-top_right{top:calc(76px + env(safe-area-inset-top));right:12px}
.ddv-app-pos-middle_left{top:50%;left:12px;transform:translateY(-50%)}
.ddv-app-pos-middle_right{top:50%;right:12px;transform:translateY(-50%)}
.ddv-app-pos-bottom_left{bottom:calc(89px + env(safe-area-inset-bottom));left:12px}
.ddv-app-pos-bottom_center{bottom:calc(89px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%)}
.ddv-app-pos-bottom_right{bottom:calc(89px + env(safe-area-inset-bottom));right:12px}

.ddv-app-overlay{padding:max(8px,env(safe-area-inset-top)) 8px max(8px,env(safe-area-inset-bottom));overflow:hidden;align-items:center;justify-items:center}
.ddv-app-dialog{box-sizing:border-box;width:min(100%,490px);height:min(565px,calc(100dvh - 20px - env(safe-area-inset-top) - env(safe-area-inset-bottom)));max-height:none;min-height:0;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;gap:0;overflow:hidden;padding:0!important;background:var(--ddv-pwa-dialog-bg,#fff);color:var(--ddv-pwa-dialog-text,#172720)}
.ddv-app-head{padding:15px 17px 10px;min-height:0}.ddv-app-heading{min-width:0}.ddv-app-head h2{color:inherit;font-size:clamp(15px,3.5vw,20px);line-height:1.18;overflow-wrap:anywhere}
.ddv-app-close{align-self:start;width:30px;height:30px;flex:none;font-size:24px;line-height:1;color:inherit}
.ddv-app-tabs{padding:0 13px 10px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px}
.ddv-app-tab{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:9px 3px;border:1px solid #ccdcd3;border-radius:9px;background:transparent;color:inherit;font-size:11px;font-weight:750;cursor:pointer}
.ddv-app-tab.is-active{color:white;background:var(--ddv-pwa-dialog-accent,#087d59);border-color:var(--ddv-pwa-dialog-accent,#087d59)}
.ddv-app-content{box-sizing:border-box;min-height:0;overflow:hidden;display:flex;flex-direction:column;gap:8px;padding:9px 16px 8px!important;border-top:1px solid #7996882a}
.ddv-app-control{box-sizing:border-box;display:block;min-width:0;flex:0 0 auto;width:100%;max-height:65px;text-align:left;padding:11px 12px;border-radius:11px;background:var(--ddv-pwa-control-bg,#eaf4ed);color:var(--ddv-pwa-control-color,#164936);font:750 12px/1.32 system-ui,sans-serif;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.ddv-app-dialog>.ddv-app-status{box-sizing:border-box;min-width:0;margin:0!important;border-radius:0 0 16px 16px;padding:9px 15px;min-height:40px;max-height:64px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--ddv-pwa-dialog-text,#244c3b);background:color-mix(in srgb,var(--ddv-pwa-dialog-accent,#087d59) 9%,var(--ddv-pwa-dialog-bg,#fff));font-size:11px;line-height:1.4;overflow-wrap:anywhere}
.ddv-app-empty{display:grid;place-items:center;text-align:center;flex:1;min-height:90px;color:inherit;opacity:.7;font-size:13px}
.ddv-app-inbox{display:flex;flex-direction:column;gap:6px;flex:1;min-height:0;overflow:hidden;padding:10px;border-radius:12px}
.ddv-app-inbox b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;flex:none;font-size:14px}
.ddv-app-copy{min-height:0;flex:1;overflow:hidden;font-size:12px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow-wrap:anywhere}
.ddv-app-copy p{margin:0 0 4px}.ddv-app-copy img{display:none}
.ddv-app-inbox-actions{display:flex;gap:7px;flex:none;margin:0;min-height:0}
.ddv-app-inbox-actions a,.ddv-app-inbox-actions .ddv-app-control{min-width:0;flex:1;display:grid;place-items:center;text-align:center;max-height:38px;padding:7px!important;font-size:11px}
.ddv-app-pager{display:flex;align-items:center;justify-content:space-between;gap:7px;flex:none}
.ddv-app-pager .ddv-app-control{width:auto;min-height:30px;max-height:32px;padding:6px 14px;font-size:11px}.ddv-app-pager .ddv-app-control:disabled{opacity:.35;cursor:default}
.ddv-app-page-num{font-size:11px;font-variant-numeric:tabular-nums}
.ddv-app-open{overflow:hidden}
@media(max-width:760px){.ddv-app-pos-top_left,.ddv-app-pos-top_center,.ddv-app-pos-top_right{top:calc(69px + env(safe-area-inset-top))}.ddv-app-pos-bottom_left,.ddv-app-pos-bottom_center,.ddv-app-pos-bottom_right{bottom:calc(92px + env(safe-area-inset-bottom))}}
@media(max-height:600px){.ddv-app-dialog{height:calc(100dvh - 12px - env(safe-area-inset-top) - env(safe-area-inset-bottom))}.ddv-app-head{padding:7px 12px 5px}.ddv-app-tabs{padding:0 10px 5px}.ddv-app-tab{padding:6px 2px}.ddv-app-content{gap:5px;padding:6px 11px!important}.ddv-app-control{padding:8px 10px;max-height:48px}.ddv-app-dialog>.ddv-app-status{min-height:28px;max-height:39px;padding:6px 11px;-webkit-line-clamp:1}}
@media(max-height:380px){.ddv-app-head h2{font-size:14px}.ddv-app-control{padding:5px 8px}}
@media(prefers-reduced-motion:reduce){.ddv-app-launch{animation:none!important}}
.ddv-app-dialog{border-radius:var(--ddv-pwa-dialog-radius,19px)}
.ddv-app-head-graphic{display:flex;gap:10px;align-items:center;min-width:0}
.ddv-app-header-icon{width:34px;height:34px;flex:none;border-radius:11px;display:grid;place-items:center;background:color-mix(in srgb,var(--ddv-pwa-dialog-accent,#087d59) 13%,var(--ddv-pwa-dialog-bg,#fff));font-size:21px}
.ddv-app-header-icon[hidden]{display:none}
.ddv-app-controls-outline .ddv-app-control{background:transparent;border:1.5px solid var(--ddv-pwa-dialog-accent,#087d59);color:var(--ddv-pwa-dialog-text,#172720)}
.ddv-app-controls-solid .ddv-app-control{background:var(--ddv-pwa-dialog-accent,#087d59);border-color:transparent;color:#fff}
.ddv-app-controls-solid .ddv-app-control:focus-visible,.ddv-app-controls-outline .ddv-app-control:focus-visible{outline:2px solid var(--ddv-pwa-dialog-text,#172720)}

/* DDV V1019 launcher dismissal: close remains separate, never nested in main button. */
.ddv-app-launch-dismiss{position:fixed;z-index:122;display:grid;place-items:center;width:24px;height:24px;padding:0;border:1px solid #d8e4de;border-radius:50%;background:#fff;color:#1b3028;box-shadow:0 2px 7px #0003;font:700 16px/1 system-ui;cursor:pointer}
.ddv-app-launch-dismiss[hidden]{display:none!important}

/* DDV: Bảng ứng dụng chỉ có Quyền / Thông báo, nội dung gọn, cuộn khi cần. */
.ddv-app-dialog{height:auto;max-height:min(82dvh,620px);grid-template-rows:auto auto minmax(0,1fr) auto}
.ddv-app-dialog .ddv-app-content{overflow-y:auto;overscroll-behavior:contain;min-height:0}
.ddv-app-dialog>.ddv-app-status:empty{display:none}
.ddv-app-tabs{grid-template-columns:repeat(2,minmax(0,1fr))}

/* DDV: exactly three concise permission actions on web and standalone PWA. */
.ddv-app-dialog .ddv-app-content{gap:7px;padding:12px 14px!important;overflow-y:auto}
.ddv-app-dialog .ddv-app-control{min-height:45px;max-height:none;padding:11px 13px;font-size:13px}
.ddv-app-dialog>.ddv-app-status{min-height:0;max-height:none;padding:9px 14px;white-space:normal;display:block}
.ddv-app-dialog>.ddv-app-status:empty{display:none}
.ddv-app-launch{animation:none!important;transition:none!important}

/* Notification and install system UI have no extra movement effects. */
.ddv-pwa-update,.ddv-pwa-update-mask,.ddv-promo-dialog,.ddv-app-dialog{animation:none!important;transition:none!important}
.ddv-app-control:disabled{opacity:.45;cursor:not-allowed}

/* Privacy controls live in the footer, outside the three-action Quyền tab. */
.ddv-pwa-privacy-mask{position:fixed;inset:0;z-index:270;display:grid;place-items:center;background:#081a1699;padding:16px}
.ddv-pwa-privacy-mask[hidden]{display:none!important}
.ddv-pwa-privacy-dialog{width:min(100%,420px);background:#fff;color:#18372a;border-radius:17px;padding:18px;box-shadow:0 18px 40px #0003}
.ddv-pwa-privacy-dialog h2{font:800 19px system-ui;margin:0 0 15px}
.ddv-pwa-privacy-dialog button{width:100%;margin-top:8px;padding:11px;border:1px solid #cadbd1;border-radius:11px;color:#17392a;background:#f1f7f3;cursor:pointer;font-weight:700}
.ddv-pwa-privacy-dialog p{font:12px/1.5 system-ui;overflow-wrap:anywhere}
.ddv-pwa-privacy-dialog .ddv-pwa-privacy-close{width:auto;float:right;margin:0;padding:3px 9px}

/* PWA permission reminder: opt-in native permission prompts via explicit tap only. */
.ddv-pwa-permission-reminder{position:fixed;z-index:245;bottom:calc(96px + env(safe-area-inset-bottom));right:12px;width:min(350px,calc(100% - 24px));background:#fff;border:1px solid #cfe2d7;border-radius:15px;padding:13px;display:grid;grid-template-columns:1fr auto;gap:8px;box-shadow:0 12px 30px #0002;color:#152b21;font:13px/1.45 system-ui}.ddv-pwa-permission-reminder[hidden]{display:none!important}.ddv-pwa-permission-reminder b,.ddv-pwa-permission-copy{grid-column:1/-1}.ddv-pwa-permission-reminder button{border:1px solid #d2e5d9;background:#f4f9f6;color:#165437;font-weight:800;border-radius:9px;padding:8px 10px;cursor:pointer}.ddv-pwa-permission-reminder button:first-of-type{background:#087d59;color:white}
