/* ==========================================================================
   Thirvusoft inner pages: 3D stage header, upgraded legacy components,
   "connected by design" section, search palette and the ERP blueprint builder.
   Loaded after thirvu-3d.css and thirvu-fx.css.
   ========================================================================== */
.tv-sr { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* ---------- Stage page header (light, 3D) ---------- */
.tv-site .page-header {
	position: relative; overflow: hidden; isolation: isolate;
	background: linear-gradient(180deg, #f3f8ff 0%, #f8fbff 55%, #fff 100%) !important;
	padding: clamp(40px, 6vw, 84px) 0 clamp(70px, 8vw, 120px) !important;
	margin-bottom: 0 !important; border: 0;
}
.tv-site .page-header h1 {
	color: var(--tv-ink) !important; text-shadow: none; font-size: clamp(2.3rem, 5vw, 4.3rem) !important;
	line-height: 1.02 !important; letter-spacing: -.045em; font-weight: 800 !important; margin: 0; max-width: 680px;
}
.tv-site .page-header > .container { position: relative; z-index: 3; }
.tv-stage__inner { display: grid; grid-template-columns: minmax(0, 1.02fr) minmax(0, .98fr); gap: clamp(28px, 4vw, 56px); align-items: center; }
.tv-stage--compact .tv-stage__inner { grid-template-columns: 1fr; }
.tv-stage__copy { position: relative; transform: translate3d(0, calc(var(--p, 0) * 50px), 0); opacity: calc(1 - var(--p, 0) * 1.1); }

.tv-stage .tv-crumbs {
	display: inline-flex; flex-wrap: wrap; gap: .55rem; align-items: center; margin: 0 0 1.4rem; padding: .45rem 1rem .45rem .55rem;
	border-radius: 999px; background: rgba(255,255,255,.75); border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow-sm);
	backdrop-filter: blur(10px); font-size: .82rem; font-weight: 600; color: var(--tv-muted);
}
.tv-stage .tv-crumbs a { color: var(--tv-700) !important; }
.tv-stage .tv-crumbs a:first-child { width: 28px; height: 28px; display: grid; place-items: center; border-radius: 50%; background: var(--tv-50); }
.tv-stage .tv-crumbs a:hover { color: var(--tv-500) !important; }
.tv-stage .tv-crumbs i.fa-chevron-right { font-size: .55rem; opacity: .45; }
.tv-stage .tv-crumbs span[aria-current] { color: var(--tv-ink); }

.tv-stage__kicker {
	display: flex; width: max-content; align-items: center; gap: .6rem; margin-bottom: 1.1rem;
	font-family: var(--tv-mono); font-size: .78rem; letter-spacing: .14em; text-transform: uppercase; color: var(--tv-600);
}
.tv-stage__kicker-icon { width: 30px; height: 30px; border-radius: 10px; display: grid; place-items: center; background: var(--tv-grad); color: #fff; font-size: .8rem; box-shadow: var(--tv-glow); }
.tv-site .tv-stage .tv-ph__lead { color: var(--tv-text) !important; font-size: clamp(1.02rem, 1.4vw, 1.18rem); line-height: 1.65; max-width: 560px; margin: 1.3rem 0 0; }
.tv-stage__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 1.9rem; }
.tv-stage__chips { list-style: none; display: flex; flex-wrap: wrap; gap: 8px 18px; padding: 0; margin: 1.6rem 0 0; }
.tv-stage__chips li { display: inline-flex; align-items: center; gap: .45rem; font-size: .88rem; font-weight: 600; color: var(--tv-text); }
.tv-stage__chips i { color: var(--tv-500); }

.tv-stage__bg { position: absolute; inset: 0; z-index: 0; pointer-events: none; isolation: isolate; }
.tv-stage__bg .tv-aurora span { opacity: .5; }
.tv-stage__word {
	position: absolute; left: 50%; bottom: -.2em; z-index: 0; white-space: nowrap; line-height: 1;
	font-size: clamp(5rem, 15vw, 15rem); font-weight: 800; letter-spacing: -.06em; text-transform: lowercase;
	color: transparent; -webkit-text-stroke: 1.5px rgba(27, 99, 224, .1);
	transform: translate3d(calc(-50% - var(--p, 0) * 14%), 0, 0);
}
.tv-stage__beams { position: absolute; inset: 0; overflow: hidden; }
.tv-stage__beams i { position: absolute; top: -40%; width: 1px; height: 40%; background: linear-gradient(transparent, rgba(47,123,245,.55), transparent); animation: tv-beam-fall 7s linear infinite; }
.tv-stage__beams i:nth-child(1) { left: 18%; animation-delay: -1s; }
.tv-stage__beams i:nth-child(2) { left: 52%; animation-delay: -4s; animation-duration: 9s; }
.tv-stage__beams i:nth-child(3) { left: 84%; animation-delay: -2.5s; animation-duration: 6s; }
@keyframes tv-beam-fall { to { transform: translateY(380%); } }
.tv-stage::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: linear-gradient(90deg, transparent, var(--tv-line-strong), transparent); }

