{"id":883,"date":"2026-04-11T10:17:01","date_gmt":"2026-04-11T10:17:01","guid":{"rendered":"https:\/\/tourvill.com\/?page_id=883"},"modified":"2026-04-11T11:38:21","modified_gmt":"2026-04-11T11:38:21","slug":"admin-panel","status":"publish","type":"page","link":"https:\/\/tourvill.com\/index.php\/admin-panel\/","title":{"rendered":"Admin Panel"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"883\" class=\"elementor elementor-883\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a29f8f e-con-full e-flex e-con e-parent\" data-id=\"3a29f8f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-186004d elementor-widget elementor-widget-html\" data-id=\"186004d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>\u099c\u09b2\u09ac\u09be\u09a1\u09bc\u09bf \u2014 Admin Dashboard<\/title>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Sora:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n*{margin:0;padding:0;box-sizing:border-box}\r\n:root{\r\n  --navy:#0b2545;--navy2:#1b3f6e;--teal:#14b8a6;--teal-light:#ccfbf1;\r\n  --bg:#f8fafc;--white:#fff;--surface:#f1f5f9;\r\n  --text:#0f172a;--muted:#64748b;--border:#e2e8f0;\r\n  --green:#10b981;--green-bg:#d1fae5;--green-text:#065f46;\r\n  --amber:#f59e0b;--amber-bg:#fef3c7;--amber-text:#92400e;\r\n  --red:#ef4444;--red-bg:#fee2e2;--red-text:#991b1b;\r\n  --blue:#3b82f6;--blue-bg:#dbeafe;--blue-text:#1e40af;\r\n  --r:10px;--r-sm:7px;--r-lg:14px;\r\n}\r\nbody{font-family:'Sora',sans-serif;background:var(--bg);color:var(--text);font-size:13px;line-height:1.5;display:flex;flex-direction:column;min-height:100vh;}\r\n\r\n\/* TOP BAR *\/\r\n.topbar{background:var(--navy);height:54px;display:flex;align-items:center;justify-content:space-between;padding:0 20px;flex-shrink:0}\r\n.logo{color:#fff;font-weight:700;font-size:15px;display:flex;align-items:center;gap:8px}\r\n.logo-dot{color:var(--teal)}\r\n.topbar-right{display:flex;align-items:center;gap:12px}\r\n.refresh-btn{background:rgba(255,255,255,0.1);border:none;color:rgba(255,255,255,0.8);padding:6px 14px;border-radius:var(--r-sm);font-family:'Sora',sans-serif;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;display:flex;align-items:center;gap:6px}\r\n.refresh-btn:hover{background:rgba(255,255,255,0.18);color:#fff}\r\n.refresh-icon{display:inline-block;transition:transform .4s}\r\n.refresh-btn.loading .refresh-icon{transform:rotate(360deg)}\r\n.last-sync{font-size:11px;color:rgba(255,255,255,0.45)}\r\n.staff-pill{background:rgba(255,255,255,0.1);color:rgba(255,255,255,0.7);padding:4px 12px;border-radius:20px;font-size:11px;font-weight:500}\r\n\r\n\/* LAYOUT *\/\r\n.layout{display:flex;flex:1;min-height:calc(100vh - 54px)}\r\n.sidebar{width:210px;background:var(--navy);flex-shrink:0;display:flex;flex-direction:column;overflow-y:auto}\r\n.sidebar-section{padding:8px 10px}\r\n.sidebar-label{font-size:10px;font-weight:600;color:rgba(255,255,255,0.3);text-transform:uppercase;letter-spacing:.08em;padding:10px 8px 6px}\r\n.menu-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:var(--r-sm);color:rgba(255,255,255,0.55);font-size:12px;font-weight:500;cursor:pointer;transition:all .2s;margin-bottom:1px;user-select:none}\r\n.menu-item:hover{background:rgba(255,255,255,0.07);color:rgba(255,255,255,0.85)}\r\n.menu-item.active{background:rgba(255,255,255,0.13);color:#fff}\r\n.menu-item svg{flex-shrink:0;opacity:.7}\r\n.menu-item.active svg{opacity:1}\r\n.mbadge{margin-left:auto;background:var(--teal);color:#fff;font-size:9px;font-weight:700;padding:1px 6px;border-radius:10px}\r\n\r\n\/* MAIN *\/\r\n.main{flex:1;overflow-y:visible;display:flex;flex-direction:column}\r\n.page-header{background:var(--white);border-bottom:1px solid var(--border);padding:14px 22px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}\r\n.page-title{font-size:16px;font-weight:600;color:var(--navy)}\r\n.page-sub{font-size:11px;color:var(--muted);margin-top:1px}\r\n.header-actions{display:flex;gap:8px}\r\n.btn{padding:7px 14px;border-radius:var(--r-sm);font-family:'Sora',sans-serif;font-size:12px;font-weight:600;cursor:pointer;border:none;transition:all .2s}\r\n.btn-navy{background:var(--navy);color:#fff}\r\n.btn-navy:hover{background:var(--navy2)}\r\n.btn-outline{background:var(--white);color:var(--muted);border:1px solid var(--border)}\r\n.btn-outline:hover{border-color:var(--navy);color:var(--navy)}\r\n.btn-teal{background:var(--teal);color:#fff}\r\n.btn-teal:hover{opacity:.9}\r\n\r\n\/* CONTENT *\/\r\n.content{padding:20px 22px;flex:1}\r\n\r\n\/* PAGES *\/\r\n.view{display:none}\r\n.view.active{display:block}\r\n\r\n\/* METRICS *\/\r\n.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:18px}\r\n.metric{background:var(--white);border:1px solid var(--border);border-radius:var(--r);padding:16px;position:relative;overflow:hidden}\r\n.metric-accent{position:absolute;top:0;left:0;width:3px;height:100%;border-radius:3px 0 0 3px}\r\n.metric-icon{font-size:20px;margin-bottom:10px;display:block}\r\n.metric-val{font-size:22px;font-weight:700;color:var(--navy);line-height:1}\r\n.metric-lbl{font-size:11px;color:var(--muted);margin-top:4px}\r\n.metric-change{font-size:11px;margin-top:8px;font-weight:500}\r\n.up{color:var(--green)}\r\n.down{color:var(--red)}\r\n.neutral{color:var(--muted)}\r\n\r\n\/* GRID ROWS *\/\r\n.row2{display:grid;grid-template-columns:1.5fr 1fr;gap:14px;margin-bottom:14px}\r\n.row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px;margin-bottom:14px}\r\n.card{background:var(--white);border:1px solid var(--border);border-radius:var(--r);padding:18px}\r\n.card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}\r\n.card-title{font-size:13px;font-weight:600;color:var(--navy)}\r\n.card-link{font-size:11px;color:var(--teal);cursor:pointer;font-weight:500}\r\n\r\n\/* TABLE *\/\r\n.tbl-wrap{overflow-x:auto;border-radius:var(--r);border:1px solid var(--border)}\r\ntable{width:100%;border-collapse:collapse;background:var(--white)}\r\nthead th{font-size:10px;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;padding:9px 14px;text-align:left;background:var(--surface);border-bottom:1px solid var(--border);white-space:nowrap}\r\ntbody td{padding:10px 14px;font-size:12px;color:var(--text);border-bottom:1px solid var(--border)}\r\ntbody tr:last-child td{border-bottom:none}\r\ntbody tr:hover td{background:#fafbfc}\r\n.td-bold{font-weight:600;color:var(--navy)}\r\n.td-muted{color:var(--muted);font-size:11px}\r\n\r\n\/* BADGES *\/\r\n.badge{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:20px;font-size:10px;font-weight:600;white-space:nowrap}\r\n.badge::before{content:'';width:5px;height:5px;border-radius:50%;flex-shrink:0}\r\n.bg{background:var(--green-bg);color:var(--green-text)}.bg::before{background:var(--green)}\r\n.ba{background:var(--amber-bg);color:var(--amber-text)}.ba::before{background:var(--amber)}\r\n.br{background:var(--red-bg);color:var(--red-text)}.br::before{background:var(--red)}\r\n.bb{background:var(--blue-bg);color:var(--blue-text)}.bb::before{background:var(--blue)}\r\n\r\n\/* SEARCH\/FILTER BAR *\/\r\n.filter-bar{display:flex;gap:8px;margin-bottom:14px;align-items:center}\r\n.filter-bar input,.filter-bar select{border:1px solid var(--border);border-radius:var(--r-sm);padding:7px 11px;font-family:'Sora',sans-serif;font-size:12px;color:var(--text);background:var(--white);outline:none;transition:border .2s}\r\n.filter-bar input:focus,.filter-bar select:focus{border-color:var(--teal)}\r\n.filter-bar input{flex:1;min-width:0}\r\n.filter-bar select{flex-shrink:0}\r\n\r\n\/* CALENDAR *\/\r\n.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-top:10px}\r\n.cal-day-header{font-size:10px;color:var(--muted);text-align:center;font-weight:600;padding:4px 0;text-transform:uppercase}\r\n.cal-day{min-height:52px;border:1px solid var(--border);border-radius:6px;padding:4px 6px;font-size:11px;position:relative;background:var(--white)}\r\n.cal-day.other-month{background:var(--surface);opacity:.5}\r\n.cal-day.today{border-color:var(--teal);border-width:1.5px}\r\n.cal-day-num{font-weight:600;color:var(--navy);font-size:11px;margin-bottom:2px}\r\n.cal-booking{background:var(--navy);color:#fff;border-radius:3px;padding:1px 5px;font-size:9px;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n.cal-booking.b1{background:#0b2545}\r\n.cal-booking.b2{background:#1b6ca8}\r\n.cal-booking.b3{background:#0f766e}\r\n\r\n\/* PAYMENT ROWS *\/\r\n.pay-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--border)}\r\n.pay-row:last-child{border:none}\r\n.pay-av{width:32px;height:32px;border-radius:50%;background:var(--navy);color:#fff;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0}\r\n.pay-info{flex:1;min-width:0}\r\n.pay-name{font-size:12px;font-weight:500;color:var(--navy)}\r\n.pay-meta{font-size:10px;color:var(--muted)}\r\n.pay-amt{font-size:13px;font-weight:700;color:var(--navy);text-align:right}\r\n\r\n\/* OCCUPANCY BARS *\/\r\n.occ-row{display:flex;align-items:center;gap:10px;margin-bottom:9px}\r\n.occ-label{font-size:11px;color:var(--muted);width:130px;flex-shrink:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n.occ-bar-bg{flex:1;background:var(--surface);border-radius:20px;height:7px;overflow:hidden}\r\n.occ-bar-fill{height:100%;background:var(--teal);border-radius:20px;transition:width .5s}\r\n.occ-pct{font-size:11px;font-weight:600;color:var(--navy);width:30px;text-align:right;flex-shrink:0}\r\n\r\n\/* LOADING STATE *\/\r\n.loading-row{text-align:center;padding:30px;color:var(--muted);font-size:12px}\r\n.spinner{display:inline-block;width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--teal);border-radius:50%;animation:spin .7s linear infinite;margin-right:8px;vertical-align:middle}\r\n@keyframes spin{to{transform:rotate(360deg)}}\r\n\r\n\/* ERROR STATE *\/\r\n.error-box{background:var(--red-bg);border:1px solid #fca5a5;border-radius:var(--r);padding:14px 16px;color:var(--red-text);font-size:12px;margin-bottom:14px;display:none}\r\n\r\n\/* EMPTY STATE *\/\r\n.empty-state{text-align:center;padding:40px 20px;color:var(--muted)}\r\n.empty-state p{font-size:12px;margin-top:6px}\r\n\r\n\/* MODAL *\/\r\n.modal-backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.4);z-index:100;align-items:center;justify-content:center}\r\n.modal-backdrop.open{display:flex}\r\n.modal{background:var(--white);border-radius:var(--r-lg);padding:24px;width:460px;max-height:85vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.18)}\r\n.modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}\r\n.modal-title{font-size:15px;font-weight:600;color:var(--navy)}\r\n.modal-close{background:none;border:none;font-size:18px;color:var(--muted);cursor:pointer;line-height:1;padding:2px}\r\n.modal-row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--border);font-size:12px}\r\n.modal-row:last-child{border:none}\r\n.modal-lbl{color:var(--muted)}\r\n.modal-val{font-weight:500;color:var(--navy);text-align:right}\r\n.modal-actions{display:flex;gap:8px;margin-top:18px}\r\n.modal-actions .btn{flex:1}\r\n\r\n\/* STATUS TOGGLE *\/\r\n.status-select{border:1px solid var(--border);border-radius:var(--r-sm);padding:5px 9px;font-family:'Sora',sans-serif;font-size:11px;font-weight:500;cursor:pointer;outline:none;background:var(--white);color:var(--text)}\r\n\r\n\/* HAMBURGER *\/\r\n.hamburger{display:none;background:none;border:none;cursor:pointer;padding:6px;flex-direction:column;gap:4px}\r\n.hamburger span{display:block;width:20px;height:2px;background:#fff;border-radius:2px;transition:all .3s}\r\n\r\n\/* SIDEBAR OVERLAY *\/\r\n.sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.5);z-index:40}\r\n.sidebar-overlay.open{display:block}\r\n\r\n\/* MOBILE *\/\r\n@media(max-width:768px){\r\n  .hamburger{display:flex}\r\n  .last-sync{display:none}\r\n  .staff-pill{display:none}\r\n  .topbar{padding:0 14px}\r\n\r\n  .sidebar{position:fixed;left:-220px;top:54px;height:calc(100vh - 54px);z-index:50;transition:left .3s;overflow-y:auto}\r\n  .sidebar.open{left:0}\r\n\r\n  .layout{display:block}\r\n  .main{width:100%}\r\n\r\n  .metrics{grid-template-columns:1fr 1fr;gap:10px}\r\n  .row2{grid-template-columns:1fr;gap:12px}\r\n  .row3{grid-template-columns:1fr;gap:12px}\r\n\r\n  .content{padding:14px}\r\n  .page-header{padding:12px 14px;flex-wrap:wrap;gap:8px}\r\n  .header-actions{gap:6px}\r\n  .btn{padding:6px 10px;font-size:11px}\r\n\r\n  .filter-bar{flex-wrap:wrap}\r\n  .filter-bar select{flex:1;min-width:120px}\r\n\r\n  .modal{width:92vw;padding:16px}\r\n\r\n  .cal-day{min-height:38px;padding:2px 3px}\r\n  .cal-day-num{font-size:10px}\r\n  .cal-booking{font-size:8px;padding:1px 3px}\r\n\r\n  thead th{padding:7px 8px;font-size:9px}\r\n  tbody td{padding:8px;font-size:11px}\r\n}\r\n\r\n@media(max-width:400px){\r\n  .metrics{grid-template-columns:1fr}\r\n  .metric-val{font-size:18px}\r\n}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<!-- TOP BAR -->\r\n<div class=\"topbar\">\r\n  <div style=\"display:flex;align-items:center;gap:10px\">\r\n    <button class=\"hamburger\" onclick=\"toggleSidebar()\" aria-label=\"menu\">\r\n      <span><\/span><span><\/span><span><\/span>\r\n    <\/button>\r\n    <div class=\"logo\">\r\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"><path d=\"M2 14c2-3 4-4 8-4s6 1 8 4\" stroke=\"#14b8a6\" stroke-width=\"1.8\" stroke-linecap=\"round\"\/><path d=\"M5 14V9a5 5 0 0 1 10 0v5\" stroke=\"white\" stroke-width=\"1.5\"\/><rect x=\"7\" y=\"6\" width=\"6\" height=\"4\" rx=\"1\" fill=\"#14b8a6\"\/><\/svg>\r\n      Tour<span class=\"logo-dot\">Vill<\/span> Admin\r\n    <\/div>\r\n  <\/div>\r\n  <div class=\"topbar-right\">\r\n    <span class=\"last-sync\" id=\"last-sync\">\u09b8\u09bf\u0999\u09cd\u0995 \u09b9\u09af\u09bc\u09a8\u09bf<\/span>\r\n    <button class=\"refresh-btn\" id=\"refresh-btn\" onclick=\"loadAllData()\">\r\n      <span class=\"refresh-icon\">\u21bb<\/span> \u09b0\u09bf\u09ab\u09cd\u09b0\u09c7\u09b6\r\n    <\/button>\r\n    <span class=\"staff-pill\">Admin Panel<\/span>\r\n  <\/div>\r\n<\/div>\r\n<div class=\"sidebar-overlay\" id=\"sidebar-overlay\" onclick=\"toggleSidebar()\"><\/div>\r\n\r\n<div class=\"layout\">\r\n  <!-- SIDEBAR -->\r\n  <div class=\"sidebar\">\r\n    <div class=\"sidebar-section\">\r\n      <div class=\"sidebar-label\">\u09ae\u09c7\u09a8\u09c1<\/div>\r\n      <div class=\"menu-item active\" onclick=\"showView('overview',this)\">\r\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><rect x=\"1\" y=\"1\" width=\"5\" height=\"5\" rx=\"1.2\" fill=\"currentColor\"\/><rect x=\"8\" y=\"1\" width=\"5\" height=\"5\" rx=\"1.2\" fill=\"currentColor\"\/><rect x=\"1\" y=\"8\" width=\"5\" height=\"5\" rx=\"1.2\" fill=\"currentColor\"\/><rect x=\"8\" y=\"8\" width=\"5\" height=\"5\" rx=\"1.2\" fill=\"currentColor\"\/><\/svg>\r\n        \u0993\u09ad\u09be\u09b0\u09ad\u09bf\u0989\r\n      <\/div>\r\n      <div class=\"menu-item\" onclick=\"showView('bookings',this)\">\r\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><rect x=\"1.5\" y=\"1.5\" width=\"11\" height=\"11\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.3\"\/><line x1=\"4\" y1=\"5\" x2=\"10\" y2=\"5\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"\/><line x1=\"4\" y1=\"7.5\" x2=\"8\" y2=\"7.5\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"\/><\/svg>\r\n        \u09ac\u09c1\u0995\u09bf\u0982 \u09b2\u09bf\u09b8\u09cd\u099f\r\n        <span class=\"mbadge\" id=\"pending-badge\">0<\/span>\r\n      <\/div>\r\n      <div class=\"menu-item\" onclick=\"showView('payments',this)\">\r\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><rect x=\"1\" y=\"3.5\" width=\"12\" height=\"8\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.3\"\/><line x1=\"1\" y1=\"6.5\" x2=\"13\" y2=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><\/svg>\r\n        \u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f\r\n      <\/div>\r\n      <div class=\"menu-item\" onclick=\"showView('calendar',this)\">\r\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><rect x=\"1.5\" y=\"2.5\" width=\"11\" height=\"10\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.3\"\/><line x1=\"4.5\" y1=\"1.5\" x2=\"4.5\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\"\/><line x1=\"9.5\" y1=\"1.5\" x2=\"9.5\" y2=\"4\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\"\/><line x1=\"1.5\" y1=\"6\" x2=\"12.5\" y2=\"6\" stroke=\"currentColor\" stroke-width=\"1.2\"\/><\/svg>\r\n        \u0995\u09cd\u09af\u09be\u09b2\u09c7\u09a8\u09cd\u09a1\u09be\u09b0\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <!-- MAIN -->\r\n  <div class=\"main\">\r\n\r\n    <!-- OVERVIEW -->\r\n    <div id=\"view-overview\" class=\"view active\">\r\n      <div class=\"page-header\">\r\n        <div><div class=\"page-title\">\u09a1\u09cd\u09af\u09be\u09b6\u09ac\u09cb\u09b0\u09cd\u09a1 \u0993\u09ad\u09be\u09b0\u09ad\u09bf\u0989<\/div><div class=\"page-sub\" id=\"overview-sub\">\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...<\/div><\/div>\r\n        <div class=\"header-actions\">\r\n          <button class=\"btn btn-outline\" onclick=\"exportCSV()\">CSV Export<\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"content\">\r\n        <div class=\"error-box\" id=\"error-box\">\u26a0 Google Sheets \u09a5\u09c7\u0995\u09c7 \u09a1\u09c7\u099f\u09be \u09b2\u09cb\u09a1 \u09b9\u09af\u09bc\u09a8\u09bf\u0964 SCRIPT_URL \u09a0\u09bf\u0995 \u0995\u09b0\u09c1\u09a8\u0964<\/div>\r\n        <div class=\"metrics\" id=\"metrics-grid\">\r\n          <div class=\"metric\"><div class=\"metric-accent\" style=\"background:var(--teal)\"><\/div><span class=\"metric-icon\">\ud83d\udcb0<\/span><div class=\"metric-val\" id=\"m-revenue\">\u2014<\/div><div class=\"metric-lbl\">\u09ae\u09cb\u099f \u0986\u09af\u09bc (\u098f\u0987 \u09ae\u09be\u09b8)<\/div><div class=\"metric-change neutral\" id=\"m-rev-change\">\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-accent\" style=\"background:var(--amber)\"><\/div><span class=\"metric-icon\">\ud83d\udcc5<\/span><div class=\"metric-val\" id=\"m-bookings\">\u2014<\/div><div class=\"metric-lbl\">\u09ae\u09cb\u099f \u09ac\u09c1\u0995\u09bf\u0982<\/div><div class=\"metric-change neutral\" id=\"m-book-change\">\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-accent\" style=\"background:#f59e0b\"><\/div><span class=\"metric-icon\">\u23f3<\/span><div class=\"metric-val\" id=\"m-pending\">\u2014<\/div><div class=\"metric-lbl\">\u0985\u09aa\u09c7\u0995\u09cd\u09b7\u09ae\u09be\u09a8 \u09ac\u09c1\u0995\u09bf\u0982<\/div><div class=\"metric-change neutral\">\u098f\u0996\u09a8\u0987 \u0985\u09cd\u09af\u09be\u0995\u09b6\u09a8 \u09a8\u09bf\u09a8<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-accent\" style=\"background:var(--green)\"><\/div><span class=\"metric-icon\">\u2713<\/span><div class=\"metric-val\" id=\"m-confirmed\">\u2014<\/div><div class=\"metric-lbl\">\u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u09ac\u09c1\u0995\u09bf\u0982<\/div><div class=\"metric-change neutral\" id=\"m-conf-rate\">\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...<\/div><\/div>\r\n        <\/div>\r\n        <div class=\"row2\">\r\n          <div class=\"card\">\r\n            <div class=\"card-header\"><span class=\"card-title\">\u09b8\u09be\u09ae\u09cd\u09aa\u09cd\u09b0\u09a4\u09bf\u0995 \u09ac\u09c1\u0995\u09bf\u0982<\/span><span class=\"card-link\" onclick=\"showView('bookings',null)\">\u09b8\u09ac \u09a6\u09c7\u0996\u09c1\u09a8 \u2192<\/span><\/div>\r\n            <div id=\"recent-bookings\"><div class=\"loading-row\"><span class=\"spinner\"><\/span>\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...<\/div><\/div>\r\n          <\/div>\r\n          <div class=\"card\">\r\n            <div class=\"card-header\"><span class=\"card-title\">\u09a8\u09cc\u0995\u09be\u09b0 \u0985\u0995\u09c1\u09aa\u09c7\u09a8\u09cd\u09b8\u09bf<\/span><\/div>\r\n            <div id=\"occupancy-bars\"><div class=\"loading-row\"><span class=\"spinner\"><\/span><\/div><\/div>\r\n            <div style=\"margin-top:16px;border-top:1px solid var(--border);padding-top:14px\">\r\n              <div class=\"card-header\" style=\"margin-bottom:10px\"><span class=\"card-title\">\u09b8\u09be\u09ae\u09cd\u09aa\u09cd\u09b0\u09a4\u09bf\u0995 \u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f<\/span><span class=\"card-link\" onclick=\"showView('payments',null)\">\u09b8\u09ac \u09a6\u09c7\u0996\u09c1\u09a8 \u2192<\/span><\/div>\r\n              <div id=\"recent-payments\"><div class=\"loading-row\"><span class=\"spinner\"><\/span><\/div><\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- BOOKINGS -->\r\n    <div id=\"view-bookings\" class=\"view\">\r\n      <div class=\"page-header\">\r\n        <div><div class=\"page-title\">\u09ac\u09c1\u0995\u09bf\u0982 \u09ae\u09cd\u09af\u09be\u09a8\u09c7\u099c\u09ae\u09c7\u09a8\u09cd\u099f<\/div><div class=\"page-sub\" id=\"booking-count-sub\">\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...<\/div><\/div>\r\n        <div class=\"header-actions\">\r\n          <button class=\"btn btn-outline\" onclick=\"exportCSV()\">CSV Export<\/button>\r\n          <button class=\"btn btn-teal\" onclick=\"loadAllData()\">\u21bb \u09b0\u09bf\u09ab\u09cd\u09b0\u09c7\u09b6<\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"content\">\r\n        <div class=\"filter-bar\">\r\n          <input type=\"text\" id=\"search-input\" placeholder=\"\u09a8\u09be\u09ae, \u09ab\u09cb\u09a8 \u09ac\u09be \u09ac\u09c1\u0995\u09bf\u0982 ID \u09a6\u09bf\u09af\u09bc\u09c7 \u0996\u09c1\u0981\u099c\u09c1\u09a8...\" oninput=\"filterBookings()\">\r\n          <select id=\"status-filter\" onchange=\"filterBookings()\">\r\n            <option value=\"\">\u09b8\u09ac \u09b8\u09cd\u099f\u09cd\u09af\u09be\u099f\u09be\u09b8<\/option>\r\n            <option value=\"Confirmed\">\u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4<\/option>\r\n            <option value=\"Pending\">\u0985\u09aa\u09c7\u0995\u09cd\u09b7\u09ae\u09be\u09a8<\/option>\r\n            <option value=\"Cancelled\">\u09ac\u09be\u09a4\u09bf\u09b2<\/option>\r\n            <option value=\"Completed\">\u09b8\u09ae\u09cd\u09aa\u09a8\u09cd\u09a8<\/option>\r\n          <\/select>\r\n          <select id=\"boat-filter\" onchange=\"filterBookings()\">\r\n            <option value=\"\">\u09b8\u09ac \u09a8\u09cc\u0995\u09be<\/option>\r\n          <\/select>\r\n        <\/div>\r\n        <div class=\"tbl-wrap\">\r\n          <table>\r\n            <thead>\r\n              <tr>\r\n                <th>\u09ac\u09c1\u0995\u09bf\u0982 ID<\/th>\r\n                <th>\u0985\u09a4\u09bf\u09a5\u09bf\u09b0 \u09a8\u09be\u09ae<\/th>\r\n                <th>\u09a8\u09cc\u0995\u09be<\/th>\r\n                <th>\u09a4\u09be\u09b0\u09bf\u0996<\/th>\r\n                <th>\u09b0\u09be\u09a4<\/th>\r\n                <th>\u09aa\u09b0\u09bf\u09ae\u09be\u09a3<\/th>\r\n                <th>\u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f<\/th>\r\n                <th>\u09b8\u09cd\u099f\u09cd\u09af\u09be\u099f\u09be\u09b8<\/th>\r\n                <th>\u0985\u09cd\u09af\u09be\u0995\u09b6\u09a8<\/th>\r\n              <\/tr>\r\n            <\/thead>\r\n            <tbody id=\"bookings-tbody\">\r\n              <tr><td colspan=\"9\" class=\"loading-row\"><span class=\"spinner\"><\/span>\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...<\/td><\/tr>\r\n            <\/tbody>\r\n          <\/table>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- PAYMENTS -->\r\n    <div id=\"view-payments\" class=\"view\">\r\n      <div class=\"page-header\">\r\n        <div><div class=\"page-title\">\u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f \u099f\u09cd\u09b0\u09cd\u09af\u09be\u0995\u09bf\u0982<\/div><div class=\"page-sub\" id=\"payment-sub\">\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...<\/div><\/div>\r\n        <div class=\"header-actions\">\r\n          <button class=\"btn btn-outline\" onclick=\"exportPaymentCSV()\">CSV Export<\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"content\">\r\n        <div class=\"metrics\" style=\"grid-template-columns:repeat(3,1fr)\">\r\n          <div class=\"metric\"><div class=\"metric-accent\" style=\"background:var(--green)\"><\/div><span class=\"metric-icon\">\u2705<\/span><div class=\"metric-val\" id=\"p-received\">\u2014<\/div><div class=\"metric-lbl\">\u09ae\u09cb\u099f \u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f \u09aa\u09be\u0993\u09af\u09bc\u09be \u0997\u09c7\u099b\u09c7<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-accent\" style=\"background:var(--amber)\"><\/div><span class=\"metric-icon\">\u23f3<\/span><div class=\"metric-val\" id=\"p-due\">\u2014<\/div><div class=\"metric-lbl\">\u09ac\u09be\u0995\u09bf \u09aa\u09b0\u09bf\u09ae\u09be\u09a3<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"metric-accent\" style=\"background:var(--red)\"><\/div><span class=\"metric-icon\">\u21a9<\/span><div class=\"metric-val\" id=\"p-refund\">\u2014<\/div><div class=\"metric-lbl\">\u09b0\u09bf\u09ab\u09be\u09a8\u09cd\u09a1<\/div><\/div>\r\n        <\/div>\r\n        <div class=\"filter-bar\">\r\n          <input type=\"text\" id=\"pay-search\" placeholder=\"\u09a8\u09be\u09ae \u09ac\u09be \u09ac\u09c1\u0995\u09bf\u0982 ID...\" oninput=\"filterPayments()\">\r\n          <select id=\"pay-status-filter\" onchange=\"filterPayments()\">\r\n            <option value=\"\">\u09b8\u09ac \u09b8\u09cd\u099f\u09cd\u09af\u09be\u099f\u09be\u09b8<\/option>\r\n            <option value=\"Paid\">\u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f \u09b9\u09af\u09bc\u09c7\u099b\u09c7<\/option>\r\n            <option value=\"Partial\">\u0986\u0982\u09b6\u09bf\u0995<\/option>\r\n            <option value=\"Unpaid\">\u09ac\u09be\u0995\u09bf<\/option>\r\n            <option value=\"Refunded\">\u09b0\u09bf\u09ab\u09be\u09a8\u09cd\u09a1<\/option>\r\n          <\/select>\r\n          <select id=\"pay-method-filter\" onchange=\"filterPayments()\">\r\n            <option value=\"\">\u09b8\u09ac \u09aa\u09a6\u09cd\u09a7\u09a4\u09bf<\/option>\r\n            <option value=\"bKash\">bKash<\/option>\r\n            <option value=\"Nagad\">Nagad<\/option>\r\n            <option value=\"Card\">\u0995\u09be\u09b0\u09cd\u09a1<\/option>\r\n            <option value=\"Bank\">\u09ac\u09cd\u09af\u09be\u0982\u0995<\/option>\r\n            <option value=\"Cash\">\u0995\u09cd\u09af\u09be\u09b6<\/option>\r\n          <\/select>\r\n        <\/div>\r\n        <div class=\"tbl-wrap\">\r\n          <table>\r\n            <thead>\r\n              <tr>\r\n                <th>\u09a4\u09be\u09b0\u09bf\u0996<\/th>\r\n                <th>\u09ac\u09c1\u0995\u09bf\u0982 ID<\/th>\r\n                <th>\u0985\u09a4\u09bf\u09a5\u09bf<\/th>\r\n                <th>\u09aa\u09a6\u09cd\u09a7\u09a4\u09bf<\/th>\r\n                <th>\u09aa\u09b0\u09bf\u09b6\u09cb\u09a7\u09bf\u09a4<\/th>\r\n                <th>\u09ac\u09be\u0995\u09bf<\/th>\r\n                <th>\u09b8\u09cd\u099f\u09cd\u09af\u09be\u099f\u09be\u09b8<\/th>\r\n              <\/tr>\r\n            <\/thead>\r\n            <tbody id=\"payments-tbody\">\r\n              <tr><td colspan=\"7\" class=\"loading-row\"><span class=\"spinner\"><\/span>\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...<\/td><\/tr>\r\n            <\/tbody>\r\n          <\/table>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- CALENDAR -->\r\n    <div id=\"view-calendar\" class=\"view\">\r\n      <div class=\"page-header\">\r\n        <div><div class=\"page-title\">\u0985\u09cd\u09af\u09be\u09ad\u09c7\u0987\u09b2\u09c7\u09ac\u09bf\u09b2\u09bf\u099f\u09bf \u0995\u09cd\u09af\u09be\u09b2\u09c7\u09a8\u09cd\u09a1\u09be\u09b0<\/div><div class=\"page-sub\" id=\"cal-sub\">\u09a8\u09cc\u0995\u09be\u09b0 \u09ac\u09c1\u0995\u09bf\u0982 \u09b6\u09bf\u09a1\u09bf\u0989\u09b2<\/div><\/div>\r\n        <div class=\"header-actions\">\r\n          <button class=\"btn btn-outline\" onclick=\"prevMonth()\">\u2190 \u0986\u0997\u09c7\u09b0 \u09ae\u09be\u09b8<\/button>\r\n          <button class=\"btn btn-outline\" onclick=\"nextMonth()\">\u09aa\u09b0\u09c7\u09b0 \u09ae\u09be\u09b8 \u2192<\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"content\">\r\n        <div style=\"display:flex;gap:10px;margin-bottom:14px;flex-wrap:wrap\">\r\n          <div style=\"background:var(--white);border:1px solid var(--border);border-radius:var(--r);padding:12px 18px;font-size:12px;font-weight:600;color:var(--navy)\" id=\"cal-month-label\">\u098f\u09aa\u09cd\u09b0\u09bf\u09b2 \u09e8\u09e6\u09e8\u09eb<\/div>\r\n          <div style=\"display:flex;gap:8px;align-items:center;flex-wrap:wrap\">\r\n            <span style=\"display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)\"><span style=\"width:10px;height:10px;background:#0b2545;border-radius:2px;display:inline-block\"><\/span>\u09b0\u09be\u099c\u09b9\u0982\u09b8<\/span>\r\n            <span style=\"display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)\"><span style=\"width:10px;height:10px;background:#1b6ca8;border-radius:2px;display:inline-block\"><\/span>\u09a8\u09c0\u09b2\u09be\u0995\u09be\u09b6<\/span>\r\n            <span style=\"display:flex;align-items:center;gap:5px;font-size:11px;color:var(--muted)\"><span style=\"width:10px;height:10px;background:#0f766e;border-radius:2px;display:inline-block\"><\/span>\u09aa\u09a6\u09cd\u09ae\u09be<\/span>\r\n          <\/div>\r\n        <\/div>\r\n        <div id=\"calendar-grid\" style=\"background:var(--white);border:1px solid var(--border);border-radius:var(--r);padding:14px\">\r\n          <div class=\"loading-row\"><span class=\"spinner\"><\/span>\u0995\u09cd\u09af\u09be\u09b2\u09c7\u09a8\u09cd\u09a1\u09be\u09b0 \u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...<\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- BOOKING DETAIL MODAL -->\r\n<div class=\"modal-backdrop\" id=\"booking-modal\">\r\n  <div class=\"modal\">\r\n    <div class=\"modal-header\">\r\n      <div class=\"modal-title\" id=\"modal-title\">\u09ac\u09c1\u0995\u09bf\u0982 \u09ac\u09bf\u09b8\u09cd\u09a4\u09be\u09b0\u09bf\u09a4<\/div>\r\n      <button class=\"modal-close\" onclick=\"closeModal()\">\u2715<\/button>\r\n    <\/div>\r\n    <div id=\"modal-body\"><\/div>\r\n    <div class=\"modal-actions\" id=\"modal-actions\"><\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n\/\/ ============================================================\r\n\/\/ CONFIGURATION \u2014 \u09b6\u09c1\u09a7\u09c1 \u098f\u0987 \u09b2\u09be\u0987\u09a8\u099f\u09be \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u0995\u09b0\u09c1\u09a8\r\n\/\/ ============================================================\r\nvar SCRIPT_URL = 'https:\/\/script.google.com\/macros\/s\/AKfycbxVLYZ1sB8E6Wvk0ex-k0L68hBBVGBFOZs8b34VNvXKDkezm2JSV0h6RIpYH6g7d53U\/exec';\r\n\/\/ ============================================================\r\n\r\nvar allBookings = [];\r\nvar allPayments = [];\r\nvar calMonth = new Date().getMonth();\r\nvar calYear = new Date().getFullYear();\r\n\r\nfunction showView(name, menuEl) {\r\n  document.querySelectorAll('.view').forEach(v => v.classList.remove('active'));\r\n  document.getElementById('view-' + name).classList.add('active');\r\n  if (menuEl) {\r\n    document.querySelectorAll('.menu-item').forEach(m => m.classList.remove('active'));\r\n    menuEl.classList.add('active');\r\n  } else {\r\n    document.querySelectorAll('.menu-item').forEach(m => {\r\n      if (m.getAttribute('onclick') && m.getAttribute('onclick').includes(\"'\" + name + \"'\")) {\r\n        m.classList.add('active');\r\n      }\r\n    });\r\n  }\r\n  \/\/ mobile \u098f sidebar \u09ac\u09a8\u09cd\u09a7 \u0995\u09b0\u09cb\r\n  if(window.innerWidth <= 768){\r\n    document.querySelector('.sidebar').classList.remove('open');\r\n    document.getElementById('sidebar-overlay').classList.remove('open');\r\n  }\r\n}\r\n\r\n\/\/ ---- LOAD DATA FROM APPS SCRIPT ----\r\nfunction loadAllData() {\r\n  var btn = document.getElementById('refresh-btn');\r\n  btn.classList.add('loading');\r\n  btn.disabled = true;\r\n\r\n  if (SCRIPT_URL === 'YOUR_APPS_SCRIPT_WEB_APP_URL_HERE') {\r\n    \/\/ DEMO MODE \u2014 use sample data\r\n    setTimeout(function() {\r\n      var demo = getDemoData();\r\n      processData(demo);\r\n      btn.classList.remove('loading');\r\n      btn.disabled = false;\r\n      document.getElementById('last-sync').textContent = '\u09a1\u09c7\u09ae\u09cb \u09ae\u09cb\u09a1';\r\n    }, 800);\r\n    return;\r\n  }\r\n\r\n  fetch(SCRIPT_URL + '?action=getDashboardData')\r\n    .then(function(r) { return r.json(); })\r\n    .then(function(data) {\r\n      processData(data);\r\n      btn.classList.remove('loading');\r\n      btn.disabled = false;\r\n      var now = new Date();\r\n      document.getElementById('last-sync').textContent = '\u09b8\u09bf\u0999\u09cd\u0995: ' + now.getHours() + ':' + String(now.getMinutes()).padStart(2,'0');\r\n      document.getElementById('error-box').style.display = 'none';\r\n    })\r\n    .catch(function(err) {\r\n      btn.classList.remove('loading');\r\n      btn.disabled = false;\r\n      document.getElementById('error-box').style.display = 'block';\r\n      console.error('Fetch error:', err);\r\n    });\r\n}\r\n\r\nfunction processData(data) {\r\n  allBookings = data.bookings || [];\r\n  allPayments = data.payments || [];\r\n\r\n  renderMetrics();\r\n  renderRecentBookings();\r\n  renderOccupancy();\r\n  renderRecentPayments();\r\n  renderBookingsTable();\r\n  renderPaymentsTable();\r\n  renderCalendar();\r\n  populateBoatFilter();\r\n\r\n  var now = new Date();\r\n  var months = ['\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09bf','\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09bf','\u09ae\u09be\u09b0\u09cd\u099a','\u098f\u09aa\u09cd\u09b0\u09bf\u09b2','\u09ae\u09c7','\u099c\u09c1\u09a8','\u099c\u09c1\u09b2\u09be\u0987','\u0986\u0997\u09b8\u09cd\u099f','\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0','\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0','\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0','\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0'];\r\n  document.getElementById('overview-sub').textContent = months[now.getMonth()] + ' ' + now.getFullYear() + ' \u2014 \u09b2\u09be\u0987\u09ad \u09a1\u09c7\u099f\u09be';\r\n}\r\n\r\n\/\/ ---- METRICS ----\r\nfunction renderMetrics() {\r\n  var now = new Date();\r\n  var thisMonth = allBookings.filter(function(b) {\r\n    var d = new Date(b.checkIn);\r\n    return d.getMonth() === now.getMonth() && d.getFullYear() === now.getFullYear();\r\n  });\r\n\r\n  var revenue = 0;\r\n  allBookings.forEach(function(b) { if (b.status !== 'Cancelled') revenue += (parseFloat(b.totalAmount) || 0); });\r\n  var pending = allBookings.filter(function(b) { return b.status === 'Pending'; }).length;\r\n  var confirmed = allBookings.filter(function(b) { return b.status === 'Confirmed'; }).length;\r\n\r\n  document.getElementById('m-revenue').textContent = '\u09f3 ' + formatNum(revenue);\r\n  document.getElementById('m-bookings').textContent = allBookings.length;\r\n  document.getElementById('m-pending').textContent = pending;\r\n  document.getElementById('m-confirmed').textContent = confirmed;\r\n  document.getElementById('m-book-change').textContent = '\u098f\u0987 \u09ae\u09be\u09b8: ' + thisMonth.length + '\u099f\u09bf';\r\n  document.getElementById('m-conf-rate').textContent = allBookings.length ? Math.round(confirmed\/allBookings.length*100) + '% \u0995\u09a8\u09ab\u09be\u09b0\u09cd\u09ae\u09c7\u09b6\u09a8 \u09b0\u09c7\u099f' : '\u2014';\r\n  document.getElementById('pending-badge').textContent = pending;\r\n  document.getElementById('booking-count-sub').textContent = '\u09ae\u09cb\u099f ' + allBookings.length + '\u099f\u09bf \u09ac\u09c1\u0995\u09bf\u0982';\r\n\r\n  \/\/ payment metrics\r\n  var received = 0, due = 0, refund = 0;\r\n  allPayments.forEach(function(p) {\r\n    received += parseFloat(p.amountPaid) || 0;\r\n    due += parseFloat(p.amountDue) || 0;\r\n    if (p.status === 'Refunded') refund += parseFloat(p.amountPaid) || 0;\r\n  });\r\n  document.getElementById('p-received').textContent = '\u09f3 ' + formatNum(received);\r\n  document.getElementById('p-due').textContent = '\u09f3 ' + formatNum(due);\r\n  document.getElementById('p-refund').textContent = '\u09f3 ' + formatNum(refund);\r\n  document.getElementById('payment-sub').textContent = allPayments.length + '\u099f\u09bf \u099f\u09cd\u09b0\u09be\u09a8\u099c\u09c7\u0995\u09b6\u09a8';\r\n}\r\n\r\n\/\/ ---- RECENT BOOKINGS (overview) ----\r\nfunction renderRecentBookings() {\r\n  var el = document.getElementById('recent-bookings');\r\n  var recent = allBookings.slice(-5).reverse();\r\n  if (!recent.length) { el.innerHTML = '<div class=\"empty-state\"><p>\u0995\u09cb\u09a8\u09cb \u09ac\u09c1\u0995\u09bf\u0982 \u09a8\u09c7\u0987<\/p><\/div>'; return; }\r\n  var html = '<table style=\"width:100%;border-collapse:collapse\">';\r\n  html += '<thead><tr><th style=\"font-size:10px;color:var(--muted);text-align:left;padding:4px 0;border-bottom:1px solid var(--border)\">\u0985\u09a4\u09bf\u09a5\u09bf<\/th><th style=\"font-size:10px;color:var(--muted);text-align:left;padding:4px 0;border-bottom:1px solid var(--border)\">\u09a8\u09cc\u0995\u09be<\/th><th style=\"font-size:10px;color:var(--muted);text-align:right;padding:4px 0;border-bottom:1px solid var(--border)\">\u09b8\u09cd\u099f\u09cd\u09af\u09be\u099f\u09be\u09b8<\/th><\/tr><\/thead><tbody>';\r\n  recent.forEach(function(b) {\r\n    html += '<tr onclick=\"openBookingModal(\\'' + b.bookingId + '\\')\" style=\"cursor:pointer\">';\r\n    html += '<td style=\"padding:8px 0;border-bottom:1px solid var(--border)\"><div style=\"font-size:12px;font-weight:500;color:var(--navy)\">' + esc(b.guestName) + '<\/div><div style=\"font-size:10px;color:var(--muted)\">' + esc(b.bookingId) + '<\/div><\/td>';\r\n    html += '<td style=\"padding:8px 0;border-bottom:1px solid var(--border);font-size:11px;color:var(--muted)\">' + esc(b.boatName) + '<\/td>';\r\n    html += '<td style=\"padding:8px 0;border-bottom:1px solid var(--border);text-align:right\">' + statusBadge(b.status) + '<\/td>';\r\n    html += '<\/tr>';\r\n  });\r\n  html += '<\/tbody><\/table>';\r\n  el.innerHTML = html;\r\n}\r\n\r\n\/\/ ---- OCCUPANCY BARS ----\r\nfunction renderOccupancy() {\r\n  var el = document.getElementById('occupancy-bars');\r\n  var boats = {};\r\n  var confirmed = allBookings.filter(function(b) { return b.status === 'Confirmed' || b.status === 'Completed'; });\r\n  confirmed.forEach(function(b) { boats[b.boatName] = (boats[b.boatName] || 0) + 1; });\r\n  var total = confirmed.length || 1;\r\n  var html = '';\r\n  Object.keys(boats).forEach(function(name) {\r\n    var pct = Math.round(boats[name] \/ total * 100);\r\n    html += '<div class=\"occ-row\"><div class=\"occ-label\">' + esc(name) + '<\/div><div class=\"occ-bar-bg\"><div class=\"occ-bar-fill\" style=\"width:' + pct + '%\"><\/div><\/div><div class=\"occ-pct\">' + pct + '%<\/div><\/div>';\r\n  });\r\n  if (!html) html = '<div style=\"font-size:12px;color:var(--muted);text-align:center;padding:16px\">\u09a8\u09cc\u0995\u09be\u09b0 \u09a1\u09c7\u099f\u09be \u09a8\u09c7\u0987<\/div>';\r\n  el.innerHTML = html;\r\n}\r\n\r\n\/\/ ---- RECENT PAYMENTS ----\r\nfunction renderRecentPayments() {\r\n  var el = document.getElementById('recent-payments');\r\n  var recent = allPayments.slice(-4).reverse();\r\n  if (!recent.length) { el.innerHTML = '<div style=\"font-size:12px;color:var(--muted);text-align:center;padding:10px\">\u0995\u09cb\u09a8\u09cb \u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f \u09a8\u09c7\u0987<\/div>'; return; }\r\n  var html = '';\r\n  recent.forEach(function(p) {\r\n    var initials = (p.guestName || 'XX').split(' ').map(function(w){return w[0]}).slice(0,2).join('').toUpperCase();\r\n    html += '<div class=\"pay-row\">';\r\n    html += '<div class=\"pay-av\">' + initials + '<\/div>';\r\n    html += '<div class=\"pay-info\"><div class=\"pay-name\">' + esc(p.guestName) + '<\/div><div class=\"pay-meta\">' + esc(p.paymentDate||'') + ' \u2022 ' + esc(p.paymentMethod||'') + '<\/div><\/div>';\r\n    html += '<div><div class=\"pay-amt\">\u09f3 ' + formatNum(p.amountPaid) + '<\/div>' + payStatusBadge(p.status) + '<\/div>';\r\n    html += '<\/div>';\r\n  });\r\n  el.innerHTML = html;\r\n}\r\n\r\n\/\/ ---- BOOKINGS TABLE ----\r\nfunction renderBookingsTable(data) {\r\n  var list = data || allBookings;\r\n  var tbody = document.getElementById('bookings-tbody');\r\n  if (!list.length) {\r\n    tbody.innerHTML = '<tr><td colspan=\"9\"><div class=\"empty-state\"><p>\u0995\u09cb\u09a8\u09cb \u09ac\u09c1\u0995\u09bf\u0982 \u09aa\u09be\u0993\u09af\u09bc\u09be \u09af\u09be\u09af\u09bc\u09a8\u09bf<\/p><\/div><\/td><\/tr>';\r\n    return;\r\n  }\r\n  var html = '';\r\n  list.slice().reverse().forEach(function(b) {\r\n    var nights = calcNights(b.checkIn, b.checkOut);\r\n    html += '<tr style=\"cursor:pointer\" onclick=\"openBookingModal(\\'' + b.bookingId + '\\')\">';\r\n    html += '<td class=\"td-bold\">' + esc(b.bookingId) + '<\/td>';\r\n    html += '<td><div style=\"font-weight:500\">' + esc(b.guestName) + '<\/div><div class=\"td-muted\">' + esc(b.phone||'') + '<\/div><\/td>';\r\n    html += '<td>' + esc(b.boatName) + '<\/td>';\r\n    html += '<td>' + esc(b.checkIn||'') + '<br><span class=\"td-muted\">\u2192 ' + esc(b.checkOut||'') + '<\/span><\/td>';\r\n    html += '<td style=\"text-align:center\">' + nights + '<\/td>';\r\n    html += '<td style=\"font-weight:600\">\u09f3 ' + formatNum(b.totalAmount) + '<\/td>';\r\n    html += '<td>' + esc(b.paymentMethod||'\u2014') + '<\/td>';\r\n    html += '<td>' + statusBadge(b.status) + '<\/td>';\r\n    html += '<td><select class=\"status-select\" onclick=\"event.stopPropagation()\" onchange=\"updateStatus(\\'' + b.bookingId + '\\',this.value)\">';\r\n    ['Confirmed','Pending','Completed','Cancelled'].forEach(function(s) {\r\n      html += '<option value=\"' + s + '\"' + (b.status===s?' selected':'') + '>' + statusLabel(s) + '<\/option>';\r\n    });\r\n    html += '<\/select><\/td>';\r\n    html += '<\/tr>';\r\n  });\r\n  tbody.innerHTML = html;\r\n}\r\n\r\n\/\/ ---- PAYMENTS TABLE ----\r\nfunction renderPaymentsTable(data) {\r\n  var list = data || allPayments;\r\n  var tbody = document.getElementById('payments-tbody');\r\n  if (!list.length) {\r\n    tbody.innerHTML = '<tr><td colspan=\"7\"><div class=\"empty-state\"><p>\u0995\u09cb\u09a8\u09cb \u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f \u09a1\u09c7\u099f\u09be \u09a8\u09c7\u0987<\/p><\/div><\/td><\/tr>';\r\n    return;\r\n  }\r\n  var html = '';\r\n  list.slice().reverse().forEach(function(p) {\r\n    html += '<tr>';\r\n    html += '<td>' + esc(p.paymentDate||'\u2014') + '<\/td>';\r\n    html += '<td class=\"td-bold\">' + esc(p.bookingId||'\u2014') + '<\/td>';\r\n    html += '<td><div style=\"font-weight:500\">' + esc(p.guestName||'') + '<\/div><\/td>';\r\n    html += '<td>' + esc(p.paymentMethod||'\u2014') + '<\/td>';\r\n    html += '<td style=\"color:var(--green-text);font-weight:600\">\u09f3 ' + formatNum(p.amountPaid) + '<\/td>';\r\n    html += '<td style=\"color:var(--amber-text)\">\u09f3 ' + formatNum(p.amountDue) + '<\/td>';\r\n    html += '<td>' + payStatusBadge(p.status) + '<\/td>';\r\n    html += '<\/tr>';\r\n  });\r\n  tbody.innerHTML = html;\r\n}\r\n\r\n\/\/ ---- CALENDAR ----\r\nfunction renderCalendar() {\r\n  var months = ['\u099c\u09be\u09a8\u09c1\u09af\u09bc\u09be\u09b0\u09bf','\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09bf','\u09ae\u09be\u09b0\u09cd\u099a','\u098f\u09aa\u09cd\u09b0\u09bf\u09b2','\u09ae\u09c7','\u099c\u09c1\u09a8','\u099c\u09c1\u09b2\u09be\u0987','\u0986\u0997\u09b8\u09cd\u099f','\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0','\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0','\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0','\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0'];\r\n  var days = ['\u09b0\u09ac\u09bf','\u09b8\u09cb\u09ae','\u09ae\u0999\u09cd\u0997\u09b2','\u09ac\u09c1\u09a7','\u09ac\u09c3\u09b9\u0983','\u09b6\u09c1\u0995\u09cd\u09b0','\u09b6\u09a8\u09bf'];\r\n  document.getElementById('cal-month-label').textContent = months[calMonth] + ' ' + calYear;\r\n\r\n  var firstDay = new Date(calYear, calMonth, 1).getDay();\r\n  var daysInMonth = new Date(calYear, calMonth+1, 0).getDate();\r\n  var today = new Date();\r\n\r\n  \/\/ Build booking map\r\n  var boatColors = {};\r\n  var colorIdx = 0;\r\n  var colorList = ['b1','b2','b3'];\r\n  var bookingMap = {};\r\n  allBookings.filter(function(b) { return b.status !== 'Cancelled'; }).forEach(function(b) {\r\n    if (!boatColors[b.boatName]) boatColors[b.boatName] = colorList[colorIdx++ % 3];\r\n    var start = new Date(b.checkIn);\r\n    var end = new Date(b.checkOut);\r\n    for (var d = new Date(start); d <= end; d.setDate(d.getDate()+1)) {\r\n      if (d.getMonth() === calMonth && d.getFullYear() === calYear) {\r\n        var key = d.getDate();\r\n        if (!bookingMap[key]) bookingMap[key] = [];\r\n        bookingMap[key].push({ name: b.boatName, cls: boatColors[b.boatName], guest: b.guestName });\r\n      }\r\n    }\r\n  });\r\n\r\n  var html = '<div class=\"cal-grid\">';\r\n  days.forEach(function(d) { html += '<div class=\"cal-day-header\">' + d + '<\/div>'; });\r\n  for (var i = 0; i < firstDay; i++) html += '<div class=\"cal-day other-month\"><\/div>';\r\n  for (var day = 1; day <= daysInMonth; day++) {\r\n    var isToday = today.getDate()===day && today.getMonth()===calMonth && today.getFullYear()===calYear;\r\n    html += '<div class=\"cal-day' + (isToday?' today':'') + '\">';\r\n    html += '<div class=\"cal-day-num\">' + day + '<\/div>';\r\n    if (bookingMap[day]) {\r\n      bookingMap[day].slice(0,2).forEach(function(bk) {\r\n        html += '<div class=\"cal-booking ' + bk.cls + '\" title=\"' + bk.name + ' \u2014 ' + bk.guest + '\">' + bk.name.split(' ')[0] + '<\/div>';\r\n      });\r\n      if (bookingMap[day].length > 2) html += '<div style=\"font-size:9px;color:var(--muted)\">+' + (bookingMap[day].length-2) + ' \u0986\u09b0\u09cb<\/div>';\r\n    }\r\n    html += '<\/div>';\r\n  }\r\n  html += '<\/div>';\r\n  document.getElementById('calendar-grid').innerHTML = html;\r\n}\r\n\r\nfunction prevMonth() { calMonth--; if(calMonth<0){calMonth=11;calYear--;} renderCalendar(); }\r\nfunction nextMonth() { calMonth++; if(calMonth>11){calMonth=0;calYear++;} renderCalendar(); }\r\n\r\n\/\/ ---- FILTERS ----\r\nfunction populateBoatFilter() {\r\n  var boats = [...new Set(allBookings.map(function(b){return b.boatName}))];\r\n  var sel = document.getElementById('boat-filter');\r\n  sel.innerHTML = '<option value=\"\">\u09b8\u09ac \u09a8\u09cc\u0995\u09be<\/option>';\r\n  boats.forEach(function(b) { sel.innerHTML += '<option>' + esc(b) + '<\/option>'; });\r\n}\r\n\r\nfunction filterBookings() {\r\n  var q = document.getElementById('search-input').value.toLowerCase();\r\n  var st = document.getElementById('status-filter').value;\r\n  var bt = document.getElementById('boat-filter').value;\r\n  var filtered = allBookings.filter(function(b) {\r\n    var matchQ = !q || (b.guestName||'').toLowerCase().includes(q) || (b.bookingId||'').toLowerCase().includes(q) || (b.phone||'').includes(q);\r\n    var matchS = !st || b.status === st;\r\n    var matchB = !bt || b.boatName === bt;\r\n    return matchQ && matchS && matchB;\r\n  });\r\n  renderBookingsTable(filtered);\r\n}\r\n\r\nfunction filterPayments() {\r\n  var q = document.getElementById('pay-search').value.toLowerCase();\r\n  var st = document.getElementById('pay-status-filter').value;\r\n  var mt = document.getElementById('pay-method-filter').value;\r\n  var filtered = allPayments.filter(function(p) {\r\n    var matchQ = !q || (p.guestName||'').toLowerCase().includes(q) || (p.bookingId||'').toLowerCase().includes(q);\r\n    var matchS = !st || p.status === st;\r\n    var matchM = !mt || (p.paymentMethod||'') === mt;\r\n    return matchQ && matchS && matchM;\r\n  });\r\n  renderPaymentsTable(filtered);\r\n}\r\n\r\n\/\/ ---- BOOKING MODAL ----\r\nfunction openBookingModal(id) {\r\n  var b = allBookings.find(function(x){return x.bookingId===id});\r\n  if (!b) return;\r\n  var nights = calcNights(b.checkIn, b.checkOut);\r\n  document.getElementById('modal-title').textContent = b.bookingId + ' \u2014 \u09ac\u09bf\u09b8\u09cd\u09a4\u09be\u09b0\u09bf\u09a4';\r\n  var rows = [\r\n    ['\u0985\u09a4\u09bf\u09a5\u09bf\u09b0 \u09a8\u09be\u09ae', b.guestName],\r\n    ['\u09ab\u09cb\u09a8 \u09a8\u09ae\u09cd\u09ac\u09b0', b.phone || '\u2014'],\r\n    ['\u0987\u09ae\u09c7\u0987\u09b2', b.email || '\u2014'],\r\n    ['\u09a8\u09cc\u0995\u09be', b.boatName],\r\n    ['\u099a\u09c7\u0995-\u0987\u09a8', b.checkIn || '\u2014'],\r\n    ['\u099a\u09c7\u0995-\u0986\u0989\u099f', b.checkOut || '\u2014'],\r\n    ['\u09b0\u09be\u09a4', nights + ' \u09b0\u09be\u09a4'],\r\n    ['\u09ae\u09cb\u099f \u09aa\u09b0\u09bf\u09ae\u09be\u09a3', '\u09f3 ' + formatNum(b.totalAmount)],\r\n    ['\u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f \u09aa\u09a6\u09cd\u09a7\u09a4\u09bf', b.paymentMethod || '\u2014'],\r\n    ['\u09b8\u09cd\u099f\u09cd\u09af\u09be\u099f\u09be\u09b8', ''],\r\n    ['\u09ac\u09bf\u09b6\u09c7\u09b7 \u0985\u09a8\u09c1\u09b0\u09cb\u09a7', b.notes || '\u2014'],\r\n  ];\r\n  var html = '';\r\n  rows.forEach(function(r) {\r\n    html += '<div class=\"modal-row\"><span class=\"modal-lbl\">' + r[0] + '<\/span>';\r\n    if (r[0] === '\u09b8\u09cd\u099f\u09cd\u09af\u09be\u099f\u09be\u09b8') html += '<span>' + statusBadge(b.status) + '<\/span>';\r\n    else html += '<span class=\"modal-val\">' + esc(r[1]) + '<\/span>';\r\n    html += '<\/div>';\r\n  });\r\n  document.getElementById('modal-body').innerHTML = html;\r\n  document.getElementById('modal-actions').innerHTML =\r\n    '<button class=\"btn btn-outline\" onclick=\"closeModal()\">\u09ac\u09a8\u09cd\u09a7 \u0995\u09b0\u09c1\u09a8<\/button>' +\r\n    (b.status==='Pending' ? '<button class=\"btn btn-teal\" onclick=\"updateStatus(\\'' + b.bookingId + '\\',\\'Confirmed\\');closeModal()\">\u2713 \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u0995\u09b0\u09c1\u09a8<\/button>' : '') +\r\n    (b.status!=='Cancelled' ? '<button class=\"btn\" style=\"background:var(--red-bg);color:var(--red-text)\" onclick=\"updateStatus(\\'' + b.bookingId + '\\',\\'Cancelled\\');closeModal()\">\u09ac\u09be\u09a4\u09bf\u09b2 \u0995\u09b0\u09c1\u09a8<\/button>' : '');\r\n  document.getElementById('booking-modal').classList.add('open');\r\n}\r\n\r\nfunction closeModal() { document.getElementById('booking-modal').classList.remove('open'); }\r\n\r\n\/\/ ---- UPDATE STATUS ----\r\nfunction updateStatus(id, newStatus) {\r\n  var b = allBookings.find(function(x){return x.bookingId===id});\r\n  if (!b) return;\r\n  b.status = newStatus;\r\n  renderMetrics();\r\n  renderRecentBookings();\r\n  renderBookingsTable();\r\n\r\n  if (SCRIPT_URL !== 'YOUR_APPS_SCRIPT_WEB_APP_URL_HERE') {\r\n    fetch(SCRIPT_URL + '?action=updateStatus&bookingId=' + id + '&status=' + newStatus)\r\n      .catch(function(e){ console.error('Update failed', e); });\r\n  }\r\n}\r\n\r\n\/\/ ---- EXPORT CSV ----\r\nfunction exportCSV() {\r\n  var headers = ['Booking ID','Guest Name','Phone','Boat','Check-In','Check-Out','Nights','Amount','Payment Method','Status'];\r\n  var rows = allBookings.map(function(b) {\r\n    return [b.bookingId,b.guestName,b.phone||'',b.boatName,b.checkIn||'',b.checkOut||'',calcNights(b.checkIn,b.checkOut),b.totalAmount||'',b.paymentMethod||'',b.status].join(',');\r\n  });\r\n  downloadCSV([headers.join(',')].concat(rows).join('\\n'), 'bookings.csv');\r\n}\r\n\r\nfunction exportPaymentCSV() {\r\n  var headers = ['Date','Booking ID','Guest','Method','Paid','Due','Status'];\r\n  var rows = allPayments.map(function(p) {\r\n    return [p.paymentDate||'',p.bookingId,p.guestName,p.paymentMethod||'',p.amountPaid||0,p.amountDue||0,p.status].join(',');\r\n  });\r\n  downloadCSV([headers.join(',')].concat(rows).join('\\n'), 'payments.csv');\r\n}\r\n\r\nfunction downloadCSV(content, filename) {\r\n  var a = document.createElement('a');\r\n  a.href = 'data:text\/csv;charset=utf-8,\\uFEFF' + encodeURIComponent(content);\r\n  a.download = filename;\r\n  a.click();\r\n}\r\n\r\n\/\/ ---- HELPERS ----\r\nfunction formatNum(n) {\r\n  var num = parseFloat(n) || 0;\r\n  return num.toLocaleString('en-IN');\r\n}\r\n\r\nfunction calcNights(ci, co) {\r\n  if (!ci || !co) return '\u2014';\r\n  var d = Math.round((new Date(co) - new Date(ci)) \/ 86400000);\r\n  return isNaN(d) || d < 0 ? '\u2014' : d;\r\n}\r\n\r\nfunction esc(s) {\r\n  return String(s||'').replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;').replace(\/>\/g,'&gt;').replace(\/\"\/g,'&quot;');\r\n}\r\n\r\nfunction statusBadge(s) {\r\n  var map = {Confirmed:'<span class=\"badge bg\">\u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4<\/span>',Pending:'<span class=\"badge ba\">\u0985\u09aa\u09c7\u0995\u09cd\u09b7\u09ae\u09be\u09a8<\/span>',Cancelled:'<span class=\"badge br\">\u09ac\u09be\u09a4\u09bf\u09b2<\/span>',Completed:'<span class=\"badge bb\">\u09b8\u09ae\u09cd\u09aa\u09a8\u09cd\u09a8<\/span>'};\r\n  return map[s] || '<span class=\"badge\" style=\"background:var(--surface);color:var(--muted)\">' + esc(s) + '<\/span>';\r\n}\r\n\r\nfunction payStatusBadge(s) {\r\n  var map = {Paid:'<span class=\"badge bg\">\u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f \u09b9\u09af\u09bc\u09c7\u099b\u09c7<\/span>',Partial:'<span class=\"badge ba\">\u0986\u0982\u09b6\u09bf\u0995<\/span>',Unpaid:'<span class=\"badge br\">\u09ac\u09be\u0995\u09bf<\/span>',Refunded:'<span class=\"badge bb\">\u09b0\u09bf\u09ab\u09be\u09a8\u09cd\u09a1<\/span>'};\r\n  return map[s] || '<span class=\"badge\" style=\"background:var(--surface);color:var(--muted)\">' + esc(s) + '<\/span>';\r\n}\r\n\r\nfunction statusLabel(s) {\r\n  var map = {Confirmed:'\u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u0995\u09b0\u09c1\u09a8',Pending:'\u0985\u09aa\u09c7\u0995\u09cd\u09b7\u09ae\u09be\u09a8',Completed:'\u09b8\u09ae\u09cd\u09aa\u09a8\u09cd\u09a8',Cancelled:'\u09ac\u09be\u09a4\u09bf\u09b2'};\r\n  return map[s] || s;\r\n}\r\n\r\n\/\/ ---- DEMO DATA ----\r\nfunction getDemoData() {\r\n  return {\r\n    bookings: [\r\n      {bookingId:'JB-2025-001',guestName:'\u09b0\u09be\u09b9\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8',phone:'01712345678',email:'rahul@email.com',boatName:'\u09b0\u09be\u099c\u09b9\u0982\u09b8 \u09a1\u09bf\u09b2\u09be\u0995\u09cd\u09b8',checkIn:'2025-04-10',checkOut:'2025-04-13',totalAmount:28500,paymentMethod:'bKash',status:'Confirmed',notes:'\u09b9\u09be\u09b2\u09be\u09b2 \u0996\u09be\u09ac\u09be\u09b0'},\r\n      {bookingId:'JB-2025-002',guestName:'\u09b8\u09be\u09ac\u09bf\u09a8\u09be \u0986\u0995\u09cd\u09a4\u09be\u09b0',phone:'01812345679',email:'sabina@email.com',boatName:'\u09a8\u09c0\u09b2\u09be\u0995\u09be\u09b6 \u09aa\u09cd\u09b0\u09bf\u09ae\u09bf\u09af\u09bc\u09be\u09ae',checkIn:'2025-04-15',checkOut:'2025-04-18',totalAmount:42000,paymentMethod:'Card',status:'Pending',notes:''},\r\n      {bookingId:'JB-2025-003',guestName:'\u09ab\u09be\u09b0\u09b9\u09be\u09a8 \u0986\u09b9\u09ae\u09c7\u09a6',phone:'01912345680',email:'farhan@email.com',boatName:'\u09aa\u09a6\u09cd\u09ae\u09be \u09b2\u09be\u0995\u09cd\u09b8\u09be\u09b0\u09bf',checkIn:'2025-04-20',checkOut:'2025-04-22',totalAmount:38000,paymentMethod:'Nagad',status:'Confirmed',notes:''},\r\n      {bookingId:'JB-2025-004',guestName:'\u09a8\u09be\u09ab\u09bf\u09b8\u09be \u0987\u09b8\u09b2\u09be\u09ae',phone:'01612345681',email:'nafisa@email.com',boatName:'\u09b0\u09be\u099c\u09b9\u0982\u09b8 \u09a1\u09bf\u09b2\u09be\u0995\u09cd\u09b8',checkIn:'2025-04-23',checkOut:'2025-04-27',totalAmount:36400,paymentMethod:'Bank',status:'Completed',notes:'\u09b6\u09bf\u09b6\u09c1 \u0996\u09be\u099f \u09a6\u09b0\u0995\u09be\u09b0'},\r\n      {bookingId:'JB-2025-005',guestName:'\u0995\u09b0\u09bf\u09ae \u0989\u09a6\u09cd\u09a6\u09bf\u09a8',phone:'01512345682',email:'karim@email.com',boatName:'\u09a8\u09c0\u09b2\u09be\u0995\u09be\u09b6 \u09aa\u09cd\u09b0\u09bf\u09ae\u09bf\u09af\u09bc\u09be\u09ae',checkIn:'2025-05-01',checkOut:'2025-05-03',totalAmount:26400,paymentMethod:'bKash',status:'Cancelled',notes:''},\r\n      {bookingId:'JB-2025-006',guestName:'\u09a4\u09be\u09ae\u09be\u09a8\u09cd\u09a8\u09be \u09ac\u09c7\u0997\u09ae',phone:'01312345683',email:'tamanna@email.com',boatName:'\u09aa\u09a6\u09cd\u09ae\u09be \u09b2\u09be\u0995\u09cd\u09b8\u09be\u09b0\u09bf',checkIn:'2025-05-05',checkOut:'2025-05-08',totalAmount:57000,paymentMethod:'Card',status:'Pending',notes:''},\r\n    ],\r\n    payments: [\r\n      {bookingId:'JB-2025-001',guestName:'\u09b0\u09be\u09b9\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8',paymentDate:'2025-04-10',paymentMethod:'bKash',amountPaid:28500,amountDue:0,status:'Paid'},\r\n      {bookingId:'JB-2025-002',guestName:'\u09b8\u09be\u09ac\u09bf\u09a8\u09be \u0986\u0995\u09cd\u09a4\u09be\u09b0',paymentDate:'2025-04-09',paymentMethod:'Card',amountPaid:20000,amountDue:22000,status:'Partial'},\r\n      {bookingId:'JB-2025-003',guestName:'\u09ab\u09be\u09b0\u09b9\u09be\u09a8 \u0986\u09b9\u09ae\u09c7\u09a6',paymentDate:'2025-04-08',paymentMethod:'Nagad',amountPaid:38000,amountDue:0,status:'Paid'},\r\n      {bookingId:'JB-2025-004',guestName:'\u09a8\u09be\u09ab\u09bf\u09b8\u09be \u0987\u09b8\u09b2\u09be\u09ae',paymentDate:'2025-04-07',paymentMethod:'Bank',amountPaid:36400,amountDue:0,status:'Paid'},\r\n      {bookingId:'JB-2025-005',guestName:'\u0995\u09b0\u09bf\u09ae \u0989\u09a6\u09cd\u09a6\u09bf\u09a8',paymentDate:'2025-04-06',paymentMethod:'bKash',amountPaid:26400,amountDue:0,status:'Refunded'},\r\n    ]\r\n  };\r\n}\r\n\r\n\/\/ Init\r\nloadAllData();\r\n\r\nfunction toggleSidebar(){\r\n  var sb = document.querySelector('.sidebar');\r\n  var ov = document.getElementById('sidebar-overlay');\r\n  sb.classList.toggle('open');\r\n  ov.classList.toggle('open');\r\n}\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u099c\u09b2\u09ac\u09be\u09a1\u09bc\u09bf \u2014 Admin Dashboard TourVill Admin \u09b8\u09bf\u0999\u09cd\u0995 \u09b9\u09af\u09bc\u09a8\u09bf \u21bb \u09b0\u09bf\u09ab\u09cd\u09b0\u09c7\u09b6 Admin Panel \u09ae\u09c7\u09a8\u09c1 \u0993\u09ad\u09be\u09b0\u09ad\u09bf\u0989 \u09ac\u09c1\u0995\u09bf\u0982 \u09b2\u09bf\u09b8\u09cd\u099f 0 \u09aa\u09c7\u09ae\u09c7\u09a8\u09cd\u099f \u0995\u09cd\u09af\u09be\u09b2\u09c7\u09a8\u09cd\u09a1\u09be\u09b0 \u09a1\u09cd\u09af\u09be\u09b6\u09ac\u09cb\u09b0\u09cd\u09a1 \u0993\u09ad\u09be\u09b0\u09ad\u09bf\u0989\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7&#8230; CSV Export \u26a0 Google Sheets \u09a5\u09c7\u0995\u09c7 \u09a1\u09c7\u099f\u09be \u09b2\u09cb\u09a1 \u09b9\u09af\u09bc\u09a8\u09bf\u0964 SCRIPT_URL \u09a0\u09bf\u0995 \u0995\u09b0\u09c1\u09a8\u0964 \ud83d\udcb0\u2014\u09ae\u09cb\u099f \u0986\u09af\u09bc (\u098f\u0987 \u09ae\u09be\u09b8)\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7&#8230; \ud83d\udcc5\u2014\u09ae\u09cb\u099f \u09ac\u09c1\u0995\u09bf\u0982\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7&#8230; \u23f3\u2014\u0985\u09aa\u09c7\u0995\u09cd\u09b7\u09ae\u09be\u09a8 \u09ac\u09c1\u0995\u09bf\u0982\u098f\u0996\u09a8\u0987 \u0985\u09cd\u09af\u09be\u0995\u09b6\u09a8 \u09a8\u09bf\u09a8 \u2713\u2014\u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u09ac\u09c1\u0995\u09bf\u0982\u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7&#8230; \u09b8\u09be\u09ae\u09cd\u09aa\u09cd\u09b0\u09a4\u09bf\u0995 \u09ac\u09c1\u0995\u09bf\u0982\u09b8\u09ac \u09a6\u09c7\u0996\u09c1\u09a8 \u2192 \u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7&#8230; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-883","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tourvill.com\/index.php\/wp-json\/wp\/v2\/pages\/883","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tourvill.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tourvill.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tourvill.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tourvill.com\/index.php\/wp-json\/wp\/v2\/comments?post=883"}],"version-history":[{"count":8,"href":"https:\/\/tourvill.com\/index.php\/wp-json\/wp\/v2\/pages\/883\/revisions"}],"predecessor-version":[{"id":891,"href":"https:\/\/tourvill.com\/index.php\/wp-json\/wp\/v2\/pages\/883\/revisions\/891"}],"wp:attachment":[{"href":"https:\/\/tourvill.com\/index.php\/wp-json\/wp\/v2\/media?parent=883"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}