/* Shared presentation components. All selectors stay inside the ft namespace. */
.ft-icon{display:inline-block;flex:none;vertical-align:middle;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.ft-accent,.ft-positive{color:var(--lime)}.ft-negative{color:var(--red)}.ft-caption{font-size:12px;color:var(--text-3);line-height:1.5}.ft-card,.ft-kpi,.ft-sheet{font-family:var(--font);font-variant-numeric:tabular-nums;color:var(--text)}
.ft-page-title{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:24px;font-family:var(--font)}.ft-page-title h1{font-size:52px;line-height:1;letter-spacing:-.01em;font-weight:800;margin:0 0 12px}.ft-page-title p{font-size:20px;color:var(--text-2);margin:0}.ft-tagline{display:flex;align-items:center;gap:16px;font-size:13px;font-weight:700;letter-spacing:.24em;color:var(--lime);white-space:nowrap}.ft-tagline:before,.ft-tagline:after{content:'';height:1px;width:56px;background:var(--lime)}
.ft-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);padding:24px;min-width:0}.ft-card-highlight{border:1.5px solid var(--lime-line);box-shadow:var(--glow)}.ft-card-body{min-width:0}.ft-section-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px}.ft-section-header h2{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:700;line-height:1.25;margin:0;letter-spacing:0;min-width:0}.ft-section-header h2>.ft-icon{color:var(--lime)}
.ft-button{display:inline-flex;align-items:center;justify-content:center;gap:10px;border-radius:var(--r-btn);border:1px solid var(--line-strong);min-height:48px;padding:10px 18px;font-family:var(--font);font-size:16px;font-weight:700;line-height:1.3;cursor:pointer;max-width:100%;transition:background .15s,border-color .15s,transform .1s}.ft-button span{min-width:0;overflow-wrap:break-word}.ft-button-primary{background:var(--lime);color:var(--lime-ink);border-color:var(--lime)}.ft-button-secondary{background:transparent;color:var(--text)}.ft-button-danger{background:var(--red);color:var(--lime-ink);border-color:var(--red)}.ft-button-ghost{background:transparent;border-color:transparent;color:var(--lime);padding:8px 4px}.ft-button-lg{min-height:56px;padding:12px 24px}.ft-button-cta{min-height:56px;width:100%}.ft-button-cta>.ft-icon:last-child{margin-left:auto}.ft-button:hover:not(:disabled){filter:brightness(1.08);border-color:var(--lime)}.ft-button-secondary:hover:not(:disabled),.ft-button-ghost:hover:not(:disabled){background:var(--lime-dim)}.ft-button:active:not(:disabled),.ft-quick-action:active:not(:disabled){transform:translateY(1px);filter:brightness(.94)}.ft-button:disabled,.ft-quick-action:disabled,.ft-list-row:disabled,.ft-schedule-row:disabled{opacity:.5;cursor:not-allowed}.ft-button[aria-pressed=true]{box-shadow:inset 0 0 0 2px var(--lime)}
.ft-button:focus-visible,.ft-quick-action:focus-visible,.ft-list-row:focus-visible,.ft-schedule-row:focus-visible,.ft-table-scroll:focus-visible,.ft-scroll-list:focus-visible{outline:3px solid var(--lime);outline-offset:3px}
.ft-kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));gap:16px}.ft-kpi{display:flex;align-items:center;gap:16px;padding:20px;background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);min-width:0}.ft-kpi>.ft-icon{color:var(--lime);stroke-width:2.5}.ft-kpi-content{min-width:0}.ft-kpi p{margin:0}.ft-kpi-label{font-size:15px;font-weight:500;color:var(--text-2);line-height:1.3}.ft-kpi-value{display:block;font-size:34px;font-weight:800;line-height:1.2;overflow-wrap:break-word}.ft-delta{display:flex;gap:6px;align-items:baseline;flex-wrap:wrap;font-size:14px;font-weight:600;margin-top:6px!important}.ft-delta .ft-caption{font-weight:400}
.ft-quick-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.ft-quick-actions-six{grid-template-columns:repeat(3,minmax(0,1fr))}.ft-quick-action{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-width:0;min-height:128px;padding:16px 10px;background:var(--panel-2);color:var(--text);border:1px solid var(--line);border-radius:var(--r-btn);font-family:var(--font);text-align:center;cursor:pointer}.ft-quick-action>.ft-icon{color:var(--lime)}.ft-quick-action strong{font-size:15px;line-height:1.3}.ft-quick-action>span{font-size:12px;line-height:1.3;color:var(--text-2)}.ft-quick-primary{background:var(--lime);border-color:var(--lime);color:var(--lime-ink)}.ft-quick-primary>.ft-icon,.ft-quick-primary>span{color:var(--lime-ink)}.ft-quick-action:hover:not(:disabled){border-color:var(--lime)}
.ft-chip{display:inline-flex;align-items:center;gap:6px;width:max-content;max-width:100%;padding:4px 12px;border-radius:var(--r-chip);font-size:13px;font-weight:600;line-height:1.5;font-variant-numeric:tabular-nums}.ft-chip-dot{width:7px;height:7px;border-radius:50%;background:currentColor;flex:none}.ft-tone-neutral{background:var(--panel-2);color:var(--text-2)}.ft-tone-success{background:var(--lime-dim);color:var(--lime)}.ft-tone-success-solid{background:var(--lime);color:var(--lime-ink)}.ft-tone-danger{background:var(--red-dim);color:var(--red)}.ft-tone-warning{background:var(--amber-dim);color:var(--amber)}.ft-tone-blue{background:#4c8dff26;color:var(--text)}.ft-tone-purple{background:#9b6bff26;color:var(--text)}.ft-tone-orange{background:#ff9f2e26;color:var(--text)}.ft-tone-cyan{background:#22d3ee26;color:var(--text)}
.ft-list-row,.ft-activity-row,.ft-schedule-row{display:flex;align-items:center;gap:12px;width:100%;min-width:0;min-height:64px;padding:12px 0;border:0;border-bottom:1px solid var(--line);border-radius:0;background:transparent;color:var(--text);text-align:left;font-family:var(--font);font-size:15px}.ft-list-row:last-child,.ft-activity-row:last-child,.ft-schedule-row:last-child{border-bottom:0}.ft-list-row:is(button,a):hover,.ft-schedule-row:is(button):hover{background:var(--panel-2)}.ft-row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px;overflow-wrap:break-word}.ft-row-main>strong{font-size:15px;font-weight:600;line-height:1.35}.ft-row-subtitle{font-size:13px;line-height:1.4;color:var(--text-2)}.ft-row-subtitle.ft-tone-danger,.ft-row-subtitle.ft-tone-warning{background:transparent}.ft-row-meta{font-size:13px;color:var(--text-3);margin-left:auto;max-width:30%;overflow-wrap:break-word;text-align:right;flex-shrink:0}.ft-disc{display:inline-flex;align-items:center;justify-content:center;flex:none;width:36px;height:36px;border-radius:50%}.ft-activity-row p{flex:1;font-size:15px;line-height:1.5;margin:0}.ft-activity-row strong{font-weight:600}
.ft-scroll-list{max-height:var(--ft-scroll-max,400px);overflow-y:auto;overscroll-behavior:contain;min-width:0;max-width:100%;box-sizing:border-box}.ft-table-scroll{overflow-x:auto;max-width:100%;min-width:0;overscroll-behavior-inline:contain;border-radius:var(--r-btn)}.ft-table{border-collapse:collapse;width:100%;min-width:640px;font-size:15px;font-variant-numeric:tabular-nums}.ft-table th{font-size:12px;letter-spacing:.12em;text-transform:uppercase;font-weight:600;color:var(--text-3);background:var(--panel-2);padding:14px 16px}.ft-table td{height:48px;padding:10px 16px;border-bottom:1px solid var(--line);color:var(--text)}.ft-table tr:hover td{background:var(--panel-2)}.ft-align-left{text-align:left}.ft-align-right{text-align:right}.ft-align-center{text-align:center}.ft-status-cell{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.ft-schedule-time{font-size:15px;font-weight:600;width:68px;flex:none}.ft-schedule-stripe{width:4px;align-self:stretch;min-height:38px;border-radius:4px;flex:none}.ft-schedule-row .ft-row-main>strong{font-size:16px}.ft-schedule-capacity{display:flex;align-items:center;gap:8px;font-size:14px;font-variant-numeric:tabular-nums;flex:none}.ft-alert{display:flex;align-items:center;gap:16px;padding:20px;border:1px solid var(--amber-line);border-radius:var(--r-card);min-width:0}.ft-alert.ft-tone-danger{border-color:var(--red-line)}.ft-alert.ft-tone-success{border-color:var(--lime-line)}.ft-alert .ft-row-main>strong{font-size:18px;font-weight:700}.ft-alert p{font-size:15px;line-height:1.5;margin:0;color:var(--text-2)}
.ft-access-header{display:flex;gap:12px;align-items:center;padding-bottom:16px;border-bottom:1px solid var(--line);color:var(--lime)}.ft-access-header h2{font-size:20px;font-weight:700;letter-spacing:0;margin:0}.ft-access-header .ft-button{margin-left:auto}.ft-access-outcome{margin-left:auto;font-size:13px;color:var(--text-2)}.ft-access-person{display:flex;align-items:center;gap:24px;padding:24px 0}.ft-access-name{min-width:0;flex:1}.ft-access-name h3{font-size:30px;line-height:1.2;margin:0 0 6px;overflow-wrap:break-word}.ft-access-name p{margin:0 0 12px}.ft-access-details{min-width:200px;display:grid;gap:12px}.ft-stat{display:flex;align-items:baseline;justify-content:space-between;gap:16px;min-width:0;font-variant-numeric:tabular-nums}.ft-stat>span{font-size:13px;color:var(--text-2)}.ft-stat>div{text-align:right;min-width:0;overflow-wrap:break-word}.ft-stat strong{font-size:16px;font-weight:600}.ft-stat small{display:block;font-size:12px;color:var(--text-3)}.ft-access-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;padding-top:20px;border-top:1px solid var(--line)}.ft-access-facts>div{display:flex;align-items:center;gap:10px}.ft-access-facts .ft-icon{color:var(--lime)}.ft-access-facts .ft-stat{flex:1;gap:8px;flex-wrap:wrap}.ft-access-denied{border-color:var(--red-line);box-shadow:inset 0 0 40px #ff4d4d0d}.ft-access-denied .ft-access-header,.ft-access-denied .ft-access-facts .ft-icon,.ft-access-reason{color:var(--red)}
.ft-scan{display:flex;flex-direction:column;align-items:center;gap:14px}.ft-scan-zone{position:relative;border:1.5px dashed var(--line-strong);border-radius:var(--r-card);padding:32px 20px;text-align:center;width:100%}.ft-scan-zone>.ft-icon{color:var(--lime);margin-bottom:16px}.ft-scan-zone h2{font-size:17px;font-weight:600;letter-spacing:0;margin:0 0 8px}.ft-scan-zone p{margin:0}.ft-scan-corner{position:absolute;width:22px;height:22px;border-color:var(--lime);border-style:solid}.ft-scan-tl{top:-1px;left:-1px;border-width:3px 0 0 3px;border-radius:10px 0 0}.ft-scan-tr{top:-1px;right:-1px;border-width:3px 3px 0 0;border-radius:0 10px 0 0}.ft-scan-bl{bottom:-1px;left:-1px;border-width:0 0 3px 3px;border-radius:0 0 0 10px}.ft-scan-br{bottom:-1px;right:-1px;border-width:0 3px 3px 0;border-radius:0 0 10px}.ft-scan-or{font-size:12px;color:var(--text-3);letter-spacing:.16em}
.ft-occupancy-heading{display:flex;align-items:center;justify-content:space-between;gap:12px}.ft-occupancy-heading p{margin:0;font-size:24px;color:var(--text-2);font-variant-numeric:tabular-nums}.ft-occupancy-heading strong{font-size:40px;font-weight:800;color:var(--text)}.ft-occupancy-meter{display:flex;align-items:center;gap:12px;margin:16px 0 20px;font-size:14px;color:var(--text-2)}.ft-progress{appearance:none;flex:1;width:100%;height:8px;border:0;border-radius:99px;overflow:hidden;background:var(--panel-2)}.ft-progress::-webkit-progress-bar{background:var(--panel-2)}.ft-progress::-webkit-progress-value{background:var(--lime);border-radius:99px}.ft-progress::-moz-progress-bar{background:var(--lime)}.ft-zone-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.ft-zone{padding:14px;background:var(--panel-2);border-radius:var(--r-btn)}.ft-zone .ft-stat{flex-wrap:wrap;gap:4px 12px}.ft-zone .ft-stat strong{font-size:20px}
.ft-chart{display:block;width:100%;height:auto;overflow:visible;font-variant-numeric:tabular-nums}.ft-chart text{fill:var(--text-3);font-family:var(--font);font-size:12px}.ft-chart-grid{stroke:var(--line);stroke-width:1}
.ft-kanban-column{border:1px solid var(--line);border-radius:var(--r-card);background:var(--panel);min-width:0;overflow:hidden}.ft-kanban-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px;border-top:3px solid var(--line-strong)}.ft-kanban-header h3{font-size:15px;margin:0;font-weight:700}.ft-kanban-header.ft-tone-blue{border-top-color:var(--blue)}.ft-kanban-header.ft-tone-warning{border-top-color:var(--amber)}.ft-kanban-header.ft-tone-success{border-top-color:var(--lime)}.ft-kanban-header.ft-tone-purple{border-top-color:var(--purple)}.ft-kanban-header.ft-tone-success-solid{border-top-color:var(--lime);background:var(--lime-dim);color:var(--lime)}.ft-kanban-cards{display:grid;gap:8px;padding:12px}.ft-kanban-cards>.ft-list-row{background:var(--panel-2);padding:12px;border:1px solid var(--line);border-radius:var(--r-btn);flex-wrap:wrap}.ft-kanban-cards .ft-row-main{flex-basis:calc(100% - 56px)}.ft-kanban-cards .ft-row-meta{max-width:100%;margin:0 0 0 52px;text-align:left}
.ft-sheet-scrim{position:fixed;inset:0;z-index:30;background:#000a;display:flex;align-items:center;justify-content:center;padding:24px}.ft-sheet{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);padding:24px;width:min(560px,100%);max-height:calc(100dvh - 48px);overflow:auto}.ft-hero{padding:32px 24px;display:flex;flex-direction:column;justify-content:flex-end;background-size:cover;background-position:center;min-width:0}.ft-hero h1{font-family:var(--font);font-size:44px;line-height:.95;letter-spacing:-.01em;font-weight:800;margin:0 0 14px;max-width:320px}.ft-hero p{font-size:17px;color:var(--text-2);margin:0}.ft-empty{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;padding:28px 16px;min-width:0}.ft-empty>.ft-icon{color:var(--text-2)}.ft-empty h3{font-size:20px;margin:0;font-weight:700}.ft-empty p{font-size:15px;line-height:1.5;margin:0;color:var(--text-2);max-width:36ch}.ft-error .ft-empty>.ft-icon{color:var(--red)}.ft-skeleton{display:grid;gap:12px;padding:12px 0}.ft-skeleton-line{height:16px;border-radius:5px;background:var(--panel-2);animation:ft-pulse 1.5s ease-in-out infinite alternate}.ft-skeleton-line:last-child{width:65%}.ft-skeleton-heading{height:24px;width:40%}@keyframes ft-pulse{to{opacity:.45}}
/* The gallery is an isolated demonstration surface, with dense production volumes. */
.ft-kit{max-width:1440px;margin:auto;padding:28px;display:grid;gap:24px;font-family:var(--font)}.ft-kit-intro{display:flex;align-items:center;justify-content:space-between;gap:16px}.ft-kit-intro p{margin:0;color:var(--text-3);font-size:13px}.ft-kit-desktop,.ft-kit-phone{display:grid;gap:24px;min-width:0}.ft-kit-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:24px;align-items:start}.ft-kit-stack{display:grid;gap:20px;min-width:0}.ft-kit-controls{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.ft-kit-board-scroll{overflow-x:auto;max-width:100%;overscroll-behavior-inline:contain;padding-bottom:8px}.ft-kit-board{display:grid;grid-template-columns:repeat(6,minmax(205px,1fr));gap:12px;min-width:1320px}.ft-kit-phone{max-width:390px;margin:0 auto;width:100%;border:1px solid var(--line);border-radius:24px;overflow:hidden;background:var(--ground)}.ft-kit-phone-content{padding:16px;display:grid;gap:20px}.ft-kit-phone .ft-kpi-row{grid-template-columns:repeat(2,minmax(0,1fr))}.ft-kit-phone .ft-kpi{padding:14px;gap:10px;align-items:flex-start}.ft-kit-phone .ft-kpi>.ft-icon{width:28px;height:28px}.ft-kit-phone .ft-kpi-value{font-size:28px}.ft-kit-phone .ft-kpi-label{font-size:13px}.ft-kit-phone .ft-card{padding:16px}.ft-kit-phone .ft-zone-grid{grid-template-columns:1fr}.ft-kit-phone .ft-quick-actions-six{grid-template-columns:repeat(2,minmax(0,1fr))}.ft-kit-sheet-sample .ft-sheet-scrim{position:relative;inset:auto;min-height:240px;border-radius:var(--r-card);z-index:auto;padding:20px}.ft-kit-sheet-sample .ft-sheet{max-height:none}.ft-kit-status{color:var(--text-2);font-size:13px;margin:0}
@media(max-width:1100px){.ft-tagline{display:none}.ft-kpi-row{grid-template-columns:repeat(4,minmax(0,1fr))}.ft-kpi{gap:10px;padding:16px}.ft-kpi>.ft-icon{width:28px;height:28px}.ft-kit-grid{grid-template-columns:1fr 1fr}.ft-access-person{flex-wrap:wrap}.ft-access-details{flex:1}.ft-access-facts{grid-template-columns:1fr}.ft-zone-grid{grid-template-columns:1fr}}
@media(max-width:650px){.ft-page-title{margin-bottom:20px}.ft-page-title h1{font-size:40px}.ft-page-title p{font-size:17px}.ft-card{padding:20px}.ft-section-header{flex-wrap:wrap}.ft-section-header h2{font-size:20px}.ft-kpi-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.ft-kpi{padding:14px;gap:10px;align-items:flex-start}.ft-kpi-label{font-size:13px}.ft-kpi-value{font-size:28px}.ft-quick-actions-six{grid-template-columns:repeat(2,minmax(0,1fr))}.ft-list-row,.ft-activity-row{font-size:16px;gap:10px}.ft-row-main>strong{font-size:16px}.ft-activity-row p{font-size:16px}.ft-row-meta{font-size:12px;max-width:24%}.ft-schedule-row{gap:8px;flex-wrap:wrap}.ft-schedule-time{width:56px;font-size:14px}.ft-schedule-capacity{flex-wrap:wrap;max-width:68px;gap:4px;justify-content:flex-end}.ft-schedule-row .ft-chip{font-size:12px;padding:2px 7px}.ft-alert{flex-wrap:wrap;padding:16px;gap:12px}.ft-alert>.ft-button{width:100%}.ft-alert .ft-row-main{flex-basis:calc(100% - 48px)}.ft-access-header{flex-wrap:wrap}.ft-access-outcome{margin:0 0 0 48px}.ft-access-person{gap:16px}.ft-access-person>[role=img]{--avatar-size:80px!important}.ft-access-name h3{font-size:24px}.ft-access-details{flex-basis:100%;min-width:0}.ft-access-facts{gap:14px}.ft-zone-grid{grid-template-columns:1fr}.ft-sheet-scrim{align-items:flex-end;padding:0}.ft-sheet{width:100%;border-radius:16px 16px 0 0;max-height:90dvh;padding:24px}.ft-empty p{font-size:16px}.ft-kit{padding:16px;gap:24px}.ft-kit-grid{grid-template-columns:1fr}.ft-kit-phone{border-radius:16px}.ft-kit-phone-content{padding:12px}.ft-kit-intro{align-items:flex-start;flex-wrap:wrap}.ft-kit-sheet-sample .ft-sheet-scrim{padding:0}.ft-kit-sheet-sample .ft-sheet{border-radius:var(--r-card)}}
@media(prefers-reduced-motion:reduce){.ft-skeleton-line{animation:none}.ft-button{transition:none}}

.ft-disc.ft-tone-blue{color:var(--blue)}.ft-disc.ft-tone-purple{color:var(--purple)}.ft-disc.ft-tone-orange{color:var(--orange)}.ft-disc.ft-tone-cyan{color:var(--cyan)}
.ft-card-body{container-type:inline-size}
@container(max-width:450px){.ft-chart text{font-size:24px}}
@container(max-width:350px){.ft-chart text{font-size:26px}}
@container(max-width:290px){.ft-chart text{font-size:30px}}

.ft-table td{padding-block:2px}.ft-table .ft-list-row{min-height:40px;padding:0;border:0}.ft-table .ft-button{min-height:44px;padding-block:6px}
/* Title row: the title takes the room, the tagline keeps its own width top-right and drops below only when space runs out. */
.ft-page-title{flex-wrap:wrap;align-items:flex-start}.ft-page-title>div:first-child{flex:1 1 420px;min-width:0}.ft-page-title>.ft-tagline{flex:0 0 auto;margin-top:14px}
/* Phone: an odd last KPI tile spans the row instead of sitting orphaned. */
@media(max-width:650px){.ft-kpi-row>.ft-kpi:last-child:nth-child(odd){grid-column:1/-1}}
/* Disabled or blocked actions read as unavailable, never as a dimmed primary. */
.ft-button-primary:disabled,.ft-button-danger:disabled,.ft-button[aria-disabled=true]{background:transparent;color:var(--text-3);border-color:var(--line-strong);border-style:dashed;opacity:1;filter:none}
/* Occupancy zones: as many columns as fit at a readable width; in a narrow card they stack as label-value rows. */
.ft-zone-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,120px),1fr));gap:8px}.ft-zone{padding:10px 12px}.ft-zone .ft-stat{justify-content:space-between;align-items:baseline}
