.tv-cal .planbox{transform-origin:0 0}.tv-cal .planbox,.tv-cal .planbox svg.planbg{position:absolute;top:0;left:0;width:1180px;height:760px}.tv-cal .planbox svg.planbg{display:block}.tv-cal .ptable{position:absolute;cursor:pointer}.tv-cal .ptable .tbody{position:absolute;inset:0;background:hsla(0,0%,100%,.1);border:2px solid hsla(0,0%,100%,.45);border-radius:10px}.tv-cal .ptable.round .tbody{border-radius:50%}.tv-cal .ptable:hover .tbody{border-color:#fff}.tv-cal .ptable .pchair{position:absolute;width:15px;height:15px;border-radius:50%;background:hsla(0,0%,100%,.14);border:1.5px solid hsla(0,0%,100%,.26)}.tv-cal .ptable .tnum{position:absolute;inset:0;display:grid;place-items:center;color:#fff;font-size:15px;font-weight:700;pointer-events:none}.tv-cal .ptable .sdot{position:absolute;top:-4px;right:-4px;width:14px;height:14px;border-radius:50%;border:2px solid #0a0c10}.tv-cal .ptable.tfree .tbody{background:hsla(0,0%,100%,.025);border-color:hsla(0,0%,100%,.26)}.tv-cal .ptable.tfree:hover .tbody{border-color:hsla(0,0%,100%,.45)}.tv-cal .ptable.tfree .tnum{color:var(--muted2);font-size:12px}.tv-cal .ptable.tfree .sdot{display:none}.tv-cal .tgroup.tfree .occupied,.tv-cal .tgroup.tfree .plank{fill:hsla(0,0%,100%,.025);stroke:hsla(0,0%,100%,.26)}.tv-cal .tgroup.tfree:hover .occupied,.tv-cal .tgroup.tfree:hover .plank{stroke:hsla(0,0%,100%,.45)}.tv-cal .tgroup.tfree .tnum{fill:var(--muted2);font-size:12px}.tv-cal .tgroup.tfree .sdot{display:none}.tv-cal .tgroup.pick .occupied,.tv-cal .tgroup.pick .plank{fill:rgba(48,209,88,.22);stroke:#30d158;stroke-width:3}.tv-cal .fchip.locked{color:var(--muted)}.tv-cal .chipfloat.stack{flex-direction:column;align-items:flex-end}.tv-cal .room-closed{fill:hsla(0,0%,100%,.07);stroke:none;pointer-events:none}.tv-cal .tgroup.closed{opacity:.45;cursor:pointer}.tv-cal .tgroup.closed .occupied,.tv-cal .tgroup.closed .plank{fill:hsla(0,0%,100%,.025);stroke:hsla(0,0%,100%,.26)}.tv-cal .tgroup.closed .tnum{fill:var(--muted2)}.tv-cal .tgroup.closed .sdot{display:none}.tv-cal *{scrollbar-width:thin;scrollbar-color:hsla(0,0%,100%,.22) transparent}.tv-cal ::-webkit-scrollbar{width:10px;height:10px;background:transparent}.tv-cal ::-webkit-scrollbar-track{background:transparent}.tv-cal ::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.18);border-radius:999px;border:2px solid transparent;background-clip:padding-box}.tv-cal ::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.32);background-clip:padding-box;border:2px solid transparent}.tv-cal ::-webkit-scrollbar-corner{background:transparent}.tv-cal .sheet-handle{display:none}.tv-cal .ptable,.tv-cal .stage svg.plan,.tv-cal .tgroup{touch-action:none}@media(max-width:1199px){.tv-cal .btn,.tv-cal .chip,.tv-cal .drawer .btn,.tv-cal .dtab,.tv-cal .fchip,.tv-cal .menu button,.tv-cal .ptoggle,.tv-cal .sync{min-height:44px}.tv-cal .ptoggle,.tv-cal .zbtn{width:44px;height:44px}.tv-cal input,.tv-cal select{min-height:44px}.tv-cal .switch{position:relative}.tv-cal .switch:after{content:"";position:absolute;inset:-8px -6px}.tv-cal .logo{width:44px;height:44px;border-radius:12px}.tv-cal .maptitle{display:none}.tv-cal .stage svg.plan{inset:62px 0 0 0;height:calc(100% - 62px)}.tv-cal .chipfloat,.tv-cal .chipfloat.stack{top:10px;left:66px;right:10px;flex-direction:row;align-items:center;justify-content:flex-start;overflow-x:auto;gap:8px;padding-bottom:2px;scrollbar-width:none}.tv-cal .chipfloat::-webkit-scrollbar{display:none}.tv-cal .chipfloat>*{flex:none}.tv-cal .fchip{white-space:nowrap}.tv-cal .menu{position:fixed;top:140px;left:auto;right:12px;width:min(280px,calc(100vw - 24px));min-width:0}.tv-cal .zoomer{top:auto;bottom:16px}}@media(min-width:1000px) and (max-width:1199px){.tv-cal .dash{grid-template-columns:300px minmax(0,1fr);gap:12px;padding:12px}.tv-cal .dash.collapsed{grid-template-columns:minmax(0,1fr)}.tv-cal .panel{height:calc(100vh - 80px);gap:10px}.tv-cal .widget#w-list{flex:1;min-height:220px}.tv-cal .resgrid{grid-template-columns:1fr;max-height:none}.tv-cal .stage{min-height:calc(100vh - 80px)}.tv-cal #w-occ,.tv-cal .loadcard{display:none}.tv-cal .app-inner{padding:10px 14px}}@media(max-width:999px){.tv-cal .dash,.tv-cal .dash.collapsed{display:block;padding:0;max-width:none}.tv-cal .stage{min-height:calc(100dvh - 58px);height:calc(100dvh - 58px);border-radius:0;border-width:0}.tv-cal .stage svg.plan{inset:62px 0 60px 0;height:calc(100% - 122px)}.tv-cal .chipfloat,.tv-cal .chipfloat.stack{display:flex;left:10px}.tv-cal .dash .panel,.tv-cal .dash.collapsed .panel{position:fixed;left:0;right:0;top:auto;bottom:0;width:auto;height:min(76dvh,680px);z-index:55;display:flex;flex-direction:column;gap:12px;padding:0 14px calc(84px + env(safe-area-inset-bottom));overflow:auto;border:1px solid var(--stroke2);border-bottom:0;border-radius:22px 22px 0 0;background:rgba(8,10,14,.82);backdrop-filter:blur(30px) saturate(170%);transform:translateY(calc(100% - 60px));transition:transform .28s}.tv-cal .dash.panel-open .panel{transform:none}.tv-cal .panel:before{inset:0}.tv-cal .sheet-handle{display:flex;align-items:center;gap:10px;position:sticky;top:0;z-index:4;flex:none;min-height:60px;margin:0 -14px;padding:14px 16px 10px;border:0;background:rgba(8,10,14,.9);color:var(--ink);font:inherit;text-align:left;cursor:pointer;border-radius:22px 22px 0 0}.tv-cal .sheet-handle .bar{position:absolute;top:6px;left:50%;width:42px;height:4px;margin-left:-21px;border-radius:99px;background:hsla(0,0%,100%,.28)}.tv-cal .sheet-handle b{flex:1;font-size:13px;font-weight:700}.tv-cal .sheet-handle i{font-style:normal;color:var(--muted);font-size:16px}.tv-cal .widget#w-list{flex:none;min-height:0}.tv-cal .resgrid{max-height:none;overflow:visible}.tv-cal .grip{display:none}.tv-cal .chiprow{padding-right:0}.tv-cal .ptoggle{display:none}.tv-cal .fab{display:block;bottom:calc(74px + env(safe-area-inset-bottom));min-height:48px}.tv-cal.sheet-open .fab{bottom:calc(14px + env(safe-area-inset-bottom))}.tv-cal header .btn.primary{display:none}.tv-cal .zoomer{display:flex;flex-direction:row;left:12px;bottom:calc(74px + env(safe-area-inset-bottom))}.tv-cal .hint{left:12px;right:12px;bottom:calc(132px + env(safe-area-inset-bottom));max-width:none}}@media(min-width:768px) and (max-width:999px){.tv-cal .resgrid{grid-template-columns:1fr 1fr}.tv-cal .loadcard{display:none}.tv-cal .stage{min-height:calc(100dvh - 66px);height:calc(100dvh - 66px)}.tv-cal .app-inner{padding:10px 14px}}@media(max-width:767px){.tv-cal .app-inner{padding:7px 10px;gap:8px}.tv-cal .sync{display:none}.tv-cal .daytabs{touch-action:pan-x;cursor:auto}.tv-cal .dtab{font-size:14px;padding:11px 14px}.tv-cal .loadcard{display:none}.tv-cal .chipfloat,.tv-cal .chipfloat.stack{top:8px;left:8px;right:8px;justify-content:flex-start}.tv-cal .fchip{font-size:13px}.tv-cal .menu{top:122px;left:12px;right:12px;width:auto}.tv-cal .menu button{font-size:15px;padding:12px}.tv-cal .resgrid{grid-template-columns:1fr}.tv-cal .tnum{font-size:20px}.tv-cal .room-label,.tv-cal .tgroup.tfree .tnum{font-size:18px}.tv-cal .overlay{padding:0;place-items:stretch}.tv-cal .modal{height:100dvh;max-height:100dvh;border-radius:0;border-width:0}.tv-cal .drawer,.tv-cal .modal{width:100%;padding:16px 14px calc(20px + env(safe-area-inset-bottom))}.tv-cal .drawer{border-left:0}.tv-cal .form-grid,.tv-cal .wiz-choose{grid-template-columns:1fr}.tv-cal .minimap{max-height:40vh}.tv-cal .calgrid{gap:5px}.tv-cal .calcell{min-height:52px;padding:7px 2px}.tv-cal .toast{bottom:calc(140px + env(safe-area-inset-bottom))}}.tv-cal .dtab.cal.orari-btn{display:inline-flex;align-items:center;gap:7px}.tv-cal .dtab.cal.orari-btn svg{width:15px;height:15px;flex:none}.tv-cal .dtab.closed{opacity:.5}.tv-cal .dtab.closed .g{color:var(--muted2)}.tv-cal .dtab .edot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--amber);margin-left:6px;vertical-align:middle;box-shadow:0 0 8px rgba(255,214,10,.7)}.tv-cal .overlay#orariOverlay{z-index:80}.tv-cal .modal.orari-modal{width:min(940px,100%);height:min(860px,92vh);max-height:none;display:flex;flex-direction:column;padding:0;overflow:hidden}.tv-cal .orari-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;padding:22px 22px 14px}.tv-cal .orari-close{min-height:44px;min-width:44px;padding:11px 18px}.tv-cal .orari-body{flex:1;overflow:auto;padding:0 22px 18px;-webkit-overflow-scrolling:touch}.tv-cal .orari-sec{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted2);margin:22px 2px 10px}.tv-cal .orari-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.tv-cal .orari-card{position:relative;background:radial-gradient(120% 90% at 0 0,hsla(0,0%,100%,.12),hsla(0,0%,100%,0) 60%),hsla(0,0%,100%,.045);border:1px solid hsla(0,0%,100%,.12);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.2),0 8px 20px rgba(0,0,0,.3);border-radius:20px;padding:16px;display:flex;flex-direction:column;gap:12px;transition:border-color .25s,background .25s}.tv-cal .orari-card.std{border-color:rgba(125,140,255,.4);background:radial-gradient(120% 90% at 0 0,rgba(125,140,255,.18),hsla(0,0%,100%,0) 60%),hsla(0,0%,100%,.05)}.tv-cal .orari-card.mod{border-color:rgba(255,214,10,.4)}.tv-cal .orari-card.chiuso{background:hsla(0,0%,100%,.025)}.tv-cal .orari-card-top{display:flex;justify-content:space-between;align-items:center;gap:10px}.tv-cal .orari-title{font-size:16px;font-weight:700;display:flex;align-items:center;gap:8px;flex-wrap:wrap}.tv-cal .orari-tag{font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#ffe28a;border:1px solid rgba(255,214,10,.45);background:rgba(255,214,10,.1);border-radius:999px;padding:3px 9px;animation:orariPop .3s ease-out}.tv-cal .orari-toggle{display:inline-flex;align-items:center;gap:10px;min-height:44px;padding:0 4px 0 12px;border:1px solid var(--stroke);background:hsla(0,0%,100%,.05);border-radius:999px;color:var(--muted);font:inherit;font-size:13px;font-weight:700;cursor:pointer;flex:none}.tv-cal .orari-toggle.on{color:#b8f3c8;border-color:rgba(48,209,88,.4)}.tv-cal .orari-toggle .switch-pill{width:52px;height:32px;border-radius:999px;background:hsla(0,0%,100%,.15);border:1px solid var(--stroke2);position:relative;transition:.2s}.tv-cal .orari-toggle .switch-pill i{position:absolute;top:3px;left:3px;width:24px;height:24px;border-radius:50%;background:#fff;transition:.2s}.tv-cal .orari-toggle.on .switch-pill{background:var(--green);border-color:rgba(48,209,88,.6)}.tv-cal .orari-toggle.on .switch-pill i{left:23px}.tv-cal .orari-bar{padding-bottom:16px}.tv-cal .orari-track{position:relative;height:34px;border-radius:12px;background:hsla(0,0%,100%,.05);border:1px solid var(--stroke);overflow:hidden}.tv-cal .orari-track.vuota{border-style:dashed;display:grid;place-items:center}.tv-cal .orari-chiuso-txt{font-size:12px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted2)}.tv-cal .orari-seg{position:absolute;top:3px;bottom:3px;border-radius:9px;display:grid;place-items:center;overflow:hidden;transition:left .35s cubic-bezier(.3,.7,.2,1),width .35s cubic-bezier(.3,.7,.2,1);animation:orariIn .45s cubic-bezier(.3,.7,.2,1);transform-origin:left}.tv-cal .orari-seg:after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,hsla(0,0%,100%,.28) 50%,transparent 70%);background-size:220% 100%;animation:orariShine 4.5s ease-in-out infinite}.tv-cal .orari-seg span{position:relative;z-index:1;font-size:11px;font-weight:800;color:#0b0d11;white-space:nowrap}.tv-cal .orari-seg.sera{background:linear-gradient(180deg,#a9b4ff,var(--indigo));box-shadow:0 0 16px rgba(125,140,255,.45)}.tv-cal .orari-seg.giorno{background:linear-gradient(180deg,#ffe97a,var(--amber));box-shadow:0 0 16px rgba(255,214,10,.35)}.tv-cal .orari-ticks{position:relative;height:0}.tv-cal .orari-ticks span{position:absolute;top:5px;transform:translateX(-50%);font-size:10px;font-weight:700;color:var(--muted2)}.tv-cal .orari-ticks span:first-child{transform:none}.tv-cal .orari-ticks span:last-child{transform:translateX(-100%)}.tv-cal .orari-fasce{display:flex;flex-direction:column;gap:10px}.tv-cal .orari-fascia{display:flex;gap:10px;align-items:flex-end}.tv-cal .orari-fascia label{flex:1;min-width:0}.tv-cal .orari-fascia .lbl{display:block;color:var(--muted);font-size:10px;font-weight:800;margin-bottom:5px;text-transform:uppercase;letter-spacing:.06em}.tv-cal .orari-fascia select{min-height:44px}.tv-cal .orari-x{flex:none;width:44px;height:44px;border-radius:12px;border:1px solid rgba(255,69,58,.3);background:rgba(255,69,58,.1);color:#ffb3ae;font-size:22px;line-height:1;cursor:pointer}.tv-cal .orari-add{min-height:44px;border-radius:12px;border:1px dashed var(--stroke2);background:transparent;color:var(--muted);font:inherit;font-size:13px;font-weight:700;cursor:pointer}.tv-cal .orari-add:hover{color:#fff;border-color:hsla(0,0%,100%,.4)}.tv-cal .orari-warn{background:rgba(255,214,10,.08);border:1px solid rgba(255,214,10,.35);color:#ffe28a;border-radius:14px;padding:11px 12px;font-size:13px;line-height:1.5}.tv-cal .orari-reset{min-height:44px;width:100%}.tv-cal .orari-reset:disabled{opacity:.4;cursor:default}.tv-cal .orari-foot{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;padding:14px 22px;border-top:1px solid var(--stroke);color:var(--muted);font-size:13px;background:hsla(0,0%,100%,.03)}.tv-cal .orari-soon{font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border:1px solid var(--stroke2);border-radius:999px;padding:4px 10px}.tv-cal .orari-soon.on{color:#b8f3c8;border-color:rgba(48,209,88,.4)}@keyframes orariIn{0%{transform:scaleX(0);opacity:0}to{transform:none;opacity:1}}@keyframes orariPop{0%{transform:scale(.7);opacity:0}to{transform:none;opacity:1}}@keyframes orariShine{0%,55%{background-position:160% 0}to{background-position:-60% 0}}@media(prefers-reduced-motion:reduce){.tv-cal .orari-seg,.tv-cal .orari-seg:after,.tv-cal .orari-tag{animation:none}}@media(max-width:640px){.tv-cal .overlay#orariOverlay{padding:0}.tv-cal .modal.orari-modal{width:100%;height:100dvh;border-radius:0;border:0}.tv-cal .orari-head{padding:max(16px,env(safe-area-inset-top)) 16px 12px}.tv-cal .orari-body{padding:0 16px 16px}.tv-cal .orari-grid{grid-template-columns:1fr}.tv-cal .orari-ticks span:nth-child(2n){display:none}.tv-cal .orari-foot{padding:12px 16px max(12px,env(safe-area-inset-bottom))}}.tv-cal .dtab-tools{position:sticky;right:0;z-index:2;flex:none;display:flex;gap:6px;padding-left:24px;background:linear-gradient(90deg,transparent,#07080b 22px)}.tv-cal .btn:disabled{opacity:.4;cursor:default}