Help
RSS
API
Feed
Maltego
Contact
Domain > dukejia.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2024-05-02
107.178.141.138
(
ClassC
)
2026-02-14
103.216.146.100
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyConnection: Keep-AliveKeep-Alive: timeout5, max100content-type: text/htmlcontent-length: 795date: Sat, 14 Feb 2026 02:43:17 GMTserver: LiteSpeedlocation: https://dukejia.com/ !DOCTYPE html>html styleheight:100%>head>meta nameviewport contentwidthdevice-width, initial-scale1, shrink-to-fitno />title> 301 Moved Permanently/title>style>@media (prefers-color-scheme:dark){body{background-color:#000!important}}/style>/head>body stylecolor: #444; margin:0;font: normal 14px/20px Arial, Helvetica, sans-serif; height:100%; background-color: #fff;>div styleheight:auto; min-height:100%; > div styletext-align: center; width:800px; margin-left: -400px; position:absolute; top: 30%; left:50%;> h1 stylemargin:0; font-size:150px; line-height:150px; font-weight:bold;>301/h1>h2 stylemargin-top:20px;font-size: 30px;>Moved Permanently/h2>p>The document has been permanently moved./p>/div>/div>/body>/html>
Port 443
HTTP/1.1 200 OKConnection: Keep-AliveKeep-Alive: timeout5, max100cache-control: publicexpires: Sat, 14 Feb 2026 02:43:18 GMTcontent-type: text/htmlaccept-ranges: bytescontent-length: 62285date: Sat, 14 Feb 2026 02:43:18 GMTserver: LiteSpeedx-speedycache-source: Servercache-tag: www.dukejia.comcdn-cache-control: max-age1296000 !doctype html>html langen>head>!-- Google tag (gtag.js) -->script async srchttps://www.googletagmanager.com/gtag/js?idG-HHRESVW2T1>/script>script> window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-HHRESVW2T1);/script> meta charsetutf-8/> meta nameviewport contentwidthdevice-width,initial-scale1/> title>Dukejia | Industrial Embroidery, Perforation & Quilting Machines India/title> meta namedescription contentSales & service for embroidery, perforation and quilting machines across India. DUKEJIA by HCA — Delhi, Chennai, Bengaluru, Kolkata, Indore, Ludhiana, Tiruppur./> link relcanonical hrefhttps://dukejia.com//> meta namerobots contentindex,follow/> !-- Open Graph / Social --> meta propertyog:type contentwebsite/> meta propertyog:url contenthttps://dukejia.com//> meta propertyog:title contentDUKEJIA — Industrial Embroidery, Perforation & Quilting Machines/> meta propertyog:description contentHigh-precision embroidery, perforation and quilting solutions with all-India sales & service./> meta propertyog:image contenthttps://dukejia.com/images/dukejia.png/> meta nametwitter:card contentsummary_large_image/> !-- Icons --> link relicon href/images/dukejia.png/> link relapple-touch-icon href/images/dukejia.png/> meta nametheme-color content#01286B/> !-- Fonts & Icons (yours) --> link relpreconnect hrefhttps://fonts.googleapis.com> link relpreconnect hrefhttps://fonts.gstatic.com crossorigin> link hrefhttps://fonts.googleapis.com/css2?familyInter:wght@400;500;600;700;800&displayswap relstylesheet> link hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css relstylesheet> style> /* DUKEJIA Design Tokens (brand palette) */ :root{ /* Core Brand */ --pur:#045285; --pur2:#833ade; /* Warm Secondaries */ --coral:#F4845F; --gold:#F7B731; --sage:#98D8C8; /* Accents */ --lavender:#A29BFE; --terracotta:#E17055; /* Neutrals */ --cream:#FAF9F6; --lgray:#E8EDF2; --charcoal:#2D3436; /* Map to existing names so classes work unchanged */ --bg:var(--cream); --text:var(--charcoal); --muted:#5f6970; --muted2:#6f7a82; --border:rgba(1,40,107,.12); --bd-2:rgba(1,40,107,.14); --primary:var(--pur2); --accent:var(--lavender); /* Buttons & Gradients */ --brand:var(--pur); --brand-2:var(--pur2); --cta:var(--pur2); --cta2:var(--pur); /* Surfaces */ --card:#ffffff; --surface:#ffffff; --panel:#ffffff; --bg-soft:#FDFCFB; --chip:#dfe8f4; /* Ink */ --ink:var(--charcoal); --ink-inv:#ffffff; } /* Base Styles */ *{box-sizing:border-box} html,body{margin:0;padding:0;background:var(--bg);color:var(--text); font-family:Inter,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif} a{color:inherit;text-decoration:none} /* Container */ .container{margin:0 auto;padding:0 40px} @media (max-width:1024px){.container{max-width:100%;padding:0 24px}} @media (max-width:480px){.container{padding:0 16px}} /* Header */ .site-header{ position:sticky;top:0;z-index:50; background:rgba(250,249,246,.85);backdrop-filter:blur(10px); border-bottom:1px solid var(--lgray) } .container.nav{display:flex;justify-content:space-between;align-items:center;height:72px} .brand{display:flex;align-items:center;gap:8px;text-decoration:none} .brand-name{color:var(--pur);font-weight:900;font-size:18px;text-decoration:none} .nav-center{display:flex;gap:28px;align-items:center} .nav-center a{color:var(--charcoal);font-weight:600;text-decoration:none} .nav-center a:hover{color:var(--pur2)} .nav a:hover{background:rgba(2,115,191,.06)} .btn-quote{ display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:999px; font-weight:700;background:linear-gradient(90deg,var(--lavender),var(--pur2)); color:#3a2b00;text-decoration:none;box-shadow:#bcb8ee; } .btn-quote i{opacity:.9} /* Mobile Navigation */ .menu-toggle { display:none;background:none;border:none;color:var(--pur); font-size:1.5rem;cursor:pointer;padding:8px;border-radius:6px;transition:background-color .3s; } .menu-toggle:hover { background-color: rgba(1,40,107,.08); } @media (max-width:780px){ .nav-center { position: fixed; top: 72px; left: 0; right: 0; background: rgba(250,249,246,.98); backdrop-filter: blur(10px); flex-direction: column; padding: 20px 24px; gap: 0; transform: translateY(-100%); opacity: 0; visibility: hidden; transition: all .3s ease; border-bottom: 1px solid var(--lgray); } .nav-center.open { transform: translateY(0); opacity: 1; visibility: visible; } .nav-center a { padding:16px 0; width:100%; border-bottom:1px solid #eee; display:flex; align-items:center; justify-content:flex-start; } .nav-center a:last-child { border-bottom:none; } .menu-toggle { display:block; } .btn-quote { width:100%; justify-content:center; } } /* Hero */ .hero{ position:relative;overflow:hidden;isolation:isolate; color:var(--ink);background:var(--cream); } .hero-bg{ position:absolute; inset:0; background: radial-gradient(1100px 520px at 80% -10%, rgba(168,139,255,.18), transparent 60%), radial-gradient(900px 450px at -10% 90%, rgba(4,82,133,.12), transparent 60%); filter:saturate(1.02) contrast(1.02); z-index:-2; } .hero-overlay{ position:absolute;inset:0;background: linear-gradient(180deg, rgba(250,249,246,.85) 0%, rgba(250,249,246,.95) 60%, rgba(250,249,246,1) 100%), radial-gradient(600px 300px at 25% 20%, rgba(1,40,107,.06), transparent 60%); backdrop-filter: saturate(1.05) blur(.6px); z-index:-1; } .hero-inner{max-width:1500px;margin:0 auto;} .hero::before{ content:; position:absolute; inset:0; pointer-events:none; background-image: radial-gradient(circle at 0 0, rgba(151,173,189,.04) 0 2px, transparent 2px), radial-gradient(circle at 4px 4px, rgba(151,173,189,.04) 0 2px, transparent 2px); background-size:12px 12px,12px 12px; mix-blend-mode:multiply; } .trust-chip{ display:inline-flex;align-items:center;gap:10px;padding:10px 14px;border-radius:28px; background:#fff;border:1px solid var(--lgray);backdrop-filter:blur(2px); color:var(--pur);font-weight:800 } .trust-chip i{color:var(--pur2)} .headline{ font-size:clamp(2.6rem,5.2vw,5rem);line-height:1.05;margin:.9rem 0 1rem; font-weight:900;letter-spacing:-.02em;color:var(--pur); } .headline .accent{ color:transparent; background:linear-gradient(90deg,var(--pur),var(--pur2)); -webkit-background-clip:text;background-clip:text } .sub{ font-size:clamp(1.1rem,1.8vw,1.35rem);line-height:1.8; color:#4a5258; max-width:100ch; margin:0 0 1.75rem; } .cta-row{display:flex;gap:16px;margin-top:22px;flex-wrap:wrap} .btn-lg{display:inline-flex;align-items:center;gap:10px;padding:16px 22px;border-radius:14px;font-weight:800;text-decoration:none} .btn-primary{ background:linear-gradient(90deg,var(--pur),var(--pur2));color:#fff; box-shadow:0 10px 24px rgba(1,40,107,.25); transition:transform .25s ease, box-shadow .25s ease; } .btn-primary:hover{ transform:translateY(-2px); box-shadow:0 14px 30px rgba(2,115,191,.28); } .btn-secondary{background:#fff;color:var(--pur);border:1px solid var(--lgray)} @media (max-width:1100px){ .headline{font-size:52px} } @media (max-width:780px){ .headline{font-size:38px} .sub{font-size:18px} .btn-lg{width:100%;justify-content:center} } @media(max-width:480px){ .trust-chip{font-size:.85rem; padding:8px 12px;} } /* Section Spacing */ section{padding:107px 0;border-bottom:1px solid var(--lgray)} @media (max-width:768px){ section{padding:48px 0} } /* Warm CTA button */ .btn-orange{ display:inline-block; padding:14px 18px; border-radius:14px; font-weight:800; background:linear-gradient(90deg,var(--lavender),var(--pur2)); color:var(--card); text-decoration:none; box-shadow:0 10px 28px rgba(244,132,95,.24); transition:transform .25s; } .btn-orange:hover{ transform:translateY(-2px); } /* Flagship Section */ .flagship{ position:relative;overflow:hidden;border-bottom:1px solid var(--lgray); display:flex; align-items:center; justify-content:space-between; gap:48px; background: linear-gradient(180deg, #FFFFFF 0%, #FAF9F6 100%); } .flagship-bg{ display:none; } .flagship-wrap{ display:flex; align-items:center; justify-content:space-between; gap:48px; } .flagship-badge{ display:inline-flex; align-items:center; gap:8px; padding:8px 14px; border-radius:999px; font-weight:700; font-size:14px; background:rgba(2,115,191,.10); border:1px solid rgba(2,115,191,.25); color:var(--pur) } .flagship-title{margin:18px 0 8px; font-size:46px; line-height:1.05; letter-spacing:.2px; color:var(--pur)} .flagship-lead{color:#4f5960; font-size:18px; max-width:58ch} .flagship-cta{display:flex; gap:14px; margin:20px 0 10px; flex-wrap:wrap} .btn-ghost{display:inline-block; padding:14px 18px; border-radius:14px; font-weight:800; text-decoration:none;background:#fff; color:var(--pur); border:1px solid var(--lgray)} .flagship-card{ border-radius:24px; padding:20px; box-shadow:0 20px 60px rgba(0,0,0,.08); width:min(50vw, 570px); background:#fff; border:1px solid var(--lgray)} .flagship-image-box{ border-radius:16px; overflow:hidden; background:#fff; padding:0; } .flagship-image-box img{ width:100%; height:clamp(300px, 43vh, 1000px); object-fit:contain; display:block; } @media (max-width:1100px){ .flagship-wrap{grid-template-columns:1fr} .flagship-title{font-size:44px} .flagship-screen{height:360px} } @media (max-width:900px){ .flagship-wrap{flex-direction:column; align-items:flex-start;} .flagship-card{width:100%;} .flagship-image-box img{height:clamp(260px, 42vh, 500px);} } @media (max-width:560px){ .flagship-title{font-size:36px} .btn-orange, .btn-ghost{width:100%; text-align:center} } /* Our Machines – 2 rows, asymmetric columns */ .section-machines { padding: 64px 0; } .section-machines .center { text-align: center; } .section-machines h1 { font-size: 44px; margin: 0 0 8px; color: var(--pur); } .section-machines .lead { color: var(--muted); font-size: 18px; max-width: 840px; margin: 0 auto; } /* each row is its own grid */ .machines-row { display: grid; gap: 10px; margin-top: 10px; } /* Row 1: small | wide • Row 2: wide | small */ .machines-row.row-1 { grid-template-columns: 0.9fr 1.6fr; } .machines-row.row-2 { grid-template-columns: 1.6fr 0.9fr; } /* cards */ .tile { display: block; background: #fff; border: 1px solid var(--lgray); overflow: hidden; box-shadow: 0 8px 30px rgba(0,0,0,.06); transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease; } .tile:hover { transform: translateY(-4px); box-shadow: 0 16px 44px rgba(0,0,0,.12); border-color: rgba(2,115,191,.28); } /* image sizing */ .img-wrap { position: relative; width: 100%; height: -webkit-fill-available; overflow: hidden; background: linear-gradient(90deg, rgba(1,40,107,.08), rgba(2,115,191,.10)); } .img-wrap img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; transition: transform .5s ease; } .tile:hover .img-wrap img { transform: scale(1.05); } /* aspect ratios for small vs wide tiles */ .tile.small .img-wrap { aspect-ratio: 4 / 3; } /* small */ .tile.wide .img-wrap { aspect-ratio: 21 / 9; } /* wide banner */ /* overlay */ .overlay { position:absolute; left:0; right:0; bottom:0; background:linear-gradient(transparent, #03002a); padding:18px; color:#fff; transform:translateY(4px); transition:transform .25s ease; } .tile:hover .overlay { transform:translateY(0); } .overlay h4 { margin:0 0 6px; font-size:1.1rem; font-weight:800; color:#fff; } .overlay p { margin:0; opacity:.9; font-size:.95rem; } /* Tablet: balance to 2 equal columns */ @media (max-width: 1024px) { .machines-row.row-1, .machines-row.row-2 { grid-template-columns: 1fr 1fr; } .tile.wide .img-wrap { aspect-ratio: 16 / 9; } } /* Mobile: single column stack */ @media (max-width: 720px) { .machines-row.row-1, .machines-row.row-2 { grid-template-columns: 1fr; } .tile.wide .img-wrap, .tile.small .img-wrap { aspect-ratio: 4 / 3; } } /* Footer */ .site-footer{padding:28px 24px;border-top:1px solid var(--lgray);color:#e7f1ff;background:var(--pur)} .footer-grid{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:40px} .footer-brand{ margin:0 0 10px;font-size:36px;font-weight:900; background:linear-gradient(90deg,#ffffff,var(--sage));-webkit-background-clip:text;background-clip:text;color:transparent; } .footer-about p{margin:0 0 18px;color:#e7f1ff} .footer-socials{display:flex; gap:12px} .soc{width:40px;height:40px;display:grid;place-items:center;border-radius:12px;background:rgba(255,255,255,.1);color:#e7f1ff;border:1px solid rgba(255,255,255,.16);box-shadow:0 6px 16px rgba(0,0,0,.15)} .soc:hover{transform:translateY(-1px)} .footer-links h4,.footer-contact h4{margin:0 0 12px;color:#fff;font-size:22px} .footer-links ul{list-style:none;padding:0;margin:0} .footer-links li{margin:10px 0} .footer-links a{color:#e7f1ff;text-decoration:none} .footer-links a:hover{color:#fff} .frow{display:flex;align-items:flex-start;gap:12px;margin:12px 0} .frow .ico{color:#e7f1ff;width:28px;height:28px;display:grid;place-items:center;background:rgba(255,255,255,.1);border-radius:8px;border:1px solid rgba(255,255,255,.16)} .frow .muted{color:#d5e3ff} .foot-divider{height:1px;background:rgba(255,255,255,.18);margin:28px 0 14px} .foot-bottom{display:flex;align-items:center;justify-content:space-between;gap:16px;color:#d9e7ff;font-size:14px} .legal a{color:#d9e7ff;text-decoration:none;margin-left:16px} .legal a:hover{color:#fff} @media (max-width:980px){.footer-grid{grid-template-columns:1fr 1fr}} @media (max-width:640px){.footer-grid{grid-template-columns:1fr}.foot-bottom{flex-direction:column;align-items:flex-start;gap:8px}} /* Additional Header Styles */ .header{position:sticky;top:0;z-index:40; background:linear-gradient(180deg,rgba(250,249,246,.95),rgba(250,249,246,.75)); backdrop-filter:blur(8px);border-bottom:1px solid var(--lgray)} .header-inner{display:flex;align-items:center;justify-content:space-between;padding:12px 24px} .nav a:hover{background:rgba(2,115,191,.06)} .btn{display:inline-flex;align-items:center;gap:8px;padding:10px 14px;border-radius:12px; background:linear-gradient(135deg,var(--brand),var(--brand-2));font-weight:700} .btn.outline{background:transparent;border:1px solid var(--bd-2)} /* Modal (shared) */ .dj-modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1000;align-items:center;justify-content:center;padding:2rem;opacity:0;transition:opacity .25s} .dj-modal.active{display:flex;opacity:1} .dj-sheet{background:#fff;border-radius:20px;max-width:1100px;width:100%;box-shadow:0 30px 80px rgba(0,0,0,.25);border:1px solid var(--lgray);overflow:hidden} .dj-sheet-header{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;border-bottom:1px solid var(--lgray)} .dj-sheet-title{font-size:1.25rem;font-weight:900;margin:0} .dj-close{background:none;border:none;width:40px;height:40px;border-radius:10px;color:#6b7280;cursor:pointer} .dj-close:hover{background:#f4f7fb} .dj-top{display:grid;grid-template-columns:1.1fr 1fr;gap:18px;padding:18px} @media (max-width:900px){.dj-top{grid-template-columns:1fr}} .dj-left{display:flex;gap:16px;align-items:flex-start} .dj-thumb{width:220px;min-width:220px;border:1px solid var(--lgray);border-radius:14px;background:#f5f7fb;overflow:hidden;display:grid;place-items:center} .dj-thumb img{width:100%;height:100%;object-fit:contain} .dj-chip{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border-radius:999px;font-weight:700;font-size:.82rem;background:#eef2ff;color:#444;border:1px solid #e5e7eb} .dj-top-title{margin:2px 0 6px;font-size:1.1rem;font-weight:900} .dj-top-sub{margin:0;color:#6b7280;line-height:1.6} .dj-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px} .dj-btn{display:inline-flex;align-items:center;gap:8px;padding:10px 14px;border-radius:12px;border:1px solid var(--lgray);background:#fff;font-weight:800;cursor:pointer} .dj-btn.dj-primary{background:linear-gradient(90deg,var(--pur),var(--pur2));color:#fff;border-color:transparent;box-shadow:0 8px 24px rgba(1,40,107,.18)} .dj-quick{display:flex;flex-wrap:wrap;gap:10px;align-content:flex-start} .dj-quick .dj-chip i{color:#10b981} .dj-tabs{padding:0 18px 18px} .dj-tab-nav{display:flex;gap:8px;border-bottom:1px solid var(--lgray)} .dj-tab-btn{appearance:none;background:none;border:none;padding:12px 14px;border-radius:10px 10px 0 0;font-weight:800;color:#6b7280;cursor:pointer} .dj-tab-btn.active{color:#111;background:#fff;border:1px solid var(--lgray);border-bottom-color:#fff} .dj-tab-panel{display:none;padding:16px 0} .dj-tab-panel.active{display:block} .dj-specs{width:100%;border-collapse:collapse;border-radius:14px;border:1px solid var(--lgray);overflow:hidden} .dj-specs tr{border-bottom:1px solid var(--lgray)} .dj-specs tr:last-child{border-bottom:none} .dj-specs th,.dj-specs td{padding:12px 14px;text-align:left} .dj-specs th{width:44%;background:#f7f9ff;color:#374151} .dj-specs td{color:#4b5563} .dj-feats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px} @media (max-width:620px){.dj-feats{grid-template-columns:1fr}} .dj-feats .feat{border:1px solid var(--lgray);border-radius:12px;padding:12px 14px;background:#fff} .dj-video-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.8);z-index:1100;align-items:center;justify-content:center;padding:2rem} .dj-video{position:relative;width:min(100%,960px);aspect-ratio:16/9;background:#000;border-radius:12px;overflow:hidden} .dj-video iframe{width:100%;height:100%;border:0} .dj-video-close{position:absolute;top:8px;right:8px;background:#fff;border:none;border-radius:10px;width:40px;height:40px;cursor:pointer} /* Mobile modal tweaks */ @media (max-width: 640px){ .dj-modal{align-items:flex-end;padding:0;background:rgba(0,0,0,.65)} .dj-sheet{width:100%;max-width:none;border-radius:16px 16px 0 0;border-left:none;border-right:none;max-height:100svh;overflow:auto;-webkit-overflow-scrolling:touch} .dj-sheet-header{padding:14px 16px;position:sticky;top:0;z-index:2;background:#fff} .dj-close{width:44px;height:44px} .dj-top{grid-template-columns:1fr !important;gap:14px;padding:14px 16px} .dj-left{flex-direction:column;align-items:stretch;gap:12px} .dj-thumb{width:100%;min-width:0;height:auto;aspect-ratio:16/9;max-height:55svh;border-radius:12px} .dj-thumb img{object-fit:cover} .dj-chip{font-size:.78rem;padding:6px 10px} .dj-actions{gap:10px;margin-top:12px} .dj-btn{flex:1 1 calc(50% - 6px);justify-content:center;padding:12px 14px;font-weight:800} .dj-btn.dj-primary{flex-basis:100%;order:3} .dj-quick{gap:8px} .dj-tabs{padding:0 16px 16px} .dj-tab-nav{position:sticky;top:0;z-index:1;background:#fff;padding-top:6px} .dj-tab-btn{padding:10px 12px;font-size:.95rem} .dj-specs{display:block;border-radius:12px} .dj-specs tr{display:block;padding:10px 12px;border-bottom:1px solid var(--lgray)} .dj-specs th,.dj-specs td{display:block;padding:0;text-align:left} .dj-specs th{background:transparent;color:#374151;font-weight:800;margin-bottom:6px} .dj-specs td{color:#4b5563} .dj-feats{grid-template-columns:1fr !important;gap:10px} .dj-feats .feat{padding:12px;border-radius:12px} .dj-video-overlay{padding:0} .dj-video{width:100vw;max-width:100vw;aspect-ratio:16/9;border-radius:0} .dj-video-close{top:10px;right:10px;width:44px;height:44px} .dj-sheet::after{content:;display:block;height:calc(env(safe-area-inset-bottom, 0px) + 8px)} } body{ margin:0; font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Apple Color Emoji,Segoe UI Emoji; } :root{ --hca-pur:#a29bfe; --hca-blue:#7aa2ff; --hca-bg:#faf9f6; --hca-dark:#0f172a; --hca-muted:#6b7280; --hca-radius:16px; } /* Widget shell */ .hca-fab{ position:fixed; right:34px; bottom:43px; width:26px; height:8px; border-radius:50%; background:linear-gradient(135deg,var(--hca-pur),var(--hca-blue)); display:flex; align-items:center; justify-content:center; box-shadow:0 12px 32px rgba(0,0,0,.18); cursor:pointer; z-index:9999; user-select:none; } .hca-fab img{ width:176px; height:100px; display:block; filter:none !important; } .hca-panel{ position:fixed; right:24px; bottom:100px; width:310px; height:460px; background:#faf9f6; border-radius:18px; box-shadow:0 20px 40px rgba(0,0,0,.22); display:none; flex-direction:column; overflow:hidden; z-index:10000; } .hca-panel.open{ display:flex; } .hca-head{ background:linear-gradient(135deg,var(--hca-pur),var(--hca-blue)); padding:12px 14px; color:#faf9f6; font:700 16px Inter,system-ui; display:flex; justify-content:space-between; align-items:center; } .hca-head-left{ display:flex; align-items:center; gap:10px; } .hca-head-left img{ width:24px; height:24px; display:block; border-radius:6px; filter:none !important; } .hca-actions{ display:flex; gap:8px; } .hca-btn{ background:rgba(255,255,255,.2); border:0; color:#faf9f6; width:28px; height:28px; border-radius:8px; cursor:pointer; display:flex; align-items:center; justify-content:center; } .hca-btn:hover{ background:rgba(255,255,255,.3); } .hca-body{ flex:1; background:#f8fafc; padding:12px; overflow:auto; } .hca-row{ display:flex; gap:8px; align-items:flex-end; margin:8px 0; } .hca-row.user{ justify-content:flex-end; flex-direction:row-reverse; } /* Avatar uses img> so PNG transparency is preserved */ .hca-avatar{ width:30px; height:30px; flex:0 0 30px; display:flex; align-items:center; justify-content:center; } .hca-avatar img{ width:100%; height:100%; object-fit:contain; display:block; } /* Chat bubble list spacing */ .hca-bubble{ max-width:76%; padding:10px 12px; border-radius:14px; font:500 14px/1.5 Inter,system-ui; word-wrap:break-word; } .hca-bubble ul{ padding-left:18px; margin:6px 0; } .hca-bubble li{ margin:6px 0; } .hca-row.bot .hca-bubble{ background:#faf9f6; color:#111; border:1px solid #e5e7eb; border-bottom-left-radius:6px; box-shadow:0 2px 8px rgba(15,23,42,.06); } .hca-row.user .hca-bubble{ background:#8c84f5; color:#faf9f6; border-bottom-right-radius:6px; text-align:right; margin-left:auto; } .hca-row.bot .hca-bubble code{ font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace; background:#f1f5f9; padding:0 .25em; border-radius:4px; } .hca-row.bot .hca-bubble a{ color:#8c84f5; text-decoration:underline; } /* Suggestions (starter chips) */ .dj-suggestions{ display:flex; flex-wrap:wrap; gap:8px; padding:6px 12px 0; background:#f8fafc; border-top:1px dashed #e5e7eb; } .dj-chip{ appearance:none; border:1px dashed #cbd5e1; background:#fff; color:#0f172a; border-radius:999px; padding:8px 12px; font:500 13px/1.1 Inter,system-ui; cursor:pointer; transition:all .15s ease; white-space:nowrap; } .dj-chip:hover{ background:#eef2ff; border-color:#94a3b8; } .dj-chip:active{ transform:translateY(1px); } .hca-foot{ padding:10px; background:#faf9f6; border-top:1px solid #e5e7eb; display:flex; gap:8px; } .hca-input{ flex:1; border:1px solid #e5e7eb; border-radius:12px; padding:10px 12px; font:500 14px Inter,system-ui; } .hca-send{ background:#833ade; color:#faf9f6; border:0; border-radius:12px; cursor:pointer; } .hca-senddisabled{ opacity:.6; cursor:not-allowed; } /* Typing indicator */ .hca-typing-row{display:flex;gap:8px;align-items:flex-end;margin:8px 0;} .hca-typing-bubble{background:#8c84f5;border:1px solid #e5e7eb;border-radius:16px;padding:8px 12px;display:flex;align-items:center;justify-content:center;gap:6px;box-shadow:0 2px 6px rgba(0,0,0,.15);} .hca-typing-dot{width:6px;height:6px;border-radius:50%;background:#000;opacity:.4;animation:hcaBlink 1.4s infinite;} .hca-typing-dot:nth-child(2){animation-delay:.2s;} .hca-typing-dot:nth-child(3){animation-delay:.4s;} @keyframes hcaBlink{0%,80%,100%{opacity:.4;transform:translateY(0);}40%{opacity:1;transform:translateY(-2px);} } /* Responsive */ @media (max-width:520px){ .hca-panel{ right:10px; left:10px; width:auto; height:72vh; } .dj-chip{ font-size:12px; padding:7px 10px; } } /* Hint bubble */ .hca-hint{ position:fixed; right:86px; bottom:30px; max-width:240px; background:#faf9f6; color:#0f172a; border:1px solid #e5e7eb; border-radius:14px; padding:10px 12px; font:600 14px/1.35 Inter,system-ui; box-shadow:0 10px 30px rgba(0,0,0,.12); opacity:0; transform:translateY(8px); pointer-events:none; transition:opacity .2s ease, transform .2s ease; z-index:10001; display:flex; align-items:flex-start; gap:8px; } .hca-hint.show{ opacity:1; transform:translateY(0); pointer-events:auto; } .hca-hint:after{ content:; position:absolute; right:-8px; bottom:12px; width:0; height:0; border-left:10px solid #faf9f6; border-top:8px solid transparent; border-bottom:8px solid transparent; } /* Subtle float motion (works for PNG too) */ #hca-fab-icon, #hca-head-icon{ animation: dukiFloat 4.8s ease-in-out infinite; transform-origin:50% 60%; } .hca-row.bot .hca-avatar{ animation: dukiAvatarFloat 5.2s ease-in-out infinite; transform-origin:50% 70%; } @keyframes dukiFloat{ 0%{transform:translateY(0) rotate(0)} 25%{transform:translateY(-2px) rotate(2deg)} 50%{transform:translateY(0) rotate(0)} 75%{transform:translateY(2px) rotate(-2deg)} 100%{transform:translateY(0) rotate(0)} } @keyframes dukiAvatarFloat{ 0%{transform:translateY(0) rotate(0) scale(1)} 25%{transform:translateY(-1.5px) rotate(1.2deg) scale(1.01)} 50%{transform:translateY(0) rotate(0) scale(1)} 75%{transform:translateY(1.5px) rotate(-1.2deg) scale(0.995)} 100%{transform:translateY(0) rotate(0) scale(1)} } /style> script typeapplication/ld+json>{ @context:https://schema.org, @type:Organization, name:DUKEJIA, url:https://dukejia.com, logo:https://dukejia.com/images/dukejia.png, brand:DUKEJIA, sameAs: , contactPoint: { @type: ContactPoint, contactType: sales, telephone: +91-9350513789, areaServed: IN, availableLanguage: en,hi,ta,kn }}/script>/head>body>div idhca-chat-root>/div> !-- Header --> header classsite-header> div classcontainer nav> a classbrand hrefindex.html aria-labelDukejia Home> span>img srcimages/dukejia.png width190 height55 altDUKEJIA>/span> /a> button classmenu-toggle aria-labelToggle navigation> i classfas fa-bars>/i> /button> nav classnav-center aria-labelPrimary> a hrefAbout.html>About/a> a hrefProducts-Details.html>Products/a> a hrefCustomers-Details.html>Our Customers/a> a hrefContact.html>Contact/a> a hrefhttps://blog.dukejia.com/ target_blank>Blog/a> a classbtn-quote hrefhttps://wa.me/919350513789?textHi%20Duke%20Jia%20Team%2C%20I%27m%20interested%20in%20your%20Embroidery%20%2B%20Perforation%20flagship.%20Please%20share%20pricing%20%26%20availability. target_blank relnoopener> i classfa-solid fa-phone>/i> Get Quote/a> /nav> /div> /header> !-- Hero --> section classhero> div classhero-bg aria-hiddentrue>/div> div classhero-overlay aria-hiddentrue>/div> div classcontainer hero-inner> div classtrust-chip> i classfa-solid fa-location-dot aria-hiddentrue>/i> Trusted by Textile Manufacturers Across India /div> h1 classheadline> Dukejia Industrial Embroidery br /> span classaccent>& Perforation Technology/span> /h1> p classsub> Elevate your textile production with Dukejia’s flagship single-head embroidery + perforation machine, with sales & service across India./p> div classcta-row> a classbtn-lg btn-primary href#Our Machines> Explore Products i classfa-solid fa-arrow-right-long aria-hiddentrue>/i> /a> /div> /div> /section> !-- Flagship highlight --> section idflagship-cta classflagship> div classcontainer flagship-wrap> div classflagship-copy> span classflagship-badge>Unified Flagship Model/span> h2 classflagship-title stylecolor:transparent; background:linear-gradient(90deg,var(--pur),var(--pur2)); -webkit-background-clip:text;background-clip:text>Embroidery + Perforationbr>h2>DY-PE750x600/h2>/h2> p classflagship-lead> High-speed precision embroidery paired with synchronized perforation on a single, production-ready platform. Built for apparel, footwear and technical textiles. /p> div classflagship-cta> !-- Explore opens modal --> a idflagshipExplore data-modelDY-PE750x600 href# classbtn-orange relnoopener>Explore/a> /div> /div> div classflagship-card> div classflagship-image-box> img srcimages/EmbPerf.png altFlagship Model Machine> /div> /div> /div> /section> !-- Our Machines (two rows: small|wide then wide|small) --> main> section idOur Machines classsection-machines container aria-labelledbyour-machines-title> div classcenter> h1 idour-machines-title>Our Machines/h1> p classlead>Advanced textile solutions for every production need/p> /div> !-- ROW 1: col-1 small, col-2 wide --> div classmachines-row row-1> !-- Grid 1.1 — SMALL --> a hrefSingle-Head.html classtile small aria-labelSingle Head embroidery machines> div classimg-wrap> img srcimages/single.png altSingle Head Needle Embroidery Machine> div classoverlay> h4>Single Head/h4> p>Precision embroidery for sampling & short runs/p> /div> /div> /a> !-- Grid 1.2 — WIDE --> a hrefMulti-Head.html classtile wide aria-labelMulti Head embroidery machines> div classimg-wrap> img srcimages/multi.jpeg altMulti Head Needle Embroidery> div classoverlay> h4>Multi Head/h4> p>High-throughput production embroidery/p> /div> /div> /a> /div> !-- ROW 2: col-1 wide, col-2 small (reversed) --> div classmachines-row row-2> !-- Grid 2.1 — WIDE --> a hrefPerforation.html classtile wide aria-labelPerforation systems> div classimg-wrap> img srcimages/perforation.jpeg altPerforation System> div classoverlay> h4>Perforation/h4> p>Clean, consistent perforation technology/p> /div> /div> /a> !-- Grid 2.2 — SMALL --> a hrefQuilting.html classtile small aria-labelQuilting machines> div classimg-wrap> img srcimages/Quilting.png altQuilting Machine> div classoverlay> h4>Quilting/h4> p>Large-format with perfect stitch consistency/p> /div> /div> /a> /div> /section> /main> !-- Footer --> footer classsite-footer> div classcontainer footer-grid> div classfooter-about> h3 classfooter-brand>Dukejia/h3> p>Part of Jia Group, Dukejia has been serving Indias textile industry for over 100+ years with cutting-edge embroidery and perforation machinery. Trusted by manufacturers across India from Surat to Tirupur, Ludhiana to Kolkata./p> div classfooter-socials> a href# aria-labelFacebook classsoc>f/a> a href# aria-labelInstagram classsoc>◎/a> a href# aria-labelLinkedIn classsoc>in/a> /div> /div> div classfooter-links> h4>Quick Links/h4> ul> li>a hrefAbout.html>About Us/a>/li> li>a hrefProducts-Details.html>Our Machines/a>/li> li>a hrefCustomers-Details.html>Customer Stories/a>/li> li>a hrefContact.html>Service & Support/a>/li> /ul> /div> div classfooter-contact> h4>Contact/h4> div classfrow>span classico>📍/span>div>span classmuted>PAN-Asia Service Network/span>/div>/div> div classfrow>span classico>📞/span>div>+91 9350513789/div>/div> div classfrow>span classico>✉️/span>div>embroidery@grouphca.com/div>/div> /div> /div> div classcontainer foot-divider>/div> div classcontainer foot-bottom> div>© span idyear>/span> Duke Jia – Part of Jia Group. All rights reserved./div> nav classlegal>a href#>Privacy Policy/a>a href#>Terms of Service/a>/nav> /div> /footer> !-- Shared Model Detail Modal --> div classdj-modal iddjModelModal roledialog aria-modaltrue aria-labelledbydjTitle styledisplay:none> div classdj-sheet> div classdj-sheet-header> h3 classdj-sheet-title iddjTitle>Model/h3> button classdj-close iddjClose aria-labelClose>i classfa-solid fa-xmark>/i>/button> /div> div classdj-top> div classdj-left> div classdj-thumb>img iddjImg alt>/div> div> div classdj-chip iddjBadge>i classfa-solid fa-tag>/i>span>Perforation/span>/div> h4 classdj-top-title iddjModel>Model/h4> p classdj-top-sub iddjSub>Subtitle/p> div classdj-actions> button classdj-btn iddjCopy>i classfa-solid fa-link>/i> Copy link/button> button classdj-btn iddjPlay>i classfa-solid fa-play>/i> Watch Demo/button> button classdj-btn dj-primary iddjWhats>i classfa-brands fa-whatsapp>/i> Get Quote on WhatsApp/button> /div> /div> /div> div iddjQuick classdj-quick>/div> /div> div classdj-tabs> div classdj-tab-nav> button classdj-tab-btn data-tabspecs>Specs/button> button classdj-tab-btn data-tabfeatures>Features/button> /div> div classdj-tab-panel iddj-specs>table classdj-specs iddjSpecTable>/table>/div> div classdj-tab-panel iddj-features>div classdj-feats iddjFeatGrid>/div>/div> /div> /div> /div> !-- Video overlay --> div classdj-video-overlay iddjVideoOverlay roledialog aria-modaltrue aria-labelProduct video styledisplay:none> div classdj-video> button classdj-video-close iddjVideoClose aria-labelClose video> i classfa-solid fa-xmark>/i> /button> iframe iddjVideoFrame titleProduct demo allowautoplay; encrypted-media; picture-in-picture; web-share allowfullscreen referrerpolicystrict-origin-when-cross-origin loadinglazy>/iframe> button iddjVideoOpenOnYT styleposition:absolute;left:12px;bottom:12px;padding:10px 14px;border:1px solid #fff;border-radius:10px;background:rgba(255,255,255,.12);color:#fff;backdrop-filter:blur(2px);display:none;cursor:pointer> Open on YouTube /button> /div> /div>script>(() > { /* ---------- ICONS: PNG (transparent) ---------- */ const ICON_PATH duke.png; // ensure duke.png is next to this HTML const BASE_ICON_URL ICON_PATH; const BOT_ICON_URL ICON_PATH; const USER_ICON_URL https://www.svgrepo.com/show/532363/user-alt-1.svg; window.HCA_BASE_ICON BASE_ICON_URL; window.HCA_BOT_ICON BOT_ICON_URL; window.HCA_USER_ICON USER_ICON_URL; /* ---------- API CONFIG ---------- */ const API_BASE window.HCA_API_BASE || ; const API_URL `${API_BASE}/api/ask`; const HEALTH `${API_BASE}/api/health`; const RESET `${API_BASE}/api/reset`; /* ---------- Greeting ---------- */ function getISTGreeting(){ const hour Number(new Intl.DateTimeFormat(en-GB,{timeZone:Asia/Kolkata,hour:2-digit,hour12:false}).format(new Date())); if (hour 5) return Good night; if (hour 12) return Good morning; if (hour 17) return Good afternoon; if (hour 21) return Good evening; return Good night; } const buildWelcomeLine () > `${getISTGreeting()}! I’m Duki`; /* ---------- Session ---------- */ function getOrCreateSessionId(){ const KEY dukejia_session_id; try{ let sid localStorage.getItem(KEY); if(!sid){ sid (crypto && crypto.randomUUID) ? crypto.randomUUID() : sid- + Math.random().toString(36).slice(2) + Date.now().toString(36); localStorage.setItem(KEY, sid); } return sid; }catch{ return (crypto && crypto.randomUUID) ? crypto.randomUUID() : sid- + Math.random().toString(36).slice(2) + Date.now().toString(36); } } const SESSION_ID getOrCreateSessionId(); /* ---------- UI ---------- */ const root document.getElementById(hca-chat-root); root.innerHTML ` div classhca-fab aria-labelOpen Duki titleDuki> img idhca-fab-icon altChat/> /div> div classhca-hint idhca-hint rolestatus aria-livepolite> span idhca-hint-text>Need help with sewing solutions? I’m here./span> button typebutton classhca-hint-close titleDismiss aria-labelDismiss>×/button> /div> div classhca-panel roledialog aria-labelDuki> div classhca-head> div classhca-head-left> img idhca-head-icon altAssistant/> span idhca-title>Duki/span> /div> div classhca-actions> button classhca-btn idhca-refresh titleRestart chat aria-labelRestart chat>⟲/button> button classhca-btn idhca-close titleClose aria-labelClose>✕/button> /div> /div> div classhca-body idhca-log>/div> !-- Starter suggestions --> div iddj-suggestions classdj-suggestions aria-labelStarter questions>/div> div classhca-foot> input classhca-input idhca-input placeholderAsk about Flagship, Single-head, Multi-head, Quilting or Perforation…/> button classhca-send idhca-send>Send/button> /div> /div> `; /* ---------- Shortcuts ---------- */ const $ sel > root.querySelector(sel); const fab $(.hca-fab); const panel $(.hca-panel); const closeBtn $(#hca-close); const refreshBtn $(#hca-refresh); const log $(#hca-log); const input $(#hca-input); const sendBtn $(#hca-send); const hint $(#hca-hint); const hintText $(#hca-hint-text); const hintClose hint.querySelector(.hca-hint-close); const suggWrap $(#dj-suggestions); /* ---------- Icons (with fallback) ---------- */ function setIcon(imgEl, url){ imgEl.loading eager; imgEl.decoding async; imgEl.src url; imgEl.onerror () > { imgEl.src data:image/svg+xml;utf8,svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 28 28>circle cx14 cy14 r12 fill%23e5e7eb/>/svg>; }; } setIcon(document.getElementById(hca-fab-icon), window.HCA_BASE_ICON); setIcon(document.getElementById(hca-head-icon), window.HCA_BASE_ICON); /* ---------- Title ---------- */ const titleEl $(#hca-title); if (titleEl) titleEl.textContent Duki; /* ---------- First message ---------- */ appendMsg(buildWelcomeLine(), bot); hintText.textContent buildWelcomeLine(); /* ---------- Hint logic ---------- */ const USED_KEY dukejia_used_this_session; let memOK true; try{ sessionStorage.setItem(_dukejia_test,1); sessionStorage.removeItem(_dukejia_test); }catch{ memOKfalse; } let usedInMem false; const hasUsed () > memOK ? sessionStorage.getItem(USED_KEY) 1 : usedInMem; const markUsed () > { if(memOK){ sessionStorage.setItem(USED_KEY,1); } else { usedInMem true; } }; const clearUsed () > { if(memOK){ sessionStorage.removeItem(USED_KEY); } else { usedInMem false; } }; const HINT_DELAY_MS 1000; const HINT_RESHOW_AFTER_CLOSE_MS 10000; const HINT_IDLE_RESHOW_MS 45000; let hintTimer null; function scheduleHint(ms){ clearTimeout(hintTimer); hintTimer setTimeout(showHint, ms); } function showHint(){ if(!panel.classList.contains(open)) hint.classList.add(show); } function hideHint(){ hint.classList.remove(show); } setTimeout(() > { if(!hasUsed()) showHint(); }, HINT_DELAY_MS); hint.addEventListener(click, () > { hideHint(); togglePanel(true); markUsed(); }); hintClose.addEventListener(click, (e) > { e.stopPropagation(); hideHint(); }); function togglePanel(show){ panel.classListshow ? add : remove(open); if(show){ input.focus(); hideHint(); markUsed(); clearTimeout(hintTimer); } } fab.onclick () > togglePanel(true); closeBtn.onclick () > { togglePanel(false); clearUsed(); scheduleHint(HINT_RESHOW_AFTER_CLOSE_MS); }; /* ---------- Simple Markdown rendering ---------- */ const addHttp url > /^https?:\/\//i.test(url) ? url : `https://${url}`; const digits s > String(s||).replace(/^\d/g,); const telHref s > `tel:${digits(s)}`; const waHref s > { let n digits(s); if (n.length 10) n 91 + n; return `https://wa.me/${n}`; }; function renderMarkdown(inputText){ const escapeHtml s > String(s).replace(/&>/g, m > ( {&:&,:<,>:>,:",:'}m )); const text escapeHtml(inputText).replace(/\r\n/g, \n); const addHttp url > /^https?:\/\//i.test(url) ? url : `https://${url}`; const digits s > String(s||).replace(/^\d/g,); const telHref s > `tel:${digits(s)}`; const waHref s > { let n digits(s); if (n.length 10) n 91 + n; return `https://wa.me/${n}`; }; // prevent double-linking when already inside a tag const insideTag (str, idx) > { const lastLt str.lastIndexOf(, idx); const lastGt str.lastIndexOf(>, idx); return lastLt > lastGt; }; function inline(s){ // label(url) s s.replace(/\(^\+)\\((https?:\/\/^\s)+)\)/g, a href$2 target_blank relnoopener noreferrer>$1/a>); // plain emails s s.replace(/(?!^*>)(a-zA-Z0-9._%+-+@a-zA-Z0-9.-+\.a-zA-Z{2,})/g, a hrefmailto:$1 target_blank relnoopener>$1/a>); // plain http/https/www s s.replace(/(?!^*>)(\b(?:https?:\/\/|www\.)^\s)+^\s).,!?:;)/gi, m > `a href${addHttp(m)} target_blank relnoopener>${m.replace(/^https?:\/\//i,)}/a>`); // generic phone → tel:, but not if already inside an a> s s.replace(/(\+?\d\d\s().-{6,}\d)/g, (m, _n, offset, orig) > insideTag(orig, offset) ? m : `a href${telHref(m)} target_blank relnoopener>${m}/a>`); // code / bold / italic s s.replace(/`(^`+)`/g, code>$1/code>); s s.replace(/\*\*(.+?)\*\*/g, strong>$1/strong>); s s.replace(/(^|\s()\*(^*\n+)\*(?\s).,!?:;|$)/g, $1em>$2/em>); return s; } const lines text.split(\n); let html , inList false; const closeList () > { if (inList) { html + /ul>; inList false; } }; for (let i 0; i lines.length; i++){ const line linesi; // Accept *, -, or • as list bullets const m line.match(/^\s*(*-|•)\s+(.+)/); if (m){ if (!inList) { html + ul>; inList true; } const item m2.trim(); // Stacked WhatsApp const wa item.match(/^(WhatsApp|Whatsapp|WA)\s*:\s*(+?\d\s().-{6,}\d)\s*$/i); if (wa){ const num wa2.replace(/\s+/g, ).trim(); html + `li>strong>WhatsApp:/strong>br>a href${waHref(num)} target_blank relnoopener>${num}/a>/li>`; continue; } // Stacked Email const em item.match(/^(Email)\s*:\s*(A-Z0-9._%+-+@A-Z0-9.-+\.A-Z{2,})\s*$/i); if (em){ const addr em2; html + `li>strong>Email:/strong>br>a hrefmailto:${addr} target_blank relnoopener>${addr}/a>/li>`; continue; } // Any other bullet html + `li>${inline(item)}/li>`; continue; } if (line.trim() ) { closeList(); html + br/>; continue; } closeList(); html + inline(line) + br/>; } closeList(); return html;} /* ---------- Message bubbles ---------- */ function appendMsg(text, whobot){ const row document.createElement(div); row.className `hca-row ${who}`; const avatar document.createElement(div); avatar.className hca-avatar; const img document.createElement(img); img.alt who bot ? Duki : You; img.src who bot ? window.HCA_BOT_ICON : window.HCA_USER_ICON; img.decoding async; avatar.appendChild(img); const bubble document.createElement(div); bubble.className hca-bubble; bubble.innerHTML renderMarkdown(text); row.appendChild(avatar); row.appendChild(bubble); log.appendChild(row); log.scrollTop log.scrollHeight; return bubble; } /* ---------- Typing indicator ---------- */ let typingElnull; function showTyping(show){ if(show){ if(typingEl) return; const rowdocument.createElement(div); row.classNamehca-row bot hca-typing-row; const avatardocument.createElement(div); avatar.classNamehca-avatar; const img document.createElement(img); img.altDuki; img.src window.HCA_BOT_ICON; img.decodingasync; avatar.appendChild(img); const bubbledocument.createElement(div); bubble.classNamehca-typing-bubble; for(let i0;i3;i++){const ddocument.createElement(span);d.classNamehca-typing-dot;bubble.appendChild(d);} row.appendChild(avatar);row.appendChild(bubble); typingElrow;log.appendChild(typingEl);log.scrollToplog.scrollHeight; }else if(typingEl){typingEl.remove();typingElnull;} } /* ---------- Suggestions (starter chips) ---------- */ // Set per page if you want: window.DJ_PAGE_HINTS { segment:Perforation }; const PAGE_HINTS window.DJ_PAGE_HINTS ?? { segment: Embroidery }; const SUGGESTIONS { Generic: Contact Us,About Dukejia, }; function hideSuggestions(){ if(suggWrap) suggWrap.style.display none; } function showSuggestions(){ if(suggWrap) suggWrap.style.display flex; } function renderSuggestions(){ if(!suggWrap) return; const seg (PAGE_HINTS.segment || Generic); const bank (SUGGESTIONSseg || ).concat(SUGGESTIONS.Generic).slice(0,6); suggWrap.innerHTML ; bank.forEach(label > { const b document.createElement(button); b.type button; b.className dj-chip; b.textContent label; b.onclick () > sendQuick(label); suggWrap.appendChild(b); }); } /* ---------- Ask (core) ---------- */ async function askCore(userText, opts {}){ const { pageHints PAGE_HINTS, isFirstTurn false } opts; appendMsg(userText, user); hideHint(); hideSuggestions(); input.value; input.disabledtrue; sendBtn.disabledtrue; showTyping(true); try{ const res await fetch(API_URL, { method:POST, headers:{ Content-Type:application/json, X-Session-ID: SESSION_ID }, credentials:include, body: JSON.stringify({ message: userText, pageHints, isFirstTurn }) }); const text await res.text(); let data {}; try{ data JSON.parse(text); }catch{ data { answer: text }; } if(!res.ok){ const errMsg (data.error || data.details || data.message) || `HTTP ${res.status}`; appendMsg(String(errMsg), bot); }else{ appendMsg(data.answer || data.output || Sorry, I couldnt find that., bot); } }catch(e){ appendMsg(Server error. Please try again., bot); }finally{ showTyping(false); input.disabledfalse; sendBtn.disabledfalse; input.focus(); clearTimeout(hintTimer); scheduleHint(HINT_IDLE_RESHOW_MS); } } async function ask(){ const q input.value.trim(); if(!q) return; if(q.toLowerCase()/restart || q.toLowerCase()/refresh){ input.value; resetChat(); return; } askCore(q, { pageHints: PAGE_HINTS, isFirstTurn:false }); } function sendQuick(label){ askCore(label, { pageHints: PAGE_HINTS, isFirstTurn:false }); } document.getElementById(hca-send).onclick ask; document.getElementById(hca-input).addEventListener(keydown, (e)>{ if(e.keyEnter) ask(); }); /* ---------- Reset / Restart ---------- */ async function resetChat(){ log.innerHTML ; appendMsg(buildWelcomeLine(), bot); showSuggestions(); try{ localStorage.removeItem(dukejia_history); sessionStorage.removeItem(dukejia_history); }catch(_){} try{ await fetch(RESET, { method:POST, headers:{ Content-Type:application/json, X-Session-ID: SESSION_ID }, credentials:include, body: JSON.stringify({ sessionId: SESSION_ID }) }); }catch(_){} input.value; input.focus(); scheduleHint(800); } refreshBtn.onclick resetChat; /* ---------- Init ---------- */ renderSuggestions(); // show chips initially /* Health/version pings */ fetch(HEALTH, { credentials:include }).then(r>r.json()).then(j>console.log(Duki:, j)).catch(()>{}); fetch((window.HCA_API_BASE || ) + /api/version, { credentials:include }) .then(r>r.json()).then(info>console.log(Duki build:, info)).catch(()>{});})();/script>script> document.getElementById(year).textContent new Date().getFullYear(); // Mobile Navigation Toggle const menuToggle document.querySelector(.menu-toggle); const navCenter document.querySelector(.nav-center); const menuIcon menuToggle.querySelector(i); menuToggle.addEventListener(click, () > { navCenter.classList.toggle(open); if (navCenter.classList.contains(open)) { menuIcon.classList.remove(fa-bars); menuIcon.classList.add(fa-xmark); // FA6 close icon } else { menuIcon.classList.remove(fa-xmark); menuIcon.classList.add(fa-bars); } }); // Close mobile menu when clicking on a link document.querySelectorAll(.nav-center a).forEach(link > { link.addEventListener(click, () > { navCenter.classList.remove(open); menuIcon.classList.remove(fa-xmark); menuIcon.classList.add(fa-bars); }); }); /script> !-- Modal JS + Dataset --> script> /* ——— Dataset (flagship DY-PE750×600 for index modal) ——— */ const DJ_MODELS { id:DY-PE750x600, badge:Perforation, image:images/Perforation.png, title:DY-PE750×600, subtitle:Single-head perforation & stitching machine for precise leather/textile work., quick:Single Head,Perforation + Stitch,750×600 mm,1200 RPM, youtubeUrl: https://www.youtube.com/watch?v2Nod9pUuz24, youtubeId: 2Nod9pUuz24, specs:{ Machine Dimensions (mm):2000×1500×1800, Max Speed (rpm):1200, Air Pressure (MPa):0.5, Power Supply:AC 380V 50/60Hz, }, features: Integrated perforation and stitching for productivity., Precision servo-driven control system., Adjustable perforation depth & stitch speed., User-friendly operation panel. } ; /* ——— Modal + Video refs ——— */ const modal document.getElementById(djModelModal); const djClose document.getElementById(djClose); const djTitle document.getElementById(djTitle); const djImg document.getElementById(djImg); const djModel document.getElementById(djModel); const djSub document.getElementById(djSub); const djBadgeSpan document.getElementById(djBadge).querySelector(span); const djCopy document.getElementById(djCopy); const djWhats document.getElementById(djWhats); const djPlay document.getElementById(djPlay); const djQuick document.getElementById(djQuick); const djSpecTable document.getElementById(djSpecTable); const djFeatGrid document.getElementById(djFeatGrid); const djVideoOverlay document.getElementById(djVideoOverlay); const djVideoFrame document.getElementById(djVideoFrame); const djVideoClose document.getElementById(djVideoClose); const djVideoOpenOnYT document.getElementById(djVideoOpenOnYT); /* ——— Helpers ——— */ function chip(text){ const div document.createElement(div); div.className dj-chip; div.innerHTML i classfa-solid fa-circle-check>/i>span>+text+/span>; return div; } function renderSpecs(obj){ djSpecTable.innerHTML ; Object.entries(obj).forEach((k,v)>{ const tr document.createElement(tr); tr.innerHTML `th>${k}/th>td>${Array.isArray(v) ? v.join( / ) : v}/td>`; djSpecTable.appendChild(tr); }); } function extractYouTubeId(input) { if (!input) return null; if (/^a-zA-Z0-9_-{11}$/.test(input)) return input; try { const u new URL(input, location.href); const host u.hostname.replace(/^www\./, ); if (host.endsWith(youtube.com) && u.searchParams.get(v)) return u.searchParams.get(v); if (host youtu.be) return u.pathname.split(/).filter(Boolean)0 || null; if (host.endsWith(youtube.com) && u.pathname.startsWith(/shorts/)) return u.pathname.split(/).filter(Boolean)1 || null; } catch(e) {} return null; } function buildEmbedUrl(id) { const base `https://www.youtube-nocookie.com/embed/${id}?autoplay1&mute1&playsinline1&rel0&modestbranding1`; return `${base}&origin${encodeURIComponent(location.origin)}`; } /* ——— Video open/close ——— */ let videoLoadTimer null; let lastVideoUrl null; function openVideoForModel(model) { const idFromId extractYouTubeId(model.youtubeId); const idFromUrl extractYouTubeId(model.youtubeUrl); const videoId idFromUrl || idFromId; if (!videoId) return; lastVideoUrl `https://youtu.be/${videoId}`; if (djVideoOpenOnYT) { djVideoOpenOnYT.style.display none; djVideoOpenOnYT.onclick () > window.open(lastVideoUrl, _blank, noopener); } djVideoOverlay.style.display flex; clearTimeout(videoLoadTimer); videoLoadTimer setTimeout(() > { djVideoOpenOnYT.style.display inline-flex; }, 3500); djVideoFrame.src buildEmbedUrl(videoId); } function closeVideo(){ djVideoOverlay.style.display none; djVideoFrame.removeAttribute(src); clearTimeout(videoLoadTimer); djVideoOpenOnYT.style.display none; } /* ——— Modal open/close ——— */ let current null; function openModel(id){ const m DJ_MODELS.find(x>x.idid); if(!m) return; current m; djTitle.textContent m.title; djModel.textContent `${m.title} - ${m.subtitle}`; djSub.textContent m.subtitle; djImg.src m.image; djImg.alt `${m.title} image`; djBadgeSpan.textContent m.badge; djQuick.innerHTML ; m.quick.forEach(q>djQuick.appendChild(chip(q))); renderSpecs(m.specs); djFeatGrid.innerHTML ; m.features.forEach(f>{ const ddocument.createElement(div); d.classNamefeat; d.textContentf; djFeatGrid.appendChild(d); }); djCopy.onclick ()>{ const url `${location.origin}${location.pathname}?model${encodeURIComponent(m.id)}#flagship-cta`; navigator.clipboard.writeText(url).then(()>alert(Link copied!)); }; djWhats.onclick ()>{ const msg encodeURIComponent(`Hi Duke Jia Team, Im interested in model ${m.title}. Please share pricing & availability.`); window.open(`https://wa.me/919350513789?text${msg}`,_blank,noopener); }; djPlay.onclick ()> openVideoForModel(m); modal.style.display flex; requestAnimationFrame(()> modal.classList.add(active)); document.body.style.overflow hidden; activateTab(specs); } function closeModel(){ modal.classList.remove(active); setTimeout(()> modal.style.display none, 200); document.body.style.overflow auto; closeVideo(); } /* Tabs */ const tabBtns document.querySelectorAll(.dj-tab-btn); function activateTab(name){ tabBtns.forEach(b>b.classList.toggle(active, b.dataset.tabname)); document.querySelectorAll(.dj-tab-panel).forEach(p>p.classList.remove(active)); document.getElementById(dj-+name).classList.add(active); } tabBtns.forEach(b>b.addEventListener(click, ()>activateTab(b.dataset.tab))); /* Esc + overlay close */ document.getElementById(djClose).addEventListener(click, closeModel); modal.addEventListener(click, (e)>{ if(e.targetmodal) closeModel(); }); djVideoClose.addEventListener(click, closeVideo); djVideoOverlay.addEventListener(click, (e)>{ if(e.targetdjVideoOverlay) closeVideo(); }); document.addEventListener(keydown, (e)>{ if(e.keyEscape){ if (djVideoOverlay.style.displayflex) closeVideo(); else if (modal.style.displayflex) closeModel(); } }); /* ——— Hook the flagship Explore button ——— */ const flagshipExplore document.getElementById(flagshipExplore); if (flagshipExplore){ flagshipExplore.addEventListener(click, (e)>{ e.preventDefault(); const id flagshipExplore.dataset.model || DY-PE750x600; openModel(id); }); } /* ——— Support deep link: ?modelDY-PE750x600 ——— */ const params new URLSearchParams(location.search); const deep params.get(model); if (deep && DJ_MODELS.some(m>m.iddeep)) { openModel(deep); } /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]