/* 3D scene */
.tv-stage__scene { position: relative; height: clamp(360px, 34vw, 460px); perspective: 1400px; }
.tv-stage__rig {
	position: absolute; inset: 0; transform-style: preserve-3d;
	transform: translate3d(0, calc(var(--p, 0) * -70px), 0) rotateX(calc(8deg + var(--rx, 0deg) + var(--p, 0) * 16deg)) rotateY(calc(-16deg + var(--ry, 0deg)));
}
.tv-sc {
	position: absolute; border-radius: 20px; background: rgba(255,255,255,.86); border: 1px solid rgba(255,255,255,.95);
	box-shadow: 0 34px 70px -24px rgba(12,42,99,.38), 0 0 0 1px rgba(21,79,186,.08); backdrop-filter: blur(14px);
}
.tv-sc--win { left: 4%; top: 6%; width: 80%; overflow: hidden; transform: translateZ(0); animation: tv-sc-in 1s var(--tv-ease) both .2s; }
.tv-sc__bar { display: flex; align-items: center; gap: 6px; padding: 10px 14px; border-bottom: 1px solid var(--tv-line); background: rgba(243,248,255,.8); }
.tv-sc__bar i { width: 9px; height: 9px; border-radius: 50%; background: #ff6b6b; }
.tv-sc__bar i:nth-child(2) { background: #ffc94d; }
.tv-sc__bar i:nth-child(3) { background: #3ccf8e; }
.tv-sc__bar span { margin-left: 10px; flex: 1; padding: 4px 10px; border-radius: 8px; background: #fff; border: 1px solid var(--tv-line); font-family: var(--tv-mono); font-size: .68rem; color: var(--tv-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tv-sc__body { padding: 18px 18px 12px; }
.tv-sc__head { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
.tv-sc__icon { width: 46px; height: 46px; border-radius: 14px; display: grid; place-items: center; background: var(--tv-grad); color: #fff; font-size: 1.15rem; box-shadow: var(--tv-glow); flex-shrink: 0; }
.tv-sc__head b { display: block; color: var(--tv-ink); font-size: 1rem; line-height: 1.2; }
.tv-sc__head small { color: var(--tv-muted); font-size: .74rem; }
.tv-sc__badge { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 999px; background: var(--tv-50); color: var(--tv-600); font-size: .7rem; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; }
.tv-sc__badge i { width: 7px; height: 7px; border-radius: 50%; background: #22c55e; box-shadow: 0 0 0 0 rgba(34,197,94,.6); animation: tv-live 1.8s infinite; }
@keyframes tv-live { 70% { box-shadow: 0 0 0 7px rgba(34,197,94,0); } 100% { box-shadow: 0 0 0 0 rgba(34,197,94,0); } }
.tv-sc__rows { list-style: none; padding: 0; margin: 0 0 12px; display: grid; gap: 8px; }
.tv-sc__rows li { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 9px 12px; border-radius: 12px; background: #fff; border: 1px solid var(--tv-line); font-size: .8rem; font-weight: 600; color: var(--tv-ink); }
.tv-tog { position: relative; flex-shrink: 0; width: 34px; height: 20px; border-radius: 999px; background: #dbe4f3; animation: tv-tog-bg 8s infinite; animation-delay: calc(var(--k) * .7s + .6s); }
.tv-tog::after { content: ""; position: absolute; left: 3px; top: 3px; width: 14px; height: 14px; border-radius: 50%; background: #fff; box-shadow: 0 2px 4px rgba(12,42,99,.25); animation: tv-tog-knob 8s infinite; animation-delay: inherit; }
@keyframes tv-tog-bg { 0%, 6% { background: #dbe4f3; } 12%, 86% { background: var(--tv-500); } 92%, 100% { background: #dbe4f3; } }
@keyframes tv-tog-knob { 0%, 6% { transform: none; } 12%, 86% { transform: translateX(14px); } 92%, 100% { transform: none; } }
.tv-sc__chart { height: 60px; }
.tv-sc__chart svg { width: 100%; height: 100%; display: block; }
.tv-sc__area { fill: url(#tvScFill); }
.tv-sc__line { fill: none; stroke: var(--tv-500); stroke-width: 2.5; stroke-linecap: round; stroke-dasharray: 320; stroke-dashoffset: 320; animation: tv-draw 8s ease-in-out infinite 1s; }
@keyframes tv-draw { 0% { stroke-dashoffset: 320; } 30%, 88% { stroke-dashoffset: 0; } 100% { stroke-dashoffset: -320; } }

.tv-sc--photo { right: -2%; bottom: 2%; width: 42%; aspect-ratio: 4 / 3; padding: 7px; transform: translateZ(70px) rotate(3deg); animation: tv-sc-in 1s var(--tv-ease) both .45s; }
.tv-sc--photo img { width: 100%; height: 100%; object-fit: cover; border-radius: 14px; display: block; }
.tv-sc--ring { left: -3%; bottom: 6%; display: flex; align-items: center; gap: 10px; padding: 12px 16px 12px 12px; transform: translateZ(110px); animation: tv-sc-in 1s var(--tv-ease) both .6s, tv-bob 6s ease-in-out infinite 1.6s; }
.tv-sc--ring svg { width: 46px; height: 46px; transform: rotate(-90deg); }
.tv-sc--ring circle { fill: none; stroke: var(--tv-100); stroke-width: 4; }
.tv-sc--ring .tv-sc__arc { stroke: url(#tvScFill); stroke: var(--tv-500); stroke-linecap: round; stroke-dasharray: 113.1; stroke-dashoffset: 113.1; animation: tv-ring-fill 8s var(--tv-ease) infinite 1s; }
@keyframes tv-ring-fill { 0% { stroke-dashoffset: 113.1; } 35%, 88% { stroke-dashoffset: 0; } 100% { stroke-dashoffset: 113.1; } }
.tv-sc--ring > i { position: absolute; left: 12px; top: 50%; width: 46px; margin-top: -.5em; text-align: center; color: var(--tv-600); font-size: .95rem; }
.tv-sc--ring small { font-size: .74rem; font-weight: 700; color: var(--tv-ink); line-height: 1.25; }
.tv-sc--toast { right: 0; top: -2%; display: flex; align-items: center; gap: 10px; padding: 10px 16px 10px 10px; transform: translateZ(140px); animation: tv-toast 8s var(--tv-ease) infinite 2.4s; opacity: 0; }
.tv-sc--toast > span { width: 34px; height: 34px; border-radius: 11px; display: grid; place-items: center; background: #e9fbf1; color: #16a34a; }
.tv-sc--toast b { display: block; font-size: .78rem; color: var(--tv-ink); }
.tv-sc--toast small { font-size: .7rem; color: var(--tv-muted); }
@keyframes tv-toast { 0% { opacity: 0; transform: translateZ(140px) translateY(-14px) scale(.96); } 8%, 70% { opacity: 1; transform: translateZ(140px); } 78%, 100% { opacity: 0; transform: translateZ(140px) translateY(-14px) scale(.96); } }
.tv-sc--orb { right: 20%; top: 38%; width: 64px; height: 64px; border-radius: 20px; display: grid; place-items: center; background: var(--tv-grad); color: #fff; font-size: 1.5rem; border: 0; box-shadow: 0 24px 50px -14px rgba(27,99,224,.7); transform: translateZ(190px); animation: tv-orb 7s ease-in-out infinite; }
@keyframes tv-orb { 0%, 100% { transform: translateZ(190px) translateY(0) rotate(-6deg); } 50% { transform: translateZ(190px) translateY(-16px) rotate(6deg); } }
.tv-sc--ring2 { left: -10%; right: -10%; top: 30%; height: 50%; border-radius: 50%; border: 1.5px dashed rgba(47,123,245,.28); background: none; box-shadow: none; backdrop-filter: none; transform: translateZ(-60px) rotateX(72deg); animation: tv-spin2 40s linear infinite; }
@keyframes tv-spin2 { to { transform: translateZ(-60px) rotateX(72deg) rotateZ(360deg); } }
@keyframes tv-sc-in { from { opacity: 0; translate: 0 40px; } to { opacity: 1; translate: 0 0; } }
@keyframes tv-bob { 0%, 100% { translate: 0 0; } 50% { translate: 0 -10px; } }

.tv-stage__cue { position: absolute; left: 50%; bottom: 22px; z-index: 3; width: 24px; height: 38px; margin-left: -12px; border-radius: 14px; border: 2px solid var(--tv-line-strong); opacity: calc(1 - var(--p, 0) * 4); }
.tv-stage__cue span { position: absolute; left: 50%; top: 7px; width: 4px; height: 8px; margin-left: -2px; border-radius: 2px; background: var(--tv-500); animation: tv-cue 1.8s ease-in-out infinite; }
@keyframes tv-cue { 0% { transform: translateY(0); opacity: 1; } 80%, 100% { transform: translateY(12px); opacity: 0; } }

/* the ERPNext module sub-nav floats over the bottom edge of the header */
.tv-site #naverp { margin: -36px auto 28px !important; }

@media (max-width: 991.98px) {
	.tv-stage__inner { grid-template-columns: 1fr; }
	.tv-stage__scene { height: 340px; max-width: 540px; width: 100%; margin: 12px auto 0; }
	.tv-stage__cue { display: none; }
	.tv-stage__copy { transform: none; opacity: 1; }
}
@media (max-width: 575.98px) {
	.tv-stage__scene { height: 290px; }
	.tv-sc--win { width: 92%; left: 0; }
	.tv-sc--photo, .tv-sc--orb { display: none; }
	.tv-sc--ring { left: auto; right: 0; bottom: 0; }
	.tv-sc__rows li:nth-child(3) { display: none; }
	.tv-stage__actions .tv-btn { flex: 1 1 auto; justify-content: center; }
}

/* compact header (blog / case studies) */
.tv-site .tv-stage--compact { padding: 44px 0 64px !important; }
.tv-site .tv-stage--compact h1 { font-size: clamp(1.9rem, 4vw, 3rem) !important; max-width: 900px; }

/* ---------- Legacy sections, upgraded ---------- */
.tv-site .tv-h2 { font-size: clamp(1.75rem, 3.1vw, 2.6rem) !important; line-height: 1.1 !important; letter-spacing: -.035em; color: var(--tv-ink); font-weight: 800 !important; }
.tv-site .feature-a-text > h6:empty, .tv-site .about-text-a > h6:empty, .tv-site .about-text-a > p:empty { display: none; }
.tv-site .feature-a-text > h6.tv-eyebrow, .tv-site .about-text-a > h6.tv-eyebrow { display: inline-flex; margin-bottom: 1rem !important; }

/* numbered feature timeline */
.tv-tl { position: relative; display: grid; gap: 6px; }
.tv-tl__line { position: absolute; left: 27px; top: 34px; bottom: 34px; width: 2px; border-radius: 2px; background: var(--tv-100); overflow: hidden; }
.tv-tl__line i { position: absolute; inset: 0; background: linear-gradient(var(--tv-500), var(--tv-cyan)); transform-origin: 50% 0; transform: scaleY(var(--fill, 0)); }
.tv-site .tv-tl__item { position: relative; display: flex !important; gap: 20px; align-items: flex-start; padding: 14px 16px 14px 0; border-radius: 20px; transition: background .4s; }
.tv-site .tv-tl__item:hover { background: linear-gradient(90deg, rgba(243,248,255,.9), rgba(243,248,255,0)); }
.tv-tl__badge {
	position: relative; z-index: 1; flex: 0 0 56px; width: 56px; height: 56px; border-radius: 18px; display: grid; place-items: center;
	background: #fff; border: 1px solid var(--tv-line-strong); color: var(--tv-500); font-size: 1.2rem; box-shadow: var(--tv-shadow-sm);
	transition: background .5s, color .5s, box-shadow .5s, transform .5s var(--tv-ease), border-color .5s;
}
.tv-tl__badge b { font-family: var(--tv-mono); font-size: .92rem; font-weight: 500; }
.tv-tl__badge i { font-size: 1.2rem !important; color: inherit !important; }
.tv-tl__item.is-lit .tv-tl__badge { background: var(--tv-grad); color: #fff; border-color: transparent; box-shadow: var(--tv-glow); transform: rotate(-4deg); }
.tv-site .tv-tl__item .ms-4 { margin-left: 0 !important; padding-top: 3px; }
.tv-site .tv-tl__item h5, .tv-site .tv-tl__item h4 { font-size: 1.12rem !important; font-weight: 800 !important; color: var(--tv-ink) !important; margin-bottom: .3rem; }
.tv-site .tv-tl__item p { font-size: .98rem !important; font-weight: 400 !important; line-height: 1.65; color: var(--tv-text) !important; }

/* framed images */
.tv-site .tv-framecol { position: relative; isolation: isolate; }
.tv-site .tv-framecol::before { content: ""; position: absolute; inset: 14% 6% 2% 12%; z-index: -1; border-radius: 40%; background: var(--tv-grad); filter: blur(60px); opacity: .3; }
.tv-framecol__dots { position: absolute; right: -8px; top: -12px; z-index: -1; width: 130px; height: 130px; background-image: radial-gradient(var(--tv-300) 1.6px, transparent 1.8px); background-size: 14px 14px; opacity: .9; }
.tv-framecol.ps-lg-0 .tv-framecol__dots, .tv-framecol:first-child .tv-framecol__dots { right: auto; left: -8px; }
.tv-site .tv-frame { border-radius: 28px !important; outline: 6px solid rgba(255,255,255,.75); outline-offset: -6px; }
.tv-site .tv-frame::after { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; background: linear-gradient(160deg, rgba(255,255,255,.25), transparent 40%, rgba(12,42,99,.18)); }
@supports (animation-timeline: view()) {
	.tv-site .tv-frame img { scale: 1.14; animation: tv-frame-par linear both; animation-timeline: view(); }
	@keyframes tv-frame-par { from { translate: 0 -5%; } to { translate: 0 5%; } }
}
.tv-framecol__badge {
	position: absolute; left: -6px; bottom: 44px; z-index: 4; display: flex; align-items: center; gap: 12px; max-width: 280px;
	padding: 12px 18px 12px 12px; border-radius: 18px; background: rgba(255,255,255,.88); border: 1px solid #fff;
	box-shadow: var(--tv-shadow-lg); backdrop-filter: blur(14px); animation: tv-float 6s ease-in-out infinite;
}
.tv-framecol__badge--alt { left: auto; right: -6px; top: 48px; bottom: auto; animation-delay: -3s; }
.tv-framecol__badge > span { flex-shrink: 0; width: 42px; height: 42px; border-radius: 13px; display: grid; place-items: center; background: var(--tv-grad); color: #fff; box-shadow: var(--tv-glow); }
.tv-framecol__badge--alt > span { background: #e9fbf1; color: #16a34a; box-shadow: none; }
.tv-framecol__badge b { display: block; font-size: .9rem; color: var(--tv-ink); line-height: 1.25; }
.tv-framecol__badge small { font-size: .74rem; color: var(--tv-muted); }
@media (max-width: 991.98px) {
	.tv-framecol__badge { left: 12px; bottom: 16px; }
	.tv-framecol__badge--alt { left: auto; right: 12px; top: 16px; bottom: auto; }
	.tv-framecol__dots { display: none; }
}

/* icon cards */
.tv-icard {
	position: relative; isolation: isolate; overflow: hidden; height: 100%; padding: 24px; border-radius: 22px;
	background: #fff; border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow-sm);
	transition: transform .45s var(--tv-ease), box-shadow .45s, border-color .45s;
}
.tv-icard::before { content: ""; position: absolute; inset: 0; z-index: -1; background: radial-gradient(260px circle at var(--mx, 50%) var(--my, 0%), rgba(47,123,245,.13), transparent 70%); opacity: 0; transition: opacity .3s; }
.tv-icard:hover { transform: translateY(-5px); box-shadow: var(--tv-shadow-lg); border-color: var(--tv-line-strong); }
.tv-icard:hover::before { opacity: 1; }
.tv-site .tv-icard i.fa-3x { transition: background .4s, color .4s, transform .5s var(--tv-ease); }
.tv-site .tv-icard:hover i.fa-3x { background: var(--tv-grad); color: #fff !important; border-color: transparent; transform: rotate(-6deg) scale(1.05); }
.tv-site .tv-icard h5 { font-weight: 800; color: var(--tv-ink); }

/* module cards with spotlight */
.tv-site .tv-mcard { border-radius: 24px; padding: 34px 26px 28px; isolation: isolate; transition: transform .45s var(--tv-ease), box-shadow .45s, border-color .45s; }
.tv-site .tv-mcard::before { display: none; }
.tv-site .tv-mcard::after { content: ""; position: absolute; inset: 0; z-index: 0; border-radius: inherit; pointer-events: none; background: radial-gradient(300px circle at var(--mx, 50%) var(--my, 0%), rgba(47,123,245,.14), transparent 70%); opacity: 0; transition: opacity .3s; }
.tv-site .tv-mcard:hover { transform: translateY(-6px); box-shadow: var(--tv-shadow-lg); border-color: var(--tv-line-strong); }
.tv-site .tv-mcard:hover::after { opacity: 1; }
.tv-site .tv-mcard:hover h5, .tv-site .tv-mcard:hover h6, .tv-site .tv-mcard:hover p { color: inherit !important; }
.tv-site .tv-mcard .icon-box-primary { width: 60px; height: 60px; padding: 0; display: grid; place-items: center; border-radius: 18px; background: var(--tv-50); border: 1px solid var(--tv-line); transition: background .4s, transform .5s var(--tv-ease); }
.tv-site .tv-mcard .icon-box-primary::before { display: none; }
.tv-site .tv-mcard .icon-box-primary i { font-size: 1.5rem; line-height: 1; }
.tv-site .tv-mcard:hover .icon-box-primary { background: var(--tv-grad); border-color: transparent; transform: rotate(-6deg); box-shadow: var(--tv-glow); }
.tv-site .tv-mcard:hover .icons-color { color: #fff !important; }
.tv-site .tv-mcard h5 { font-size: 1.2rem !important; font-weight: 800 !important; color: var(--tv-ink); }
.tv-site .tv-mcard p { font-size: .93rem; line-height: 1.65; color: var(--tv-text); }
.tv-site .tv-mcard .btn { padding: .55rem 1.1rem; border: 1px solid var(--tv-line); }
.tv-site .tv-mcard:hover .btn { background: var(--tv-grad) !important; color: #fff !important; border-color: transparent; }
.tv-mcard__n { position: absolute !important; right: 22px; top: 20px; font-family: var(--tv-mono); font-size: .8rem; color: var(--tv-300); }

/* "other modules" chips */
.tv-site .tv-chipgrid { justify-content: center; }
.tv-site .tv-chipgrid .module-item { transition: transform .35s var(--tv-ease), box-shadow .35s; }
.tv-site .tv-chipgrid .other-module:hover .module-item { transform: translateY(-4px); }

/* ---------- Connected-by-design section ---------- */
.tv-eco { position: relative; overflow: hidden; background: radial-gradient(800px 400px at 85% 50%, rgba(198,220,255,.45), transparent 70%), linear-gradient(180deg, #fff, #f6f9ff); }
.tv-eco__grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: clamp(32px, 5vw, 72px); align-items: center; }
.tv-eco h2 { font-size: clamp(1.8rem, 3.2vw, 2.7rem); line-height: 1.1; letter-spacing: -.035em; margin: .2rem 0 1rem; }
.tv-eco__lead { font-size: 1.05rem; color: var(--tv-text); max-width: 520px; }
.tv-journey { list-style: none; padding: 0; margin: 1.8rem 0 2rem; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; counter-reset: j; }
.tv-journey li { position: relative; display: flex; gap: 12px; align-items: flex-start; padding: 14px; border-radius: 18px; background: #fff; border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow-sm); transition: transform .4s var(--tv-ease), box-shadow .4s; }
.tv-journey li:hover { transform: translateY(-3px); box-shadow: var(--tv-shadow); }
.tv-journey li::after { counter-increment: j; content: "0" counter(j); position: absolute; right: 14px; top: 12px; font-family: var(--tv-mono); font-size: .72rem; color: var(--tv-300); }
.tv-journey__dot { flex-shrink: 0; width: 38px; height: 38px; border-radius: 12px; display: grid; place-items: center; background: var(--tv-50); color: var(--tv-600); }
.tv-journey li:hover .tv-journey__dot { background: var(--tv-grad); color: #fff; }
.tv-journey strong { display: block; font-size: .95rem; color: var(--tv-ink); }
.tv-journey span:not(.tv-journey__dot) { display: block; font-size: .84rem; line-height: 1.5; color: var(--tv-muted); }
.tv-eco__actions { display: flex; flex-wrap: wrap; gap: 12px; }

.tv-eco__art { position: relative; display: grid; place-items: center; perspective: 1200px; min-height: 460px; }
.tv-eco__rig { position: relative; width: min(460px, 100%); aspect-ratio: 1; transform-style: preserve-3d; transform: rotateX(var(--erx, 0deg)) rotateY(var(--ery, 0deg)); transition: transform .3s ease-out; }
.tv-eco__orbit { position: absolute; inset: 9%; border-radius: 50%; border: 1.5px dashed rgba(47,123,245,.25); animation: tv-spin2d 60s linear infinite; }
.tv-eco__orbit--b { inset: 24%; border-style: solid; border-color: rgba(47,123,245,.12); animation-direction: reverse; animation-duration: 40s; }
@keyframes tv-spin2d { to { transform: rotate(360deg); } }
.tv-eco__lines { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.tv-eco__lines line { stroke: rgba(47,123,245,.35); stroke-width: 1.5; stroke-dasharray: 4 7; animation: tv-dash-flow 1.2s linear infinite; }
.tv-eco__pulse { position: absolute; left: 50%; top: 50%; width: 8px; height: 8px; margin: -4px 0 0 -4px; border-radius: 50%; background: var(--tv-500); box-shadow: 0 0 0 4px rgba(47,123,245,.18), 0 0 16px var(--tv-cyan); animation: tv-eco-pulse 2.6s cubic-bezier(.6,0,.4,1) infinite; animation-delay: calc(var(--k) * .43s); }
@keyframes tv-eco-pulse { 0% { left: 50%; top: 50%; opacity: 0; } 15% { opacity: 1; } 85% { opacity: 1; } 100% { left: var(--x); top: var(--y); opacity: 0; } }
.tv-eco__core {
	position: absolute; left: 50%; top: 50%; width: 168px; padding: 20px 14px 16px; transform: translate(-50%, -50%) translateZ(60px);
	display: flex; flex-direction: column; align-items: center; text-align: center; gap: 6px; border-radius: 28px;
	background: var(--tv-grad-deep); color: #fff; box-shadow: 0 0 0 12px rgba(47,123,245,.08), 0 0 0 26px rgba(47,123,245,.05), 0 30px 60px -18px rgba(12,42,99,.6);
}
.tv-eco__core-icon { width: 58px; height: 58px; border-radius: 18px; display: grid; place-items: center; background: rgba(255,255,255,.14); border: 1px solid rgba(255,255,255,.3); font-size: 1.5rem; }
.tv-eco__core strong { font-size: 1rem; line-height: 1.2; }
.tv-eco__core small { display: inline-flex; align-items: center; gap: 6px; font-size: .7rem; color: rgba(255,255,255,.75); }
.tv-eco__live { width: 7px; height: 7px; border-radius: 50%; background: #4ade80; animation: tv-live 1.8s infinite; }
.tv-eco__node {
	position: absolute; z-index: 2; transform: translate(-50%, -50%) translateZ(30px); display: inline-flex; align-items: center; gap: 8px;
	padding: 8px 14px 8px 8px; border-radius: 16px; background: rgba(255,255,255,.92); border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow);
	font-size: .82rem; font-weight: 700; color: var(--tv-ink) !important; white-space: nowrap; backdrop-filter: blur(8px);
	transition: box-shadow .3s, border-color .3s, color .3s;
	animation: tv-node-bob 6s ease-in-out infinite; animation-delay: calc(var(--k) * -1s);
}
.tv-eco__node i { width: 32px; height: 32px; border-radius: 10px; display: grid; place-items: center; background: var(--tv-50); color: var(--tv-600); font-size: .9rem; transition: background .3s, color .3s; }
.tv-eco__node:hover { border-color: var(--tv-500); box-shadow: var(--tv-glow); color: var(--tv-600) !important; }
.tv-eco__node:hover i { background: var(--tv-grad); color: #fff; }
@keyframes tv-node-bob { 0%, 100% { margin-top: 0; } 50% { margin-top: -10px; } }
@media (max-width: 991.98px) {
	.tv-eco__grid { grid-template-columns: 1fr; }
	.tv-eco__art { min-height: 0; }
}
@media (max-width: 575.98px) {
	.tv-journey { grid-template-columns: 1fr; }
	.tv-eco__node span { display: none; }
	.tv-eco__node { padding: 6px; }
	.tv-eco__core { width: 132px; padding: 14px 10px 12px; }
}

/* ---------- Search palette ---------- */
.tv-kbar-btn {
	display: inline-flex; align-items: center; gap: .55rem; height: 42px; padding: 0 .55rem 0 .9rem; border-radius: 999px;
	border: 1px solid var(--tv-line); background: rgba(255,255,255,.8); color: var(--tv-muted); font-family: var(--tv-font); font-size: .88rem; font-weight: 600;
	cursor: pointer; transition: border-color .25s, color .25s, box-shadow .25s;
}
.tv-kbar-btn:hover { border-color: var(--tv-line-strong); color: var(--tv-700); box-shadow: var(--tv-shadow-sm); }
.tv-kbar-btn i { color: var(--tv-500); }
.tv-kbar-btn kbd, .tv-kbar kbd { font-family: var(--tv-mono); font-size: .68rem; padding: 3px 7px; border-radius: 7px; background: var(--tv-50); color: var(--tv-600); border: 1px solid var(--tv-line); box-shadow: none; }
.tv-kbar-btn--icon { display: none; width: 46px; height: 46px; padding: 0; justify-content: center; margin-left: auto; border-radius: 14px; background: #fff; box-shadow: var(--tv-shadow-sm); }
@media (max-width: 1399.98px) { .tv-nav .tv-kbar-btn span { display: none; } }
@media (max-width: 1199.98px) {
	.tv-nav .tv-kbar-btn { display: none; }
	.tv-kbar-btn--icon { display: inline-flex; }
	.tv-burger { margin-left: auto !important; }
}

.tv-kbar { position: fixed; inset: 0; z-index: 3000; display: flex; justify-content: center; align-items: flex-start; padding: min(14vh, 120px) 16px 16px; background: rgba(7,26,63,.28); backdrop-filter: blur(6px); opacity: 0; transition: opacity .18s; }
.tv-kbar.is-open { opacity: 1; }
.tv-kbar[hidden] { display: none; }
.tv-kbar__panel {
	width: min(640px, 100%); max-height: min(70vh, 620px); display: flex; flex-direction: column; overflow: hidden;
	border-radius: 24px; background: rgba(255,255,255,.96); border: 1px solid #fff; box-shadow: 0 40px 100px -20px rgba(7,26,63,.5), 0 0 0 1px var(--tv-line);
	transform: translateY(-10px) scale(.98); transition: transform .25s var(--tv-ease);
}
.tv-kbar.is-open .tv-kbar__panel { transform: none; }
.tv-kbar__search { display: flex; align-items: center; gap: 12px; padding: 16px 18px; border-bottom: 1px solid var(--tv-line); }
.tv-kbar__search > i { color: var(--tv-500); font-size: 1.05rem; }
.tv-kbar__search input { flex: 1; min-width: 0; border: 0; outline: 0; background: none; font-family: var(--tv-font); font-size: 1.08rem; font-weight: 500; color: var(--tv-ink); }
.tv-kbar__search input::placeholder { color: #9aa8c3; }
.tv-kbar__esc { font-family: var(--tv-mono); font-size: .7rem; padding: 4px 8px; border-radius: 8px; border: 1px solid var(--tv-line); background: var(--tv-50); color: var(--tv-600); cursor: pointer; }
.tv-kbar__list { flex: 1; overflow-y: auto; padding: 8px; overscroll-behavior: contain; }
.tv-kbar__group { padding: 12px 12px 6px; font-family: var(--tv-mono); font-size: .68rem; letter-spacing: .14em; text-transform: uppercase; color: var(--tv-muted); }
.tv-kbar__item { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: 14px; color: var(--tv-ink) !important; text-decoration: none; }
.tv-kbar__item.is-active { background: var(--tv-50); box-shadow: inset 0 0 0 1px var(--tv-line); }
.tv-kbar__icon { flex-shrink: 0; width: 38px; height: 38px; border-radius: 12px; display: grid; place-items: center; background: #fff; border: 1px solid var(--tv-line); color: var(--tv-600); transition: background .2s, color .2s; }
.tv-kbar__item.is-active .tv-kbar__icon { background: var(--tv-grad); color: #fff; border-color: transparent; }
.tv-kbar__text { flex: 1; min-width: 0; }
.tv-kbar__text b { display: block; font-size: .93rem; font-weight: 700; }
.tv-kbar__text small { display: block; font-size: .78rem; color: var(--tv-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tv-kbar__go { color: var(--tv-300); opacity: 0; transition: opacity .2s; }
.tv-kbar__item.is-active .tv-kbar__go { opacity: 1; }
.tv-kbar__empty { padding: 40px 20px; text-align: center; color: var(--tv-muted); }
.tv-kbar__empty i { font-size: 1.8rem; color: var(--tv-300); margin-bottom: .6rem; }
.tv-kbar__foot { display: flex; flex-wrap: wrap; gap: 14px; align-items: center; padding: 10px 18px; border-top: 1px solid var(--tv-line); background: rgba(243,248,255,.7); font-size: .74rem; color: var(--tv-muted); }
.tv-kbar__foot kbd { margin-right: 3px; }
.tv-kbar__brand { margin-left: auto; font-weight: 700; color: var(--tv-600); }
.tv-kbar-open { overflow: hidden; }
@media (max-width: 575.98px) { .tv-kbar { padding-top: 12px; } .tv-kbar__foot span:not(.tv-kbar__brand) { display: none; } }

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
	.tv-stage__copy, .tv-stage__rig, .tv-stage__word { transform: none !important; opacity: 1 !important; }
	.tv-sc, .tv-sc *, .tv-stage__beams i, .tv-eco__pulse, .tv-eco__node, .tv-eco__orbit, .tv-framecol__badge, .tv-tog, .tv-tog::after { animation: none !important; }
	.tv-sc--toast { opacity: 1; }
	.tv-sc__line { stroke-dashoffset: 0; }
	.tv-sc--ring .tv-sc__arc { stroke-dashoffset: 0; }
	.tv-tog { background: var(--tv-500); } .tv-tog::after { transform: translateX(14px); }
	.tv-eco__pulse, .tv-stage__beams { display: none; }
}

/* ---------- Frappe list pages: the header already names the page ---------- */
html:has(.tv-site--frappe) main > .page_content > .row.py-8 { padding-top: 0 !important; padding-bottom: 0 !important; }
html:has(.tv-site--frappe) main > .page_content > .row.py-8 > .col-md-8 > .hero { display: none; }

/* ---------- ERP blueprint builder ---------- */
.tv-bp { position: relative; overflow: hidden; background: linear-gradient(180deg, #fff 0%, #f3f8ff 45%, #fff 100%); }
.tv-bp__grid { display: grid; grid-template-columns: minmax(0, .92fr) minmax(0, 1.08fr); gap: clamp(28px, 4vw, 56px); align-items: start; }
.tv-bp__panel { display: grid; gap: 18px; }
.tv-bp__step { position: relative; padding: 20px 20px 20px 66px; border-radius: 22px; background: #fff; border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow-sm); }
.tv-bp__n { position: absolute; left: 18px; top: 20px; width: 34px; height: 34px; border-radius: 11px; display: grid; place-items: center; background: var(--tv-grad); color: #fff; font-family: var(--tv-mono); font-size: .78rem; box-shadow: var(--tv-glow); }
.tv-bp__step h3 { display: flex; align-items: center; gap: 8px; margin: 6px 0 12px; font-size: 1.05rem; font-weight: 800; color: var(--tv-ink); }
.tv-bp__step h3 small { font-family: var(--tv-mono); font-size: .7rem; padding: 2px 8px; border-radius: 999px; background: var(--tv-50); color: var(--tv-600); }
.tv-bp__chips, .tv-bp__mods { display: flex; flex-wrap: wrap; gap: 8px; }
.tv-bp__chip, .tv-bp__mod {
	display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 999px; border: 1px solid var(--tv-line); background: #fff;
	color: var(--tv-text); font-family: var(--tv-font); font-size: .86rem; font-weight: 600; cursor: pointer; transition: all .25s var(--tv-ease);
}
.tv-bp__chip i, .tv-bp__mod i { color: var(--tv-500); font-size: .9rem; }
.tv-bp__chip:hover, .tv-bp__mod:hover { border-color: var(--tv-500); color: var(--tv-700); transform: translateY(-1px); }
.tv-bp__chip[aria-pressed="true"], .tv-bp__mod[aria-pressed="true"] { background: var(--tv-grad); color: #fff; border-color: transparent; box-shadow: var(--tv-glow); }
.tv-bp__chip[aria-pressed="true"] i, .tv-bp__mod[aria-pressed="true"] i { color: #fff; }
.tv-bp__mod { padding: 6px 12px 6px 6px; border-radius: 14px; }
.tv-bp__mod i { width: 28px; height: 28px; border-radius: 9px; display: grid; place-items: center; background: var(--tv-50); font-size: .85rem; transition: background .25s; }
.tv-bp__mod[aria-pressed="true"] i { background: rgba(255,255,255,.18); }

.tv-bp__stage { position: sticky; min-width: 0; top: calc(var(--tv-header-h) + 16px); display: grid; gap: 16px; }
.tv-bp__board { position: relative; min-width: 0; height: 440px; perspective: 1500px; display: grid; place-items: center; overflow: visible; }
.tv-bp__board::before { content: ""; position: absolute; inset: 10% 5%; border-radius: 50%; background: radial-gradient(closest-side, rgba(198,220,255,.6), transparent); filter: blur(10px); }
.tv-bp__fit { scale: var(--s, 1); transform-style: preserve-3d; }
.tv-bp__scene { position: relative; width: 520px; height: 416px; transform-style: preserve-3d; transform: rotateX(calc(52deg + var(--by, 0deg))) rotateZ(calc(-32deg + var(--bx, 0deg))); transition: transform .5s ease-out; }
.tv-bp__scene::before {
	content: ""; position: absolute; inset: -44px; border-radius: 44px; transform: translateZ(-4px);
	background-color: rgba(255,255,255,.85);
	background-image: linear-gradient(rgba(21,79,186,.09) 1px, transparent 1px), linear-gradient(90deg, rgba(21,79,186,.09) 1px, transparent 1px);
	background-size: 26px 26px; border: 1px solid #fff; box-shadow: 0 50px 90px -30px rgba(12,42,99,.4), inset 0 0 0 1px rgba(21,79,186,.08);
}
.tv-bp__links { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.tv-bp__links line { stroke: var(--tv-500); stroke-width: 2; stroke-dasharray: 5 7; opacity: 0; transition: opacity .4s; animation: tv-dash-flow 1.2s linear infinite; }
.tv-bp__links line.is-on { opacity: .55; }
.tv-bp__tile { position: absolute; left: calc(var(--c) * 104px); top: calc(var(--r) * 104px); width: 92px; height: 92px; padding: 0; border: 0; background: none; transform-style: preserve-3d; cursor: pointer; }
.tv-bp__tile::before { content: ""; position: absolute; inset: 6px; border-radius: 16px; background: rgba(21,79,186,.05); border: 1px dashed rgba(21,79,186,.28); transition: background .3s, opacity .3s; }
.tv-bp__tile:not(.is-on):hover::before { background: rgba(21,79,186,.16); }
.tv-bp__tile::after { content: ""; position: absolute; inset: 0; border-radius: 20px; background: linear-gradient(145deg, var(--tv-300), var(--tv-600)); opacity: 0; transform: translateZ(2px); transition: opacity .35s; }
.tv-bp__face {
	position: absolute; inset: 0; border-radius: 20px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
	background: #fff; border: 1px solid var(--tv-line); color: var(--tv-600); font-size: 1.3rem; opacity: 0;
	transform: translateZ(0) scale(.6); transition: transform .55s var(--tv-ease), opacity .4s, box-shadow .4s;
}
.tv-bp__face span { font-size: .62rem; font-weight: 800; color: var(--tv-ink); text-align: center; line-height: 1.1; max-width: 84px; letter-spacing: -.01em; }
.tv-bp__face img { width: 36px; }
.tv-bp__tile.is-on::before { opacity: 0; }
.tv-bp__tile.is-on::after { opacity: .9; }
.tv-bp__tile.is-on .tv-bp__face { opacity: 1; transform: translateZ(28px) scale(1); box-shadow: 0 30px 40px -18px rgba(12,42,99,.5), inset 0 0 0 1px rgba(255,255,255,.9); }
.tv-bp__tile--core .tv-bp__face { background: var(--tv-grad-deep); color: #fff; border-color: transparent; }
.tv-bp__tile--core .tv-bp__face span { color: #fff; }
.tv-bp__tile--core.is-on .tv-bp__face { transform: translateZ(44px); }
.tv-bp__tile.is-ping .tv-bp__face::after { content: ""; position: absolute; inset: -4px; border-radius: 24px; border: 2px solid var(--tv-cyan); animation: tv-bp-ping .9s ease-out forwards; }
@keyframes tv-bp-ping { to { transform: scale(1.7); opacity: 0; } }
.tv-bp__addons { position: absolute; left: 50%; top: 50%; z-index: 3; width: 0; height: 0; pointer-events: none; animation: tv-spin2d 36s linear infinite; }
.tv-bp__orb {
	position: absolute; left: -23px; top: -23px; width: 46px; height: 46px; border-radius: 15px; display: grid; place-items: center;
	background: #fff; border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow); color: var(--tv-600); font-size: 1.05rem;
	--a: calc(360deg / var(--n, 1) * var(--i, 0));
	transform: rotate(var(--a)) translateX(var(--R, 300px)) rotate(calc(-1 * var(--a)));
	animation: tv-sc-in .6s var(--tv-ease) both;
}
.tv-bp__orb i { animation: tv-spin2d 36s linear infinite reverse; }

.tv-bp__sum { min-width: 0; padding: 20px 22px; border-radius: 24px; background: rgba(255,255,255,.92); border: 1px solid #fff; box-shadow: var(--tv-shadow-lg); backdrop-filter: blur(12px); }
.tv-bp__sum-head { display: flex; gap: 12px; align-items: center; margin-bottom: 14px; }
.tv-bp__sum-ico { flex-shrink: 0; width: 44px; height: 44px; border-radius: 14px; display: grid; place-items: center; background: var(--tv-grad); color: #fff; box-shadow: var(--tv-glow); }
.tv-bp__sum-head b { display: block; font-size: 1.02rem; color: var(--tv-ink); line-height: 1.2; }
.tv-bp__sum-head small { color: var(--tv-muted); font-size: .8rem; }
.tv-bp__facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin: 0 0 14px; }
.tv-bp__facts div { padding: 10px 12px; border-radius: 14px; background: var(--tv-50); }
.tv-bp__facts dt { margin-bottom: 2px; font-family: var(--tv-mono); font-size: .64rem; font-weight: 500; letter-spacing: .1em; text-transform: uppercase; color: var(--tv-muted); }
.tv-bp__facts dd { margin: 0; font-size: 1.25rem; font-weight: 800; color: var(--tv-ink); letter-spacing: -.02em; }
.is-bump { animation: tv-bump .45s var(--tv-ease); }
@keyframes tv-bump { 30% { transform: scale(1.2); color: var(--tv-600); } }
.tv-bp__list { display: flex; flex-wrap: wrap; gap: 6px; min-height: 30px; margin-bottom: 14px; }
.tv-bp__item { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px 4px 7px; border-radius: 999px; border: 1px solid var(--tv-line); background: #fff; font-family: var(--tv-font); font-size: .76rem; font-weight: 600; color: var(--tv-ink); cursor: pointer; transition: border-color .2s; }
.tv-bp__item > i:first-child { color: var(--tv-500); }
.tv-bp__item .fa-xmark { color: var(--tv-muted); font-size: .7rem; }
.tv-bp__item:hover { border-color: #f87171; }
.tv-bp__item:hover .fa-xmark { color: #ef4444; }
.tv-bp__actions { display: flex; flex-wrap: wrap; gap: 10px; }
.tv-bp__note { margin: 10px 0 0; font-size: .74rem; color: var(--tv-muted); }
.tv-prefill-hint { display: flex; gap: 8px; align-items: flex-start; margin: 0 0 8px; padding: 10px 12px; border-radius: 12px; background: var(--tv-50); border: 1px solid var(--tv-line); font-size: .84rem; color: var(--tv-700); }
.tv-prefill-hint i { margin-top: 2px; color: var(--tv-500); }
textarea.is-prefilled { box-shadow: 0 0 0 3px rgba(47,123,245,.18); }
@media (max-width: 1199.98px) { .tv-bp__board { height: 380px; } }
@media (max-width: 991.98px) {
	.tv-bp__grid { grid-template-columns: minmax(0, 1fr); }
	.tv-bp__stage { position: static; }
	.tv-bp__board { height: 360px; }
}
@media (max-width: 575.98px) {
	.tv-bp__board { height: 280px; }
	.tv-bp__facts { grid-template-columns: 1fr 1fr; }
	.tv-bp__step { padding: 60px 16px 16px; }
	.tv-bp__n { top: 16px; left: 16px; }
	.tv-bp__actions .tv-btn { flex: 1 1 auto; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) {
	.tv-bp__addons, .tv-bp__orb i, .tv-bp__links line { animation: none !important; }
	.tv-bp__scene { transition: none; }
}

/* deep links to #blueprint land below the fixed header */
.tv-bp { scroll-margin-top: calc(var(--tv-header-h) + 16px); }
.tv-cta-band__link { display: inline-flex; align-items: center; gap: .45rem; margin-top: 16px; padding-bottom: 2px; border-bottom: 1px solid rgba(255,255,255,.4); color: #fff !important; font-size: .92rem; font-weight: 700; }
.tv-cta-band__link i { font-size: .8rem; transition: transform .25s var(--tv-ease); }
.tv-cta-band__link:hover { border-color: #fff; }
.tv-cta-band__link:hover i { transform: translateX(4px); }

/* ---------- Compact vertical rhythm ---------- */
.tv-section { padding: clamp(44px, 6vw, 80px) 0; }
.tv-section__head { margin-bottom: clamp(22px, 3.5vw, 40px); }
.tv-hero3 { padding-bottom: 120px; min-height: min(calc(100svh - var(--tv-header-h)), 820px); }

/* inner page header */
.tv-site .page-header { padding: clamp(28px, 4vw, 56px) 0 clamp(44px, 5vw, 72px) !important; }
.tv-stage__scene { height: clamp(330px, 30vw, 420px); }
.tv-site .tv-stage--compact { padding: 32px 0 48px !important; }
.tv-site #naverp { margin-bottom: 8px !important; }

/* legacy pages: the outer and inner wrappers both carried py-5 (96px top + 96px bottom per block) */
.tv-site .page_content > .container-fluid.py-5, .tv-site .page_content > .container-xxl.py-5 { padding-top: clamp(28px, 4vw, 48px) !important; padding-bottom: clamp(28px, 4vw, 48px) !important; }
.tv-site .page_content > .container-fluid.py-5 > .container.py-5, .tv-site .page_content > .container-xxl.py-5 > .container.py-5,
.tv-site .page_content > .container-fluid.py-5 > .container.pt-5, .tv-site .page_content > .container-xxl.py-5 > .container.pt-5 { padding-top: 0 !important; padding-bottom: 0 !important; }
.tv-site .page_content .feature-a-text > h1.mb-5, .tv-site .page_content .about-text-a > h1.mb-5 { margin-bottom: 1.25rem !important; }
.tv-site .page_content .about-text-a > .row.g-4.mb-5 { margin-bottom: 0 !important; }
.tv-site .page_content .text-center.mx-auto.mb-5 { margin-bottom: 1.75rem !important; }
.tv-site .page_content .text-center > p.mb-5 { margin-bottom: 1.25rem !important; }
.tv-site .feature-a-text, .tv-site .about-text-a { padding-top: 0 !important; padding-bottom: 0 !important; }

/* homepage pieces */
.tv-ring { height: 400px; }
.tv-ring__stage { transform: rotateX(-10deg) translateY(-60px); }
.tv-ring__tabs { margin: -6px 0 14px; }
.tv-ring__hint { margin-top: 6px; }
.tv-bp__board { height: 400px; }
.tv-eco__art { min-height: 0; }

/* footer */
.tv-cta-band { padding-top: 24px; }
.tv-footer { padding-top: 130px; }
.tv-wordmark span { font-size: clamp(3.5rem, 12vw, 10.5rem) !important; }
@media (max-width: 991.98px) {
	.tv-ring { height: 360px; }
	.tv-stage__scene { height: 300px; }
}

/* ---------- Fit the first-screen blocks to the viewport height ---------- */
:root { --vfit: 1; }
@media (min-width: 992px) {
	.tv-hero3 { padding-top: calc(clamp(24px, 4vw, 60px) * var(--vfit)); padding-bottom: calc(120px * var(--vfit)); }
	.tv-hero3 h1 { font-size: calc(clamp(2.3rem, 4.4vw, 3.9rem) * var(--vfit)) !important; margin: calc(1.1rem * var(--vfit)) 0 calc(1rem * var(--vfit)); }
	.tv-hero3__lead { font-size: calc(clamp(1.02rem, 1.3vw, 1.18rem) * max(var(--vfit), .9)); }
	.tv-hero3__badges { margin: calc(1.3rem * var(--vfit)) 0 calc(1.6rem * var(--vfit)); }
	.tv-hero3__stage { height: calc(clamp(420px, 44vw, 600px) * var(--vfit) * 1.1); }
	.tv-stats { margin-top: calc(-70px * var(--vfit)); }
	.tv-site .page-header h1 { font-size: calc(clamp(2.3rem, 5vw, 4.3rem) * var(--vfit)) !important; }
	.tv-stage__scene { height: calc(clamp(330px, 30vw, 420px) * var(--vfit)); }
	.tv-panel { min-height: calc(360px * var(--vfit)); }
}

/* ---------- Form hero (contact / careers): copy left, form right, one screen ---------- */
.tv-site .tv-formhero { position: relative; isolation: isolate; overflow: hidden; display: flex; align-items: center; min-height: calc(100svh - var(--tv-header-h)); padding: calc(28px * var(--vfit, 1)) 0 calc(40px * var(--vfit, 1)); background: linear-gradient(180deg, #f3f8ff 0%, #f8fbff 55%, #fff 100%); }
.tv-formhero__grid { position: relative; z-index: 1; width: 100%; display: grid; grid-template-columns: minmax(0, .92fr) minmax(0, 1.08fr); gap: clamp(28px, 4vw, 64px); align-items: center; }
.tv-formhero__copy { max-width: 560px; }
.tv-site .tv-formhero h1 { font-size: calc(clamp(2rem, 3.6vw, 3.2rem) * var(--vfit, 1)); line-height: 1.04; letter-spacing: -.04em; font-weight: 800; color: var(--tv-ink); margin: 0 0 .8rem; }
.tv-site .tv-formhero .tv-ph__lead { margin: 0 0 1.2rem; font-size: calc(1.05rem * max(var(--vfit, 1), .9)); line-height: 1.6; color: var(--tv-text) !important; max-width: none; }
.tv-formhero .tv-contact-list { grid-template-columns: 1fr 1fr; gap: 10px; margin: 0 0 1.1rem; }
.tv-formhero .tv-contact-item { padding: 10px 12px; gap: 12px; border-radius: 16px; }
.tv-formhero .tv-contact-item.is-wide { grid-column: 1 / -1; }
.tv-formhero .tv-contact-item i { width: 40px; height: 40px; border-radius: 12px; font-size: .95rem; }
.tv-formhero .tv-contact-item strong { font-size: .88rem; line-height: 1.25; }
.tv-formhero .tv-contact-item span { font-size: .8rem; color: var(--tv-muted); line-height: 1.35; }
.tv-formhero .tv-stage__chips { margin-top: 0; }
.tv-formhero .tv-stage__chips li { font-size: .84rem; }
/* the form card: compact enough for a 730px-high laptop viewport, roomier on tall screens */
.tv-formhero .tv-form-card { padding: calc(26px * var(--vfit, 1)) calc(28px * var(--vfit, 1)) calc(22px * var(--vfit, 1)); }
.tv-formhero .tv-form-card[data-reveal] { transform: none; }
.tv-formhero .tv-form-card h2 { font-size: calc(1.4rem * max(var(--vfit, 1), .85)) !important; margin-bottom: .15rem; }
.tv-formhero .tv-form-card > p { font-size: .9rem; margin-bottom: calc(1rem * var(--vfit, 1)); }
.tv-formhero .tv-form { gap: calc(13px * var(--vfit, 1)) 16px; }
.tv-formhero .tv-field { gap: 4px; }
.tv-formhero .tv-field label { font-size: .8rem; }
.tv-formhero .tv-field input, .tv-formhero .tv-field select { padding-top: calc(10px * var(--vfit, 1)); padding-bottom: calc(10px * var(--vfit, 1)); }
.tv-formhero .tv-field textarea { min-height: calc(92px * var(--vfit, 1)); }
.tv-formhero .tv-captcha__reload { width: 40px; height: 40px; }
.tv-formhero .tv-form__submit { margin-top: 0; }
.tv-formhero .tv-alert { padding: 10px 12px; font-size: .86rem; }
@media (max-width: 991.98px) {
	.tv-site .tv-formhero { display: block; min-height: 0; padding: 24px 0 40px; }
	.tv-formhero__grid { grid-template-columns: 1fr; gap: 24px; }
	.tv-formhero__copy { max-width: none; }
}
@media (max-width: 575.98px) {
	.tv-formhero .tv-contact-list { grid-template-columns: 1fr; }
	.tv-formhero .tv-contact-item.is-wide { grid-column: auto; }
}

/* short laptop viewports: trim the form hero further so the whole form stays above the fold */
@media (min-width: 992px) and (max-height: 720px) {
	.tv-site .tv-formhero { padding-top: 14px; padding-bottom: 20px; }
	.tv-formhero .tv-form-card > p { display: none; }
	.tv-formhero .tv-form-card h2 { margin-bottom: .6rem; }
	.tv-formhero .tv-field textarea { min-height: 54px; }
	.tv-formhero .tv-stage__chips { display: none; }
	.tv-formhero .tv-contact-item { padding: 8px 10px; }
	.tv-formhero .tv-contact-item i { width: 34px; height: 34px; }
	.tv-site .tv-formhero .tv-ph__lead { margin-bottom: .9rem; }
}
@media (min-width: 992px) and (max-height: 640px) {
	.tv-formhero .tv-crumbs { display: none; }
	.tv-formhero .tv-form { row-gap: 8px; }
	.tv-formhero .tv-captcha__reload { width: 36px; height: 36px; }
	.tv-formhero .tv-form-card { padding-top: 14px; padding-bottom: 14px; }
	.tv-site .tv-formhero { padding-top: 8px; padding-bottom: 12px; }
}

/* the lifted 3D stage must not swallow clicks meant for the tabs above it */
.tv-ring__tabs { position: relative; z-index: 5; }
.tv-ring__stage { pointer-events: none; }
.tv-ring__stage .tv-ring__card { pointer-events: auto; }

/* ---------- Hero: layered 3D stage ---------- */
/* flat stacking on purpose: z-index keeps the scene, halo and floor behind the dashboard whatever its tilt; perspective still scales the parallax layers */
.tv-hero3__stage { transform-style: flat; }
.tv-hero3__stage #tvHero3d { opacity: .95; z-index: 0; }
.tv-hero3__halo { position: absolute; z-index: 0; isolation: isolate; left: 18%; top: 6%; width: 78%; aspect-ratio: 1; pointer-events: none; }
.tv-hero3__halo::before { content: ""; position: absolute; inset: 0; border-radius: 50%;
	background: conic-gradient(from 0deg, transparent 0 18%, rgba(47,123,245,.6) 36%, rgba(34,184,240,.8) 50%, rgba(47,123,245,.55) 64%, transparent 82% 100%);
	-webkit-mask: radial-gradient(closest-side, transparent 55%, #000 61%, #000 80%, transparent 86%); mask: radial-gradient(closest-side, transparent 55%, #000 61%, #000 80%, transparent 86%);
	filter: blur(12px); opacity: .95; animation: tv-spin2d 16s linear infinite; }
.tv-hero3__floor { position: absolute; z-index: 0; left: -30%; right: -30%; bottom: -8%; height: 60%; pointer-events: none;
	background-image: linear-gradient(rgba(47,123,245,.24) 1px, transparent 1px), linear-gradient(90deg, rgba(47,123,245,.24) 1px, transparent 1px); background-size: 56px 56px;
	transform: translateZ(-60px) perspective(600px) rotateX(66deg); transform-origin: 50% 100%;
	-webkit-mask-image: radial-gradient(ellipse at 50% 100%, #000 15%, transparent 70%); mask-image: radial-gradient(ellipse at 50% 100%, #000 15%, transparent 70%);
	animation: tv-hfloor 5s linear infinite; }
@keyframes tv-hfloor { to { background-position: 0 56px, 0 0; } }
.tv-hero3__shadow { position: absolute; z-index: 1; left: 14%; right: 4%; bottom: 3%; height: 64px; border-radius: 50%; pointer-events: none;
	background: radial-gradient(ellipse at center, rgba(12,42,99,.42), rgba(12,42,99,.14) 45%, transparent 72%); filter: blur(10px); transform: translateZ(-20px); }

/* the dashboard: glass base on a pseudo-element, so the cards above it keep real depth */
.tv-dash { background: none; border: 0; box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; transition: none; }
.tv-dash::before { content: ""; position: absolute; inset: 0; z-index: -1; border-radius: 20px; background: rgba(255,255,255,.84); border: 1px solid rgba(255,255,255,.95);
	box-shadow: 0 50px 100px -30px rgba(12,42,99,.45), 0 30px 60px -40px rgba(27,99,224,.6), inset 0 1px 0 #fff;
	backdrop-filter: blur(18px) saturate(1.4); -webkit-backdrop-filter: blur(18px) saturate(1.4); transform: translateZ(-1px); }
.tv-dash::after { content: ""; position: absolute; inset: 0; border-radius: 20px; pointer-events: none; transform: translateZ(1px);
	background: linear-gradient(105deg, transparent 38%, rgba(255,255,255,.6) 50%, transparent 62%); background-size: 260% 100%; background-position: 130% 0;
	animation: tv-hsheen 7s ease-in-out infinite 2.5s; }
@keyframes tv-hsheen { 0%, 60% { background-position: 130% 0; } 100% { background-position: -60% 0; } }
.tv-dash__body, .tv-dash__main, .tv-kpis, .tv-dash__charts { transform-style: preserve-3d; }
.tv-dash__bar { transform: translateZ(6px); }
.tv-dash__hello { transform: translateZ(18px); }
.tv-kpi { transform: translateZ(54px); box-shadow: 0 24px 38px -20px rgba(12,42,99,.5), inset 0 0 0 1px rgba(255,255,255,.9); }
.tv-kpi:nth-child(2) { transform: translateZ(72px); }
.tv-chart { transform: translateZ(40px); box-shadow: 0 22px 36px -20px rgba(12,42,99,.45); }
.tv-dash__charts .tv-chart:last-child { transform: translateZ(28px); }
.tv-rows { transform: translateZ(24px); box-shadow: 0 18px 30px -20px rgba(12,42,99,.4); }
.tv-dash__side span.on { transform: translateZ(10px); }

/* floating chips: the outer box is positioned by the parallax script, the inner bobs */
.tv-orbit-chip, .tv-orbit-chip--wa, .tv-orbit-chip--fp, .tv-orbit-chip--erp { background: none !important; box-shadow: none !important; border: 0 !important; animation: none !important; }
.tv-orbit-chip__in { width: 100%; height: 100%; border-radius: inherit; display: grid; place-items: center; background: var(--tv-grad); color: #fff; box-shadow: var(--tv-glow); animation: tv-float 6s ease-in-out infinite; }
.tv-orbit-chip--wa .tv-orbit-chip__in { background: linear-gradient(135deg, #1faa53, #25d366); box-shadow: 0 12px 30px -8px rgba(37,211,102,.6); }
.tv-orbit-chip--fp .tv-orbit-chip__in { animation-delay: -2s; }
.tv-orbit-chip--erp .tv-orbit-chip__in { background: #fff; color: var(--tv-600); border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow-lg); animation-delay: -4s; }

/* glass cubes */
.tv-hcube { position: absolute; z-index: 3; --s: 64px; width: var(--s); height: var(--s); perspective: 700px; pointer-events: none; }
.tv-hcube--a { --s: 76px; left: 2%; top: 0; }
.tv-hcube--b { --s: 54px; right: 3%; bottom: 8%; }
.tv-hcube--c { --s: 44px; right: 14%; top: -3%; }
.tv-hcube__box { position: relative; width: 100%; height: 100%; transform-style: preserve-3d; animation: tv-cube-rot 18s linear infinite; }
.tv-hcube--b .tv-hcube__box { animation-duration: 13s; animation-direction: reverse; }
.tv-hcube--c .tv-hcube__box { animation-duration: 22s; }
.tv-hcube__face { position: absolute; inset: 0; display: grid; place-items: center; border-radius: 22%; color: #fff; font-size: calc(var(--s) * .36);
	background: linear-gradient(145deg, rgba(47,123,245,.92), rgba(34,184,240,.72)); border: 1px solid rgba(255,255,255,.65);
	box-shadow: inset 0 0 calc(var(--s) * .4) rgba(255,255,255,.35), 0 10px 30px -10px rgba(27,99,224,.6); backface-visibility: hidden; }
.tv-hcube__face:nth-child(1) { transform: translateZ(calc(var(--s) / 2)); }
.tv-hcube__face:nth-child(2) { transform: rotateY(180deg) translateZ(calc(var(--s) / 2)); }
.tv-hcube__face:nth-child(3) { transform: rotateY(90deg) translateZ(calc(var(--s) / 2)); }
.tv-hcube__face:nth-child(4) { transform: rotateY(-90deg) translateZ(calc(var(--s) / 2)); }
.tv-hcube__face:nth-child(5) { transform: rotateX(90deg) translateZ(calc(var(--s) / 2)); }
.tv-hcube__face:nth-child(6) { transform: rotateX(-90deg) translateZ(calc(var(--s) / 2)); }
@media (max-width: 991.98px) { .tv-hcube--a { --s: 56px; } .tv-hero3__halo { left: 8%; width: 84%; } }
@media (max-width: 575.98px) { .tv-hcube, .tv-hero3__floor { display: none; } .tv-hero3__halo { top: 0; } }
@media (prefers-reduced-motion: reduce) { .tv-hero3__halo::before, .tv-hero3__floor, .tv-hcube__box, .tv-dash::after, .tv-orbit-chip__in { animation: none !important; } }

/* touch screens: no parallax depth; keep every floating layer inside the stage */
@media (hover: none) and (max-width: 991.98px) {
	.tv-hero3__stage [data-par] { transform: none !important; }
}
@media (max-width: 575.98px) {
	.tv-orbit-chip--wa { left: 2%; top: 4%; }
	.tv-orbit-chip--erp { right: 2%; }
	.tv-orbit-chip--fp { left: 2%; bottom: 22%; }
	.tv-toast-stack { right: 2%; bottom: 10%; width: 210px; }
	.tv-hero3__shadow { display: none; }
}

/* ---------- Hero: exploded ERP stack ---------- */
.tv-stk { position: absolute; z-index: 2; left: 50%; top: 50%; width: 600px; height: 470px; margin: -235px 0 0 -300px; transform-style: preserve-3d; translate: var(--ox, 0px) var(--oy, 0px); scale: var(--s, 1); pointer-events: none; }
.tv-stk__rig { position: absolute; left: 50%; top: 60%; width: 0; height: 0; transform-style: preserve-3d;
	--rx: 58deg; --rz: -34deg; --gap: 84px; --bb: rotateZ(calc(var(--rz) * -1)) rotateX(calc(var(--rx) * -1));
	transform: rotateX(var(--rx)) rotateZ(var(--rz)); }
.tv-stk__layer { position: absolute; left: -180px; top: -133px; width: 360px; height: 266px; transform-style: preserve-3d; transform: translateZ(calc(var(--gap) * var(--i))); }
.tv-stk__slab { position: absolute; inset: 0; border-radius: 26px; transform-style: preserve-3d; background: var(--face); border: 1px solid var(--rim); box-shadow: var(--shadow);
	animation: tv-stk-bob 7s ease-in-out infinite; animation-delay: calc(var(--i) * -2.3s); }
.tv-stk__slab::before { content: ""; position: absolute; inset: 0; border-radius: inherit; background: var(--edge); transform: translateZ(-12px); }
@keyframes tv-stk-bob { 50% { transform: translateZ(9px); } }

/* layer 1: database */
.tv-stk__layer--db { --face: linear-gradient(135deg, #0c2a63, #133f8f 60%, #154fba); --edge: #061331; --rim: rgba(152,192,255,.35); --shadow: 0 40px 70px -20px rgba(7,26,63,.75); }
.tv-stk__grid { position: absolute; inset: 12px; border-radius: 18px; background-image: linear-gradient(rgba(152,192,255,.14) 1px, transparent 1px), linear-gradient(90deg, rgba(152,192,255,.14) 1px, transparent 1px); background-size: 22px 22px;
	-webkit-mask-image: radial-gradient(ellipse at 50% 50%, #000 40%, transparent 85%); mask-image: radial-gradient(ellipse at 50% 50%, #000 40%, transparent 85%); }
.tv-stk__dbcore { position: absolute; left: 22px; top: 20px; width: 42px; height: 42px; border-radius: 13px; display: grid; place-items: center; background: rgba(255,255,255,.1); border: 1px solid rgba(152,192,255,.45); color: #9fe7ff; font-size: 1.05rem; box-shadow: 0 0 26px rgba(34,184,240,.55); }
.tv-stk__dbname { position: absolute; left: 74px; top: 30px; font-family: var(--tv-mono); font-size: .62rem; letter-spacing: .08em; text-transform: uppercase; color: rgba(255,255,255,.7); }
.tv-stk__servers { position: absolute; left: 22px; right: 22px; bottom: 20px; display: grid; gap: 8px; }
.tv-stk__servers span { height: 24px; border-radius: 8px; display: flex; align-items: center; gap: 6px; padding: 0 10px; background: rgba(255,255,255,.07); border: 1px solid rgba(152,192,255,.25); }
.tv-stk__servers i { width: 6px; height: 6px; border-radius: 50%; background: #4ade80; box-shadow: 0 0 8px #4ade80; animation: tv-stk-led 1.8s infinite; animation-delay: calc(var(--k) * .35s); }
.tv-stk__servers i:nth-child(2) { animation-delay: calc(var(--k) * .35s + .25s); background: #22b8f0; box-shadow: 0 0 8px #22b8f0; }
.tv-stk__servers i:nth-child(3) { animation-delay: calc(var(--k) * .35s + .5s); }
.tv-stk__servers b { margin-left: auto; width: 42%; height: 4px; border-radius: 2px; background: linear-gradient(90deg, rgba(152,192,255,.3), var(--tv-cyan)); background-size: 200% 100%; animation: tv-flow 2.4s linear infinite; animation-delay: calc(var(--k) * -.8s); }
@keyframes tv-stk-led { 0%, 100% { opacity: .35; } 50% { opacity: 1; } }

/* layer 2: ERPNext core */
.tv-stk__layer--core { --face: linear-gradient(135deg, #1b63e0, #2f7bf5 55%, #22b8f0); --edge: #0f3d9e; --rim: rgba(255,255,255,.6); --shadow: 0 40px 70px -18px rgba(27,99,224,.7); }
.tv-stk__rings i { position: absolute; left: 50%; top: 44%; width: 90px; height: 90px; margin: -45px 0 0 -45px; border-radius: 50%; border: 1.5px solid rgba(255,255,255,.55); animation: tv-stk-ring 3.9s ease-out infinite; }
.tv-stk__rings i:nth-child(2) { animation-delay: 1.3s; } .tv-stk__rings i:nth-child(3) { animation-delay: 2.6s; }
@keyframes tv-stk-ring { 0% { transform: scale(.6); opacity: .9; } 100% { transform: scale(2.6); opacity: 0; } }
.tv-stk__logo { position: absolute; left: 50%; top: 44%; width: 66px; height: 66px; margin: -33px 0 0 -33px; border-radius: 20px; display: grid; place-items: center; background: #fff; box-shadow: 0 18px 40px -10px rgba(7,26,63,.55), 0 0 0 8px rgba(255,255,255,.14); }
.tv-stk__logo img { width: 36px; height: 36px; }
.tv-stk__mods { position: absolute; left: 18px; right: 18px; bottom: 14px; display: flex; justify-content: space-between; }
.tv-stk__mods span { width: 36px; height: 36px; border-radius: 11px; display: grid; place-items: center; color: #fff; font-size: .85rem; background: rgba(255,255,255,.16); border: 1px solid rgba(255,255,255,.4); animation: tv-stk-mod 6s infinite; animation-delay: calc(var(--k) * 1s); }
@keyframes tv-stk-mod { 0%, 100% { background: rgba(255,255,255,.16); color: #fff; box-shadow: none; } 7% { background: #fff; color: var(--tv-600); box-shadow: 0 0 22px rgba(255,255,255,.9); } 16% { background: rgba(255,255,255,.16); color: #fff; box-shadow: none; } }

/* layer 3: live dashboard */
.tv-stk__layer--dash { --face: rgba(255,255,255,.94); --edge: #c6dcff; --rim: #fff; --shadow: 0 40px 80px -24px rgba(12,42,99,.5); }
.tv-stk__head { position: absolute; left: 20px; right: 20px; top: 16px; display: flex; justify-content: space-between; align-items: center; font-size: .8rem; font-weight: 800; color: var(--tv-ink); }
.tv-stk__head span { display: inline-flex; align-items: center; gap: 5px; font-family: var(--tv-mono); font-size: .6rem; font-weight: 500; color: #16a34a; }
.tv-stk__head i { width: 6px; height: 6px; border-radius: 50%; background: #22c55e; animation: tv-live 1.8s infinite; }
.tv-stk__kpis { position: absolute; left: 20px; right: 20px; top: 44px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; transform-style: preserve-3d; }
.tv-stk__kpis > div { padding: 8px 10px; border-radius: 12px; background: #fff; border: 1px solid var(--tv-line); box-shadow: 0 10px 20px -12px rgba(12,42,99,.35); transform: translateZ(10px); }
.tv-stk__kpis small { display: block; font-size: .56rem; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--tv-muted); }
.tv-stk__kpis b { display: block; margin: 2px 0 1px; font-size: .95rem; font-weight: 800; letter-spacing: -.02em; color: var(--tv-ink); font-variant-numeric: tabular-nums; }
.tv-stk__kpis b.is-tick { animation: tv-bump .5s var(--tv-ease); }
.tv-stk__kpis em { font-style: normal; font-size: .58rem; font-weight: 700; color: #16a34a; }
.tv-stk__kpis em.down { color: #e11d48; }
.tv-stk__chart { position: absolute; left: 20px; right: 20px; bottom: 16px; height: 94px; display: grid; grid-template-columns: 1.7fr 1fr; gap: 8px; }
.tv-stk__chart svg { display: block; width: 100%; height: 100%; padding: 8px; border-radius: 12px; background: #fff; border: 1px solid var(--tv-line); overflow: visible; }
.tv-stk__chart .a { fill: rgba(47,123,245,.16); }
.tv-stk__chart .l { fill: none; stroke: var(--tv-500); stroke-width: 2.5; stroke-linecap: round; stroke-dasharray: 420; stroke-dashoffset: 420; animation: tv-stk-draw 2s ease 1s forwards; }
@keyframes tv-stk-draw { to { stroke-dashoffset: 0; } }
.tv-stk__bars { display: flex; align-items: flex-end; gap: 5px; padding: 8px; border-radius: 12px; background: #fff; border: 1px solid var(--tv-line); }
.tv-stk__bars i { flex: 1; border-radius: 4px 4px 2px 2px; background: linear-gradient(180deg, var(--tv-400), var(--tv-600)); transform-origin: bottom; animation: tv-bar-grow 1s cubic-bezier(.2,.8,.2,1) both, tv-bar-live 3.6s ease-in-out infinite; animation-delay: calc(.8s + var(--k) * .1s), calc(var(--k) * -.6s); }
.tv-stk__bars i:nth-child(odd) { background: linear-gradient(180deg, #8fe1ff, var(--tv-cyan)); }

/* pins between layers and up to the apps: billboarded lines carrying data packets */
.tv-stk__anchor, .tv-stk__app { position: absolute; width: 0; height: 0; transform-style: preserve-3d; }
.tv-stk__anchor--c0 { left: 9%; top: 13%; } .tv-stk__anchor--c1 { left: 91%; top: 13%; } .tv-stk__anchor--c2 { left: 91%; top: 87%; } .tv-stk__anchor--c3 { left: 9%; top: 87%; }
.tv-stk__pin { position: absolute; left: -1px; bottom: 0; width: 2px; height: calc(var(--gap) * .86); border-radius: 2px; transform-origin: 50% 100%; transform: var(--bb);
	background: linear-gradient(to top, rgba(47,123,245,.05), rgba(47,123,245,.55) 45%, rgba(34,184,240,.95)); }
.tv-stk__pin::after { content: ""; position: absolute; left: -3px; bottom: 0; width: 8px; height: 8px; border-radius: 50%; background: #fff; box-shadow: 0 0 10px #fff, 0 0 22px var(--tv-cyan); opacity: 0;
	animation: tv-stk-pkt 3s cubic-bezier(.4,0,.6,1) infinite; animation-delay: calc(var(--k, 0) * .55s); }
@keyframes tv-stk-pkt { 0% { bottom: 0; opacity: 0; } 10% { opacity: 1; } 60% { bottom: calc(100% - 8px); opacity: 1; } 68%, 100% { bottom: calc(100% - 8px); opacity: 0; } }

/* apps hovering above the dashboard */
.tv-stk__app { left: var(--x); top: var(--y); }
.tv-stk__app .tv-stk__pin { height: calc(var(--h) * .86); }
.tv-stk__shadow { position: absolute; left: -20px; top: -11px; width: 40px; height: 22px; border-radius: 50%; background: radial-gradient(ellipse at center, rgba(12,42,99,.4), transparent 70%); }
.tv-stk__chip { position: absolute; left: -23px; top: -23px; width: 46px; height: 46px; border-radius: 15px; display: grid; place-items: center; color: #fff; font-size: 1.15rem;
	background: var(--tv-grad); box-shadow: 0 18px 36px -12px rgba(27,99,224,.75), inset 0 1px 0 rgba(255,255,255,.55);
	transform: translateZ(var(--h)) var(--bb); animation: tv-stk-chip 3s infinite; animation-delay: calc(var(--k, 0) * .55s); }
.tv-stk__app--wa .tv-stk__chip { background: linear-gradient(135deg, #1faa53, #25d366); box-shadow: 0 18px 36px -12px rgba(37,211,102,.75); }
.tv-stk__app--im .tv-stk__chip, .tv-stk__app--call .tv-stk__chip { background: #fff; color: var(--tv-600); border: 1px solid var(--tv-line); box-shadow: 0 18px 36px -14px rgba(12,42,99,.5); }
@keyframes tv-stk-chip { 0%, 56% { filter: brightness(1); } 63% { filter: brightness(1.3) drop-shadow(0 0 12px rgba(34,184,240,.9)); } 78%, 100% { filter: brightness(1); } }

/* billboarded layer labels */
.tv-stk__tag { position: absolute; left: calc(100% + 18px); top: calc(50% - 14px); height: 28px; display: inline-flex; align-items: center; gap: 7px; padding: 0 12px 0 10px; border-radius: 999px; white-space: nowrap;
	background: rgba(255,255,255,.94); border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow); font-size: .72rem; font-weight: 700; color: var(--tv-ink); transform-origin: 0 50%; transform: var(--bb); }
.tv-stk__tag i { width: 8px; height: 8px; border-radius: 50%; background: var(--tv-grad); box-shadow: 0 0 0 3px rgba(47,123,245,.18); }
.tv-stk__tag::before { content: ""; position: absolute; right: 100%; top: 50%; width: 18px; height: 1px; background: var(--tv-400); }
.tv-stk__tag--top { left: 50%; top: -20px; transform: translateZ(150px) var(--bb); }

@media (min-width: 992px) { .tv-stk { left: 54%; } }
@media (max-width: 575.98px) { .tv-stk__tag { display: none; } }
@media (prefers-reduced-motion: reduce) {
	.tv-stk__slab, .tv-stk__servers i, .tv-stk__servers b, .tv-stk__rings i, .tv-stk__mods span, .tv-stk__pin::after, .tv-stk__chip, .tv-stk__bars i, .tv-stk__chart .l { animation: none !important; }
	.tv-stk__chart .l { stroke-dashoffset: 0; } .tv-stk__rings { display: none; }
}

/* phones: the stack is shorter than the old dashboard, so the stage can be too */
@media (max-width: 575.98px) { .tv-hero3__stage { height: 330px; } }

/* ---------- Bento: 3D tiles ---------- */
.tv-bento3d { perspective: 1400px; }
/* overflow/isolation would flatten the tiles' 3D space, so the tiles clip nothing */
.tv-bento3d .tv-tile { overflow: visible; isolation: auto; transform-style: preserve-3d; }
.tv-bento3d .tv-tile > * { transform-style: preserve-3d; transition: transform .55s var(--tv-ease); }
.tv-bento3d .tv-tile > .tv-tilt-glare { transition: opacity .3s; }
.tv-bento3d .tv-tile.is-tilting > h3 { transform: translateZ(26px); }
.tv-bento3d .tv-tile.is-tilting > p { transform: translateZ(14px); }
.tv-bento3d .tv-tile.is-tilting > .tv-eyebrow, .tv-bento3d .tv-tile.is-tilting > .tv-tile__eq, .tv-bento3d .tv-tile.is-tilting > .tv-tile__tags, .tv-bento3d .tv-tile.is-tilting > .tv-card__link { transform: translateZ(22px); }
.tv-bento3d .tv-tile.is-tilting > .tv-tile__logos, .tv-bento3d .tv-tile.is-tilting > .tv-map3, .tv-bento3d .tv-tile.is-tilting > .tv-chat, .tv-bento3d .tv-tile.is-tilting > .tv-tile__avatars { transform: translateZ(34px); }
.tv-bento3d .tv-tile.is-tilting > .tv-tile__big { transform: translateZ(44px); }

/* 1. the extruded Tamil word */
.tv-tile__tamil.tv-word3d { position: relative; display: inline-block; align-self: flex-start; margin: auto 0 .5rem; background: none; -webkit-text-fill-color: initial; color: var(--tv-600);
	transform-origin: 0% 50%; transform-style: preserve-3d; transform: translateZ(30px) rotateY(-16deg) rotateX(6deg); animation: tv-word-sway 9s ease-in-out infinite; }
.tv-word3d__face { position: relative; display: block; background: var(--tv-grad); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; }
.tv-word3d__side { position: absolute; inset: 0; display: block; color: #1a5ad1; -webkit-text-fill-color: #1a5ad1; transform: translateZ(calc(var(--k) * -3px - 3px)); }
.tv-word3d__side:nth-child(n+4) { color: #154ab0; -webkit-text-fill-color: #154ab0; }
.tv-word3d__side:nth-child(n+6) { color: #0f3b8f; -webkit-text-fill-color: #0f3b8f; }
.tv-word3d__side:nth-child(n+8) { color: #0a2c6e; -webkit-text-fill-color: #0a2c6e; }
@keyframes tv-word-sway { 0%, 100% { transform: translateZ(30px) rotateY(-17deg) rotateX(6deg); } 50% { transform: translateZ(30px) rotateY(-5deg) rotateX(10deg); } }

/* 2. 50+: coin-flipping logos and a 3D orbit passing in front of and behind the number */
.tv-tile__avatars { perspective: 500px; }
.tv-tile__avatars img { animation: tv-coin 7s ease-in-out infinite; }
.tv-tile__avatars img:nth-child(2) { animation-delay: .5s; } .tv-tile__avatars img:nth-child(3) { animation-delay: 1s; }
.tv-tile__avatars img:nth-child(4) { animation-delay: 1.5s; } .tv-tile__avatars img:nth-child(5) { animation-delay: 2s; }
@keyframes tv-coin { 0%, 55% { transform: rotateY(0); } 70% { transform: rotateY(180deg); } 85%, 100% { transform: rotateY(360deg); } }
.tv-bento3d .tv-tile--blue .tv-tile__big { transform: translateZ(30px); text-shadow: 0 14px 34px rgba(7,26,63,.55); }
.tv-tile__orbit { position: absolute; right: 12px; top: 34%; width: 150px; height: 150px; pointer-events: none; transform-style: preserve-3d; }
.tv-tile__orbit i { position: absolute; inset: 0; border-radius: 50%; border: 1.5px dashed rgba(255,255,255,.6); transform: rotateX(72deg) rotateZ(0deg); animation: tv-orbit3 14s linear infinite; }
.tv-tile__orbit i:nth-child(2) { inset: 22px; border-style: solid; border-color: rgba(159,231,255,.55); animation-duration: 9s; animation-direction: reverse; }
.tv-tile__orbit i::after { content: ""; position: absolute; left: 50%; top: -5px; width: 9px; height: 9px; margin-left: -4px; border-radius: 50%; background: #9fe7ff; box-shadow: 0 0 12px #22b8f0, 0 0 24px #22b8f0; }
@keyframes tv-orbit3 { to { transform: rotateX(72deg) rotateZ(360deg); } }

/* 3. open source: two slowly turning cubes (the container stays flat so the cubes' back halves are not hidden behind the tile) */
.tv-bento3d .tv-tile > .tv-logos3d { transform-style: flat; }
.tv-logos3d { perspective: 600px; gap: 22px; }
.tv-logos3d .tv-cube3 { width: 60px; height: 60px; background: none; border: 0; box-shadow: none; display: block; }
.tv-cube3 > i { --s: 60px; position: relative; display: block; width: var(--s); height: var(--s); font-style: normal; transform-style: preserve-3d; animation: tv-cube3 16s linear infinite; }
.tv-cube3--rev > i { animation-direction: reverse; animation-duration: 21s; }
.tv-cube3 > i > b { position: absolute; inset: 0; display: grid; place-items: center; border-radius: 15px; background: rgba(255,255,255,.96); border: 1px solid var(--tv-line-strong);
	box-shadow: inset 0 0 20px rgba(47,123,245,.14), 0 10px 24px -14px rgba(12,42,99,.4); font-weight: 800; font-size: 1.35rem; color: var(--tv-600); backface-visibility: hidden; }
.tv-cube3 > i > b img { width: 30px; height: 30px; }
.tv-cube3 > i > b:nth-child(1) { transform: translateZ(calc(var(--s) / 2)); }
.tv-cube3 > i > b:nth-child(2) { transform: rotateY(180deg) translateZ(calc(var(--s) / 2)); }
.tv-cube3 > i > b:nth-child(3) { transform: rotateY(90deg) translateZ(calc(var(--s) / 2)); }
.tv-cube3 > i > b:nth-child(4) { transform: rotateY(-90deg) translateZ(calc(var(--s) / 2)); }
.tv-cube3 > i > b:nth-child(5) { transform: rotateX(90deg) translateZ(calc(var(--s) / 2)); }
.tv-cube3 > i > b:nth-child(6) { transform: rotateX(-90deg) translateZ(calc(var(--s) / 2)); }
@keyframes tv-cube3 { from { transform: rotateX(-20deg) rotateY(0deg); } to { transform: rotateX(-20deg) rotateY(360deg); } }

/* 4. the map: a tilted plane with a standing pin, a pulse on the ground and a car on the road */
.tv-bento3d .tv-tile > .tv-map3 { transform-style: flat; }
.tv-map3 { position: relative; height: 128px; margin: -4px 0 12px; perspective: 520px; perspective-origin: 50% 10%; }
.tv-map3__floor { position: absolute; left: -4%; right: -4%; bottom: -6%; height: 175%; border-radius: 18px; transform-origin: 50% 100%; transform: rotateX(58deg); transform-style: preserve-3d; overflow: visible;
	background-color: var(--tv-50); background-image: linear-gradient(rgba(21,79,186,.14) 1px, transparent 1px), linear-gradient(90deg, rgba(21,79,186,.14) 1px, transparent 1px); background-size: 24px 24px;
	border: 1px solid var(--tv-line); box-shadow: 0 30px 50px -24px rgba(12,42,99,.45); }
.tv-map3__blk { position: absolute; border-radius: 5px; background: rgba(21,79,186,.1); border: 1px solid rgba(21,79,186,.2); }
.tv-map3__road { position: absolute; background: #fff; box-shadow: 0 0 0 1px var(--tv-line); border-radius: 7px; }
.tv-map3__road--a { left: 3%; right: 3%; top: 50%; height: 13px; transform: rotate(-7deg); }
.tv-map3__road--b { left: 62%; top: 5%; bottom: 5%; width: 13px; transform: rotate(10deg); }
.tv-map3__dot { position: absolute; top: 50%; width: 10px; height: 10px; margin-top: 1px; border-radius: 50%; background: var(--tv-cyan); box-shadow: 0 0 10px var(--tv-cyan); animation: tv-map3-drive 5s linear infinite; }
@keyframes tv-map3-drive { 0% { left: -3%; transform: translateY(18px); opacity: 0; } 8% { opacity: 1; } 92% { opacity: 1; } 100% { left: 100%; transform: translateY(-18px); opacity: 0; } }
.tv-map3__pulse { position: absolute; left: 62%; top: 44%; width: 46px; height: 46px; margin: -23px 0 0 -23px; border-radius: 50%; border: 2px solid var(--tv-500); animation: tv-map3-pulse 2.4s ease-out infinite; }
@keyframes tv-map3-pulse { 0% { transform: scale(.35); opacity: .95; } 100% { transform: scale(2.1); opacity: 0; } }
.tv-map3__pin { position: absolute; left: 62%; top: 44%; width: 36px; height: 46px; margin: -46px 0 0 -18px; display: grid; place-items: end center; transform-origin: 50% 100%; transform: rotateX(-58deg);
	color: var(--tv-600); font-size: 2.2rem; filter: drop-shadow(0 10px 10px rgba(12,42,99,.35)); animation: tv-map3-bounce 2.4s ease-in-out infinite; }
@keyframes tv-map3-bounce { 0%, 100% { transform: rotateX(-58deg) translateY(0); } 50% { transform: rotateX(-58deg) translateY(-10px); } }

/* 5. chat: bubbles stacked in depth, arriving in sequence and looping */
.tv-chat3d { transform-style: preserve-3d; }
.tv-chat3d > span { box-shadow: 0 12px 26px -16px rgba(12,42,99,.5); animation-delay: 0s !important; }
.tv-chat3d > span:nth-child(1) { animation: tv-chat-a 9s ease-in-out infinite; }
.tv-chat3d > span:nth-child(2) { animation: tv-chat-b 9s ease-in-out infinite; }
.tv-chat3d > span:nth-child(3) { animation: tv-chat-c 9s ease-in-out infinite; }
@keyframes tv-chat-a { 0%, 3% { opacity: 0; transform: translateZ(14px) translateY(10px) scale(.96); } 9%, 84% { opacity: 1; transform: translateZ(14px); } 92%, 100% { opacity: 0; transform: translateZ(14px) translateY(-6px); } }
@keyframes tv-chat-b { 0%, 17% { opacity: 0; transform: translateZ(30px) translateY(10px) scale(.96); } 23%, 84% { opacity: 1; transform: translateZ(30px); } 92%, 100% { opacity: 0; transform: translateZ(30px) translateY(-6px); } }
@keyframes tv-chat-c { 0%, 33% { opacity: 0; transform: translateZ(46px) translateY(10px) scale(.96); } 39%, 84% { opacity: 1; transform: translateZ(46px); } 92%, 100% { opacity: 0; transform: translateZ(46px) translateY(-6px); } }

@media (max-width: 575.98px) { .tv-tile__orbit { right: -60px; } }
@media (prefers-reduced-motion: reduce) {
	.tv-tile__tamil.tv-word3d, .tv-tile__avatars img, .tv-tile__orbit i, .tv-cube3 > i, .tv-map3__dot, .tv-map3__pulse, .tv-map3__pin, .tv-chat3d > span { animation: none !important; }
	.tv-chat3d > span { opacity: 1; } .tv-map3__pulse, .tv-map3__dot { display: none; }
}

/* ---------- Round 6: rotate controls, 3D device rigs, card stacking ---------- */
.tv-hero3__stage { cursor: grab; touch-action: pan-y; user-select: none; -webkit-user-select: none; }
.tv-hero3__stage.is-dragging { cursor: grabbing; }
.tv-stk__ctl { position: absolute; left: 6px; bottom: 6px; z-index: 6; display: inline-flex; align-items: center; gap: 6px; padding: 4px; border-radius: 999px;
	background: rgba(255,255,255,.85); border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow); backdrop-filter: blur(10px); white-space: nowrap; cursor: default; }
.tv-stk__ctl span { display: inline-flex; align-items: center; gap: 6px; padding: 0 6px; font: 600 .72rem/1 var(--tv-font); color: var(--tv-muted); }
.tv-stk__ctl span i { color: var(--tv-500); }
.tv-stk__ctl button { width: 30px; height: 30px; border-radius: 50%; border: 1px solid var(--tv-line); background: #fff; color: var(--tv-600); cursor: pointer; display: grid; place-items: center; font-size: .8rem; transition: background .2s, color .2s, transform .2s; }
.tv-stk__ctl button:hover { background: var(--tv-grad); color: #fff; border-color: transparent; transform: scale(1.06); }
.tv-stk__ctl button:active { transform: scale(.96); }
@media (max-width: 575.98px) { .tv-hero3__stage { height: 360px; } .tv-stk__ctl { left: 50%; transform: translateX(-50%); } }

/* sticky service cards: later cards always stack above earlier ones */
.tv-scard { z-index: calc(1 + var(--i, 0)); }

/* 3D device rigs (phone, browser) */
.tv-dev3 { position: relative; width: 100%; height: 100%; min-height: inherit; display: grid; place-items: center; perspective: 1200px; }
.tv-dev3__rig { position: relative; transform-style: preserve-3d; transform: translateY(var(--bob, 0px)) rotateX(var(--rx, 6deg)) rotateY(var(--ry, -16deg)) rotateZ(var(--rz, 0deg)); }
.tv-dev3--phone .tv-dev3__rig { --rz: 3deg; }
.tv-dev3 .tv-phone, .tv-dev3 .tv-browser { transform: none !important; animation: none !important; position: relative; }
.tv-dev3__edge { position: absolute; inset: 0; transform: translateZ(calc(var(--k) * -1.4px)); }
.tv-dev3--phone .tv-dev3__edge { border-radius: 40px; background: #0d1b40; box-shadow: inset 0 0 0 1px rgba(255,255,255,.06); }
.tv-dev3--phone .tv-dev3__edge:nth-last-of-type(1) { background: #22376b; }
.tv-dev3--browser .tv-dev3__edge { border-radius: 18px; background: #cfdcf6; transform: translateZ(calc(var(--k) * -1.2px)); }
.tv-dev3--browser .tv-dev3__edge:nth-last-of-type(1) { background: #b7c9ee; }
.tv-dev3__glare { position: absolute; inset: 0; pointer-events: none; transform: translateZ(2px);
	background: linear-gradient(115deg, transparent calc(var(--gx, 50%) - 22%), rgba(255,255,255,.22) calc(var(--gx, 50%) - 6%), rgba(255,255,255,.05) calc(var(--gx, 50%) + 8%), transparent calc(var(--gx, 50%) + 20%)); }
.tv-dev3__glare--phone { border-radius: 40px; }
.tv-dev3__glare--browser { border-radius: 18px; }
.tv-dev3__shadow { position: absolute; left: 6%; right: 6%; bottom: -30px; height: 46px; border-radius: 50%; pointer-events: none;
	background: radial-gradient(ellipse at center, rgba(7,26,63,.5), rgba(7,26,63,.12) 50%, transparent 72%); filter: blur(10px); transform: translateZ(-40px); }
.tv-dev3--browser .tv-dev3__shadow { bottom: -26px; }
.tv-dev3__float { position: absolute; display: flex; align-items: center; gap: 10px; padding: 10px 14px 10px 10px; border-radius: 16px; white-space: nowrap;
	background: rgba(255,255,255,.96); border: 1px solid #fff; box-shadow: 0 24px 50px -18px rgba(12,42,99,.55); color: var(--tv-ink); font-size: .78rem;
	animation: tv-dev3-bob 6s ease-in-out infinite; }
.tv-dev3__float i { flex-shrink: 0; width: 34px; height: 34px; border-radius: 11px; display: grid; place-items: center; background: #e9fbf1; color: #16a34a; font-size: .95rem; }
.tv-dev3__float--b i { background: var(--tv-50); color: var(--tv-600); }
.tv-dev3__float b { display: block; font-size: .8rem; line-height: 1.2; }
.tv-dev3__float small { font-size: .68rem; color: var(--tv-muted); }
.tv-dev3__float--a { left: -36%; top: 24%; }
.tv-dev3__float--b { right: -34%; bottom: 22%; animation-delay: -3s; }
.tv-dev3--browser .tv-dev3__float--a { left: -10%; bottom: 12%; top: auto; }
.tv-dev3--browser .tv-dev3__float--b { right: -8%; top: 14%; bottom: auto; }
@keyframes tv-dev3-bob { 0%, 100% { transform: translateZ(var(--z, 60px)) translateY(0); } 50% { transform: translateZ(var(--z, 60px)) translateY(-10px); } }
.tv-dev3 .tv-cursor-demo { animation-name: tv-dev3-cursor; }
@keyframes tv-dev3-cursor { 0% { transform: translate3d(60px, 220px, 70px); } 30% { transform: translate3d(260px, 120px, 70px); } 55% { transform: translate3d(140px, 300px, 70px); } 80% { transform: translate3d(320px, 260px, 70px); } 100% { transform: translate3d(60px, 220px, 70px); } }
@media (max-width: 991.98px) {
	.tv-dev3__float--a { left: -14%; } .tv-dev3__float--b { right: -14%; }
	.tv-dev3--browser .tv-dev3__float--a { left: 0; } .tv-dev3--browser .tv-dev3__float--b { right: 0; }
}
@media (max-width: 575.98px) { .tv-dev3__float { display: none; } }
@media (prefers-reduced-motion: reduce) { .tv-dev3__float, .tv-dev3 .tv-cursor-demo { animation: none !important; } .tv-dev3__float { transform: translateZ(var(--z, 60px)); } }

/* ---------- Industries: 3D picture rigs ---------- */
.tv-tabs__media { overflow: visible; perspective: 1200px; min-height: 300px; display: grid; place-items: center; }
.tv-dev3--pic { min-height: 300px; }
.tv-dev3--pic .tv-dev3__rig { --rz: -1deg; width: min(420px, 100%); }
.tv-pic3 { position: relative; padding: 10px; border-radius: 24px; background: #fff; border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow-lg); }
.tv-pic3 img { display: block; width: 100%; height: auto; border-radius: 16px; background: var(--tv-50); }
.tv-dev3--pic .tv-dev3__edge { border-radius: 24px; background: #dbe6fb; transform: translateZ(calc(var(--k) * -1.3px)); }
.tv-dev3--pic .tv-dev3__edge:nth-last-of-type(1) { background: #c2d3f3; }
.tv-dev3__deck { position: absolute; inset: 0; border-radius: 24px; background: rgba(255,255,255,.75); border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow); transform: translateZ(-46px) translate(16px, 16px); }
.tv-dev3__deck--2 { background: rgba(255,255,255,.5); transform: translateZ(-92px) translate(32px, 32px); }
.tv-dev3__glare--pic { border-radius: 24px; }
.tv-dev3--pic .tv-dev3__shadow { bottom: -34px; left: 10%; right: 0; }
.tv-dev3--pic .tv-dev3__float--a { left: -6%; top: 8%; bottom: auto; }
.tv-dev3--pic .tv-dev3__float--b { right: -6%; bottom: 10%; top: auto; }
.tv-dev3__float--ind i { background: var(--tv-grad); color: #fff; box-shadow: var(--tv-glow); }
@media (max-width: 991.98px) { .tv-dev3--pic .tv-dev3__float--a { left: 0; } .tv-dev3--pic .tv-dev3__float--b { right: 0; } .tv-dev3__deck--2 { display: none; } }

/* rig sizing fixes: a content-sized rig must be given its width explicitly */
.tv-dev3--browser .tv-dev3__rig { width: min(440px, 100%); }
.tv-dev3 .tv-browser { width: 100%; }
.tv-dev3--phone .tv-dev3__rig { width: 230px; }
.tv-dev3__float b { max-width: 230px; overflow: hidden; text-overflow: ellipsis; }

/* rotate pill: buttons only */
.tv-stk__ctl { gap: 4px; }
/* industries: room for the picture card and its deck inside the panel */
.tv-tabs__media { padding: 10px 0 44px 6px; }

/* ---------- Industries: isometric 3D scenes (templates/thirvu/industry3d.html) ---------- */
.tv-tabs__media { padding: 0; min-height: 0; }
.tv-dio { position: relative; width: 100%; height: calc(330px * var(--ds, 1)); perspective: 1400px; cursor: grab; touch-action: pan-y; user-select: none; -webkit-user-select: none; }
.tv-dio.is-dragging { cursor: grabbing; }
.tv-dio__rig { position: absolute; left: 50%; top: 54%; width: 0; height: 0; transform-style: preserve-3d;
	--rx: 56deg; --rz: -38deg; --bb: rotateZ(calc(var(--rz) * -1)) rotateX(calc(var(--rx) * -1));
	transform: scale(var(--ds, 1)) rotateX(var(--rx)) rotateZ(var(--rz)); }
.tv-dio__base { position: absolute; left: -150px; top: -150px; width: 300px; height: 300px; transform-style: preserve-3d; }
.tv-dio__scene { position: absolute; inset: 0; transform-style: preserve-3d; transform: translateZ(14px); }
.tv-dio__shadow { position: absolute; left: -175px; top: -150px; width: 350px; height: 350px; border-radius: 50px; background: radial-gradient(closest-side, rgba(12,42,99,.32), transparent); filter: blur(16px); transform: translate(18px, 18px) translateZ(-24px); }

/* a block: five faces around a footprint (top, front +y, back -y, right +x, left -x) */
.tv-b { position: absolute; left: calc(var(--x) * 1px); top: calc(var(--y) * 1px); width: calc(var(--w) * 1px); height: calc(var(--d) * 1px); transform-style: preserve-3d; transform: translateZ(calc(var(--z, 0) * 1px)); }
.tv-b > i { position: absolute; display: block; --s: 0; background: linear-gradient(rgba(7,26,63,var(--s)), rgba(7,26,63,var(--s))), var(--c); box-shadow: inset 0 0 0 .5px rgba(7,26,63,.14); }
.tv-b > i:nth-child(1) { inset: 0; transform: translateZ(calc(var(--h) * 1px)); }
.tv-b > i:nth-child(2) { left: 0; top: 100%; width: 100%; height: calc(var(--h) * 1px); transform-origin: 50% 0; transform: rotateX(90deg); --s: .26; }
.tv-b > i:nth-child(3) { left: 0; bottom: 100%; width: 100%; height: calc(var(--h) * 1px); transform-origin: 50% 100%; transform: rotateX(-90deg); --s: .2; }
.tv-b > i:nth-child(4) { left: 100%; top: 0; width: calc(var(--h) * 1px); height: 100%; transform-origin: 0 50%; transform: rotateY(-90deg); --s: .32; }
.tv-b > i:nth-child(5) { right: 100%; top: 0; width: calc(var(--h) * 1px); height: 100%; transform-origin: 100% 50%; transform: rotateY(90deg); --s: .1; }

/* surfaces */
.tv-b.floor > i:nth-child(1) { background-color: #f3f7ff; background-image: linear-gradient(rgba(21,79,186,.1) 1px, transparent 1px), linear-gradient(90deg, rgba(21,79,186,.1) 1px, transparent 1px); background-size: 25px 25px; box-shadow: inset 0 0 0 1px rgba(21,79,186,.18); }
.tv-b.floor > i:not(:nth-child(1)) { background: linear-gradient(rgba(7,26,63,var(--s)), rgba(7,26,63,var(--s))), #c9d9f6; }
.tv-b.belt > i:nth-child(1) { background: repeating-linear-gradient(90deg, #33456f 0 7px, #22325a 7px 14px); animation: tv-dio-belt .45s linear infinite; }
@keyframes tv-dio-belt { to { background-position: 14px 0; } }
.tv-b.road > i:nth-child(1) { background: linear-gradient(90deg, rgba(255,255,255,.85) 50%, transparent 50%) 0 50% / 24px 2px repeat-x, #2a3b63; }
.tv-b.field > i:nth-child(1) { background: repeating-linear-gradient(0deg, transparent 0 18px, rgba(255,255,255,.55) 18px 20px), #86d9a0; }
.tv-b.win > i:not(:nth-child(1)) { background: repeating-linear-gradient(90deg, transparent 0 7px, rgba(255,255,255,.95) 7px 10px), repeating-linear-gradient(0deg, transparent 0 7px, rgba(47,123,245,.55) 7px 15px), linear-gradient(rgba(7,26,63,var(--s)), rgba(7,26,63,var(--s))), var(--c); }
.tv-b.shelf > i:nth-child(2), .tv-b.shelf > i:nth-child(5) { background: repeating-linear-gradient(0deg, #b9cbef 0 3px, transparent 3px 20px), repeating-linear-gradient(90deg, #f5b342 0 9px, #2f7bf5 9px 16px, #22b8f0 16px 24px, #ffffff 24px 28px), linear-gradient(rgba(7,26,63,var(--s)), rgba(7,26,63,var(--s))); }
.tv-b.panel > i:nth-child(2) { background: linear-gradient(90deg, transparent 18%, #22b8f0 18% 52%, transparent 52%) 0 30% / 100% 28% no-repeat, linear-gradient(rgba(7,26,63,var(--s)), rgba(7,26,63,var(--s))), var(--c); }
.tv-b.stripe > i:not(:nth-child(1)) { background: linear-gradient(transparent 46%, var(--st, #ef4444) 46% 62%, transparent 62%), linear-gradient(rgba(7,26,63,var(--s)), rgba(7,26,63,var(--s))), var(--c); }

/* motion (no opacity changes: opacity < 1 would flatten the 3D boxes) */
.tv-b.mv { animation: tv-dio-move var(--t, 7s) linear infinite; animation-delay: var(--dl, 0s); }
@keyframes tv-dio-move { 0% { translate: 0 0; scale: 0; } 6% { scale: 1; } 94% { scale: 1; } 100% { translate: var(--dx, 220px) 0; scale: 0; } }
.tv-b.press { animation: tv-dio-press 1.6s ease-in-out infinite; }
@keyframes tv-dio-press { 0%, 100% { translate: 0 0 0; } 50% { translate: 0 0 -8px; } }
.tv-dio__a { position: absolute; left: calc(var(--x) * 1px); top: calc(var(--y) * 1px); width: 0; height: 0; transform-style: preserve-3d; transform: translateZ(calc(var(--z, 0) * 1px)); }
.tv-dio__arm { animation: tv-dio-arm 3.6s ease-in-out infinite alternate; }
@keyframes tv-dio-arm { from { rotate: z -42deg; } to { rotate: z 38deg; } }
.tv-dio__walk { animation: tv-dio-walk 6s ease-in-out infinite; }
@keyframes tv-dio-walk { 0%, 100% { translate: 0 0; } 50% { translate: 112px -58px; } }

/* billboarded labels and icon chips (always face the viewer) */
.tv-dio__tag, .tv-dio__chip { position: absolute; left: 0; top: 0; transform-origin: 0 0; transform: var(--bb) translate(-50%, -100%); white-space: nowrap; }
.tv-dio__tag { display: inline-flex; align-items: center; gap: 7px; padding: 6px 12px 6px 7px; border-radius: 999px; background: rgba(255,255,255,.95); border: 1px solid var(--tv-line); box-shadow: 0 12px 26px -12px rgba(12,42,99,.5); font: 700 .74rem/1 var(--tv-font); color: var(--tv-ink); }
.tv-dio__tag i { width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; background: var(--tv-grad); color: #fff; font-size: .62rem; }
.tv-dio__chip b { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 13px; background: var(--tv-grad); color: #fff; font-size: 1.05rem; box-shadow: 0 16px 30px -10px rgba(27,99,224,.7); animation: tv-dio-bob 3s ease-in-out infinite; }
.tv-dio__chip.red b { background: linear-gradient(135deg, #ef4444, #f97316); box-shadow: 0 16px 30px -10px rgba(239,68,68,.6); }
.tv-dio__chip.spin i { animation: tv-spin 4s linear infinite; }
@keyframes tv-dio-bob { 50% { transform: translateY(-8px); } }

@media (prefers-reduced-motion: reduce) {
	.tv-b.mv, .tv-b.press, .tv-dio__arm, .tv-dio__walk, .tv-b.belt > i, .tv-dio__chip b, .tv-dio__chip i { animation: none !important; }
	.tv-b.mv { scale: 1; }
}
/* the scene floats on the panel: no framed box behind it */
.tv-tabs__media { background: none; aspect-ratio: auto; border-radius: 0; overflow: visible; display: block; }

/* ---------- Blueprint builder: one-screen layout on laptops and desktops ---------- */
@media (min-width: 1200px) {
	.tv-section.tv-bp { padding: 32px 0; min-height: calc(100svh - var(--tv-header-h)); display: flex; align-items: center; }
	.tv-bp > .tv-container { width: 100%; }
	.tv-bp .tv-section__head { margin-bottom: 18px; max-width: 900px; }
	.tv-bp .tv-section__head h2 { font-size: clamp(1.6rem, 2.4vw, 2.2rem); margin-bottom: .3rem; }
	.tv-bp .tv-section__head p { font-size: .95rem; }
	.tv-bp__grid { grid-template-columns: minmax(0, 1.2fr) minmax(0, .95fr) minmax(0, .9fr); gap: 20px; align-items: center; }
	.tv-bp__stage { display: contents; }
	.tv-bp__board { height: 420px; }
	.tv-bp__sum { padding: 16px 18px; }
	.tv-bp__sum-head { margin-bottom: 10px; }
	.tv-bp__facts { gap: 6px; margin-bottom: 10px; }
	.tv-bp__facts div { padding: 8px 10px; }
	.tv-bp__facts dt { font-size: .56rem; letter-spacing: .06em; }
	.tv-bp__facts dd { font-size: 1.05rem; }
	.tv-bp__list { max-height: 118px; overflow-y: auto; margin-bottom: 12px; padding-right: 2px; }
	.tv-bp__actions { flex-direction: column; gap: 8px; }
	.tv-bp__actions .tv-btn { justify-content: center; padding-top: .7rem; padding-bottom: .7rem; }
	.tv-bp__note { margin-top: 8px; font-size: .7rem; }

	.tv-bp__panel { gap: 10px; }
	.tv-bp__step { display: grid; grid-template-columns: auto 1fr; column-gap: 9px; align-items: center; padding: 12px 14px 13px; border-radius: 18px; }
	.tv-bp__n { position: static; width: 24px; height: 24px; border-radius: 8px; font-size: .64rem; box-shadow: none; }
	.tv-bp__step h3 { margin: 0; font-size: .92rem; }
	.tv-bp__step .tv-bp__chips, .tv-bp__step .tv-bp__mods { grid-column: 1 / -1; margin-top: 9px; gap: 6px; }
	.tv-bp__chip { padding: 5px 11px; font-size: .78rem; gap: 6px; }
	.tv-bp__chip i { font-size: .78rem; }
	.tv-bp__mod { padding: 3px 10px 3px 3px; font-size: .78rem; gap: 6px; border-radius: 11px; }
	.tv-bp__mod i { width: 22px; height: 22px; border-radius: 7px; font-size: .68rem; }
}
/* short laptop screens: tighter still */
@media (min-width: 1200px) and (max-height: 760px) {
	.tv-bp .tv-section__head p { display: none; }
	.tv-bp .tv-section__head .tv-eyebrow { margin-bottom: .3rem; }
	.tv-bp__board { height: 360px; }
	.tv-bp__step { padding: 10px 12px 11px; }
	.tv-bp__step .tv-bp__chips, .tv-bp__step .tv-bp__mods { margin-top: 7px; gap: 5px; }
	.tv-bp__chip { padding: 4px 10px; font-size: .74rem; }
	.tv-bp__mod { font-size: .74rem; }
	.tv-bp__mod i { width: 20px; height: 20px; }
	.tv-bp__list { max-height: 92px; }
}
@media (min-width: 1200px) {
	.tv-bp__grid { grid-template-columns: minmax(0, 1.55fr) minmax(0, .8fr) minmax(0, .85fr); gap: 18px; }
	/* steps 1-2 full width; apps and team size side by side */
	.tv-bp__panel { grid-template-columns: minmax(0, 1fr) auto; }
	.tv-bp__panel > .tv-bp__step:nth-child(-n+2) { grid-column: 1 / -1; }
	.tv-bp__panel > .tv-bp__step:nth-child(4) .tv-bp__chips { flex-direction: column; align-items: stretch; }
	.tv-bp__sum .tv-bp__facts { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	.tv-bp__facts dt { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
}
@media (min-width: 1200px) and (max-height: 760px) {
	.tv-section.tv-bp { padding: 16px 0; }
	.tv-bp .tv-section__head { margin-bottom: 12px; }
	.tv-bp .tv-section__head .tv-eyebrow { display: none; }
	.tv-bp .tv-section__head h2 { font-size: 1.6rem; }
	.tv-bp__panel { gap: 8px; }
	.tv-bp__step h3 { font-size: .86rem; }
}
@media (min-width: 1200px) and (max-height: 640px) {
	.tv-bp .tv-section__head { margin-bottom: 8px; }
	.tv-bp .tv-section__head h2 { font-size: 1.4rem; }
	.tv-bp__step { padding: 8px 12px 9px; }
	.tv-bp__step .tv-bp__chips, .tv-bp__step .tv-bp__mods { margin-top: 6px; gap: 4px; }
}
@media (min-width: 1200px) and (max-height: 700px) {
	.tv-section.tv-bp { padding: 10px 0; }
	.tv-bp__mod { padding: 4px 10px; }
	.tv-bp__mod i { display: none; }
	.tv-bp__chip { padding: 4px 9px; }
	.tv-bp__panel > .tv-bp__step:nth-child(4) .tv-bp__chips { gap: 4px; }
}
@media (min-width: 1200px) and (max-height: 640px) { .tv-section.tv-bp { padding: 4px 0; } .tv-bp__panel { gap: 6px; } }
@media (min-width: 1200px) {
	.tv-bp__sum .tv-bp__facts { grid-template-columns: minmax(0, .8fr) minmax(0, .9fr) minmax(0, 1.3fr); }
	.tv-bp__facts dd { white-space: nowrap; font-size: 1rem; }
	.tv-bp__sum-head small { font-size: .74rem; line-height: 1.35; display: block; }
}

/* ---------- Blueprint, v2 one-screen layout: choices | (board over a horizontal summary) ---------- */
@media (min-width: 1200px) {
	.tv-bp__grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 22px; align-items: stretch; }
	.tv-bp__stage { display: flex; flex-direction: column; gap: 12px; position: static; min-width: 0; }
	.tv-bp__board { flex: 1 1 auto; height: auto; min-height: 280px; }
	.tv-bp__sum { display: grid; grid-template-columns: minmax(0, 1fr) 230px; grid-template-areas: "head head" "facts facts" "list actions" "note actions"; column-gap: 16px; row-gap: 10px; padding: 16px 18px; align-items: start; }
	.tv-bp__sum-head { grid-area: head; margin: 0; }
	.tv-bp__sum .tv-bp__facts { grid-area: facts; grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 0; }
	.tv-bp__facts dt { white-space: nowrap; overflow: visible; }
	.tv-bp__list { grid-area: list; margin: 0; max-height: 64px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--tv-200) transparent; align-content: flex-start; }
	.tv-bp__list::-webkit-scrollbar { width: 5px; } .tv-bp__list::-webkit-scrollbar-thumb { background: var(--tv-200); border-radius: 3px; }
	.tv-bp__actions { grid-area: actions; flex-direction: column; gap: 8px; }
	.tv-bp__note { grid-area: note; margin: 0; }
}
@media (min-width: 1200px) and (max-height: 760px) { .tv-bp__board { min-height: 230px; } .tv-bp__list { max-height: 60px; } }
@media (min-width: 1200px) and (max-height: 700px) { .tv-bp__note { display: none; } .tv-bp__sum { row-gap: 8px; padding: 12px 16px; } .tv-bp__facts div { padding: 6px 10px; } }
@media (min-width: 1200px) { .tv-bp__board { flex: 1 1 0; height: auto; min-height: 230px; } }
@media (min-width: 1200px) and (max-height: 760px) { .tv-bp__board { min-height: 200px; } }
@media (min-width: 1200px) { .tv-bp__board { z-index: 0; } .tv-bp__fit { translate: 0 -7%; } .tv-bp__sum { position: relative; z-index: 1; } }

/* ---------- ERPNext module dock (#naverp) ---------- */
.tv-site #naverp.tv-dock {
	position: sticky; top: calc(var(--tv-header-h) + 10px); z-index: 50; display: flex; align-items: flex-end; justify-content: center; gap: 4px;
	width: max-content; max-width: calc(100% - 32px); margin: -40px auto 24px !important; padding: 8px 10px !important; overflow: visible;
	background: rgba(255,255,255,.72); border: 1px solid rgba(255,255,255,.9); border-radius: 22px;
	box-shadow: 0 24px 50px -24px rgba(12,42,99,.45), 0 0 0 1px rgba(21,79,186,.08), inset 0 1px 0 #fff; backdrop-filter: blur(16px) saturate(1.4); -webkit-backdrop-filter: blur(16px) saturate(1.4);
}
.tv-site #naverp.tv-dock a { position: relative; flex-shrink: 0; display: inline-flex; align-items: center; gap: 0; padding: 0 !important; margin: 0 !important; background: none !important; border-radius: 14px; color: var(--tv-ink) !important; float: none !important; font-size: .82rem; font-weight: 700; text-decoration: none; box-shadow: none; }
.tv-dock__ico { width: 44px; height: 44px; border-radius: 14px; display: grid; place-items: center; background: #fff; border: 1px solid var(--tv-line); color: var(--tv-600); font-size: 1rem; box-shadow: 0 6px 14px -8px rgba(12,42,99,.4); transform-origin: 50% 100%; transition: transform .18s ease-out, background .25s, color .25s, border-color .25s; will-change: transform; }
.tv-dock__ico i { color: inherit !important; margin: 0 !important; }
.tv-site #naverp.tv-dock a:hover .tv-dock__ico { border-color: var(--tv-300); color: var(--tv-500); }
/* the name: a bubble above the icon on hover, inline next to the icon for the current module */
.tv-dock__lbl { position: absolute; left: 50%; bottom: calc(100% + 30px); transform: translate(-50%, 6px); padding: 5px 10px; border-radius: 9px; white-space: nowrap; background: var(--tv-ink); color: #fff; font-size: .72rem; font-weight: 700; opacity: 0; pointer-events: none; transition: opacity .18s, transform .18s; }
.tv-dock__lbl::after { content: ""; position: absolute; left: 50%; top: 100%; margin-left: -5px; border: 5px solid transparent; border-top-color: var(--tv-ink); }
.tv-site #naverp.tv-dock a:hover .tv-dock__lbl, .tv-site #naverp.tv-dock a:focus-visible .tv-dock__lbl { opacity: 1; transform: translate(-50%, 0); }
.tv-site #naverp.tv-dock a.active { padding: 0 14px 0 0 !important; margin: 0 4px !important; background: var(--tv-grad) !important; box-shadow: var(--tv-glow); color: #fff !important; }
.tv-site #naverp.tv-dock a.active .tv-dock__ico { background: rgba(255,255,255,.18); border-color: rgba(255,255,255,.35); color: #fff; box-shadow: none; }
.tv-site #naverp.tv-dock a.active .tv-dock__lbl { position: static; transform: none; opacity: 1; padding: 0 0 0 4px; background: none; color: #fff; font-size: .84rem; }
.tv-site #naverp.tv-dock a.active .tv-dock__lbl::after { display: none; }
.tv-site #naverp.tv-dock a.active::before { content: ""; position: absolute; left: 50%; bottom: -7px; width: 5px; height: 5px; margin-left: -2px; border-radius: 50%; background: var(--tv-500); }
@media (max-width: 1199.98px) { .tv-dock__ico { width: 38px; height: 38px; font-size: .9rem; border-radius: 12px; } .tv-site #naverp.tv-dock { gap: 3px; } }
/* narrow screens: swipeable row, no visible scrollbar, soft edges */
@media (max-width: 991.98px) {
	.tv-site #naverp.tv-dock { justify-content: flex-start; width: auto; overflow-x: auto; scrollbar-width: none; padding: 8px !important;
		-webkit-mask-image: linear-gradient(90deg, transparent, #000 18px, #000 calc(100% - 18px), transparent); mask-image: linear-gradient(90deg, transparent, #000 18px, #000 calc(100% - 18px), transparent); }
	.tv-site #naverp.tv-dock::-webkit-scrollbar { display: none; }
	.tv-dock__lbl { display: none; }
	.tv-site #naverp.tv-dock a.active .tv-dock__lbl { display: inline; }
	.tv-site #naverp.tv-dock a.active::before { display: none; }
}

/* blueprint: measured fit (tv-blueprint.js sets --s/--tx/--ty); quiet chip list */
.tv-bp__fit { translate: var(--tx, 0px) var(--ty, 0px) !important; }
.tv-bp__list { scrollbar-width: none; }
.tv-bp__list::-webkit-scrollbar { display: none; }
@media (min-width: 1200px) { .tv-bp__note { grid-column: 1 / 2; } .tv-bp__board { overflow: visible; } }
/* wide, short board area on laptops: a flatter, wider view so the board fills it */
@media (min-width: 1200px) { .tv-bp__scene { transform: rotateX(calc(62deg + var(--by, 0deg))) rotateZ(calc(-40deg + var(--bx, 0deg))); } }

@media (min-width: 1200px) and (max-width: 1439.98px) { .tv-dock__ico { width: 40px; height: 40px; border-radius: 13px; font-size: .92rem; } }

/* ---------- Blueprint board: upright, readable tile labels ---------- */
.tv-bp__scene { --rx0: 52deg; --rz0: -32deg; transform: rotateX(calc(var(--rx0) + var(--by, 0deg))) rotateZ(calc(var(--rz0) + var(--bx, 0deg))); }
@media (min-width: 1200px) { .tv-bp__scene { --rx0: 62deg; --rz0: -40deg; transform: rotateX(calc(var(--rx0) + var(--by, 0deg))) rotateZ(calc(var(--rz0) + var(--bx, 0deg))); } }
.tv-bp__face { transform-style: preserve-3d; font-size: 1.5rem; gap: 0; }
/* the name stands up on its tile and faces the viewer; its size is divided by the board scale so it reads at ~11px */
.tv-bp__face span { position: absolute; left: 50%; top: 50%; max-width: none; transform-origin: 0 0;
	transform: translateZ(4px) rotateZ(calc(-1 * (var(--rz0) + var(--bx, 0deg)))) rotateX(calc(-1 * (var(--rx0) + var(--by, 0deg)))) translate(-50%, -112%);
	padding: calc(4px / var(--s, 1)) calc(9px / var(--s, 1)); border-radius: 999px; white-space: nowrap; font-size: calc(11px / var(--s, 1)); font-weight: 800; letter-spacing: 0; line-height: 1.1;
	background: #fff; color: var(--tv-ink); border: calc(1px / var(--s, 1)) solid var(--tv-line-strong); box-shadow: 0 calc(8px / var(--s, 1)) calc(18px / var(--s, 1)) calc(-8px / var(--s, 1)) rgba(12,42,99,.45); }
.tv-bp__tile--core .tv-bp__face span { background: var(--tv-ink); color: #fff; border-color: transparent; }
.tv-bp__face img { width: 40px; }

/* dock stuck under the fixed header: bubble below the icon, icons grow downwards */
.tv-site #naverp.tv-dock.is-stuck .tv-dock__ico { transform-origin: 50% 0; }
.tv-site #naverp.tv-dock.is-stuck a:not(.active) .tv-dock__lbl { bottom: auto; top: calc(100% + 30px); transform: translate(-50%, -6px); }
.tv-site #naverp.tv-dock.is-stuck a:not(.active):hover .tv-dock__lbl { transform: translate(-50%, 0); }
.tv-site #naverp.tv-dock.is-stuck a:not(.active) .tv-dock__lbl::after { top: auto; bottom: 100%; border-top-color: transparent; border-bottom-color: var(--tv-ink); }

/* ---------- Module ring: both sets at once (modules below, apps above) ---------- */
.tv-ring { height: calc(560px * var(--vfit, 1)); }
.tv-ring__stage { transform: rotateX(-8deg); }
.tv-ring__tab:not(.is-active) { opacity: .6; }
@media (max-width: 1199.98px) { .tv-ring { height: 520px; } }

.tv-ring__hint { position: relative; z-index: 2; margin-top: calc(56px * var(--vfit, 1)); }

/* ---------- Blueprint board: clean labels + edge orbit ---------- */
.tv-bp__board { isolation: isolate; }
.tv-bp__fit { position: relative; z-index: 2; }
.tv-bp__addons { z-index: auto !important; animation: none !important; }
.tv-bp__orb { transform: none; animation: none; z-index: 1; transition: none; }
.tv-bp__orb i { animation: none !important; }
/* module names: only on hover, or for a moment after the module is switched on; ERPNext always */
.tv-bp__tile:not(.tv-bp__tile--core) .tv-bp__face span { opacity: 0; transition: opacity .25s; }
.tv-bp__tile.is-on:hover .tv-bp__face span, .tv-bp__tile.is-on:focus-visible .tv-bp__face span, .tv-bp__tile.is-new .tv-bp__face span { opacity: 1; }
.tv-bp__tile:hover { z-index: 5; }
.tv-bp__face i { font-size: 1.7rem; }
/* centre sphere: smaller, clearly between the two rings */
.tv-ring { height: 640px; }
.tv-ring__core { width: 150px; height: 150px; margin: -75px 0 0 -75px; font-size: 1.05rem; z-index: 50; }
.tv-ring__core small { font-size: .58rem; }
@media (max-width: 1199.98px) { .tv-ring { height: 600px; } }

.tv-ring { height: 600px; }
.tv-ring__hint { margin-top: 30px; }

/* sphere: nudged down so it sits midway between the two rings */
.tv-ring__core { margin-top: -53px; }

/* tighter rings */
.tv-ring { height: 540px; }
.tv-ring__core { margin-top: -60px; }
.tv-ring__hint { margin-top: 18px; }
.tv-ring__core { margin-top: -66px; }
.tv-ring__hint { margin-top: 34px; }
/* lower ring closer to the sphere */
.tv-ring { height: 500px; }
.tv-ring__core { margin-top: -78px; }
.tv-ring__hint { margin-top: 26px; }
/* compact sphere for the tighter gap */
.tv-ring__core { width: 118px; height: 118px; margin: -54px 0 0 -59px; font-size: .9rem; }
.tv-ring__core small { font-size: .5rem; }
.tv-ring__core { margin-top: -57px; }

/* ---------- Ring centre: glass "Powered by Thirvusoft" badge (replaces the sphere) ---------- */
.tv-ring__core.tv-ring__badge {
	width: auto; height: auto; margin: 0; left: 50%; top: 50%; translate: -50% calc(-50% + 4px);
	display: inline-flex; align-items: center; gap: 12px; padding: 10px 22px 10px 10px; border-radius: 999px; text-align: left;
	background: rgba(255,255,255,.92); border: 1px solid #fff; color: var(--tv-ink); text-shadow: none; font-size: 1.1rem; font-weight: 800; letter-spacing: -.02em;
	box-shadow: 0 18px 40px -16px rgba(27,99,224,.55), 0 0 0 6px rgba(47,123,245,.08), inset 0 1px 0 #fff; backdrop-filter: blur(12px);
}
.tv-ring__badge::before { content: ""; position: absolute; inset: -6px; border-radius: inherit; padding: 2px; background: conic-gradient(from var(--tv-angle, 0deg), transparent 0 60%, var(--tv-cyan) 78%, var(--tv-500) 88%, transparent 96%);
	-webkit-mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0); mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0); animation: tv-beam 4s linear infinite; }
.tv-ring__badge::after { content: ""; position: absolute; inset: -30px -40px; z-index: -1; border-radius: 50%; background: radial-gradient(closest-side, rgba(47,123,245,.22), transparent); }
.tv-ring__badge img { width: 40px; height: 40px; padding: 4px; border-radius: 50%; background: #fff; box-shadow: 0 6px 14px -6px rgba(12,42,99,.35); object-fit: contain; }
.tv-ring__badge span { display: flex; flex-direction: column; line-height: 1.1; }
.tv-ring__badge small { font-family: var(--tv-mono); font-size: .58rem; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--tv-muted); margin-bottom: 3px; }
@media (prefers-reduced-motion: reduce) { .tv-ring__badge::before { animation: none; } }
.tv-ring__core.tv-ring__badge { translate: -50% calc(-50% + 19px); }

/* ---------- How we work: timeline rail, coverflow tilt, active step ---------- */
.tv-hs__track { position: relative; padding-top: 58px; perspective: 1400px; --rail: 0; }
.tv-hs__rail { position: absolute; left: max(24px, calc((100vw - 1240px) / 2 + 24px)); right: 0; top: 18px; height: 4px; border-radius: 4px; background: var(--tv-100); }
.tv-hs__rail i { position: absolute; left: 0; top: 0; bottom: 0; width: calc(var(--rail) * 100%); border-radius: inherit; background: var(--tv-grad); box-shadow: 0 0 14px rgba(34,184,240,.6); }
.tv-hs__rail i::after { content: ""; position: absolute; right: -7px; top: 50%; width: 14px; height: 14px; margin-top: -7px; border-radius: 50%; background: #fff; border: 3px solid var(--tv-cyan); box-shadow: 0 0 16px var(--tv-cyan); }
.tv-panel { --d: 0; transform: rotateY(calc(var(--d) * -22deg)) scale(calc(1 - (var(--d) * var(--d)) * .08)); transform-origin: 50% 50%; transition: box-shadow .4s, border-color .4s; }
.tv-panel__node { position: absolute; left: 34px; top: -54px; width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; font: 600 .74rem/1 var(--tv-mono); color: var(--tv-600); background: #fff; border: 2px solid var(--tv-200); box-shadow: 0 6px 14px -6px rgba(12,42,99,.3); transition: all .4s var(--tv-ease); }
.tv-panel__n { -webkit-text-stroke: 0; color: transparent; background: linear-gradient(180deg, var(--tv-100), rgba(228,239,255,0)); -webkit-background-clip: text; background-clip: text; transition: opacity .4s; }
.tv-panel.is-active { border-color: transparent; box-shadow: 0 40px 80px -30px rgba(27,99,224,.5), 0 0 0 2px var(--tv-300); }
.tv-panel.is-active .tv-panel__node { background: var(--tv-grad); color: #fff; border-color: transparent; transform: scale(1.18); box-shadow: 0 0 0 6px rgba(47,123,245,.15), var(--tv-glow); }
.tv-panel.is-active .tv-panel__n { background-image: var(--tv-grad); opacity: .22; }
.tv-panel.is-active .tv-panel__icon { animation: tv-hs-pop 2.4s ease-in-out infinite; }
@keyframes tv-hs-pop { 50% { transform: translateY(-6px) rotate(-6deg); box-shadow: 0 18px 30px -10px rgba(27,99,224,.7); } }
.tv-panel.is-active .tv-panel__tags span { background: #fff; border-color: var(--tv-300); }
.tv-panel--cta .tv-panel__node { display: none; }
/* less dead space around the pinned section */
.tv-hs__sticky { justify-content: center; padding-top: 0; }
@media (max-width: 599.98px) { .tv-hs__rail, .tv-panel__node { display: none; } .tv-hs__track { padding-top: 0; } .tv-panel { transform: none; } }
@media (prefers-reduced-motion: reduce) { .tv-panel { transform: none; } .tv-panel.is-active .tv-panel__icon { animation: none; } }
/* step nodes sit on the rail above each card (the card must not clip them) */
.tv-panel { overflow: visible; }
.tv-panel__n { overflow: hidden; }
.tv-panel__node { top: -58px; z-index: 2; }
/* the rail replaces the small progress bar; content sits higher (less empty space) */
.tv-hs__progress { display: none; }
@media (min-width: 992px) { .tv-hs__sticky { justify-content: flex-start; padding-top: clamp(24px, 6vh, 70px); } }

.tv-hs__rail i { transition: width .35s var(--tv-ease); }
.tv-hs__rail i::after { display: none; }
.tv-panel.is-done .tv-panel__node { background: var(--tv-600); color: #fff; border-color: transparent; }

/* ---------- Header: animated "Contact us" button ---------- */
.tv-nav__contact { position: relative; isolation: isolate; overflow: hidden; display: inline-flex; align-items: center; gap: .55rem; margin-left: 8px; padding: .62rem 1.15rem .62rem .95rem; border-radius: 999px;
	background: var(--tv-grad); background-size: 200% 100%; color: #fff !important; font-family: var(--tv-font); font-weight: 700; font-size: .93rem; text-decoration: none;
	box-shadow: 0 10px 24px -10px rgba(27,99,224,.75); animation: tv-cta-flow 6s ease-in-out infinite; transition: transform .25s var(--tv-ease), box-shadow .25s; }
@keyframes tv-cta-flow { 50% { background-position: 100% 0; } }
.tv-nav__contact::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(105deg, transparent 35%, rgba(255,255,255,.45) 50%, transparent 65%); transform: translateX(-120%); animation: tv-cta-shine 3.8s ease-in-out infinite; }
@keyframes tv-cta-shine { 0%, 60% { transform: translateX(-120%); } 100% { transform: translateX(120%); } }
.tv-nav__contact::after { content: ""; position: absolute; inset: -3px; z-index: -2; border-radius: inherit; background: var(--tv-grad); filter: blur(10px); opacity: .5; animation: tv-cta-glow 2.6s ease-in-out infinite; }
@keyframes tv-cta-glow { 50% { opacity: .9; } }
.tv-nav__contact-dot { position: relative; width: 8px; height: 8px; border-radius: 50%; background: #4ade80; box-shadow: 0 0 0 0 rgba(74,222,128,.7); animation: tv-live 1.8s infinite; }
.tv-nav__contact i { font-size: .8rem; transition: transform .35s var(--tv-ease); }
.tv-nav__contact:hover { transform: translateY(-2px); box-shadow: 0 16px 32px -10px rgba(27,99,224,.85); color: #fff !important; }
.tv-nav__contact:hover i { transform: translate(4px, -4px) rotate(-12deg); }
.tv-nav__contact.is-active { box-shadow: 0 0 0 3px rgba(47,123,245,.25), 0 10px 24px -10px rgba(27,99,224,.75); }
@media (max-width: 1199.98px) { .tv-nav__contact { margin: 8px 0 0; justify-content: center; padding: .85rem 1rem; } }
@media (prefers-reduced-motion: reduce) { .tv-nav__contact, .tv-nav__contact::before, .tv-nav__contact::after, .tv-nav__contact-dot { animation: none; } }

/* ---------- Contact form: blueprint option + pop-up ---------- */
.tv-field__row { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.tv-bp-open { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; border-radius: 999px; border: 1px solid var(--tv-line-strong); background: var(--tv-50); color: var(--tv-600); font: 700 .76rem/1.2 var(--tv-font); cursor: pointer; transition: all .25s var(--tv-ease); }
.tv-bp-open:hover { background: var(--tv-grad); color: #fff; border-color: transparent; box-shadow: var(--tv-glow); transform: translateY(-1px); }
.tv-bpmodal { position: fixed; inset: 0; z-index: 3000; display: flex; align-items: center; justify-content: center; padding: 16px; background: rgba(7,26,63,.45); backdrop-filter: blur(6px); opacity: 0; transition: opacity .2s; }
.tv-bpmodal[hidden] { display: none; }
.tv-bpmodal.is-open { opacity: 1; }
.tv-bpmodal__panel { position: relative; width: min(1280px, 100%); max-height: calc(100vh - 32px); overflow-y: auto; overscroll-behavior: contain; border-radius: 26px; background: #fff; box-shadow: 0 40px 100px -20px rgba(7,26,63,.6); transform: translateY(12px) scale(.98); transition: transform .25s var(--tv-ease); }
.tv-bpmodal.is-open .tv-bpmodal__panel { transform: none; }
.tv-bpmodal__close { position: absolute; right: 14px; top: 14px; z-index: 10; width: 40px; height: 40px; border-radius: 50%; border: 1px solid var(--tv-line); background: #fff; color: var(--tv-ink); cursor: pointer; box-shadow: var(--tv-shadow-sm); }
.tv-bpmodal__close:hover { background: var(--tv-grad); color: #fff; border-color: transparent; }
.tv-bpmodal .tv-section.tv-bp { min-height: 0; padding: 24px 0 !important; border-radius: 26px; }
.tv-bpmodal .tv-bp .tv-section__head .tv-eyebrow { display: none; }
.tv-bpmodal .tv-bp [data-bp-wa] { display: none; }
.tv-bpmodal-open { overflow: hidden; }

/* ---------- Industry scenes: walking people ---------- */
.tv-man.is-walking { animation: tv-man-walk var(--t, 6s) ease-in-out infinite alternate; animation-delay: var(--dl, 0s); }
@keyframes tv-man-walk { from { translate: 0 0; } to { translate: var(--wx) var(--wy); } }
.tv-man__bob { position: absolute; left: 0; top: 0; transform-style: preserve-3d; }
.tv-man.is-walking .tv-man__bob { animation: tv-man-bob .5s ease-in-out infinite; }
@keyframes tv-man-bob { 50% { translate: 0 0 2px; } }
.tv-man.is-walking .tv-man__leg { animation: tv-man-step .5s ease-in-out infinite alternate; }
.tv-man.is-walking .tv-man__leg--b { animation-direction: alternate-reverse; }
@keyframes tv-man-step { from { translate: -2px 0; } to { translate: 2px 0; } }
.tv-man__head { position: absolute; left: 0; top: 0; width: 11px; height: 11px; border-radius: 50%; transform-origin: 0 0; transform: var(--bb) translate(-50%, -50%);
	background: linear-gradient(#2a3b63 0 34%, #f1c7a1 34%); box-shadow: inset 0 0 0 .5px rgba(7,26,63,.25); }
@media (prefers-reduced-motion: reduce) { .tv-man, .tv-man__bob, .tv-man__leg { animation: none !important; } }

/* ---------- "Build it with the ERP blueprint": an inviting, animated button ---------- */
.tv-bp-open { position: relative; isolation: isolate; overflow: hidden; gap: 8px; padding: 6px 10px 6px 6px; border: 0; background: var(--tv-grad); background-size: 200% 100%; color: #fff; font-size: .78rem;
	box-shadow: 0 8px 20px -8px rgba(27,99,224,.7); animation: tv-cta-flow 5s ease-in-out infinite, tv-bp-nudge 4s ease-in-out infinite 1.5s; }
.tv-bp-open::before { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(105deg, transparent 35%, rgba(255,255,255,.5) 50%, transparent 65%); transform: translateX(-120%); animation: tv-cta-shine 3s ease-in-out infinite; }
.tv-bp-open::after { content: ""; position: absolute; inset: -4px; z-index: -2; border-radius: inherit; background: var(--tv-grad); filter: blur(8px); opacity: .45; animation: tv-cta-glow 2.4s ease-in-out infinite; }
.tv-bp-open__ico { width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; background: rgba(255,255,255,.22); font-size: .72rem; }
.tv-bp-open__ico i { animation: tv-bp-wand 2.4s ease-in-out infinite; }
.tv-bp-open em { font-style: normal; font-family: var(--tv-mono); font-size: .6rem; padding: 2px 6px; border-radius: 999px; background: #fff; color: var(--tv-600); }
.tv-bp-open:hover { transform: translateY(-2px) scale(1.03); box-shadow: 0 14px 28px -10px rgba(27,99,224,.85); animation-play-state: running, paused; }
@keyframes tv-bp-nudge { 0%, 70%, 100% { transform: none; } 76% { transform: translateY(-3px) rotate(-1.5deg); } 82% { transform: translateY(0) rotate(1deg); } 88% { transform: translateY(-1px); } }
@keyframes tv-bp-wand { 0%, 100% { transform: rotate(0) scale(1); } 50% { transform: rotate(-18deg) scale(1.15); } }
@media (prefers-reduced-motion: reduce) { .tv-bp-open, .tv-bp-open::before, .tv-bp-open::after, .tv-bp-open__ico i { animation: none; } }

/* ---------- "Come and click me": tapping hand, ripples and a "Try it!" bubble ---------- */
.tv-bp-cta { position: relative; display: inline-flex; }
.tv-bp-cta__ring { position: absolute; inset: 0; border-radius: 999px; border: 2px solid var(--tv-500); pointer-events: none; opacity: 0; animation: tv-bp-ripple 2.4s ease-out infinite; }
.tv-bp-cta__ring--b { animation-delay: .35s; }
@keyframes tv-bp-ripple { 0%, 28% { transform: scale(1); opacity: 0; } 32% { opacity: .7; } 70%, 100% { transform: scale(1.18, 1.6); opacity: 0; } }
.tv-bp-cta__hand { position: absolute; right: 26px; top: 60%; z-index: 3; color: #fff; font-size: 1.15rem; pointer-events: none;
	filter: drop-shadow(0 2px 2px rgba(7,26,63,.6)) drop-shadow(0 0 1px #1b63e0); animation: tv-bp-tap 2.4s ease-in-out infinite; }
.tv-bp-cta__hand i { color: #fff; -webkit-text-stroke: 1px var(--tv-700); }
@keyframes tv-bp-tap { 0% { transform: translate(18px, 22px) rotate(-12deg); opacity: 0; } 12% { opacity: 1; } 26% { transform: translate(0, 0) rotate(-12deg); } 30% { transform: translate(0, 3px) rotate(-12deg) scale(.88); } 36% { transform: translate(0, 0) rotate(-12deg); } 60% { transform: translate(0, 0) rotate(-12deg); opacity: 1; } 78%, 100% { transform: translate(18px, 22px) rotate(-12deg); opacity: 0; } }
.tv-bp-cta__tip { position: absolute; right: -6px; bottom: calc(100% + 8px); padding: 4px 10px; border-radius: 10px; background: var(--tv-ink); color: #fff; font: 700 .7rem/1.2 var(--tv-font); white-space: nowrap; pointer-events: none;
	animation: tv-bp-tip 2.4s ease-in-out infinite; }
.tv-bp-cta__tip::after { content: ""; position: absolute; right: 18px; top: 100%; border: 5px solid transparent; border-top-color: var(--tv-ink); }
@keyframes tv-bp-tip { 0%, 22% { transform: translateY(4px); opacity: 0; } 32%, 66% { transform: none; opacity: 1; } 76%, 100% { transform: translateY(4px); opacity: 0; } }
/* the button squishes at the moment the hand taps it */
.tv-bp-cta .tv-bp-open { animation: tv-cta-flow 5s ease-in-out infinite, tv-bp-press 2.4s ease-in-out infinite; }
@keyframes tv-bp-press { 0%, 27%, 36%, 100% { transform: none; } 30% { transform: scale(.95); } }
/* once the visitor is on it, the hint steps aside */
.tv-bp-cta:hover .tv-bp-cta__hand, .tv-bp-cta:hover .tv-bp-cta__tip, .tv-bp-cta:hover .tv-bp-cta__ring { animation: none; opacity: 0; }
.tv-bp-cta:hover .tv-bp-open { animation: tv-cta-flow 5s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { .tv-bp-cta__hand, .tv-bp-cta__tip, .tv-bp-cta__ring { display: none; } .tv-bp-cta .tv-bp-open { animation: none; } }
.tv-bp-cta__hand { right: -4px; top: 55%; }

/* ---------- Header "Contact us": same come-and-click hint (bubble below, since the button sits at the top) ---------- */
.tv-bp-cta--nav { margin-left: 8px; }
.tv-bp-cta--nav .tv-nav__contact { margin-left: 0; animation: tv-cta-flow 6s ease-in-out infinite, tv-bp-press 2.4s ease-in-out infinite; }
.tv-bp-cta--nav .tv-bp-cta__ring, .tv-bp-cta--nav .tv-bp-cta__hand, .tv-bp-cta--nav .tv-bp-cta__tip { animation-duration: 4.8s; }
.tv-bp-cta--nav .tv-nav__contact { animation-duration: 6s, 4.8s; }
.tv-bp-cta--nav .tv-bp-cta__hand { right: -2px; top: 58%; }
.tv-bp-cta--nav .tv-bp-cta__tip { bottom: auto; top: calc(100% + 10px); right: 4px; }
.tv-bp-cta--nav .tv-bp-cta__tip::after { top: auto; bottom: 100%; border-top-color: transparent; border-bottom-color: var(--tv-ink); }
.tv-bp-cta--nav:hover .tv-nav__contact { animation: tv-cta-flow 6s ease-in-out infinite; }
/* not on the contact page itself, and not inside the phone menu */
.tv-bp-cta--nav.is-here .tv-bp-cta__hand, .tv-bp-cta--nav.is-here .tv-bp-cta__tip, .tv-bp-cta--nav.is-here .tv-bp-cta__ring { display: none; }
.tv-bp-cta--nav.is-here .tv-nav__contact { animation: tv-cta-flow 6s ease-in-out infinite; }
@media (max-width: 1199.98px) {
	.tv-bp-cta--nav { display: flex; margin: 8px 0 0; }
	.tv-bp-cta--nav .tv-nav__contact { flex: 1; margin: 0; }
	.tv-bp-cta--nav .tv-bp-cta__hand, .tv-bp-cta--nav .tv-bp-cta__tip { display: none; }
}

/* ---------- Blueprint pop-up: a clear last step ---------- */
.tv-bpmodal .tv-bp__sum { grid-template-areas: "head head" "facts facts" "list step" "note actions"; }
.tv-bpstep { grid-area: step; margin: 0; padding: 8px 12px; border-radius: 12px; background: var(--tv-50); border: 1px dashed var(--tv-300); font-size: .76rem; line-height: 1.4; color: var(--tv-text); }
.tv-bpstep b { display: block; font-size: .64rem; letter-spacing: .1em; text-transform: uppercase; color: var(--tv-600); font-family: var(--tv-mono); font-weight: 500; }
.tv-bpuse { justify-content: space-between !important; gap: 12px !important; padding: .7rem 1rem .7rem 1.2rem !important; text-align: left; animation: tv-cta-flow 5s ease-in-out infinite; background-size: 200% 100% !important; }
.tv-bpuse__txt { display: flex; flex-direction: column; line-height: 1.15; }
.tv-bpuse__txt b { font-size: .95rem; }
.tv-bpuse__txt small { font-size: .7rem; font-weight: 500; opacity: .85; }
.tv-bpuse i { width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center; background: rgba(255,255,255,.22); animation: tv-bpuse-nudge 1.6s ease-in-out infinite; }
@keyframes tv-bpuse-nudge { 50% { transform: translateX(4px); } }
/* the form after the plan is added */
.tv-bpadded { display: flex; gap: 8px; align-items: flex-start; margin: 8px 0 0; padding: 9px 12px; border-radius: 12px; background: #ecfdf5; border: 1px solid #a7f3d0; color: #047857; font-size: .82rem; font-weight: 600; }
.tv-bpadded.is-in { animation: tv-pop .45s var(--tv-ease); }
.tv-bpadded i { margin-top: 2px; }
textarea.is-flash { animation: tv-bpflash 1.6s ease-out; }
@keyframes tv-bpflash { 0%, 30% { box-shadow: 0 0 0 4px rgba(34,197,94,.45); border-color: #22c55e; background: #f0fdf4; } 100% { box-shadow: 0 0 0 3px rgba(47,123,245,.18); } }
@media (max-width: 1199.98px) { .tv-bpmodal .tv-bp__sum { display: block; } .tv-bpstep { margin: 10px 0; } }

/* main CTA buttons: the same tap hint, slower and staggered */
.tv-bp-cta--btn .tv-bp-cta__ring, .tv-bp-cta--btn .tv-bp-cta__hand, .tv-bp-cta--btn .tv-bp-cta__tip { animation-duration: 4.8s; animation-delay: var(--tap-delay, 0s); }
.tv-bp-cta--btn .tv-bp-cta__ring--b { animation-delay: calc(var(--tap-delay, 0s) + .35s); }
.tv-bp-cta--btn > .tv-btn { animation: tv-bp-press 4.8s ease-in-out infinite; animation-delay: var(--tap-delay, 0s); }
.tv-bp-cta--btn .tv-bp-cta__hand { right: 10px; }
.tv-bp-cta--btn:hover > .tv-btn { animation: none; }
@media (max-width: 575.98px) { .tv-bp-cta--btn { display: flex; flex: 1 1 auto; } .tv-bp-cta--btn > .tv-btn { flex: 1; justify-content: center; } }
/* blueprint pop-up: keep the "Add this plan" button inside the card */
@media (min-width: 1200px) { .tv-bpmodal .tv-bp__sum { grid-template-columns: minmax(0, 1fr) minmax(0, 250px); } }
.tv-bpmodal .tv-bp__actions .tv-bpuse { width: 100%; }
.tv-bpuse__txt small { white-space: normal; }

/* How we work: no overlap at the end of the strip */
.tv-panel { transform: rotateY(calc(var(--d) * -12deg)) scale(calc(1 - (var(--d) * var(--d)) * .05)); }
.tv-hs__track { gap: 32px; padding-right: max(24px, calc((100vw - 1240px) / 2 + 24px)); }
.tv-hs__track > .tv-panel--cta { transform: none !important; }

/* ---------- Customers: interactive 3D logo wall ---------- */
.tv-cw { background: radial-gradient(900px 420px at 50% 100%, rgba(198,220,255,.5), transparent 70%), #fff; overflow: hidden; }
.tv-cw__head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; flex-wrap: wrap; margin-bottom: 18px; }
.tv-cw__head h2 { font-size: clamp(1.8rem, 3.2vw, 2.7rem); margin: .3rem 0 0; max-width: 620px; letter-spacing: -.035em; }
.tv-cw__stats { display: flex; gap: 10px; margin: 0; }
.tv-cw__stats div { padding: 10px 16px; border-radius: 16px; background: #fff; border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow-sm); min-width: 110px; }
.tv-cw__stats dt { font: 500 .62rem/1 var(--tv-mono); letter-spacing: .1em; text-transform: uppercase; color: var(--tv-muted); }
.tv-cw__stats dd { margin: 4px 0 0; }
.tv-cw__stats b { font-size: 1.6rem; font-weight: 800; letter-spacing: -.03em; background: var(--tv-grad); -webkit-background-clip: text; background-clip: text; color: transparent; }
.tv-cw__chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
.tv-cw__chip { display: inline-flex; align-items: center; gap: 7px; padding: 8px 14px; border-radius: 999px; border: 1px solid var(--tv-line); background: #fff; color: var(--tv-text); font: 600 .84rem/1 var(--tv-font); cursor: pointer; transition: all .25s var(--tv-ease); }
.tv-cw__chip i { color: var(--tv-500); }
.tv-cw__chip:hover { border-color: var(--tv-500); transform: translateY(-1px); }
.tv-cw__chip.is-on { background: var(--tv-grad); color: #fff; border-color: transparent; box-shadow: var(--tv-glow); }
.tv-cw__chip.is-on i { color: #fff; }
.tv-cw__stage { perspective: 1600px; padding: 26px 0 10px; }
.tv-cw__wall { --tx: 0; --ty: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 14px; transform-style: preserve-3d;
	transform: rotateX(calc(10deg + var(--tx) * -8deg)) rotateY(calc(var(--ty) * 10deg)); transition: transform .5s ease-out; }
.tv-cw__card { position: relative; height: 128px; transform-style: preserve-3d; transition: transform .7s var(--tv-ease), opacity .35s, filter .35s; animation: tv-cw-in .7s var(--tv-ease) both; animation-delay: calc(var(--k, 0) * 30ms); cursor: default; outline: none; }
@keyframes tv-cw-in { from { opacity: 0; transform: translateZ(-80px) rotateX(30deg); } }
.tv-cw__face, .tv-cw__back { position: absolute; inset: 0; border-radius: 18px; backface-visibility: hidden; -webkit-backface-visibility: hidden; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 12px; text-align: center; }
.tv-cw__face { background: #fff; border: 1px solid var(--tv-line); box-shadow: 0 14px 26px -18px rgba(12,42,99,.45); }
.tv-cw__face img { width: 56px; height: 56px; object-fit: contain; filter: grayscale(.25); transition: filter .3s, transform .4s var(--tv-ease); }
.tv-cw__face strong { font-size: .8rem; line-height: 1.2; color: var(--tv-ink); }
.tv-cw__back { transform: rotateY(180deg); background: var(--tv-grad-deep); color: #fff; box-shadow: 0 18px 34px -16px rgba(12,42,99,.6); }
.tv-cw__back small { font: 500 .62rem/1.2 var(--tv-mono); letter-spacing: .1em; text-transform: uppercase; color: #9fe7ff; }
.tv-cw__back strong { font-size: .92rem; line-height: 1.2; }
.tv-cw__back span { font-size: .7rem; color: rgba(255,255,255,.8); }
.tv-cw__back span i { color: #4ade80; }
.tv-cw__card:hover, .tv-cw__card:focus-visible, .tv-cw__card.is-flip { transform: translateZ(30px) rotateY(180deg); }
.tv-cw__card:hover .tv-cw__face img { filter: none; }
.tv-cw__card.is-dim { opacity: .18; filter: grayscale(1); transform: translateZ(-40px); pointer-events: none; }
.tv-cw__card--you { text-decoration: none; cursor: pointer; }
.tv-cw__card--you .tv-cw__face { background: linear-gradient(145deg, var(--tv-50), #fff); border: 2px dashed var(--tv-300); }
.tv-cw__card--you strong { color: var(--tv-700); }
.tv-cw__card--you small { font-size: .72rem; color: var(--tv-500); font-weight: 700; }
.tv-cw__plus { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; background: var(--tv-grad); color: #fff; box-shadow: var(--tv-glow); animation: tv-live 2s infinite; }
.tv-cw__card--you:hover { transform: translateZ(30px); }
@media (max-width: 767.98px) { .tv-cw__wall { grid-template-columns: repeat(2, minmax(0, 1fr)); transform: none; } .tv-cw__stats { width: 100%; } .tv-cw__stats div { flex: 1; min-width: 0; } }
@media (prefers-reduced-motion: reduce) { .tv-cw__card { animation: none; transition: none; } .tv-cw__wall { transform: none; } }
/* customer wall fixes: entrance without opacity (opacity < 1 flattens 3D and shows the mirrored front), 9 compact columns so the wall fits one screen */
@keyframes tv-cw-in { from { transform: translateZ(-80px) rotateX(30deg) scale(.9); } }
.tv-cw__card { transition: transform .7s var(--tv-ease), filter .35s; height: 108px; }
.tv-cw__card.is-dim { opacity: 1; filter: grayscale(1) opacity(.2); }
.tv-cw__wall { grid-template-columns: repeat(9, minmax(0, 1fr)); gap: 12px; }
.tv-cw__face img { width: 46px; height: 46px; }
.tv-cw__face strong, .tv-cw__back strong { font-size: .74rem; }
.tv-cw__stage { padding-top: 16px; }
@media (max-width: 1199.98px) { .tv-cw__wall { grid-template-columns: repeat(6, minmax(0, 1fr)); } }
@media (max-width: 767.98px) { .tv-cw__wall { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 479.98px) { .tv-cw__wall { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* ---------- Customers v2: spotlight + 3D logo sphere ---------- */
.tv-cw2 { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: clamp(24px, 4vw, 56px); align-items: center; margin-top: 18px; }
.tv-cw2__spot { position: relative; padding: 28px; border-radius: 28px; background: #fff; border: 1px solid var(--tv-line); box-shadow: 0 40px 80px -40px rgba(12,42,99,.45); overflow: hidden; isolation: isolate; }
.tv-cw2__spot::before { content: ""; position: absolute; right: -80px; top: -80px; width: 260px; height: 260px; border-radius: 50%; background: radial-gradient(closest-side, rgba(47,123,245,.18), transparent); z-index: -1; }
.tv-cw2__spot.is-swap > * { animation: tv-cw2-in .55s var(--tv-ease) both; }
.tv-cw2__spot.is-swap > *:nth-child(2) { animation-delay: .04s; } .tv-cw2__spot.is-swap > *:nth-child(3) { animation-delay: .08s; } .tv-cw2__spot.is-swap > *:nth-child(6) { animation-delay: .12s; }
@keyframes tv-cw2-in { from { opacity: 0; transform: translateY(10px); } }
.tv-cw2__logo { width: 104px; height: 104px; border-radius: 26px; display: grid; place-items: center; background: #fff; border: 1px solid var(--tv-line); box-shadow: 0 18px 36px -18px rgba(12,42,99,.45); margin-bottom: 16px; }
.tv-cw2__logo img { width: 78px; height: 78px; object-fit: contain; }
.tv-cw2__ind { display: inline-block; padding: 4px 10px; border-radius: 999px; background: var(--tv-50); color: var(--tv-600); font: 500 .68rem/1.2 var(--tv-mono); letter-spacing: .08em; text-transform: uppercase; }
.tv-cw2__spot h3 { font-size: 1.7rem !important; margin: 10px 0 6px; letter-spacing: -.03em; }
.tv-cw2__run { margin: 0 0 16px; font-size: .9rem; color: var(--tv-text); }
.tv-cw2__run i { color: #22c55e; }
.tv-cw2__lbl { display: block; margin-bottom: 8px; font: 500 .64rem/1 var(--tv-mono); letter-spacing: .1em; text-transform: uppercase; color: var(--tv-muted); }
.tv-cw2__chips { display: flex; flex-wrap: wrap; gap: 6px; min-height: 30px; }
.tv-cw2__chips span { padding: 6px 11px; border-radius: 10px; background: var(--tv-50); border: 1px solid var(--tv-line); font-size: .8rem; font-weight: 700; color: var(--tv-700); }
.tv-cw2__bar { height: 3px; margin: 22px 0 14px; border-radius: 3px; background: var(--tv-100); overflow: hidden; }
.tv-cw2__bar i { display: block; height: 100%; background: var(--tv-grad); transform-origin: 0 50%; animation: tv-cw2-bar var(--every, 3500ms) linear forwards; }
@keyframes tv-cw2-bar { from { transform: scaleX(0); } }
.tv-cw2:hover .tv-cw2__bar i { animation-play-state: paused; }
.tv-cw2__nav { display: flex; align-items: center; gap: 12px; font: 500 .8rem/1 var(--tv-mono); color: var(--tv-muted); }
.tv-cw2__nav button { width: 38px; height: 38px; border-radius: 50%; border: 1px solid var(--tv-line); background: #fff; color: var(--tv-600); cursor: pointer; transition: all .2s; }
.tv-cw2__nav button:hover { background: var(--tv-grad); color: #fff; border-color: transparent; }
.tv-cw2__orb { position: relative; height: clamp(380px, 34vw, 480px); }
.tv-cw2__orb::before { content: ""; position: absolute; left: 50%; top: 50%; width: 82%; aspect-ratio: 1; transform: translate(-50%, -50%); border-radius: 50%; border: 1px dashed rgba(47,123,245,.25); background: radial-gradient(closest-side, rgba(198,220,255,.55), transparent 75%); }
.tv-cw2__core { position: absolute; left: 50%; top: 50%; z-index: 50; transform: translate(-50%, -50%); width: 120px; height: 120px; border-radius: 50%; display: grid; place-items: center; align-content: center; gap: 0;
	background: rgba(255,255,255,.9); border: 1px solid #fff; box-shadow: 0 0 0 10px rgba(47,123,245,.08), 0 24px 50px -20px rgba(27,99,224,.6); backdrop-filter: blur(6px); }
.tv-cw2__core img { width: 34px; height: 34px; object-fit: contain; }
.tv-cw2__core b { font-size: 1.35rem; line-height: 1; background: var(--tv-grad); -webkit-background-clip: text; background-clip: text; color: transparent; }
.tv-cw2__core small { font-size: .62rem; color: var(--tv-muted); font-weight: 700; }
.tv-cw2__dot { position: absolute; left: 50%; top: 50%; width: 58px; height: 58px; margin: -29px 0 0 -29px; padding: 0; border-radius: 50%; border: 1px solid var(--tv-line); background: #fff; cursor: pointer;
	display: grid; place-items: center; box-shadow: 0 10px 22px -12px rgba(12,42,99,.5); opacity: calc(.35 + var(--depth, 1) * .65); transition: border-color .25s, box-shadow .25s, filter .25s; }
.tv-cw2__dot img { width: 38px; height: 38px; object-fit: contain; border-radius: 50%; }
.tv-cw2__dot:hover { border-color: var(--tv-500); }
.tv-cw2__dot.is-cur { border: 2px solid var(--tv-500); box-shadow: 0 0 0 6px rgba(47,123,245,.18), 0 0 26px rgba(34,184,240,.7); }
.tv-cw2__dot.is-dim { filter: grayscale(1); opacity: .12; pointer-events: none; }
@media (max-width: 991.98px) { .tv-cw2 { grid-template-columns: 1fr; } .tv-cw2__orb { height: 360px; order: -1; } }
@media (prefers-reduced-motion: reduce) { .tv-cw2__spot.is-swap > *, .tv-cw2__bar i { animation: none; } }

/* contact / careers: remember-my-details */
.tv-remember { grid-column: 1 / -1; display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin: -2px 0 0; font-size: .82rem; color: var(--tv-muted); cursor: pointer; }
.tv-remember input { width: 16px; height: 16px; accent-color: var(--tv-600); }
.tv-remember__clear { margin-left: auto; border: 0; background: none; padding: 0; color: var(--tv-600); font: 700 .78rem/1 var(--tv-font); cursor: pointer; text-decoration: underline; }
.tv-field .is-remembered { background: #f0f7ff; border-color: var(--tv-300); }

/* "Unlock" in the hero headline links to the login page; it looks like the rest of the headline */
.tv-h1-link { color: inherit !important; text-decoration: none; }

/* ================= Phone fixes (<= 575px) ================= */
@media (max-width: 575.98px) {
	/* floating WhatsApp / call buttons: smaller, so they cover less text */
	.tv-float { gap: 8px; bottom: 14px; }
	.tv-float__btn { width: 44px; height: 44px; font-size: 1.1rem; }
	/* service card 02: the phone fits its card */
	.tv-scard__art { min-height: 0; padding: 8px 0; }
	.tv-dev3--phone .tv-dev3__rig { scale: .72; margin: -64px 0 -60px; }
	.tv-dev3--browser .tv-dev3__rig { width: 100%; }
	/* service cards: content can never be wider than the card */
	.tv-scard { grid-template-columns: minmax(0, 1fr) !important; padding: 22px 20px !important; }
	.tv-scard > div { min-width: 0; }
	.tv-hub { width: 280px; height: 280px; transform: none; }
	.tv-scard__chips { flex-wrap: wrap; }
	.tv-scard .tv-hero__actions .tv-btn { width: 100%; justify-content: center; }
	/* bento: Tamil word and 50+ tile */
	.tv-tile__tamil.tv-word3d { font-size: 3.4rem; transform: none; animation: none; margin-top: .6rem; }
	.tv-word3d__side { display: none; }
	.tv-tile__orbit { display: none; }
	/* module ring: the tabs do nothing on phones (all items are listed), so hide them; tighter grid */
	.tv-ring__tabs { display: none; }
	.tv-ring-grid { gap: 8px; }
	.tv-ring-grid a { padding: 10px; font-size: .8rem; }
	/* blueprint builder */
	.tv-bp__step { display: grid; grid-template-columns: auto 1fr; column-gap: 10px; align-items: center; padding: 14px !important; }
	.tv-bp__n { position: static !important; width: 26px; height: 26px; font-size: .66rem; }
	.tv-bp__step h3 { margin: 0 !important; font-size: .98rem; }
	.tv-bp__step .tv-bp__chips, .tv-bp__step .tv-bp__mods { grid-column: 1 / -1; margin-top: 10px; }
	.tv-bp__board { height: 250px !important; min-height: 0 !important; }
	.tv-bp__facts { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; gap: 6px; }
	.tv-bp__facts dt { font-size: .52rem; letter-spacing: .04em; }
	.tv-bp__facts dd { font-size: .95rem; }
	/* industries: equal two-column tab grid */
	.tv-tabs__list { display: grid !important; grid-template-columns: 1fr 1fr; gap: 8px; }
	.tv-tab { padding: 12px 14px; font-size: .9rem; }
	.tv-tab i { display: none; }
	/* customers sphere: smaller badges */
	.tv-cw2__orb { height: 320px; }
	.tv-cw2__dot { width: 42px; height: 42px; margin: -21px 0 0 -21px; }
	.tv-cw2__dot img { width: 28px; height: 28px; }
	.tv-cw2__core { width: 96px; height: 96px; }
	.tv-cw2__spot { padding: 22px; }
	/* footer call-to-action link */
	.tv-cta-band__link { display: inline-flex; width: auto; }
	/* contact form: remember-me on one line, captcha input wider */
	.tv-remember { flex-wrap: nowrap; align-items: flex-start; }
	.tv-remember input { flex-shrink: 0; margin-top: 2px; }
	.tv-remember__clear { margin-left: 0; }
	.tv-captcha__code { flex: 0 0 auto; }
	/* module pages: the dock sits below the header scene instead of on top of it */
	.tv-site #naverp.tv-dock { margin-top: 10px !important; }
}
@media (max-width: 575.98px) { .tv-cta-band__link { display: inline; line-height: 1.6; font-size: .88rem; } .tv-cta-band__link i { margin-left: 4px; } }

/* the board scene is centred on the board even when it is wider than the board (phones), so scaling happens around the board centre */
.tv-bp__fit { position: absolute; left: 50%; top: 50%; width: 520px; height: 416px; margin: -208px 0 0 -260px; }

/* hero stack: flat labels above the scene (see tv-stack.js) */
.tv-stk__tag.is-anchor { visibility: hidden; }
.tv-stk__labels { position: absolute; inset: 0; z-index: 7; pointer-events: none; }
.tv-stk__flat { position: absolute; left: 0; top: 0; display: inline-flex; align-items: center; gap: 7px; height: 28px; margin-top: -14px; padding: 0 12px 0 10px; border-radius: 999px; white-space: nowrap;
	background: rgba(255,255,255,.96); border: 1px solid var(--tv-line); box-shadow: var(--tv-shadow); font: 700 .72rem/1 var(--tv-font); color: var(--tv-ink); will-change: transform; }
.tv-stk__flat i { width: 8px; height: 8px; border-radius: 50%; background: var(--tv-grad); box-shadow: 0 0 0 3px rgba(47,123,245,.18); }
.tv-stk__flat::before { content: ""; position: absolute; right: 100%; top: 50%; width: 18px; height: 1px; background: var(--tv-400); }
.tv-stk__flat--top::before { display: none; }
@media (max-width: 575.98px) { .tv-stk__labels { display: none; } }

.tv-stk__corner { position: absolute; width: 0; height: 0; pointer-events: none; }
.tv-stk__flat::before { width: 30px; }
.tv-stk__flat:not(.tv-stk__flat--top)::after { content: ""; position: absolute; right: calc(100% + 26px); top: 50%; width: 8px; height: 8px; margin-top: -4px; border-radius: 50%; background: #fff; border: 2px solid var(--tv-500); box-shadow: 0 0 8px rgba(47,123,245,.6); }

/* ---------- Half-screen laptops and tablets (600-991px): same effects, compact layout ---------- */
@media (min-width: 600px) and (max-width: 991.98px) {
	/* stacking service cards stay two-column and sticky */
	.tv-scard { grid-template-columns: minmax(0, 1fr) minmax(0, .85fr) !important; gap: 20px; padding: 26px !important; min-height: min(480px, 70vh); }
	.tv-scard h3 { font-size: clamp(1.35rem, 3vw, 1.8rem) !important; }
	.tv-scard p { font-size: .94rem; }
	.tv-scard .tv-hero__actions .tv-btn { width: 100%; justify-content: center; }
	.tv-dev3--phone .tv-dev3__rig { scale: .78; }
	.tv-dev3--browser .tv-dev3__rig { width: 100%; }
	.tv-hub { width: 260px; height: 260px; }
	.tv-dev3__float { display: none; }
	/* pinned 'How we work' strip */
	.tv-panel { width: min(420px, 70vw); min-height: 340px; padding: 26px; }
	.tv-hs__sticky { padding-top: 24px; }
}
@media (hover: none) and (max-width: 991.98px) { .tv-hero3__stage [data-par] { transform: none !important; } }
@media (min-width: 600px) and (max-width: 991.98px) { .tv-hs__sticky { justify-content: flex-start; padding-top: clamp(20px, 5vh, 56px); } }
.tv-ring__hint { margin-top: 44px; }

/* header menus: only one open at a time (a clicked/focused menu closes as soon as another one is hovered) */
@media (min-width: 1200px) {
	.tv-nav__list:has(.tv-nav__item:hover) .tv-nav__item:not(:hover) > .tv-menu { opacity: 0 !important; visibility: hidden !important; pointer-events: none; }
	.tv-nav__list:has(.tv-nav__item:hover) .tv-nav__item:not(:hover) > .tv-nav__link i { transform: none; }
}

/* ---------- ERPNext page scenes ---------- */
@keyframes tv-dio-move { 0% { translate: 0 0; scale: 0; } 6% { scale: 1; } 94% { scale: 1; } 100% { translate: var(--dx, 220px) var(--dy, 0px); scale: 0; } }
.tv-b.bar { transform-origin: 50% 50% 0; animation: tv-dio-bar 3.6s ease-in-out infinite; animation-delay: var(--dl, 0s); }
@keyframes tv-dio-bar { 0%, 100% { scale: 1 1 .45; } 50% { scale: 1 1 1; } }
.tv-b.screen > i:nth-child(2) { background: linear-gradient(160deg, #e6f4ff, #98c0ff 60%, #2f7bf5); box-shadow: inset 0 0 0 2px #2a3b63; }
.tv-site .col-lg-6 > .position-relative.h-100:has(> .tv-dio) { display: grid; place-items: center; overflow: visible; box-shadow: none; border-radius: 0; transform: none; background: none; }
.tv-site .col-lg-6 > .position-relative.h-100 > .tv-dio { height: calc(400px * var(--ds, 1)); }
@media (prefers-reduced-motion: reduce) { .tv-b.bar { animation: none; } }

/* on the contact page the header Contact us button stays still (the visitor is already there) */
.tv-bp-cta--nav.is-here .tv-nav__contact, .tv-bp-cta--nav.is-here .tv-nav__contact::before, .tv-bp-cta--nav.is-here .tv-nav__contact::after, .tv-bp-cta--nav.is-here .tv-nav__contact-dot { animation: none !important; }
.tv-bp-cta--nav.is-here .tv-nav__contact::before { display: none; }

/* ---------- 'Solution' in nine languages (homepage tile) ---------- */
.tv-tile__tamil.tv-word3d { font-family: "Noto Sans Tamil", "Noto Sans Devanagari", "Noto Sans Malayalam", "Noto Sans Kannada", "Noto Sans Telugu", "Noto Sans Bengali", "Noto Sans Gujarati", var(--tv-font); white-space: nowrap; line-height: 1.25; }
.tv-word3d.is-swap { animation: tv-word-flip .7s var(--tv-ease), tv-word-sway 9s ease-in-out infinite; }
@keyframes tv-word-flip { 0% { scale: 1 .1; filter: blur(4px); } 60% { scale: 1 1.06; filter: none; } 100% { scale: 1 1; } }
.tv-lang b { font-family: "Noto Sans Tamil", "Noto Sans Devanagari", "Noto Sans Malayalam", "Noto Sans Kannada", "Noto Sans Telugu", "Noto Sans Bengali", "Noto Sans Gujarati", var(--tv-font); font-weight: 700; color: var(--tv-600); margin-right: 4px; }
@media (max-width: 575.98px) { .tv-word3d.is-swap { animation: tv-word-flip .7s var(--tv-ease); } }

/* blueprint pop-up: "Add this plan to my message" gets the click-me hint */
.tv-bp-cta--use { display: flex; width: 100%; }
.tv-bp-cta--use > .tv-bpuse { flex: 1; animation: tv-cta-flow 5s ease-in-out infinite, tv-bp-press 2.4s ease-in-out infinite; }
.tv-bp-cta--use .tv-bp-cta__ring { animation-name: tv-bp-ripple-use; }
@keyframes tv-bp-ripple-use { 0%, 28% { transform: scale(1); opacity: 0; } 32% { opacity: .7; } 70%, 100% { transform: scale(1.06, 1.35); opacity: 0; } }
.tv-bp-cta--use .tv-bp-cta__hand { right: 18px; top: 52%; }
.tv-bp-cta--use .tv-bp-cta__tip { right: 6px; }
.tv-bp-cta--use:hover > .tv-bpuse { animation: tv-cta-flow 5s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { .tv-bp-cta--use > .tv-bpuse { animation: none; } }
/* the plan button must fit its column: text may wrap, arrow never gets cut */
@media (min-width: 1200px) { .tv-bpmodal .tv-bp__sum { grid-template-columns: minmax(0, 1fr) minmax(0, 280px); } }
.tv-bp-cta--use { min-width: 0; }
.tv-bp-cta--use > .tv-bpuse { min-width: 0; white-space: normal; }
.tv-bp-cta--use .tv-bpuse__txt { min-width: 0; }
.tv-bp-cta--use .tv-bpuse i { flex-shrink: 0; }
@media (min-width: 1200px) {
	.tv-bp-cta--use > .tv-bpuse { padding: .62rem .7rem .62rem 1rem !important; gap: 8px !important; }
	.tv-bp-cta--use .tv-bpuse__txt b { font-size: .86rem; white-space: nowrap; }
	.tv-bp-cta--use .tv-bpuse__txt small { font-size: .66rem; }
	.tv-bp-cta--use .tv-bpuse i { width: 26px; height: 26px; font-size: .8rem; }
}

/* Resources menu: resource links + an 'Our Products' panel with each product */
.tv-menu--res { width: 540px; display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.tv-menu__col { display: grid; gap: 2px; align-content: start; }
.tv-menu__label { padding: 4px 12px 6px; font: 500 .64rem/1 var(--tv-mono); letter-spacing: .14em; text-transform: uppercase; color: var(--tv-muted); }
.tv-menu__prod { position: relative; overflow: hidden; display: grid; gap: 2px; align-content: start; padding: 12px; border-radius: 16px; background: linear-gradient(150deg, #0b1f4b, #1b4fc4 70%, #2f7bf5); color: #fff; }
.tv-menu__prod::after { content: ""; position: absolute; width: 180px; height: 180px; right: -70px; bottom: -70px; border-radius: 50%; background: radial-gradient(circle, rgba(34,184,240,.5), transparent 70%); pointer-events: none; }
.tv-menu__prod > a { position: relative; z-index: 1; color: #fff; text-decoration: none; }
.tv-menu__prod-head { display: flex; gap: 10px; align-items: center; padding: 4px 4px 10px; margin-bottom: 4px; border-bottom: 1px solid rgba(255,255,255,.16); }
.tv-menu__prod-ico { flex-shrink: 0; width: 36px; height: 36px; border-radius: 11px; display: grid; place-items: center; background: rgba(255,255,255,.16); }
.tv-menu__prod-head strong { display: block; font-size: .92rem; }
.tv-menu__prod-head small { display: block; font-size: .72rem; color: rgba(255,255,255,.72); }
.tv-menu__prod-item { display: flex; gap: 10px; align-items: center; padding: 7px 8px; border-radius: 10px; font-size: .84rem; font-weight: 600; transition: background .2s, transform .2s; }
.tv-menu__prod-item i { width: 18px; text-align: center; color: #9cd6ff; }
.tv-menu__prod-item:hover, .tv-menu__prod-item:focus-visible { background: rgba(255,255,255,.14); transform: translateX(3px); }
.tv-menu__prod-all { margin-top: 6px; padding: 6px 8px; font-size: .78rem; font-weight: 700; color: #9cd6ff !important; }
.tv-menu__prod-all i { transition: transform .2s; }
.tv-menu__prod-all:hover i { transform: translateX(4px); }
@media (max-width: 1199.98px) {
	.tv-menu--res { width: auto; display: none; grid-template-columns: 1fr; }
	.tv-nav__item.is-open > .tv-menu--res { display: grid; }
	.tv-menu__label { display: none; }
}

/* ================= Home: 'Where we work' as a live coverage radar ================= */
.tv-cov { overflow: hidden; }
.tv-cov__wrap { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); gap: clamp(28px, 4vw, 64px); align-items: center; }
.tv-cov__radar { position: relative; width: 100%; aspect-ratio: 1 / .70; }
.tv-cov__disc { position: absolute; inset: 0; }
.tv-cov__disc > i { position: absolute; left: 50%; top: 50%; width: calc(var(--s) * 100%); aspect-ratio: 1 / .57; translate: -50% -50%; border-radius: 50%;
	border: 1.5px dashed rgba(47,123,245,.35); background: radial-gradient(ellipse at center, rgba(47,123,245,.07), transparent 70%); }
.tv-cov__disc > i:nth-child(3) { border-style: solid; border-color: rgba(47,123,245,.22); box-shadow: 0 30px 60px -30px rgba(27,99,224,.35); background: radial-gradient(ellipse at center, rgba(255,255,255,.9), rgba(219,231,251,.55) 70%); }
.tv-cov__disc > i:nth-child(3) { z-index: -1; }
.tv-cov__sweep { position: absolute; left: 50%; top: 50%; width: 82%; aspect-ratio: 1; translate: -50% -50%; scale: 1 .57; border-radius: 50%;
	background: conic-gradient(from 0deg, rgba(34,184,240,.38), rgba(34,184,240,0) 55deg, transparent 360deg); animation: tv-cov-sweep 6s linear infinite; }
@keyframes tv-cov-sweep { to { rotate: 360deg; } }
.tv-cov__ping { position: absolute; left: 50%; top: 50%; width: 82%; aspect-ratio: 1 / .57; translate: -50% -50%; border-radius: 50%; border: 2px solid rgba(47,123,245,.5); animation: tv-cov-ping 4s ease-out infinite; }
.tv-cov__ping--b { animation-delay: 2s; }
@keyframes tv-cov-ping { 0% { scale: .05; opacity: .9; } 100% { scale: 1; opacity: 0; } }
.tv-cov__pin { position: absolute; left: 50%; top: 50%; translate: -50% -100%; z-index: 3; font-size: 2.2rem; color: var(--tv-600); filter: drop-shadow(0 8px 8px rgba(27,99,224,.35)); animation: tv-cov-pin 2.4s ease-in-out infinite; }
@keyframes tv-cov-pin { 50% { translate: -50% -118%; } }
.tv-cov__cities { position: absolute; inset: 0; margin: 0; padding: 0; list-style: none; z-index: 2; }
.tv-cov__cities li { position: absolute; left: var(--x); top: var(--y); translate: -50% -50%; display: inline-flex; align-items: center; gap: 6px; white-space: nowrap;
	padding: 5px 11px 5px 8px; border-radius: 999px; background: rgba(255,255,255,.92); border: 1px solid #fff; box-shadow: 0 8px 20px -8px rgba(11,31,75,.3);
	font-size: .82rem; font-weight: 700; color: var(--tv-ink); backdrop-filter: blur(6px); animation: tv-cov-pop .6s var(--tv-ease) both, tv-cov-bob 5s ease-in-out infinite; animation-delay: var(--d), calc(var(--d) * 3); }
.tv-cov__cities li::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--tv-grad); box-shadow: 0 0 0 3px rgba(47,123,245,.18); }
.tv-cov__cities li[style*="--r:3"]::before { background: #22b8f0; }
.tv-cov__cities li.is-home { top: calc(var(--y) + 26px); padding: 6px 14px 6px 10px; background: var(--tv-grad); color: #fff; border: 0; font-size: .9rem; }
.tv-cov__cities li.is-home::before { background: #fff; box-shadow: 0 0 0 3px rgba(255,255,255,.35); }
@keyframes tv-cov-pop { from { opacity: 0; scale: .4; } }
@keyframes tv-cov-bob { 50% { translate: -50% calc(-50% - 4px); } }
.tv-cov__radar:not(.is-in) .tv-cov__cities li { animation-play-state: paused; }
.tv-cov__body .tv-section__head { margin-bottom: 22px; max-width: none; }
.tv-cov__tiers { position: relative; list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.tv-cov__tiers::before { content: ""; position: absolute; left: 21px; top: 26px; bottom: 26px; width: 2px; background: linear-gradient(var(--tv-600), #22b8f0); opacity: .35; }
.tv-cov__tier { position: relative; display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 14px; padding: 12px 14px 12px 0; border-radius: 16px; transition: background .25s, box-shadow .25s, transform .25s; }
.tv-cov__tier:hover { background: #fff; box-shadow: var(--tv-shadow-sm); transform: translateX(4px); }
.tv-cov__ico { position: relative; z-index: 1; width: 44px; height: 44px; border-radius: 14px; display: grid; place-items: center; background: var(--tv-grad); color: #fff; box-shadow: var(--tv-glow); }
.tv-cov__tier h3 { font-size: 1.06rem; margin: 2px 0 4px; color: var(--tv-ink); }
.tv-cov__tier p { margin: 0; font-size: .93rem; line-height: 1.6; color: var(--tv-text); }
.tv-cov__links { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 20px; }
.tv-cov__links a { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 999px; background: #fff; border: 1px solid var(--tv-line); color: var(--tv-ink); font-size: .85rem; font-weight: 700; text-decoration: none; box-shadow: var(--tv-shadow-sm); transition: transform .2s, border-color .2s, color .2s; }
.tv-cov__links a i { color: var(--tv-600); }
.tv-cov__links a:hover { transform: translateY(-2px); border-color: var(--tv-500); color: var(--tv-600); }
@media (max-width: 991.98px) {
	.tv-cov__wrap { grid-template-columns: 1fr; }
	.tv-cov__radar { max-width: 560px; margin: 0 auto; }
	.tv-cov__body { max-width: 640px; margin: 0 auto; }
}
@media (max-width: 575.98px) {
	.tv-cov__cities li { font-size: .68rem; padding: 3px 8px 3px 6px; gap: 4px; }
	.tv-cov__cities li::before { width: 6px; height: 6px; }
	.tv-cov__cities li.is-home { font-size: .74rem; top: calc(var(--y) + 20px); }
	.tv-cov__pin { font-size: 1.6rem; }
	.tv-cov__links a { font-size: .8rem; padding: 7px 12px; }
}
@media (prefers-reduced-motion: reduce) { .tv-cov__sweep, .tv-cov__ping, .tv-cov__pin, .tv-cov__cities li { animation: none !important; } }

/* ================= Home FAQ: sticky side + numbered accordion ================= */
.tv-faqx__wrap { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.4fr); gap: clamp(28px, 4vw, 60px); align-items: start; }
.tv-faqx__side { position: sticky; top: 110px; }
.tv-faqx__side h2 { font-size: clamp(1.8rem, 3.2vw, 2.6rem); margin: 10px 0 0; }
.tv-faqx__q { position: relative; width: 150px; height: 150px; margin: 26px 0; perspective: 600px; }
.tv-faqx__q span { position: absolute; inset: 0; display: grid; place-items: center; font: 800 6.5rem/1 var(--tv-font); color: transparent; background: var(--tv-grad); -webkit-background-clip: text; background-clip: text;
	text-shadow: 0 1px 0 rgba(27,99,224,.25), 0 2px 0 rgba(27,99,224,.2), 0 3px 0 rgba(27,99,224,.16), 0 4px 0 rgba(27,99,224,.12), 0 14px 22px rgba(27,99,224,.25); animation: tv-faq-spin 6s ease-in-out infinite; }
@keyframes tv-faq-spin { 0%, 100% { transform: rotateY(-22deg) translateY(0); } 50% { transform: rotateY(22deg) translateY(-8px); } }
.tv-faqx__q i { position: absolute; border-radius: 50%; background: var(--tv-grad); opacity: .2; animation: tv-faq-orb 7s ease-in-out infinite; }
.tv-faqx__q i:nth-of-type(1) { width: 26px; height: 26px; right: 4px; top: 16px; }
.tv-faqx__q i:nth-of-type(2) { width: 14px; height: 14px; left: 8px; bottom: 26px; animation-delay: -2s; }
.tv-faqx__q i:nth-of-type(3) { width: 120px; height: 120px; left: 15px; top: 15px; opacity: .08; animation-duration: 9s; }
@keyframes tv-faq-orb { 50% { transform: translate(6px, -10px) scale(1.1); } }
.tv-faqx__ask { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; padding: 18px 20px; border-radius: 18px; background: linear-gradient(150deg, #0b1f4b, #1b4fc4 75%, #2f7bf5); color: #fff; box-shadow: var(--tv-shadow-lg); max-width: 300px; }
.tv-faqx__ask b { font-size: 1.05rem; }
.tv-faqx .tv-faq { display: grid; gap: 10px; max-width: none; margin: 0; counter-reset: none; }
.tv-faq__item { position: relative; background: #fff; border: 1px solid var(--tv-line); border-radius: 16px; box-shadow: var(--tv-shadow-sm); overflow: hidden; transition: box-shadow .3s, transform .3s, border-color .3s; }
.tv-faq__item::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--tv-grad); transform: scaleY(0); transition: transform .35s var(--tv-ease); }
.tv-faq__item:hover { transform: translateY(-2px); box-shadow: var(--tv-shadow); }
.tv-faq__item[open] { border-color: rgba(47,123,245,.35); box-shadow: 0 18px 40px -22px rgba(27,99,224,.45); background: linear-gradient(180deg, #fff, #f5f9ff); }
.tv-faq__item[open]::before { transform: scaleY(1); }
.tv-faq__item summary { cursor: pointer; list-style: none; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 14px; align-items: center; padding: 16px 18px; font-weight: 700; color: var(--tv-ink); }
.tv-faq__item summary::-webkit-details-marker { display: none; }
.tv-faq__item summary:focus-visible { outline: 2px solid var(--tv-500); outline-offset: -2px; border-radius: 16px; }
.tv-faq__n { width: 38px; height: 38px; border-radius: 12px; display: grid; place-items: center; font: 600 .8rem/1 var(--tv-mono); color: var(--tv-600); background: var(--tv-50); border: 1px solid var(--tv-100, #dbe7fb); transition: background .3s, color .3s; }
.tv-faq__item[open] .tv-faq__n { background: var(--tv-grad); color: #fff; border-color: transparent; box-shadow: var(--tv-glow); }
.tv-faq__t { font-size: .98rem; line-height: 1.4; }
.tv-faq__x { position: relative; width: 30px; height: 30px; border-radius: 50%; background: var(--tv-50); transition: background .3s, rotate .35s var(--tv-ease); }
.tv-faq__x::before, .tv-faq__x::after { content: ""; position: absolute; left: 50%; top: 50%; width: 12px; height: 2px; translate: -50% -50%; border-radius: 2px; background: var(--tv-600); }
.tv-faq__x::after { rotate: 90deg; transition: rotate .35s var(--tv-ease); }
.tv-faq__item[open] .tv-faq__x { background: var(--tv-600); rotate: 180deg; }
.tv-faq__item[open] .tv-faq__x::before, .tv-faq__item[open] .tv-faq__x::after { background: #fff; }
.tv-faq__item[open] .tv-faq__x::after { rotate: 0deg; }
.tv-faq__item p { margin: 0; padding: 0 22px 18px 70px; color: var(--tv-text); line-height: 1.7; font-size: .95rem; }
.tv-faq__item[open] p { animation: tv-faq-in .45s var(--tv-ease); }
@keyframes tv-faq-in { from { opacity: 0; transform: translateY(-6px); } }
@media (max-width: 991.98px) {
	.tv-faqx__wrap { grid-template-columns: 1fr; }
	.tv-faqx__side { position: static; text-align: center; }
	.tv-faqx__side .tv-eyebrow { justify-content: center; }
	.tv-faqx__q, .tv-faqx__ask { display: none; }
}
@media (max-width: 575.98px) {
	.tv-faq__item summary { gap: 10px; padding: 14px 12px; }
	.tv-faq__n { width: 32px; height: 32px; font-size: .72rem; }
	.tv-faq__t { font-size: .92rem; }
	.tv-faq__item p { padding: 0 16px 16px; font-size: .92rem; }
}
@media (prefers-reduced-motion: reduce) { .tv-faqx__q span, .tv-faqx__q i { animation: none; } }
.tv-faqx__ask { gap: 34px; padding-bottom: 20px; }
@media (min-width: 992px) { .tv-faqx__wrap { grid-template-columns: minmax(0, .9fr) minmax(0, 1.4fr); } }

/* radar v2: bigger disc, flat sweep, outer ring in front of the section background */
.tv-cov__radar { aspect-ratio: 1 / .78; }
.tv-cov__disc > i { aspect-ratio: 1 / .60; }
.tv-cov__disc > i:nth-child(3) { z-index: auto; }
.tv-cov__disc > i:nth-child(1) { background: radial-gradient(ellipse at center, rgba(47,123,245,.16), transparent 72%); }
.tv-cov__sweep { width: 84%; scale: 1 .60; animation: none; overflow: hidden; background: none; }
.tv-cov__sweep::before { content: ""; position: absolute; inset: 0; border-radius: 50%; background: conic-gradient(from 0deg, rgba(34,184,240,.42), rgba(34,184,240,0) 60deg, transparent 360deg); animation: tv-cov-sweep 6s linear infinite; }
.tv-cov__ping { width: 84%; aspect-ratio: 1 / .60; }
@media (prefers-reduced-motion: reduce) { .tv-cov__sweep::before { animation: none; } }
@media (max-width: 575.98px) { .tv-cov__radar { width: calc(100% + 24px); margin-left: -12px; } }
/* Coimbatore sits at the centre, the pin stands on top of it */
.tv-cov__cities li.is-home, .tv-cov__cities li.is-home { top: var(--y); }
.tv-cov__pin { top: calc(50% - 15px); }
@media (max-width: 575.98px) { .tv-cov__cities li.is-home { top: var(--y); } .tv-cov__pin { top: calc(50% - 11px); } }
