.layout{min-height:100%;display:flex;flex-direction:column}.page-container{width:100%;max-width:960px;margin:0 auto;padding:0 var(--sp-5)}@media (max-width:767px){.page-container{padding:0 var(--sp-4)}}.app-header{background:var(--paper);border-bottom:1px solid var(--line);position:-webkit-sticky;position:sticky;top:0;z-index:30}.app-header__row{height:var(--header-h);display:flex;align-items:center;gap:var(--sp-4)}.app-header__brand{display:flex;align-items:center;gap:var(--sp-2);color:var(--ink);flex-shrink:0}.app-header__mark{color:var(--signal);display:flex}.app-header__name{font-size:var(--fs-h1);font-weight:700;letter-spacing:-.01em}.app-header__signals{display:flex;gap:var(--sp-2);flex:1 1;overflow-x:auto;scrollbar-width:none}.app-header__signals::-webkit-scrollbar{display:none}.signal{flex-shrink:0;font-size:var(--fs-caption);font-weight:600;padding:5px 10px;border-radius:999px;white-space:nowrap;border:1px solid transparent}.signal--overdue{color:var(--urgent);background:var(--urgent-tint)}.signal--overdue:hover{border-color:var(--urgent)}.signal:active{filter:brightness(.95)}.signal--today{color:var(--caution);background:var(--caution-tint)}.signal--today:hover{border-color:var(--caution)}.signal--unassigned{color:var(--ink-2);background:var(--surface-sunken)}.signal--unassigned:hover{border-color:var(--line-strong)}.app-header__new{flex-shrink:0}.btn{display:inline-flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-body);font-weight:600;padding:8px 14px;border-radius:var(--radius-md);border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);transition:background .12s ease,border-color .12s ease;min-height:36px}.btn:hover{background:var(--surface-sunken)}.btn:active{background:var(--line)}.btn:disabled{opacity:.5}.btn--primary{background:var(--signal);border-color:var(--signal);color:var(--signal-ink)}.btn--primary:hover{background:color-mix(in srgb,var(--signal) 88%,#000)}.btn--primary:active{background:color-mix(in srgb,var(--signal) 76%,#000)}.btn--ghost{border-color:transparent;background:transparent}.btn--ghost:hover{background:var(--surface-sunken)}@media (max-width:767px){.app-header__new span{display:none}.app-header__new{padding:8px;min-width:36px;justify-content:center}.app-header__signals{order:3;flex-basis:100%;padding-bottom:var(--sp-2)}.app-header__row{flex-wrap:wrap;height:auto;padding-top:var(--sp-2);padding-bottom:var(--sp-2);row-gap:var(--sp-1)}}.search-bar{display:flex;align-items:center;gap:var(--sp-2);background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius-md);padding:0 var(--sp-3);height:38px;flex:1 1;min-width:0}.search-bar:focus-within{border-color:var(--signal);box-shadow:0 0 0 3px var(--signal-tint)}.search-bar__icon{color:var(--ink-3);flex-shrink:0}.search-bar__input{border:none;background:none;flex:1 1;min-width:0;height:100%;font-size:var(--fs-body-lg)}.search-bar__input:focus{outline:none}.search-bar__input::-webkit-search-cancel-button{display:none}.search-bar__clear{color:var(--ink-3);display:flex;padding:4px;border-radius:50%;flex-shrink:0}.search-bar__clear:hover{background:var(--surface-sunken);color:var(--ink)}.search-bar__clear:active{background:var(--line)}.filter-bar{padding:var(--sp-3) 0;display:flex;flex-direction:column;gap:var(--sp-3)}.filter-bar__row{display:flex;gap:var(--sp-2);align-items:center}.filter-bar__trigger{position:relative;flex-shrink:0}.filter-bar__count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 4px;border-radius:999px;background:var(--signal);color:#fff;font-size:11px;font-weight:700}.filter-bar__sort{flex-shrink:0}.filter-bar__sort select{height:38px;border-radius:var(--radius-md);border:1px solid var(--line-strong);background:var(--surface);padding:0 var(--sp-3);font-size:var(--fs-body);color:var(--ink)}.filter-bar__sort select:hover{background:var(--surface-sunken)}.filter-bar__chips{display:flex;gap:var(--sp-2);overflow-x:auto;scrollbar-width:none;padding-bottom:2px}.filter-bar__chips::-webkit-scrollbar{display:none}.chip{flex-shrink:0;font-size:var(--fs-caption);font-weight:600;padding:6px 12px;border-radius:999px;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-2);white-space:nowrap;transition:background .12s ease,color .12s ease,border-color .12s ease}.chip:hover{border-color:var(--ink-3)}.chip:active{background:var(--line)}.chip--active{color:var(--ink);border-color:var(--ink);background:var(--surface-sunken);font-weight:700}.filter-bar__clear{flex-shrink:0;font-size:var(--fs-caption);color:var(--signal);font-weight:600;padding:6px 8px;white-space:nowrap}.filter-bar__clear:hover{text-decoration:underline}@media (max-width:767px){.filter-bar__row{align-items:stretch}.filter-bar__sort{display:flex}.filter-bar__sort select{max-width:42vw;padding:0 var(--sp-2)}.filter-bar__sort span+select{max-width:42vw}.filter-bar__trigger span:not(.filter-bar__count){display:none}.filter-bar__trigger{padding:8px;min-width:36px;justify-content:center}}@media (max-width:380px){.filter-bar__row{gap:var(--sp-1)}.filter-bar__sort select{max-width:38vw;font-size:var(--fs-caption)}}.sheet-overlay{position:fixed;inset:0;background:rgba(27,31,35,.4);z-index:100;display:flex;justify-content:flex-end;animation:overlay-in .16s ease}@keyframes overlay-in{0%{opacity:0}}.sheet-panel{background:var(--surface);width:420px;max-width:100%;height:100%;display:flex;flex-direction:column;box-shadow:var(--shadow-sheet);animation:panel-in-right .18s ease}@keyframes panel-in-right{0%{transform:translateX(16px);opacity:0}}.sheet-header{display:flex;align-items:center;justify-content:space-between;padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--line);flex-shrink:0}.sheet-title{font-size:var(--fs-h2);font-weight:600}.sheet-close{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-sm);color:var(--ink-2)}.sheet-close:hover{background:var(--surface-sunken);color:var(--ink)}.sheet-close:active{background:var(--line)}.sheet-body{padding:var(--sp-5);overflow-y:auto;flex:1 1}.sheet-footer{padding:var(--sp-4) var(--sp-5);border-top:1px solid var(--line);display:flex;gap:var(--sp-3);flex-shrink:0}@media (max-width:767px){.sheet-overlay{align-items:flex-end;justify-content:center}.sheet-panel{width:100%;height:auto;max-height:88vh;border-radius:var(--radius-lg) var(--radius-lg) 0 0;animation:panel-in-bottom .2s ease;padding-bottom:env(safe-area-inset-bottom)}@keyframes panel-in-bottom{0%{transform:translateY(24px);opacity:0}}}@media (max-width:480px){.sheet-header{padding-inline:var(--sp-4)}.sheet-body{padding:var(--sp-4)}.sheet-footer{padding-inline:var(--sp-4)}}.filter-group{border:none;padding:0;margin:0 0 var(--sp-6) 0}.filter-group legend{font-size:var(--fs-caption);font-weight:600;color:var(--ink-2);margin-bottom:var(--sp-3);padding:0}.filter-group__options{display:flex;flex-direction:column;gap:var(--sp-1)}.filter-group__options--scroll{max-height:220px;overflow-y:auto}.check-row{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-1);font-size:var(--fs-body-lg);border-radius:var(--radius-sm);min-height:40px}.check-row:hover{background:var(--surface-sunken)}.check-row input[type=checkbox]{width:18px;height:18px;accent-color:var(--signal);flex-shrink:0}.kanban{display:flex;align-items:flex-start;gap:var(--sp-4);overflow-x:auto;padding-bottom:var(--sp-3);-webkit-overflow-scrolling:touch}.kanban__col{flex-shrink:0;width:292px;border-radius:var(--radius-md);padding:var(--sp-3);display:flex;flex-direction:column;gap:var(--sp-3);background:transparent}.kanban__col--backlog{background:var(--neutral-status-tint)}.kanban__col--in_progress{background:var(--signal-tint)}.kanban__col--review{background:var(--caution-tint)}.kanban__col--blocked{background:var(--urgent-tint)}.kanban__col--done{background:transparent}.kanban__header{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2)}.kanban__pill{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;font-size:var(--fs-caption);font-weight:700;letter-spacing:.02em;text-transform:uppercase;background:var(--surface);border:1px solid var(--line)}.kanban__col--backlog .kanban__pill{color:var(--ink-3)}.kanban__col--in_progress .kanban__pill{color:var(--signal);border-color:color-mix(in srgb,var(--signal) 35%,var(--line))}.kanban__col--review .kanban__pill{color:var(--caution);border-color:color-mix(in srgb,var(--caution) 35%,var(--line))}.kanban__col--blocked .kanban__pill{color:var(--urgent);border-color:color-mix(in srgb,var(--urgent) 35%,var(--line))}.kanban__col--done .kanban__pill{color:var(--done);border-color:color-mix(in srgb,var(--done) 35%,var(--line))}.kanban__count{font-size:var(--fs-body);font-weight:700;color:var(--ink-3);padding-right:2px}.kanban__col--in_progress .kanban__count{color:var(--signal)}.kanban__col--review .kanban__count{color:var(--caution)}.kanban__col--blocked .kanban__count{color:var(--urgent)}.kanban__col--done .kanban__count{color:var(--done)}.kanban__cards{overflow-y:auto;max-height:62vh;padding:2px;margin:-2px}.kanban__card,.kanban__cards{display:flex;flex-direction:column;gap:var(--sp-2)}.kanban__card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-md);padding:var(--sp-3);cursor:pointer;box-shadow:0 1px 2px rgba(27,31,35,.05);transition:border-color .12s ease,box-shadow .12s ease,transform .12s ease}.kanban__card:hover{border-color:var(--line-strong);box-shadow:0 3px 10px rgba(27,31,35,.08)}.kanban__card:active{transform:translateY(1px)}.kanban__card:focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}.kanban__card-title{font-size:var(--fs-body);color:var(--ink);line-height:1.4}.kanban__card-meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.kanban__avatar{border-radius:50%;background:var(--ink-2);color:var(--surface);font-size:9px;font-weight:700;display:flex}.kanban__avatar,.kanban__icon{width:20px;height:20px;align-items:center;justify-content:center;flex-shrink:0}.kanban__icon{display:inline-flex;color:var(--ink-3)}.kanban__icon--due[data-urgency=overdue]{color:var(--urgent)}.kanban__icon--due[data-urgency=today]{color:var(--caution)}.kanban__icon--flag-urgent{color:var(--urgent)}.kanban__icon--flag-high{color:var(--caution)}.kanban__icon--flag-medium{color:var(--ink-3)}.kanban__icon--flag-low{color:var(--line-strong)}.kanban__tag{font-size:11px;font-weight:600;color:#fff;padding:3px 9px;border-radius:999px;white-space:nowrap}.kanban__add{display:inline-flex;align-items:center;gap:6px;align-self:flex-start;font-size:var(--fs-body);font-weight:600;color:var(--ink-3);padding:6px 4px}.kanban__col--in_progress .kanban__add{color:var(--signal)}.kanban__col--review .kanban__add{color:var(--caution)}.kanban__col--blocked .kanban__add{color:var(--urgent)}.kanban__col--done .kanban__add{color:var(--done)}.kanban__add:hover{text-decoration:underline}@media (max-width:767px){.kanban__col{width:78vw}}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}.status-dot--backlog{background:var(--ink-3)}.status-dot--in_progress{background:var(--signal)}.status-dot--review{background:var(--caution)}.status-dot--blocked{background:var(--urgent)}.status-dot--done{background:var(--done)}.status-label{gap:var(--sp-2);font-size:var(--fs-body);color:var(--ink-2)}.priority-badge,.status-label{display:inline-flex;align-items:center;white-space:nowrap}.priority-badge{font-size:var(--fs-caption);padding:2px 7px;border-radius:var(--radius-sm);line-height:1.5;border:1px solid transparent}.priority-badge--quiet{color:var(--ink-3)}.priority-badge--high{color:var(--caution);background:var(--caution-tint);border-color:color-mix(in srgb,var(--caution) 30%,transparent)}.priority-badge--urgent{color:var(--urgent);background:var(--urgent-tint);border-color:color-mix(in srgb,var(--urgent) 30%,transparent);font-weight:600}.due-badge{font-size:var(--fs-caption);white-space:nowrap;color:var(--ink-2)}.due-badge--overdue{color:var(--urgent);font-weight:600}.due-badge--today{color:var(--caution);font-weight:600}.due-badge--soon{color:var(--ink)}.due-badge--later,.due-badge--none{color:var(--ink-3)}.task-table__wrap{border:1px solid var(--line);border-radius:var(--radius-md);background:var(--surface);overflow:auto;-webkit-overflow-scrolling:touch}.task-table{width:100%;min-width:720px;border-collapse:collapse;font-size:var(--fs-body)}.task-table thead th{position:-webkit-sticky;position:sticky;top:0;z-index:1;text-align:left;padding:var(--sp-2) var(--sp-4);background:var(--surface-sunken);border-bottom:1px solid var(--line);font-size:var(--fs-caption);font-weight:600;color:var(--ink-3);white-space:nowrap}.task-table__title-col{min-width:280px}.task-table tbody tr{border-bottom:1px solid var(--line);border-left:3px solid transparent;cursor:pointer;transition:background .12s ease}.task-table tbody tr:last-child{border-bottom:none}.task-table tbody tr:hover{background:var(--surface-sunken)}.task-table tbody tr:active{background:var(--line)}.task-table tbody tr:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.task-table tbody tr[data-urgency=overdue]{border-left-color:var(--urgent)}.task-table tbody tr[data-urgency=today]{border-left-color:var(--caution)}.task-table td{padding:var(--sp-3) var(--sp-4);vertical-align:middle;color:var(--ink-2);white-space:nowrap}.task-table__title-col{white-space:normal}.task-table__title{display:block;font-size:var(--fs-body-lg);color:var(--ink);font-weight:500}.task-table__tags{display:flex;gap:4px;margin-top:4px;flex-wrap:wrap}.task-table .tag{font-size:11px;color:var(--ink-3);background:var(--surface-sunken);border-radius:var(--radius-sm);padding:1px 6px;white-space:nowrap}.task-table .owner-chip{display:inline-flex;align-items:center;gap:6px;min-width:0}.task-table .owner-chip__avatar{width:20px;height:20px;border-radius:50%;background:var(--signal-tint);color:var(--signal);font-size:10px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.task-table .owner-chip__name{font-size:var(--fs-body);color:var(--ink-2)}.task-table .owner-chip--empty{color:var(--ink-3)}.task-table__updated{color:var(--ink-3);font-size:var(--fs-caption);font-family:var(--font-mono)}.view-toggle{padding:3px;background:var(--surface-sunken);border:1px solid var(--line);border-radius:var(--radius-md);flex-shrink:0}.view-toggle,.view-toggle__btn{display:inline-flex;align-items:center}.view-toggle__btn{gap:6px;padding:6px 12px;border-radius:calc(var(--radius-md) - 3px);font-size:var(--fs-body);font-weight:600;color:var(--ink-3);background:transparent;border:none;min-height:30px;transition:background .12s ease,color .12s ease,box-shadow .12s ease}.view-toggle__btn svg{flex-shrink:0}.view-toggle__btn:hover{color:var(--ink-2)}.view-toggle__btn--active{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgba(27,31,35,.1)}.view-toggle__btn--active:hover{color:var(--ink)}@media (max-width:767px){.view-toggle__btn span{display:none}.view-toggle__btn{padding:6px 10px}}.task-detail__title{font-size:var(--fs-h1);font-weight:600;line-height:1.35;margin-bottom:var(--sp-3)}.task-detail__badges{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-4)}.task-detail__description{font-size:var(--fs-body-lg);color:var(--ink-2);line-height:1.6;margin-bottom:var(--sp-5);padding-bottom:var(--sp-5);border-bottom:1px solid var(--line)}.task-detail__facts{display:grid;grid-template-columns:1fr 1fr;grid-gap:var(--sp-4);gap:var(--sp-4);margin-bottom:var(--sp-6)}.task-detail__facts dt{font-size:var(--fs-caption);color:var(--ink-3);margin-bottom:2px}.task-detail__facts dd{margin:0;font-size:var(--fs-body);color:var(--ink)}.task-detail__tags{display:flex;gap:4px;flex-wrap:wrap}.task-detail__move-label{font-size:var(--fs-caption);font-weight:600;color:var(--ink-2);margin-bottom:var(--sp-2)}.task-detail__stages{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.stage-btn{font-size:var(--fs-body);padding:8px 12px;border-radius:var(--radius-md);border:1px solid var(--line-strong);background:var(--surface);min-height:40px}.stage-btn:hover:not(:disabled){background:var(--surface-sunken)}.stage-btn:active:not(:disabled){background:var(--line)}.stage-btn:disabled{opacity:.6}.stage-btn--current{border-color:var(--ink);background:var(--ink);color:#fff;font-weight:600}.task-detail__error{color:var(--urgent);font-size:var(--fs-caption);margin-top:var(--sp-2)}@media (max-width:480px){.task-detail__title{font-size:var(--fs-h2)}.task-detail__badges{flex-wrap:wrap}.task-detail__facts{grid-template-columns:1fr;gap:var(--sp-3)}.task-detail__stages{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.stage-btn{width:100%;padding-inline:8px}}.task-form{gap:var(--sp-4)}.field,.task-form{display:flex;flex-direction:column}.field{gap:6px;flex:1 1}.field__label{font-size:var(--fs-caption);font-weight:600;color:var(--ink-2)}.field input,.field select{height:42px;border:1px solid var(--line-strong);border-radius:var(--radius-md);padding:0 var(--sp-3);background:var(--surface);font-size:var(--fs-body-lg)}.field input:focus,.field select:focus{border-color:var(--signal);box-shadow:0 0 0 3px var(--signal-tint)}.field textarea{min-height:90px;border:1px solid var(--line-strong);border-radius:var(--radius-md);padding:var(--sp-2) var(--sp-3);background:var(--surface);font-size:var(--fs-body-lg);font-family:var(--font-ui);resize:vertical}.field textarea:focus{border-color:var(--signal);box-shadow:0 0 0 3px var(--signal-tint)}.task-form__row{display:flex;gap:var(--sp-3)}.task-form__error{color:var(--urgent);font-size:var(--fs-caption)}.task-form__actions{display:flex;gap:var(--sp-3);margin-top:var(--sp-2)}@media (max-width:480px){.task-form__row{flex-direction:column;gap:var(--sp-4)}.task-form__actions{flex-direction:column-reverse}.task-form__actions .btn{width:100%;justify-content:center}}.pagination{display:flex;align-items:center;justify-content:space-between;padding:var(--sp-4) 0 var(--sp-8);flex-wrap:wrap;gap:var(--sp-3)}.pagination__summary{font-size:var(--fs-caption);color:var(--ink-3)}.pagination__controls{display:flex;align-items:center;gap:var(--sp-3)}.pagination__page{font-size:var(--fs-body);color:var(--ink-2);white-space:nowrap}@media (max-width:480px){.pagination{justify-content:center}.pagination__summary{width:100%;text-align:center}}.task-list--skeleton .task-list__head span:not(.col-status){color:var(--ink-3)}.skeleton-row{display:grid;grid-template-columns:24px minmax(0,1fr) 168px 132px 92px;align-items:center;grid-column-gap:var(--sp-4);column-gap:var(--sp-4);padding:var(--sp-3) var(--sp-4);min-height:56px;border-bottom:1px solid var(--line)}.skeleton-row:last-child{border-bottom:none}.skeleton-shape{background:linear-gradient(90deg,var(--surface-sunken) 25%,var(--line) 37%,var(--surface-sunken) 63%);background-size:400% 100%;animation:skeleton-shimmer 1.4s ease infinite;border-radius:var(--radius-sm);height:12px}.skeleton-shape--dot{width:8px;height:8px;border-radius:50%}.skeleton-shape--pill{height:18px;border-radius:999px}.skeleton-shape--pill-sm{width:60%}@keyframes skeleton-shimmer{0%{background-position:100% 0}to{background-position:0 0}}@media (max-width:767px){.skeleton-row{grid-template-columns:20px minmax(0,1fr);row-gap:var(--sp-2)}.skeleton-row>:nth-child(3),.skeleton-row>:nth-child(4){display:none}}.state-panel{display:flex;flex-direction:column;align-items:center;text-align:center;gap:var(--sp-2);padding:var(--sp-8) var(--sp-5);border:1px dashed var(--line-strong);border-radius:var(--radius-md);background:var(--surface)}.state-panel--error{border-style:solid;border-color:color-mix(in srgb,var(--urgent) 35%,var(--line));background:var(--urgent-tint)}.state-panel__icon{color:var(--ink-3);margin-bottom:var(--sp-2)}.state-panel__icon--error{color:var(--urgent)}.state-panel__title{font-size:var(--fs-h2);font-weight:600}.state-panel__body{font-size:var(--fs-body);color:var(--ink-2);max-width:40ch;margin-bottom:var(--sp-2)}#main{display:block;padding-top:var(--sp-2);flex:1 1}.task-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3)}.task-toolbar>.filter-bar{flex:1 1;min-width:0}.task-toolbar>.view-toggle{margin-top:var(--sp-3)}@media (max-width:767px){#main{padding-bottom:var(--sp-6)}.task-toolbar{flex-direction:column-reverse;gap:0}.task-toolbar>.filter-bar{width:100%}.task-toolbar>.view-toggle{margin-top:var(--sp-3);align-self:flex-start}}