/* TNS components v1. Use semantic tokens; structure is independent of Tailwind. */
.tns-ui{font-family:var(--tns-font-ui);font-size:var(--tns-text-base);line-height:var(--tns-leading-normal);color:var(--tns-color-text);background:var(--tns-color-canvas)}
.tns-container{width:100%;max-width:var(--tns-layout-container);margin-inline:auto;padding-inline:var(--tns-layout-gutter)}
.tns-stack>*+*{margin-top:var(--tns-space-4)}
.tns-cluster{display:flex;align-items:center;flex-wrap:wrap;gap:var(--tns-space-3)}
.tns-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--tns-component-card-gap)}
.tns-grid--two{grid-template-columns:repeat(2,minmax(0,1fr))}
.tns-section{padding-block:var(--tns-component-section-gap)}
.tns-divider{border:0;border-top:1px solid var(--tns-color-border);margin-block:var(--tns-space-8)}
.tns-kicker{font-size:var(--tns-text-xs);font-weight:var(--tns-weight-bold);letter-spacing:.12em;text-transform:uppercase;color:var(--tns-color-primary)}
.tns-title{font:var(--tns-weight-heavy) var(--tns-text-title)/var(--tns-leading-tight) var(--tns-font-ui);letter-spacing:-.03em;color:var(--tns-color-heading);margin:0}
.tns-lead{font-size:var(--tns-text-lg);line-height:var(--tns-leading-relaxed);color:var(--tns-color-muted)}
.tns-muted{color:var(--tns-color-muted)}
.tns-link{color:var(--tns-color-primary);text-decoration:underline;text-underline-offset:.2em;font-weight:var(--tns-weight-semibold)}
.tns-theme-dark .tns-link,.tns-theme-dark .tns-kicker{color:var(--tns-color-accent)}
.tns-ui :where(a,button,input,select,textarea,summary,[tabindex]):focus-visible{outline:3px solid var(--tns-color-focus);outline-offset:3px}
.tns-button{display:inline-flex;align-items:center;justify-content:center;gap:var(--tns-space-2);min-height:var(--tns-control-height);padding:var(--tns-space-2) var(--tns-space-5);border:1px solid transparent;border-radius:var(--tns-component-button-radius);background:var(--tns-component-button-bg);color:var(--tns-component-button-text);font:var(--tns-weight-semibold) var(--tns-text-sm)/1.4 var(--tns-font-ui);text-decoration:none;cursor:pointer;transition:background var(--tns-motion-fast),box-shadow var(--tns-motion-fast);max-width:100%;text-align:center}
.tns-button:hover{background:var(--tns-color-primary-hover);color:var(--tns-component-button-text);text-decoration:none}
.tns-button:active{background:var(--tns-color-primary-active)}
.tns-button--secondary{background:var(--tns-color-surface);border-color:var(--tns-color-border-strong);color:var(--tns-color-text)}
.tns-button--secondary:hover,.tns-button--ghost:hover{background:var(--tns-color-surface-subtle);color:var(--tns-color-heading)}
.tns-button--ghost{background:transparent;color:var(--tns-color-text)}
.tns-button--danger{background:var(--tns-color-danger);color:var(--tns-palette-white)}
.tns-button--danger:hover{background:var(--tns-palette-red-700);filter:brightness(.9)}
.tns-button--small{min-height:var(--tns-control-small);padding:var(--tns-space-1) var(--tns-space-3)}
.tns-button--large{min-height:var(--tns-control-large);font-size:var(--tns-text-base);padding-inline:var(--tns-space-6)}
.tns-button--icon{width:var(--tns-control-height);padding:var(--tns-space-2)}
.tns-button svg,.tns-icon{width:20px;height:20px;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
.tns-button:disabled,.tns-button[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}
.tns-spinner{display:inline-block;width:1em;height:1em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:tns-spin .8s linear infinite}
@keyframes tns-spin{to{transform:rotate(360deg)}}
.tns-badge{display:inline-flex;align-items:center;gap:var(--tns-space-1);padding:var(--tns-space-1) var(--tns-space-2);font-size:var(--tns-text-xs);font-weight:var(--tns-weight-bold);line-height:1.4;border-radius:var(--tns-radius-pill);background:var(--tns-color-primary-soft);color:var(--tns-color-primary)}
.tns-badge--success{background:var(--tns-color-success-soft);color:var(--tns-color-success)}
.tns-badge--warning{background:var(--tns-color-warning-soft);color:var(--tns-color-warning)}
.tns-badge--danger{background:var(--tns-color-danger-soft);color:var(--tns-color-danger)}
.tns-badge--neutral{background:var(--tns-color-surface-subtle);color:var(--tns-color-muted)}
.tns-field{display:grid;gap:var(--tns-space-2);min-width:0}
.tns-label{font-size:var(--tns-text-sm);font-weight:var(--tns-weight-semibold);color:var(--tns-color-heading)}
.tns-input,.tns-select,.tns-textarea{box-sizing:border-box;width:100%;min-height:var(--tns-control-height);padding:var(--tns-space-2) var(--tns-space-3);border:1px solid var(--tns-color-border-strong);border-radius:var(--tns-control-radius);background:var(--tns-color-surface);color:var(--tns-color-text);font:inherit;line-height:var(--tns-leading-normal)}
.tns-input::placeholder,.tns-textarea::placeholder{color:var(--tns-color-subtle);opacity:1}
.tns-input:disabled,.tns-select:disabled,.tns-textarea:disabled{background:var(--tns-color-surface-subtle);opacity:.65;cursor:not-allowed}
.tns-input[aria-invalid=true],.tns-select[aria-invalid=true],.tns-textarea[aria-invalid=true]{border-color:var(--tns-color-danger);border-width:2px}
.tns-help{font-size:var(--tns-text-sm);color:var(--tns-color-muted);margin:0}
.tns-field-error{font-size:var(--tns-text-sm);color:var(--tns-color-danger);margin:0}
.tns-textarea{min-height:120px;resize:vertical}
.tns-check{display:flex;align-items:center;gap:var(--tns-space-2);min-height:var(--tns-control-height);cursor:pointer;font-size:var(--tns-text-sm)}
.tns-check input{width:20px;height:20px;accent-color:var(--tns-color-primary);flex-shrink:0}
.tns-switch input{appearance:none;width:44px;height:26px;border-radius:var(--tns-radius-pill);border:2px solid var(--tns-color-border-strong);background:var(--tns-color-surface-subtle);position:relative;transition:background var(--tns-motion-fast)}
.tns-switch input:after{content:'';width:18px;height:18px;position:absolute;left:2px;top:2px;border-radius:50%;background:var(--tns-color-muted);transition:transform var(--tns-motion-fast)}
.tns-switch input:checked{background:var(--tns-color-primary);border-color:var(--tns-color-primary)}
.tns-switch input:checked:after{background:var(--tns-palette-white);transform:translateX(18px)}
.tns-upload{padding:var(--tns-space-5);border:1px dashed var(--tns-color-border-strong);border-radius:var(--tns-radius-lg);background:var(--tns-color-surface-subtle)}
.tns-upload input{max-width:100%;font:inherit}
.tns-upload input::file-selector-button{border:1px solid var(--tns-color-border-strong);border-radius:var(--tns-control-radius);padding:var(--tns-space-2) var(--tns-space-3);margin-right:var(--tns-space-3);background:var(--tns-color-surface);color:var(--tns-color-text);font:inherit;min-height:44px;cursor:pointer}
.tns-card{display:flex;flex-direction:column;min-width:0;background:var(--tns-component-card-bg);border:1px solid var(--tns-component-card-border);border-radius:var(--tns-component-card-radius);overflow:hidden;color:var(--tns-color-text);box-shadow:var(--tns-shadow-sm)}
.tns-card__body{padding:var(--tns-component-card-padding);display:grid;gap:var(--tns-space-3);flex:1}
.tns-card__title{font-size:var(--tns-text-xl);line-height:var(--tns-leading-heading);font-weight:var(--tns-weight-bold);color:var(--tns-color-heading);margin:0}
.tns-card__title a{color:inherit;text-decoration:none}.tns-card__title a:hover{text-decoration:underline;text-underline-offset:.2em}
.tns-card__meta{font-size:var(--tns-text-xs);color:var(--tns-color-muted)}
.tns-card__media{aspect-ratio:16/9;position:relative;overflow:hidden;background:var(--tns-color-inverse);color:var(--tns-color-on-inverse)}
.tns-card__media img{display:block;width:100%;height:100%;object-fit:cover}
.tns-card__media--short{aspect-ratio:9/16;max-height:380px}
.tns-card__footer{padding:0 var(--tns-component-card-padding) var(--tns-component-card-padding)}
.tns-media-play{position:absolute;inset:0;display:grid;place-items:center;color:var(--tns-palette-white)}
.tns-media-play span{display:grid;place-items:center;width:52px;height:52px;border-radius:50%;background:rgb(0 0 0/.65);border:1px solid var(--tns-palette-white)}
.tns-notice{display:flex;gap:var(--tns-space-3);padding:var(--tns-space-4);border:1px solid currentColor;border-radius:var(--tns-radius-md);background:var(--tns-color-info-soft);color:var(--tns-color-info);font-size:var(--tns-text-sm);line-height:var(--tns-leading-normal)}
.tns-notice--success{background:var(--tns-color-success-soft);color:var(--tns-color-success)}
.tns-notice--warning{background:var(--tns-color-warning-soft);color:var(--tns-color-warning)}
.tns-notice--danger{background:var(--tns-color-danger-soft);color:var(--tns-color-danger)}
.tns-notice p{margin:0}.tns-notice a{color:inherit;text-decoration:underline}
.tns-empty{padding:var(--tns-space-10);text-align:center;border:1px dashed var(--tns-color-border-strong);border-radius:var(--tns-radius-lg);color:var(--tns-color-muted);background:var(--tns-color-surface)}
.tns-skeleton{background:var(--tns-color-surface-subtle);border-radius:var(--tns-radius-md);height:1em;animation:tns-pulse 1.6s ease-in-out infinite}
@keyframes tns-pulse{50%{opacity:.45}}
.tns-breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:var(--tns-space-2);list-style:none;padding:0;margin:0;font-size:var(--tns-text-sm);color:var(--tns-color-muted)}
.tns-breadcrumb a{color:inherit;text-decoration:underline;text-underline-offset:.2em}
.tns-breadcrumb li+li:before{content:'/';margin-right:var(--tns-space-2);color:var(--tns-color-subtle)}
.tns-tabs{display:flex;gap:var(--tns-space-1);overflow-x:auto;border-bottom:1px solid var(--tns-color-border);padding-bottom:var(--tns-space-1)}
.tns-tab{min-height:44px;flex-shrink:0;padding:var(--tns-space-2) var(--tns-space-4);border:0;border-bottom:3px solid transparent;background:transparent;color:var(--tns-color-muted);font:var(--tns-weight-semibold) var(--tns-text-sm) var(--tns-font-ui);cursor:pointer}
.tns-tab[aria-selected=true]{border-bottom-color:var(--tns-color-primary);color:var(--tns-color-primary)}
.tns-theme-dark .tns-tab[aria-selected=true]{color:var(--tns-color-accent);border-color:var(--tns-color-accent)}
.tns-tabpanel{padding-block:var(--tns-space-5)}
.tns-accordion{border:1px solid var(--tns-color-border);border-radius:var(--tns-radius-md);background:var(--tns-color-surface);overflow:hidden}
.tns-accordion summary{padding:var(--tns-space-4);font-weight:var(--tns-weight-semibold);cursor:pointer;color:var(--tns-color-heading)}
.tns-accordion>div{padding:0 var(--tns-space-4) var(--tns-space-4);color:var(--tns-color-muted)}
.tns-pagination{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:var(--tns-space-2)}
.tns-pagination a,.tns-pagination [aria-current]{display:grid;place-items:center;min-width:44px;min-height:44px;padding:var(--tns-space-2) var(--tns-space-3);border:1px solid var(--tns-color-border);border-radius:var(--tns-radius-md);background:var(--tns-color-surface);color:var(--tns-color-text);text-decoration:none}
.tns-pagination [aria-current]{background:var(--tns-color-primary);color:var(--tns-color-on-primary);border-color:var(--tns-color-primary)}
.tns-table-wrap{overflow:auto;max-width:100%;border:1px solid var(--tns-color-border);border-radius:var(--tns-radius-md)}
.tns-table{border-collapse:collapse;width:100%;font-size:var(--tns-text-sm);text-align:left;color:var(--tns-color-text)}
.tns-table th,.tns-table td{padding:var(--tns-space-3) var(--tns-space-4);border-bottom:1px solid var(--tns-color-border);vertical-align:top}
.tns-table th{background:var(--tns-color-surface-subtle);font-weight:var(--tns-weight-semibold);color:var(--tns-color-heading)}
.tns-table tr:last-child td{border-bottom:0}.tns-table caption{padding:var(--tns-space-3);text-align:left;color:var(--tns-color-muted)}
.tns-dialog{width:min(560px,calc(100% - 32px));max-height:calc(100dvh - 48px);padding:var(--tns-space-6);border:1px solid var(--tns-color-border);border-radius:var(--tns-radius-xl);background:var(--tns-color-surface);color:var(--tns-color-text);box-shadow:var(--tns-shadow-overlay);margin:auto;overflow:auto}
.tns-dialog::backdrop{background:rgb(15 23 42/.6)}
.tns-toast{position:fixed;bottom:var(--tns-space-6);right:var(--tns-space-6);z-index:var(--tns-z-toast);max-width:min(400px,calc(100% - 32px));padding:var(--tns-space-4) var(--tns-space-5);border-radius:var(--tns-radius-md);background:var(--tns-color-inverse);color:var(--tns-color-on-inverse);box-shadow:var(--tns-shadow-lg)}
.tns-prose{font-family:var(--tns-font-reading);font-size:var(--tns-text-body);line-height:var(--tns-leading-relaxed);color:var(--tns-color-text);max-width:var(--tns-layout-reading)}
.tns-prose :where(h1,h2,h3,h4){font-family:var(--tns-font-ui);line-height:var(--tns-leading-heading);color:var(--tns-color-heading);font-weight:var(--tns-weight-bold);margin:1.5em 0 .75em}
.tns-prose h2{font-size:var(--tns-text-3xl)}.tns-prose h3{font-size:var(--tns-text-2xl)}.tns-prose p{margin:0 0 1.25em}.tns-prose a{color:var(--tns-color-primary);text-decoration:underline;text-underline-offset:.2em}
.tns-prose blockquote{border-left:3px solid var(--tns-color-primary);padding:var(--tns-space-4) var(--tns-space-5);margin:var(--tns-space-6) 0;background:var(--tns-color-primary-soft);color:var(--tns-palette-slate-800)}
.tns-prose :where(ul,ol){padding-left:1.5em;margin-bottom:1.25em}.tns-prose ul{list-style:disc}.tns-prose ol{list-style:decimal}
.tns-prose code,.tns-code{font-family:var(--tns-font-mono);font-size:.875em;background:var(--tns-color-surface-subtle);border-radius:var(--tns-radius-sm);padding:.15em .35em}
.tns-prose figure{margin:var(--tns-space-6) 0}.tns-prose figcaption{font-size:var(--tns-text-sm);color:var(--tns-color-muted);margin-top:var(--tns-space-2)}
.tns-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.tns-skip-link{position:fixed;top:var(--tns-space-2);left:var(--tns-space-2);z-index:var(--tns-z-toast);transform:translateY(-150%);background:var(--tns-color-primary);color:var(--tns-color-on-primary);padding:var(--tns-space-3) var(--tns-space-4);border-radius:var(--tns-radius-md)}
.tns-skip-link:focus{transform:none}
@media(max-width:1023px){.tns-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:639px){.tns-grid,.tns-grid--two{grid-template-columns:1fr}.tns-toast{right:16px;bottom:16px}}
@media(prefers-reduced-motion:reduce){.tns-ui *,.tns-ui *:before,.tns-ui *:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
@media(forced-colors:active){.tns-button,.tns-badge,.tns-card{border:1px solid ButtonText}.tns-switch input:checked:after{background:Highlight}.tns-tab[aria-selected=true]{border-color:Highlight}}
