/* white1 (Phil, 12.09 «всё на белом фоне»): the stage is a clean WHITE canvas — no tinted
   ambient ellipses; the sphere is made OF the components (cards/widgets/icons) and the
   focus zone is IMAGINARY: no plate, no halo, no drawn area of any kind */
*{box-sizing:border-box}body{margin:0;background:#fff;color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;overflow:hidden}
/* faces1 (Phil 18.09 «внешний вид — в канонах Apple»): the sky is a quiet
   environment, not flat white — cards float in light, the horizon breathes. */
#stage{background:linear-gradient(180deg,#eef1f5 0%,#fdfdfe 52%,#f3f5f8 100%)}body:before{content:'';position:fixed;inset:0;display:none;pointer-events:none}button,a,input{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer;border:0;background:transparent}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:5px}
/* dock1 (Phil 24.09 «как Dock в macOS»): хром = один док-орнамент у края,
   позиции слева/внизу/справа (правый клик по доку). HIG visionOS tab-bars:
   «a tab bar is always vertical, floating…», ornaments: «consistent location
   that doesn't clutter». Подписи всплывают при наведении (look-to-expand),
   выбранное — заполненная пилюля; тема/статус — из var(). */
.dock{position:fixed;z-index:40;display:flex;gap:6px;padding:8px 6px;border-radius:var(--r-surface);background:var(--glass);backdrop-filter:blur(var(--glass-blur)) saturate(var(--lg-sat));-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--lg-sat));box-shadow:inset 0 0 0 1px var(--glass-line),0 10px 34px rgba(0,0,0,.28)}
.dock[data-pos=left]{left:10px;top:50%;transform:translateY(-50%);flex-direction:column}
.dock[data-pos=right]{right:10px;top:50%;transform:translateY(-50%);flex-direction:column}
.dock[data-pos=bottom]{bottom:10px;left:50%;transform:translateX(-50%);flex-direction:row}
@keyframes cap-pulse{50%{opacity:.35;transform:scale(.8)}}
@media(prefers-reduced-motion:reduce){}
.dock-sep{width:22px;height:1px;background:var(--sep);margin:4px auto;flex:none}
.dock[data-pos=left] .dock-sep,.dock[data-pos=right] .dock-sep{width:1px;height:22px;margin:4px auto}
.dock-menu{position:fixed;z-index:60;display:flex;flex-direction:column;min-width:150px;padding:5px;border-radius:var(--r-menu);background:var(--glass-2);backdrop-filter:blur(var(--glass-blur)) saturate(var(--lg-sat));-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--lg-sat));box-shadow:var(--lg-line),var(--lg-spec),var(--lg-edge-lo),0 14px 44px rgba(0,0,0,.25)}
.dock-menu button{display:flex;align-items:center;gap:8px;height:30px;padding:0 12px;border:0;border-radius:var(--r-field);background:transparent;color:var(--ink-2);font-family:inherit;font-size:13px;font-weight:500;cursor:pointer}
.dock-menu button:hover{background:rgba(120,120,128,.18);color:var(--ink)}
.dock-menu button[aria-pressed=true]{color:var(--ink);font-weight:600}
#edge-status{position:fixed;z-index:30;bottom:16px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-3);letter-spacing:var(--tr-12)}
#edge-status .st-dot{width:5px;height:5px;border-radius:50%;background:#30d158;box-shadow:var(--shadow-1)}
[data-dock=bottom] #edge-status{bottom:auto;top:16px}
@media(prefers-reduced-transparency:reduce){.dock{background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none}}
/* dock1-zoom: чипы кластеров при отдалении (семантический зум) */
#zoom-clusters{position:fixed;inset:0;z-index:35;pointer-events:none}
#zoom-clusters[hidden]{display:none}
@media(prefers-reduced-motion:reduce){#zoom-clusters .zoom-chip{transition:none cubic-bezier(.2,1,.3,1)}}
/* dock1-chips: имена столов — всегда над группой (близость = группировка) */
#desk-chips{position:fixed;inset:0;z-index:32;pointer-events:none}
/* dock1-context: материал в контексте переписки подсвечен на сфере
   (selection grammar: тонкое акцентное кольцо, камера не двигается) */
#stage .chat-context{outline:1.5px solid var(--accent);outline-offset:3px}
html.dock-autohide .dock[data-pos=left]:not(:hover):not(:focus-within){transform:translate(calc(-100% + 8px),-50%)}
html.dock-autohide .dock[data-pos=right]:not(:hover):not(:focus-within){transform:translate(calc(100% - 8px),-50%)}
html.dock-autohide .dock[data-pos=bottom]:not(:hover):not(:focus-within){transform:translateX(-50%) translateY(calc(100% - 8px))}
/* islands1: the search island left the chrome (Phil 19.09 «блок переписки —
   и есть поиск»); the ⌘K palette itself stays as a quiet scene shortcut. */
/* 1scale-2: островной хром мёртв с 1AH — траншейс-медиа тоже */#stage{position:fixed;inset:0;width:100vw!important;height:100vh!important;touch-action:none} /* vw/vh — viewport, не раздутые родители */.tile{width:158px;height:158px;padding:18px;text-align:left;border:1px solid #fff;border-radius:var(--r-surface);background:linear-gradient(165deg,rgba(255,255,255,.96),rgba(249,250,252,.92));box-shadow:0 2px 4px #24375807,0 18px 35px #233f651b,inset 0 1px 0 rgba(255,255,255,.95),inset 0 0 0 1px #435a7810,var(--near-shadow);cursor:pointer;backface-visibility:hidden;overflow:hidden;transition:box-shadow 0.22s cubic-bezier(.2,1,.3,1)}.tile:hover{box-shadow:0 4px 8px #24375810,0 23px 55px #233f6529,inset 0 1px 0 rgba(255,255,255,.95),var(--near-shadow)}.tile.large{width:338px;height:354px}.tile img{width:38px;height:38px;object-fit:contain;margin-bottom:12px}.tile h3{font-size:20px;letter-spacing:var(--tr-20);margin:0 0 6px;font-weight:600}.tile p{font-size:12px;line-height:1.6;color:#88919c;margin:0}.tile .tag{display:block;font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:var(--ink-3);margin:0 0 12px}.tile svg{width:100%;height:65px;overflow:visible}.tile .rows{display:grid;gap:9px;margin-top:13px}.tile .row{font-size:11px;color:var(--ink-3);border-bottom:1px solid var(--sep);padding-bottom:7px}.tile .ring{width:82px;height:82px;border-radius:50%;background:conic-gradient(#e15979 0 70%,#f1e6eb 70%);float:right;position:relative}.ring:after{content:'Демо';position:absolute;inset:9px;display:grid;place-items:center;background:white;border-radius:50%;font-size:12px;color:#9a7780}.tile .swatches{display:flex;gap:9px;margin-top:12px}.swatches i{height:70px;flex:1;border-radius:var(--r-mini);background:linear-gradient(135deg,#d7c9bb,#f2e8de)}.swatches i:nth-child(2){background:linear-gradient(135deg,#a7b6b0,#e2e8e4)}.swatches i:nth-child(3){background:linear-gradient(135deg,#959cab,#dadfea)}
@media(max-width:650px){header{padding:0 17px;height:64px}header small{display:none}header b span{display:none}.tile{box-shadow:var(--shadow-2)}}
@media(prefers-reduced-transparency:reduce){header{background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none}}
@media(max-width:820px){}
@media(max-width:700px){}
@media(max-width:649px){
#stage{top:178px;bottom:158px;touch-action:auto}
.mobile-deck .tile,.mobile-deck .tile.large{width:100%;height:auto;min-height:174px;flex-shrink:0;transform:none;font-size:13px;padding:22px;background:#fff}
.mobile-deck .tile h3{font-size:22px}.mobile-deck .tile p,.mobile-deck .tile .row{font-size:13px}.mobile-deck .tile .tag{font-size:11px}
header{gap:8px}
body{height:100dvh}
}
/* Mobile spatial surface: one card in focus, neighbours around the arc. */
@media(max-width:649px){
/* 28.09: !important — поздний глобальный #stage{touch-action:none} (строка ниже по файлу) убивал мобильную прокрутку */
#stage{top:190px;bottom:190px;touch-action:pan-y!important}
#stage .tile.large{width:300px;height:250px;background:linear-gradient(140deg,#fff,#f4f7fc);box-shadow:var(--shadow-3)}
#stage .tile.large h3{font-size:28px}#stage .tile.large p{font-size:15px;line-height:1.6}
}
#stage{cursor:grab;touch-action:none}#stage:active{cursor:grabbing}
/* depthC [spatial] (дистанция 7): distance has a TEMPERATURE — the far belt cools
   and lightens, the near card stands on a denser shadow. Both ride the render loop's
   facing ramp via quantised custom properties (--cool/--near — the opacity gate's
   own write discipline); the zoom law is untouched. The wash is a plain alpha veil
   (no blend modes on the rotating dome — the grid3 glass lesson). */
.tile{--near-shadow:0 26px 55px -22px rgba(35,63,101,calc(var(--near,0)*.26))}
#stage .tile::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:#aec2e0;opacity:calc(var(--cool,0)*.28)}
/* the metrology switch: same build, same pose — the gate shoots both states */
body[data-noheat] #stage .tile::after{display:none}
body[data-noheat] .tile{--near:0!important}
#stage .tile h3{font-size:17px;line-height:1.2;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}#stage .tile p{display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}#stage .tile.large h3{font-size:22px}
@media(max-width:649px){body>header{flex-wrap:wrap;height:100px;align-content:center;gap:6px 12px}}
.load-error{position:absolute;top:35%;left:20%;right:20%;text-align:center;color:#774b41;background:#fff;padding:24px;border-radius:var(--r-tile)}
/* stacks1 (Фил, 04.09 «стопки по темам» × канон стеков уведомлений): the sent
   conversation stacks at its theme's card — three thin slats with the offset,
   a live counter, quiet glass; a click opens the thread it grew from. */
.stk-host{position:absolute;top:10px;right:10px;z-index:6;display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 9px;border-radius:var(--r-field);background:var(--glass);backdrop-filter:blur(var(--lg-clear-blur)) saturate(var(--lg-clear-sat));-webkit-backdrop-filter:blur(var(--lg-clear-blur)) saturate(var(--lg-clear-sat));box-shadow:var(--lg-line),var(--lg-spec),var(--lg-edge-lo),0 2px 8px rgba(30,48,74,.14);font:600 11px -apple-system,BlinkMacSystemFont,system-ui,sans-serif;color:#3c4654;cursor:pointer;user-select:none}
@media(hover:hover) and (pointer:fine){.stk-host:hover{background:rgba(255,255,255,.88)}}
.stk-host i{width:12px;height:8px;border-radius:3px;background:#fff;box-shadow:inset 0 0 0 1px #d8dce2;flex:none}
.stk-host i:nth-child(1){transform:translateY(4px)}
.stk-host i:nth-child(3){transform:translateY(-4px)}
/* e4 (Phil 19.09, the Mail rule): the unread badge — a systemRed count dot on a
   platform project card; a click clears it, no banner ever interrupts the sphere. */
.e4-badge{position:absolute;top:10px;left:10px;z-index:6;min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-field);background:var(--danger);color:#fff;font:600 11px/20px -apple-system,BlinkMacSystemFont,system-ui,sans-serif;text-align:center;box-shadow:var(--shadow-1);cursor:pointer;user-select:none}
@media(prefers-reduced-transparency:reduce){.stk-host{background:var(--surface);backdrop-filter:none;-webkit-backdrop-filter:none}}
#stage .variety-card{padding:24px;border-radius:var(--r-surface);display:flex;flex-direction:column;justify-content:flex-start;text-align:left;background:linear-gradient(145deg,#fff,#f8fafd)}
#stage .variety-card.feature{width:338px;height:354px}#stage .variety-card.compact{width:158px;height:158px}#stage .variety-card.detail{width:158px;height:158px}#stage .variety-card.wide{width:338px;height:158px}
#stage .variety-card.feature h3{font-size:var(--fs-26);line-height:1.15;letter-spacing:var(--tr-26);margin-bottom:14px}#stage .variety-card.feature p{-webkit-line-clamp:6;font-size:13px;line-height:1.6}
#stage .variety-card.compact p,#stage .variety-card.wide p{display:none}#stage .variety-card.compact h3,#stage .variety-card.wide h3{font-size:20px;-webkit-line-clamp:2}
#stage .variety-card .tag{font-size:11px;margin-bottom:13px;color:#758599;letter-spacing:1.2px}.card-foot{display:block;margin-top:auto;padding-top:13px;color:#73849a;font-size:11px}
#stage .variety-card .sf-icon{width:26px;height:26px;margin:0 0 10px;stroke:var(--ink-3);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}#stage .variety-card.compact .sf-icon,#stage .variety-card.wide .sf-icon{position:absolute;right:18px;top:18px;width:19px;height:19px;margin:0}
#stage .variety-card[data-mode=source] .tag{padding-right:20px}#stage .variety-card[data-mode=meaning].feature{background:linear-gradient(145deg,#fff,#edf3fb)}
#stage .variety-card.detail p{-webkit-line-clamp:2;flex-shrink:0}#stage .variety-card.detail h3{-webkit-line-clamp:2;font-size:20px}#stage .variety-card .card-foot{flex-shrink:0}
#stage .variety-card.edge-chip{width:256px;height:132px;padding:20px;border-radius:var(--r-tile);background:linear-gradient(145deg,#fff,#f3f6fa)}#stage .variety-card.edge-chip h3{font-size:17px;-webkit-line-clamp:2;line-height:1.25;margin-bottom:6px}#stage .variety-card.edge-chip .relation-reason{display:block;margin-top:auto;font-size:11px;line-height:1.4;color:var(--ink-2);-webkit-line-clamp:3} /* 256 keeps the chip clear of the summary's diagonal at parallel −3 (grid3 gate) */
#stage .variety-card.topic-summary{width:280px;height:150px;padding:20px;background:linear-gradient(145deg,#fdfefe,#edf3fa)}#stage .topic-summary h3{font-size:var(--fs-26)!important;font-weight:600;margin-bottom:8px}#stage .topic-summary p{font-size:12px;color:#738196}
#stage .topic-summary .sf-icon{display:none} /* the «Подборка» tag already says collection — the grid icon only ate the height the stats line needs */
#stage .variety-card.feature p{-webkit-line-clamp:3}.variety-card.feature .card-foot{padding-top:9px}

/* Keep the optical anchor at the viewport centre on phones too. */
@media(max-width:649px){#stage{inset:0;}}
@media(max-width:649px){#stage{-webkit-mask-image:linear-gradient(to bottom,transparent 100px,#000 250px,#000 calc(100% - 220px),transparent calc(100% - 155px));mask-image:linear-gradient(to bottom,transparent 100px,#000 250px,#000 calc(100% - 220px),transparent calc(100% - 155px));}}

#stage .tile{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;cursor:grab}

#stage .variety-card h3,#stage .variety-card .tag{flex-shrink:0}
#stage .variety-card.compact .feature-context,#stage .variety-card.wide .feature-context,#stage .variety-card.edge-chip .feature-context{display:none}


@media(min-width:650px){#stage{mask-image:linear-gradient(to bottom,transparent 65px,#000 245px,#000 calc(100% - 150px),transparent calc(100% - 35px))}}

/* The mask melts chrome slivers and the side cuts: the neighbouring topic's band rows wrap
   past the frame edge — a hard viewport cut through their titles reads as clipping; the
   70px side melt turns it into a wrap fade. */
@media(min-width:650px){#stage{-webkit-mask-image:linear-gradient(to bottom,transparent 24px,#000 78px,#000 calc(100% - 40px),transparent calc(100% - 8px)),linear-gradient(to right,transparent,#000 70px,#000 calc(100% - 70px),transparent);-webkit-mask-composite:source-in;mask-image:linear-gradient(to bottom,transparent 24px,#000 78px,#000 calc(100% - 40px),transparent calc(100% - 8px)),linear-gradient(to right,transparent,#000 70px,#000 calc(100% - 70px),transparent);mask-composite:intersect}}

#stage>.css3d-scene{position:absolute!important;inset:0;width:100%!important;height:100%!important;z-index:1} /* сцена не может раздуть окно — setSize правит матрицу, не layout */

/* Apple-like readability: secondary text stays quiet without becoming unavailable. */
header small{color:#5f6670}

/* Companion faces (canonical aecd0ccae): satellites are the source's title card over the deck,
   micro cards its reading-time face tucked above/below. One label, one line, no body — the rim
   speaks in fragments, the deck carries the reading surface. */
#stage .variety-card.satellite{width:158px;height:158px;padding:17px;border-radius:var(--r-tile);background:linear-gradient(145deg,#fff,#f6f8fb)}
#stage .satellite h3{font-size:15px;-webkit-line-clamp:2;margin:0;line-height:1.25}
#stage .satellite .tag{font-size:var(--fs-11);margin-bottom:8px}
#stage .variety-card.micro{width:79px;height:79px;padding:8px;border-radius:var(--r-menu);background:linear-gradient(145deg,#fff,#f2f6fa)}
#stage .micro h3{font-size:13px;-webkit-line-clamp:2;margin:0;line-height:1.25}
#stage .micro .tag{font-size:var(--fs-11);margin-bottom:6px;letter-spacing:var(--tr-11)}
#stage .satellite p,#stage .satellite .card-foot,#stage .satellite .feature-context,#stage .micro p,#stage .micro .card-foot,#stage .micro .feature-context,#stage .satellite .sf-icon,#stage .micro .sf-icon{display:none}

/* Content surfaces share typography; silhouettes identify their actual contents. */
.tile[data-widget]{font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;background:#fff;color:var(--ink)}
.widget-identity{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:500;color:#596474;margin-bottom:10px;min-height:24px}
.widget-native-icon{width:28px;height:28px;object-fit:contain;flex:none}
.widget-meta{margin-left:auto;font-size:11px;font-weight:400;white-space:nowrap}
.tile[data-widget]>.tag,.tile[data-widget]>.sf-icon{display:none}
.tile[data-widget] h3{letter-spacing:-.025em;line-height:1.18}
.tile[data-widget=transcript]{border-radius:var(--r-surface);background:linear-gradient(145deg,#ffffff,#f4f6fa)}
.tile[data-widget=document]{border-radius:var(--r-field);background:linear-gradient(135deg,#fff 92%,#edf0f4 92%);border-color:#dfe4ea}
.tile[data-widget=folder]{background:#edf5ff;border-color:#dce8f6;border-radius:var(--r-tile)}
.tile[data-widget=folder] .widget-native-icon{width:42px;height:32px}
.folder-previews{display:flex;gap:6px;margin-top:10px}
.folder-paper{flex:1;padding:8px 6px;background:#ffffffda;box-shadow:var(--shadow-1);border-radius:4px;font-size:11px;color:#667789;border-top:2px solid #a7c8e9}
.widget-stats{display:flex;justify-content:space-between;gap:8px;border-top:1px solid #25374d12;padding-top:9px;margin-top:10px;font-size:11px;color:#5b6a7a;font-variant-numeric:tabular-nums}
.tile[data-widget] .feature-context{display:none}
.tile[data-widget].micro .widget-identity{margin-bottom:4px;font-size:11px}
.tile[data-widget].micro .widget-native-icon{width:19px;height:19px}
.tile[data-widget].micro .widget-meta{display:none}
.widget-speech-symbol{display:flex;align-items:center;justify-content:center;gap:2px;width:28px;height:28px;border-radius:var(--r-mini);background:#f4e9df;color:#895a37;flex:none}
.widget-speech-symbol i{display:block;width:2px;background:currentColor;border-radius:2px}
.tile[data-widget=document] .widget-native-icon{filter:drop-shadow(0 1px 1px #273c5140)}

/* === grid3 · Apple widget vocabulary (Phil, 12.09) =====================================
   «чтобы все эти значки были оригинальными». The dictionary stays Apple-native:
   system colours, -apple-system numerals with tabular figures, monoline platform
   silhouettes. Glass without the blur on the rotating dome (backdrop-filter there
   would cost the frame rate); sphere widgets carry the light specular rim instead. */

/* Sphere widget faces: density on the lattice's free cells — light glass without
   the blur (they ride the rotating dome), Steps-widget numerals, tabular lines. */
#stage .variety-card.sphere-widget{width:186px;height:100px;padding:13px 15px;border-radius:var(--r-tile);background:rgba(253,254,255,.9);box-shadow:inset 0 0 0 1px #ffffffcc,inset 0 1px 1px #ffffff,0 4px 14px #14243c14,var(--near-shadow)}
#stage .sphere-widget .tag{font-size:var(--fs-11);margin-bottom:7px;letter-spacing:var(--tr-11)}
.widget-numbers{display:flex;align-items:baseline;gap:8px;margin:1px 0 7px}
.widget-numeral{font-size:var(--fs-34);font-weight:700;letter-spacing:var(--tr-34);line-height:1;font-variant-numeric:tabular-nums;color:var(--ink)}
.widget-numbers small{font-size:11px;line-height:1.3;color:var(--ink-2)}
.widget-lines{display:grid;gap:2.5px;font-size:11px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.widget-lines div{display:flex;justify-content:space-between;gap:10px}
.widget-lines b{font-weight:600;color:#273349}
.widget-caption{display:block;margin-top:6px;font-size:11px;letter-spacing:var(--tr-11);color:var(--ink-2)}
.platform-row .sf-icon{width:26px;height:26px}

/* Наружу (Phil, 12.09 «по краям эти проекты, вот такие же рабочие столы»): the rim desks —
   each face carries a live miniature of its true assembly (grid5 lattice, true aspect).
   Gate C (12.09): every tile draws its own hairline ring — a stack of three must read as
   three widgets, not one ribbon; the lattice sits on a quiet plate so it reads as a desk
   surface; the anchor wears the sphere's link ink (monochrome family, no new hue). */
#stage .variety-card.desk-tile{width:158px;height:158px;padding:10px 12px;border-radius:var(--r-tile);background:linear-gradient(145deg,#fff,#f4f7fb);box-shadow:inset 0 0 0 1px #e1e8f0,0 6px 18px #233f6517,var(--near-shadow)}
#stage .desk-tile h3{font-size:13px;-webkit-line-clamp:1;margin:0 0 1px;line-height:1.25}
#stage .desk-tile .tag{font-size:var(--fs-11);letter-spacing:1.5px;margin-bottom:3px;color:#7d8ba0}
#stage .desk-tile .sf-icon{width:13px;height:13px}
#stage .desk-tile .card-foot{font-size:11px}
.desk-mini{flex:1;display:flex;align-items:center;justify-content:center;min-height:0;margin:4px 0;padding:5px 7px;border-radius:var(--r-mini);background:var(--surface-2);box-shadow:inset 0 0 0 1px #e3e9f1}
.desk-plan{position:relative}
.desk-strands{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible;mix-blend-mode:multiply}
.desk-strands path{transition:stroke-opacity .25s cubic-bezier(.2,1,.3,1)}
#stage .desk-tile:hover .desk-strands path{stroke-opacity:1}
.desk-plan b,.desk-plan i{position:absolute;border-radius:2.5px}
.desk-plan b{background:#8ea9c5}
.desk-plan i{background:#dfe7f0;box-shadow:inset 0 0 0 1px #c4cfdc}

/* reader1 — the reading bridge (Phil, 14.09): a tap opens the material. Quiet glass
   over the dimmed globe; hairlines and type carry it, no chrome.
   glass1 (Phil, 14.09 «жидкое стекло»): the panel is Liquid Glass — light pools at
   the top edge (specular), the rim is a bright hairline lens edge, the shadow is
   deep and soft. Transparency carries real content through, blur does the rest. */
.reader{position:fixed;inset:0;z-index:20;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(36,48,70,.26);animation:reader-scrim .3s cubic-bezier(.2,1,.3,1)}
/* glass2 (Phil, скрин 14.09 17:19 «геометрия текста»): the reading column is a MEASURE —
   min(640px,100%) panel with 50px side padding keeps the line at ~65 characters,
   apple.com width, not edge-to-edge. */
.reader-panel{position:relative;width:min(640px,100%);max-height:min(78vh,860px);display:flex;flex-direction:column;padding:32px 50px 16px;border-radius:var(--r-surface);background:var(--surface);box-shadow:inset 0 0 0 1px var(--sep),0 1px 3px rgba(30,48,74,.07),0 28px 80px rgba(30,48,74,.24);animation:reader-rise .34s cubic-bezier(.2,1,.3,1)}
@keyframes reader-rise{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
@keyframes reader-scrim{from{opacity:0}to{opacity:1}}
/* hold1 (Phil, 14.09 «по канонам Apple-анимации»): a sheet never vanishes — it sinks.
   The rise curve, mirrored; the element leaves when the pixels have landed. */
.reader.reader-out{animation:reader-scrim-out .26s cubic-bezier(.2,1,.3,1) forwards;pointer-events:none}
.reader-out .reader-panel{animation:reader-sink .26s cubic-bezier(.4,0,1,1) forwards}
@keyframes reader-sink{from{opacity:1;transform:none}to{opacity:0;transform:translateY(12px) scale(.98)}}
@keyframes reader-scrim-out{from{opacity:1}to{opacity:0}}
/* zoom1 [zoom-continuity] (дистанция 1): the sheet GROWS from its tile — the flight
   is JS (the scene's own MOTION spring, transform+border-radius per frame); the
   class only silences the CSS rise so the two animators never fight over one panel. */
.reader-panel.reader-flip{animation:none}
.reader-out .reader-panel.reader-flip{animation:none}
/* the page-header rule is position:fixed and the panel's backdrop-filter makes the panel
   a containing block — the sheet's head pinned itself over the flow, ignoring the panel
   padding and overlaying the metrics band (glass3: caught by the eye, proven by pixels) */
.reader-panel header{flex:none;position:static;margin:0;padding:0;border:0;background:none;backdrop-filter:none;display:block;height:auto}
/* glass3 (Phil, 14.09 «в виде такого большого виджета… оригинальная Apple»): the head
   is a WIDGET's identity — an app-icon badge with the kind's SF glyph + a caps caption
   (the dome's widget-identity language), a headline-scale title, then the metrics band.
   glass4 (Phil, 14.09 «как приложение Apple Fitness… оригинальные значки»): the badge is
   an APP-ICON tile — a gradient colourway per kind with a white glyph (Notes yellow,
   Pages orange, Voice Memos dark…), the metrics wear Activity ring arcs, and the numerals
   go SF Rounded — the head is a small widget; the card's content flows on under it. */
.widget-head{display:flex;align-items:center;gap:11px;margin:0 0 9px}
.kind-badge{flex:none;width:40px;height:40px;border-radius:var(--r-field);display:grid;place-items:center;box-shadow:inset 0 0 0 1px rgba(255,255,255,.28),inset 0 1px 0 rgba(255,255,255,.4),0 2px 5px rgba(30,48,74,.18)}
.kind-badge .sf-icon{width:21px;height:21px;margin:0;stroke:#fff;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.kind-badge[data-kind=project]{background:linear-gradient(180deg,var(--accent),var(--accent))} /* системный синий */
.kind-badge[data-kind=case]{background:linear-gradient(180deg,#9aa2ad,#636b76)}    /* графит */
.kind-badge[data-kind=note]{background:linear-gradient(180deg,#ffdf5e,var(--acc-orange))}    /* Заметки */
.kind-badge[data-kind=doc]{background:linear-gradient(180deg,#ffa25f,var(--acc-orange))}     /* Pages */
.kind-badge[data-kind=wave]{background:linear-gradient(180deg,#4a4a4f,#222226)}    /* Диктофон */
.widget-head small{font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:var(--ink-3);font-weight:600}
.reader-panel h2{margin:0 0 5px;font-size:28px;letter-spacing:var(--tr-26);line-height:1.2;font-weight:700;color:var(--ink);text-wrap:balance}
/* the metrics band: the Fitness stat row — an Activity ring arc per metric (its colour
   rides data-tone), SF Rounded tabular numerals, quiet labels, one hairline under the
   band. The element keeps .reader-meta as its class contract (the stands read «мин чтения»). */
.reader-stats{flex:none;display:grid;grid-auto-flow:column;column-gap:28px;justify-content:start;margin:8px 0 0;padding:12px 0 10px;border-bottom:1px solid rgba(120,135,155,.2);font-variant-numeric:tabular-nums}
.reader-stats div{display:flex;align-items:center;gap:9px}
.reader-stats div>span{display:grid;gap:3px}
.reader-stats .sf-icon{flex:none;width:16px;height:16px;margin:0;fill:none;stroke-width:2.6;stroke-linecap:round}
.reader-stats div[data-tone=move] .sf-icon{stroke:#f6455f}
.reader-stats div[data-tone=exercise] .sf-icon{stroke:#8fdc26}
.reader-stats div[data-tone=stand] .sf-icon{stroke:#12c7dd}
.reader-stats b{font-size:28px;font-weight:700;letter-spacing:var(--tr-26);line-height:1;color:var(--ink);font-family:ui-rounded,-apple-system,BlinkMacSystemFont,system-ui,sans-serif}
.reader-stats small{font-size:11px;letter-spacing:var(--tr-11);color:var(--ink-2)}
/* glass1 (Phil, 14.09 «кадрирование текста неправильно»): a scroll's fold DISSOLVES
   a line — the mask gradient lives over the body's own padding — never guillotines
   it mid-glyph. The scrollbar rides a 30px rail of its own, clear of the text. */
.reader-body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:14px 26px 30px 0;font-size:15px;line-height:1.65;color:#262b33;-webkit-mask-image:linear-gradient(180deg,transparent,#000 14px,#000 calc(100% - 12px),transparent);mask-image:linear-gradient(180deg,transparent,#000 14px,#000 calc(100% - 12px),transparent);scrollbar-width:thin;scrollbar-color:rgba(90,105,130,.35) transparent}
.reader-body::-webkit-scrollbar{width:10px}
.reader-body::-webkit-scrollbar-thumb{background:rgba(90,105,130,.3);border-radius:var(--r-mini);border:3px solid transparent;background-clip:padding-box}
.reader-body::-webkit-scrollbar-track{background:transparent}
.reader-body p{margin:0 0 15px}
/* glass2: ONE flow — the links section rides in the body's scroll (no cap, no fold
   of its own); the hairline and quiet air separate it, the single law carries it. */
.reader-links{flex:none;margin-top:18px;padding-top:14px;border-top:1px solid rgba(120,135,155,.2)}
.reader-links h3{margin:0 0 10px;font-size:var(--fs-15);letter-spacing:0;text-transform:none;color:var(--ink);font-weight:600}
.reader-link{display:flex;align-items:baseline;gap:10px;width:100%;padding:9px 10px;border-radius:var(--r-field);text-align:left;font-size:13px;color:var(--ink);transition:background .15s cubic-bezier(.2,1,.3,1)}
.reader-link:hover{background:rgba(120,135,155,.1)}
.reader-link small{font-size:11px;letter-spacing:var(--tr-11);text-transform:uppercase;color:var(--ink-3);flex:none}
.reader-link span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.reader-link .sf-icon{flex:none;align-self:center;width:11px;height:11px;margin:0;stroke:#a8b3c2;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.reader-panel footer{flex:none;display:flex;align-items:center;gap:5px;margin-top:12px;padding-top:12px;border-top:1px solid rgba(120,135,155,.2);font-size:11px;color:var(--ink-3)}
.reader-panel footer kbd{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:500;padding:1px 6px;border-radius:var(--r-mini);background:rgba(120,135,155,.14);color:#4f5b6d}
.reader-close{position:absolute;top:16px;right:16px;width:30px;height:30px;display:grid;place-items:center;border-radius:50%;color:#7c8698;transition:background .18s,color .18s cubic-bezier(.2,1,.3,1)}
.reader-close .sf-icon{width:13px;height:13px;margin:0;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.reader-close:hover{background:rgba(120,135,155,.14);color:#3c4654}
@media(prefers-reduced-motion:reduce){.reader,.reader-panel,.reader-out,.reader-out .reader-panel{animation:none;transition:none}}
@media(prefers-reduced-transparency:reduce){.reader{backdrop-filter:none}.reader-panel{backdrop-filter:none;background:var(--surface)}}


/* search1 — the ⌘K palette (Phil, 14.09): Spotlight-quiet over the sphere, the same
   glass family as the reader, seated high like a command line. */
/* lg7b (Фил 23:18 «⌘K — как Спотлайт OS 26»): рабочая зона остаётся читаемой —
   скрим почти прозрачен (макOS не затемняет стол), панель шире и круглее,
   поле выше; жест = выпала сверху, живёт пока печатаем.
   lg9f-возврат: входы на keyframes — @starting-style в WebKit залипал на
   стартовой позе (невидимый щит z-30/50 глотал нажатия, диагноз 02:49) */
.palette{position:fixed;inset:0;z-index:30;display:flex;align-items:flex-start;justify-content:center;padding:18vh 24px 24px;background:rgba(0,0,0,.12);backdrop-filter:blur(3px) saturate(1.03);-webkit-backdrop-filter:blur(3px) saturate(1.03);animation:reader-scrim .3s cubic-bezier(.2,1,.3,1)}
.palette-panel{width:min(640px,100%);display:flex;flex-direction:column;border-radius:var(--r-xl);background:var(--glass-2);backdrop-filter:blur(var(--lg-blur)) saturate(var(--lg-sat));box-shadow:inset 0 0 0 1px var(--glass-line),0 28px 80px rgba(0,0,0,.4);animation:palette-rise .3s cubic-bezier(.2,1,.3,1);overflow:hidden}
@keyframes palette-rise{from{opacity:0;transform:translateY(-8px) scale(.98)}to{opacity:1;transform:none}}
.palette-field{display:flex;align-items:center;gap:10px;padding:17px 20px;border-bottom:1px solid var(--sep)}
.palette-field .sf-icon{width:19px;height:19px;flex:none;stroke:var(--ink-3);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.palette-input{flex:1;min-width:0;border:0;outline:0;background:none;font:inherit;font-size:17px;color:var(--ink)}
.palette-input::-webkit-search-cancel-button{display:none}
.palette-results{margin:0;padding:8px;list-style:none;max-height:44vh;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:rgba(90,105,130,.35) transparent;-webkit-mask-image:linear-gradient(180deg,transparent,#000 8px,#000 calc(100% - 8px),transparent);mask-image:linear-gradient(180deg,transparent,#000 8px,#000 calc(100% - 8px),transparent)}
.palette-results::-webkit-scrollbar{width:10px}
.palette-results::-webkit-scrollbar-thumb{background:rgba(90,105,130,.3);border-radius:var(--r-mini);border:3px solid transparent;background-clip:padding-box}
.palette-results::-webkit-scrollbar-track{background:transparent}
.palette-result[aria-selected=true] button{background:rgba(0,122,255,.09)}
.palette-result button{display:flex;align-items:center;gap:10px;width:100%;padding:10px 12px;border-radius:var(--r-field);text-align:left;font-size:13px;color:#263041;transition:background .15s cubic-bezier(.2,1,.3,1)}
.palette-result button:hover{background:#f0f4f9}
.palette-result .sf-icon{width:19px;height:19px;flex:none;stroke:var(--ink-3);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.palette-result span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.palette-result small{flex:none;font-size:11px;letter-spacing:var(--tr-11);color:var(--ink-3)}
.palette-empty{padding:14px 14px 16px;font-size:13px;color:var(--ink-3)}
/* loose1: the quiet confession above guessed rows — these are did-you-mean hits, not answers */
.palette-loose{padding:8px 14px 0;font-size:11px;color:var(--ink-3)}
.palette-foot{flex:none;padding:10px 16px;border-top:1px solid rgba(120,135,155,.2);font-size:11px;color:var(--ink-3)}
@media(prefers-reduced-motion:reduce){.palette,.palette-panel{animation:none;transition:none}}
@media(prefers-reduced-transparency:reduce){.palette{backdrop-filter:none}.palette-panel{backdrop-filter:none;background:var(--surface)}}

/* pccard (Фил 01.10 «каталог в стиле наших карточек»): лист-панель платформы на
   стекле — идиом палитры/ридера, язык мини-sw-карточек. Канон: collections.md:11
   сетка, :13 скролл-список, sheets.md:55 лист на затемнённом фоне. */
.pc{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:rgba(0,0,0,.28);backdrop-filter:blur(10px) saturate(1.05);-webkit-backdrop-filter:blur(10px) saturate(1.05);animation:reader-scrim .3s cubic-bezier(.2,1,.3,1)}
.pc-panel{width:min(1080px,94vw);max-height:min(78vh,820px);display:flex;flex-direction:column;border-radius:var(--r-surface);background:var(--surface);box-shadow:inset 0 0 0 1px var(--sep),0 28px 80px rgba(0,0,0,.4);overflow:hidden;animation:pc-rise .34s cubic-bezier(.2,1,.3,1)}
@keyframes pc-rise{from{opacity:0;transform:translateY(14px) scale(.97)}}
.pc-out .pc-panel{animation:pc-sink .26s cubic-bezier(.4,0,1,1) forwards}
@keyframes pc-sink{to{opacity:0;transform:translateY(12px) scale(.98)}}
.pc-out{animation:reader-scrim-out .26s cubic-bezier(.2,1,.3,1) forwards}
.pc-head{display:flex;align-items:baseline;gap:10px;padding:20px 22px 12px;flex:none}
.pc-head h2{margin:0;font-size:20px;font-weight:600;letter-spacing:var(--tr-20);color:var(--ink)}
.pc-head .pc-meta{font-size:11px;color:var(--ink-2)}
.pc-x{margin-left:auto;align-self:center;width:28px;height:28px;border:0;border-radius:999px;background:transparent;color:var(--ink-2);display:grid;place-items:center;cursor:pointer;transition:background .15s cubic-bezier(.2,1,.3,1)}
.pc-x:hover{background:rgba(120,120,128,.18)}
.pc-pulse{display:flex;align-items:center;gap:10px;margin:0 22px 14px;padding:9px 12px;border-radius:var(--r-field);background:color-mix(in srgb,var(--acc-blue) 7%,transparent);font-size:12px;color:var(--ink);flex:none;min-width:0}
.pc-pulse.is-pending{background:color-mix(in srgb,var(--acc-orange) 14%,transparent)}
.pc-pulse .pc-pulse-em{width:24px;height:24px;border-radius:var(--r-mini);background:var(--wash-blue);color:var(--acc-blue);display:grid;place-items:center;flex:none}
.pc-pulse b{flex:none;font-weight:600;font-size:12px}
.pc-pulse .pc-pulse-txt{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--ink-2)}
.pc-pulse .pc-pulse-when{flex:none;font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.pc-scroll{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 22px 8px;scrollbar-width:thin;scrollbar-color:rgba(90,105,130,.35) transparent;-webkit-mask-image:linear-gradient(180deg,transparent,#000 8px,#000 calc(100% - 8px),transparent);mask-image:linear-gradient(180deg,transparent,#000 8px,#000 calc(100% - 8px),transparent)}
.pc-grid{display:grid;grid-template-columns:repeat(auto-fill,158px);gap:16px;justify-content:center;padding:6px 0 14px}
/* мини-sw-анатомия под каталогом (сфера скопит .sw-* под #stage .tile — здесь своя) */
/* Каталог = карточка сферы 1:1 (compact variety-card, градиент 145° r19),
   якорь знака + серия-док внизу — канон знака v1 (Фил 01.10). */
.pc-card{border:0;padding:0;background:transparent;cursor:pointer;text-align:left;font-family:inherit;color:var(--ink)}
.pc-card .cc{position:relative;width:158px;height:158px;padding:16px;border-radius:var(--r-surface);display:flex;flex-direction:column;background:linear-gradient(145deg,#fff,#f8fafd);box-shadow:var(--shadow-2);transition:transform .22s cubic-bezier(.2,1,.3,1),box-shadow .22s}
.pc-card:hover .cc{transform:translateY(-2px);box-shadow:var(--shadow-3)}
.pc-card:focus-visible{outline:none}
.pc-card:focus-visible .cc{box-shadow:var(--shadow-3)}
.pc-hd{display:flex;align-items:center;gap:8px;min-height:22px;flex:none}
.pc-anchor{position:relative;width:20px;height:20px;border-radius:5px;flex:none;display:grid;place-items:center;box-shadow:var(--shadow-1);overflow:hidden;font:600 11px -apple-system,BlinkMacSystemFont,system-ui,sans-serif;color:#5a6270}
.pc-anchor.is-mono{background:linear-gradient(145deg,#e8eaee,#d5d9e0)}
#platform-catalog .pc-card .pc-lb{font-size:11px;font-weight:500;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pc-card h3.pc-title{margin:8px 0 0;font-size:15px;line-height:1.24;letter-spacing:var(--tr-15);font-weight:510;color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* серия-док (М1/М2 аудита): микро-ряд macOS Dock — знаки 18px, единый r,
   тугой ряд; невидимая тап-зона 34px (Apple-минимум, collections.md:15) */
.pc-ser{margin-top:auto;display:flex;align-items:center;gap:3px;flex:none}
.pc-mi{position:relative;width:34px;height:34px;padding:8px;flex:none;border-radius:var(--r-mini);cursor:pointer;background:transparent;transition:transform .22s cubic-bezier(.2,1,.3,1)}
.pc-mi img{width:18px;height:18px;border-radius:5px;object-fit:cover;display:block;box-shadow:var(--shadow-1)}
.pc-mi:hover{transform:scale(1.35) translateY(-2px);z-index:3}
.pc-mi i{position:absolute;right:5px;bottom:5px;font:600 var(--fs-11)/1 -apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-style:normal;color:#fff;background:rgba(80,90,105,.85);padding:1.5px 3px;border-radius:4px}
.pc-mi.chat::after{content:'';position:absolute;right:7px;top:7px;width:6.5px;height:6.5px;border-radius:50%;background:var(--acc-orange);border:1.5px solid #fff}
#platform-catalog .pc-card .pc-ft{padding-top:6px;font-size:11px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:none}
.pc-card[data-archived] .cc{opacity:.45;filter:grayscale(1)}
.pc-foot{flex:none;padding:10px 22px;border-top:1px solid var(--sep);font-size:11px;color:var(--ink-3)}
@media(prefers-reduced-motion:reduce){.pc,.pc-panel,.pc-out .pc-panel{animation:none;transition:none}}
@media(prefers-reduced-transparency:reduce){.pc{backdrop-filter:none}.pc-panel{backdrop-filter:none;background:var(--surface)}}

/* graph1 — the ink behind the sheet (Phil, 14.09): the read material's declared
   neighbourhood stays lit on the sphere after the reader closes. Screen-space
   strands over the tiles, under every sheet; the globe quiets back so the web
   reads as shape, not decoration. */
.link-ink{position:absolute;inset:0;z-index:0;pointer-events:none;animation:reader-scrim .25s cubic-bezier(.2,1,.3,1)}
@media(prefers-reduced-motion:reduce){.link-ink{animation:none}}

/* hint1 — the machines learn to speak: a ⌘K pill, the ink's status line, the way back,
   and the reader's link rows wear their strand's colour. Quiet captions, not chrome. */
/* islands1: #search-pill left the chrome — the palette (⌘K) stays as a scene shortcut */
.ink-status{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);max-width:min(72vw,560px);margin:0;padding:7px 14px;border-radius:var(--r-field);background:rgba(255,255,255,.9);font-size:12px;line-height:1.45;color:var(--ink-2);text-align:center;pointer-events:none;z-index:5;box-shadow:inset 0 0 0 1px rgba(255,255,255,.7),0 4px 18px rgba(20,32,56,.12);animation:ink-status-in .25s cubic-bezier(.2,1,.3,1)}
/* tick1: the crossing wears the ring — a shared neighbour of ≥2 ticked cards */
.tile.ink-common{outline:2px solid rgba(10,132,255,.55);outline-offset:4px} /* pair1: pulled but not spotlighted */
.tile.ink-mark{outline:2px solid rgba(10,132,255,.8);outline-offset:3px}   /* pair1: the quiet first beat */
.ink-status[hidden]{display:none}
@keyframes ink-status-in{from{opacity:0;transform:translate(-50%,6px)}to{opacity:1;transform:translate(-50%,0)}}
.reader-back{display:inline-flex;align-items:center;gap:5px;align-self:flex-start;margin:2px 0 0 -4px;padding:6px 12px 6px 7px;border-radius:var(--r-mini);background:rgba(120,135,155,.1);font-size:13px;font-weight:500;color:var(--ink-2);transition:background .18s cubic-bezier(.2,1,.3,1)}
.reader-back:hover{background:rgba(120,135,155,.18)}
.reader-back .sf-icon{width:12px;height:12px;margin:0;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex:none}
.reader-back span{max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.reader-link i{flex:none;align-self:center;width:8px;height:8px;border-radius:50%;background:var(--ink-3)}
@media (prefers-reduced-motion: reduce){.ink-status{animation:none}}

/* author1 — ступень 2 «связывать»: the + row, the removable own rows, the type chips.
   glass1: the controls speak SF symbols — plus on the add row, xmark on removal. */
.reader-add{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;margin-top:2px;padding:9px 12px;border-radius:var(--r-field);border:1px dashed rgba(150,163,182,.45);background:transparent;font-size:13px;color:#6b7890;transition:background .18s,border-color .18s cubic-bezier(.2,1,.3,1)}
.reader-add .sf-icon{width:12px;height:12px;margin:0;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
.reader-add:hover{background:rgba(120,135,155,.1);border-color:rgba(150,163,182,.7)}
.reader-link-row .reader-link{flex:1}
.link-remove{flex:none;width:32px;border-radius:var(--r-field);display:grid;place-items:center;color:#a6b0bf;transition:background .18s,color .18s cubic-bezier(.2,1,.3,1)}
.link-remove .sf-icon{width:11px;height:11px;margin:0;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.link-remove:hover{background:rgba(178,80,96,.1);color:#b25060}
.picker-types{flex:none;display:flex;gap:6px;padding:10px 14px 0}
.picker-chip{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 11px;border-radius:var(--r-field);background:rgba(120,135,155,.1);font-size:12px;color:var(--ink-2);transition:background .2s,color .2s cubic-bezier(.2,1,.3,1)}
.picker-chip:hover{background:rgba(120,135,155,.18)}
.picker-chip[aria-pressed="true"]{background:var(--accent);color:#fff}
.picker-chip i{flex:none;width:8px;height:8px;border-radius:50%;background:var(--ink-3)}
.author-note{margin:8px 0 0;font-size:11px;line-height:1.5;color:#b25060}

/* the reader's facet strip: the same digest language under the metrics band */
.reader-facets{flex:none;display:flex;flex-wrap:wrap;gap:6px 16px;margin:7px 0 0}
.reader-facets span{display:inline-flex;align-items:center;gap:6px}
.reader-facets .sf-icon{width:13px;height:13px;margin:0;stroke:#8d99a8;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.reader-facets small{font-size:11px;letter-spacing:var(--tr-11);color:var(--ink-2)}

/* arch3 — СЕРИЯ МИКРО-ПРИЛОЖЕНИЙ (Phil, 14.09 «как выглядит рабочий стол iPadOS/iOS —
   набор виджетов, иконок приложений… превью при наведении… всё родное Apple-ское»):
   the wall becomes Phil's В1 STACK — a metro rail on the list's edge with a station
   per widget in the edge type's own colour; every file wears ITS OWN application's
   icon and name (kind decides the app, data decides the face); hover = Quick Look's
   gesture — the file's first substantial line unfolds as a floating sheet. The right
   river (В3) carries the anchor's own logic: Calendar's date timeline, Files' Steps
   numerals, Fitness' paragraph profile. Chrome law unchanged: one surface, hairline
   edge, tabular numerals, ONE accent per widget. */
.arch-wall-list{position:relative}
.arch-wall--left .arch-wall-list{padding-left:16px}
/* the rail rides each widget's own segment (top/bottom overshoot seals the gaps —
   an abs rail on the scroll box itself would scroll away and strand its stations);
   neutral hairline: colour belongs to the EDGE (the stations), never to decoration */
.arch-wbit{position:relative}
.arch-wbit::after{content:'';position:absolute;left:-9.5px;top:-5px;bottom:-5px;width:2px;border-radius:2px;background:#dfe7f0}
.arch-node{position:absolute;left:-13px;top:19px;width:9px;height:9px;border-radius:50%;box-shadow:var(--shadow-1);z-index:1}
/* the file's identity: its own application's icon tile + name, the edge type as the
   quiet right-side caption — a Word file wears Word's icon, a transcript wears Music */
.arch-app-badge{width:26px;height:26px;border-radius:var(--r-mini)}
.arch-app-badge .sf-icon{width:14px;height:14px;stroke-width:1.9}
.arch-app-badge[data-app=calendar]{background:linear-gradient(180deg,#ff453a,#d70015)} /* Календарь */
.arch-app-badge[data-app=files]{background:linear-gradient(180deg,var(--accent),var(--accent))}    /* Файлы */
.arch-app-badge[data-app=fitness]{background:linear-gradient(180deg,#9aa2ad,#636b76)}  /* Фитнес */
.arch-app-name{font-size:11px;letter-spacing:1px;text-transform:uppercase;color:var(--ink-2);font-weight:600}
.arch-edge-label{margin-left:auto;padding-top:1px;font-size:var(--fs-11);letter-spacing:var(--tr-11);text-transform:uppercase;color:var(--ink-3);font-weight:600}
/* the mini-application's live face — one honest miniature, 28px tall, no labels */
.arch-mini{display:flex;align-items:center;gap:8px;min-height:28px}
.arch-mini svg{height:28px;width:auto;display:block}
.arch-mini small{font-size:11px;color:var(--ink-3);letter-spacing:var(--tr-11);font-variant-numeric:tabular-nums}
.arch-cal-badge{flex:none;width:26px;height:26px;border-radius:var(--r-mini);background:linear-gradient(180deg,#ff453a,#d70015);color:#fff;display:grid;place-items:center;box-shadow:inset 0 1px 0 rgba(255,255,255,.3),0 2px 5px rgba(30,48,74,.18)}
.arch-cal-badge b{font-size:12px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}
/* hover Quick Look: a floating sheet unfolds from the widget's foot — the wall never
   reflows (a river's mouth must not move under the cursor), the sheet layers over */
.arch-peek{position:absolute;top:calc(100% - 7px);left:9px;right:9px;z-index:4;margin:0;padding:8px 11px 9px;border-radius:var(--r-field);background:#fff;box-shadow:inset 0 0 0 1px #ffffffcc,0 2px 6px rgba(30,48,74,.07),0 18px 40px rgba(30,48,74,.17);font-size:12px;line-height:1.5;color:#5f6f85;opacity:0;transform:translateY(-4px) scale(.985);pointer-events:none;transition:opacity .22s ease,transform .24s cubic-bezier(.2,1,.3,1)}
.arch-wbit.peek .arch-peek{opacity:1;transform:none}
/* the right river's widgets — the wall's one chrome, but VIEWS (not doors): no lift */
.arch-rw{display:flex;flex-direction:column;gap:8px;padding:12px 14px;border-radius:var(--r-tile);background:linear-gradient(150deg,#fff,#f7f9fc);box-shadow:inset 0 0 0 1px #ffffffcc,0 2px 6px rgba(30,48,74,.05),0 14px 34px rgba(30,48,74,.1)}
/* Календарь: the date timeline — neutral rail, red stations, tabular dates */
.arch-dates{position:relative;display:flex;flex-direction:column;gap:2px;padding-left:15px}
.arch-dates::before{content:'';position:absolute;left:4px;top:8px;bottom:8px;width:2px;border-radius:2px;background:#e3e9f1}
.arch-date{position:relative;display:grid;gap:1px;padding:3px 0 3px 2px}
.arch-date::before{content:'';position:absolute;left:-14px;top:8px;width:8px;height:8px;border-radius:50%;background:#fff;box-shadow:var(--shadow-1)}
.arch-date b{font-size:12px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;line-height:1.2}
.arch-date small{font-size:11px;line-height:1.4;color:var(--ink-2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* Файлы: Steps' idiom — one big rounded numeral, then tabular lines under a hairline */
/* gate C (VLM, 14.09): the caption rides UNDER the numeral (the Weather/Stats idiom) —
   «2 · предложений» beside each other read as one ambiguous label */
.arch-steps{display:flex;flex-direction:column;align-items:flex-start;gap:2px}
.arch-steps b{font-size:28px;font-weight:700;letter-spacing:var(--tr-26);line-height:1;color:var(--ink);font-variant-numeric:tabular-nums;font-family:ui-rounded,-apple-system,BlinkMacSystemFont,system-ui,sans-serif}
.arch-steps small{font-size:11px;line-height:1.3;color:var(--ink-2)}
.arch-widget-lines{display:grid;gap:3px;padding-top:7px;border-top:1px solid rgba(120,135,155,.14);font-size:11px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.arch-widget-lines div{display:flex;justify-content:space-between;gap:10px}
.arch-widget-lines b{font-weight:600;color:#273349}
/* Фитнес: the paragraph profile — bars in the ANCHOR's kind colourway (the widget is
   about the document itself: monochrome + one accent of its kind, the grammar's law) */
.arch-profile{display:flex;align-items:flex-end;gap:3px;height:38px}
.arch-profile i{flex:1;min-width:2px;border-radius:1.5px;background:#c7d3e3}
.arch-rw[data-kind=project] .arch-profile i{background:#3d8aef}
.arch-rw[data-kind=case] .arch-profile i{background:#7f8994}
.arch-rw[data-kind=note] .arch-profile i{background:var(--acc-orange)}
.arch-rw[data-kind=doc] .arch-profile i{background:var(--acc-orange)}
.arch-rw[data-kind=wave] .arch-profile i{background:#3a3a40}
@media(prefers-reduced-motion:reduce){.arch-peek{transition:none cubic-bezier(.2,1,.3,1)}}

/* native1 — родная айдентика по всей глубине (Phil, 14.09 «мало прям родной Apple-глоской
   айдентики… они должны быть оригинальными Apple-виджетами»): every face IS its
   application — WIDGET_ATLAS in ARCH_GRAMMAR.md. The badge is the APP-ICON tile keyed
   by BRAND, not by kind colourway: Фитнес графит, Музыка красный, Календарь красный,
   Заметки жёлтый, Страницы оранжевый, Файлы синий. */
.aw-badge[data-app=fitness]{background:linear-gradient(180deg,#9aa2ad,#636b76)}
.aw-badge[data-app=music]{background:linear-gradient(180deg,var(--acc-pink),#fa233b)}
.aw-badge[data-app=calendar]{background:linear-gradient(180deg,#ff453a,#d70015)}
.aw-badge[data-app=notes]{background:linear-gradient(180deg,#ffdf5e,var(--acc-orange))}
.aw-badge[data-app=pages]{background:linear-gradient(180deg,#ffa25f,var(--acc-orange))}
.aw-badge[data-app=files]{background:linear-gradient(180deg,var(--accent),var(--accent))}
/* the legacy compact/wide corner-icon rule must not kidnap the new faces' glyphs */
#stage .tile .aw-badge .sf-icon,#stage .tile .aw-file .sf-icon{position:static}
.aw-head{display:flex;align-items:center;gap:8px;flex:none;margin:0 0 6px;min-width:0}
.aw-head small{font-size:var(--fs-11);letter-spacing:1.3px;text-transform:uppercase;color:var(--ink-3);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Фитнес: rings left, the three numerals right — the widget's own composition */
/* Календарь: the red day block + event rows with dots (the app's own silhouette) */
.aw-cal{display:flex;gap:14px;flex:none;align-items:flex-start;margin:2px 0 4px}
.aw-cal-date{flex:none;display:flex;flex-direction:column;align-items:center;gap:1px;padding-top:1px;min-width:44px}
.aw-cal-date b{font-size:var(--fs-34);font-weight:700;letter-spacing:var(--tr-34);line-height:1;color:var(--danger);font-variant-numeric:tabular-nums;font-family:ui-rounded,-apple-system,BlinkMacSystemFont,system-ui,sans-serif}
.aw-cal-date small{font-size:11px;letter-spacing:var(--tr-11);text-transform:uppercase;color:var(--ink-2);text-align:center}
.aw-events{flex:1;min-width:0;display:grid;gap:5px;align-content:start}
.aw-event{display:flex;align-items:flex-start;gap:6px;min-width:0}
.aw-event i{flex:none;width:7px;height:7px;border-radius:50%;background:#ff453a;margin-top:3px}
.aw-event small{flex:none;font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums;padding-top:1px}
.aw-event span{flex:1;min-width:0;font-size:11px;line-height:1.35;color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* Музыка: artwork + track + the red now-playing wave */
.aw-art{width:54px;height:54px;border-radius:var(--r-field)}
/* Заметки: yellow paper carrying the text's own lines */
/* Страницы: the Quick Look miniature — real lines on a small sheet */
/* Файлы: recents rows — the honest fallback, kind suggests nothing stronger */
.aw-file .sf-icon{width:13px;height:13px;margin:0;stroke:var(--ink-3);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
.aw-file .sf-icon:last-child{stroke:#c2cbd6;margin-left:auto;width:11px;height:11px}
.aw-quiet{margin:6px 0 0;font-size:11px;color:var(--ink-3)}
/* size cuts: the small equator faces compress, they never clip */
#stage .tile.compact .aw-head,#stage .tile.wide .aw-head{margin-bottom:4px}
#stage .tile.compact .aw-cal-date b,#stage .tile.wide .aw-cal-date b{font-size:28px}
#stage .tile.compact .aw-cal-date,#stage .tile.wide .aw-cal-date{min-width:34px}
#stage .tile.compact .aw-ring-stat b,#stage .tile.wide .aw-ring-stat b{font-size:13px}
#stage .tile.compact .aw-art,#stage .tile.wide .aw-art{width:44px;height:44px;border-radius:var(--r-mini)}
#stage .tile.compact .card-foot,#stage .tile.wide .card-foot{display:none}
#stage .tile.compact h3,#stage .tile.wide h3{font-size:15px;line-height:1.2}
#stage .tile.compact .kind-badge,#stage .tile.wide .kind-badge{width:22px;height:22px;border-radius:var(--r-mini)}
#stage .tile.compact .kind-badge .sf-icon,#stage .tile.wide .kind-badge .sf-icon{width:11px;height:11px}
#stage .tile.detail h3{font-size:17px}
/* the rim's small cuts: satellite and micro keep the silhouette at 106px/90px */
#stage .satellite .aw-head{margin-bottom:4px}
#stage .micro .aw-head{margin-bottom:3px}
#stage .micro .aw-head small,#stage .micro .aw-mini-meta{display:none}
/* the live tiles: the anchor's own two micro-applications at widget-tile scale */
#stage .sphere-widget .aw-rings{gap:10px;margin:2px 0 0}
#stage .sphere-widget .aw-ring-stat b{font-size:12px}
#stage .sphere-widget .aw-ring-stat small{font-size:var(--fs-11)}
#stage .sphere-widget .aw-cal{gap:10px;margin:2px 0 0}
#stage .sphere-widget .aw-cal-date b{font-size:22px}
#stage .sphere-widget .aw-cal-date{min-width:30px}
#stage .sphere-widget .aw-event span{-webkit-line-clamp:1;font-size:11px}
#stage .sphere-widget .aw-quiet{margin:2px 0}

/* native1 · original artwork: the badge IS the app icon (macOS bundles + Apple CDN,
   provenance in assets/system/PROVENANCE.md). The gradient tile stays the floor. */
.aw-badge{position:relative}
.aw-badge:has(.aw-badge-icon){background:none;box-shadow:none}
.aw-badge-icon{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;pointer-events:none}
/* the canon ring trio reaches the reader's metrics band too (light mode) */
.reader-stats div[data-tone=move] .sf-icon{stroke:#fa114f}
.reader-stats div[data-tone=exercise] .sf-icon{stroke:#92e82a}
.reader-stats div[data-tone=stand] .sf-icon{stroke:#1ee8e4}

/* gate C r2: Music reads as Apple Music now — the hero carries the large artwork
   (the dark sleeve, the transcript's own colourway) with the red wave under it */
.aw-cover .sf-icon{width:30px;height:30px;stroke:var(--chip);fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;margin:0;position:static}
/* gate C r2: Notes' paper is PAPER — saturated like the widget's own yellow */
/* gate C r2: the hero's Fitness numerals step up with the bigger rings */
#stage .tile.feature .aw-ring-stat b{font-size:17px}
#stage .tile.feature .aw-badge{width:32px;height:32px}
#stage .tile.feature .aw-badge .sf-icon{width:16px;height:16px}

/* Chrome-gate r2 (Phil: «можешь в Chrome это делать»): pixel+DOM audit found the faces
   overflowing their tiles (music hero +119px, calendar hero +86). The saga1 law returns:
   faces COMPRESS, never clip — clipPX=0 on all sixteen equator faces. */
#stage .tile.compact .aw-rings,#stage .tile.wide .aw-rings{gap:10px;margin:0}
#stage .tile.compact .aw-ring-stat b,#stage .tile.wide .aw-ring-stat b{font-size:12px}
#stage .tile.compact .aw-ring-stat small,#stage .tile.wide .aw-ring-stat small{font-size:var(--fs-11)}
#stage .tile.compact .aw-cal,#stage .tile.wide .aw-cal{gap:10px;margin:0}
#stage .tile.compact .aw-cal-date b,#stage .tile.wide .aw-cal-date b{font-size:22px}
#stage .tile.compact .aw-event span,#stage .tile.wide .aw-event span{-webkit-line-clamp:1}
#stage .tile.compact .aw-music,#stage .tile.wide .aw-music{margin:0 0 2px}
#stage .tile.compact .aw-art,#stage .tile.wide .aw-art{width:36px;height:36px;border-radius:var(--r-mini)}
/* Chrome-gate r2, pass 2: the small cuts squeeze to their boxes — clipPX 0 everywhere */
#stage .tile.compact .aw-rings svg,#stage .tile.wide .aw-rings svg{width:36px!important;height:36px!important}
#stage .tile.compact .aw-ring-stats,#stage .tile.wide .aw-ring-stats{gap:2px}
#stage .tile.compact .aw-ring-stat b,#stage .tile.wide .aw-ring-stat b{font-size:11px}
#stage .tile.compact h3,#stage .tile.wide h3{font-size:15px}
#stage .tile[data-app=music].compact h3,#stage .tile[data-app=music].wide h3{-webkit-line-clamp:1}
#stage .tile.compact,#stage .tile.wide{padding-top:16px;padding-bottom:16px}
#stage .tile.compact .aw-badge,#stage .tile.wide .aw-badge{width:20px;height:20px}
#stage .tile.compact .aw-track b,#stage .tile.wide .aw-track b{-webkit-line-clamp:1;font-size:13px}
#stage .tile.compact .aw-art,#stage .tile.wide .aw-art{width:32px;height:32px}
.aw-cover .sf-icon{width:22px;height:22px}

/* native2 — АРХИТЕКТУРА СНАРУЖИ СФЕРЫ (Phil, 14.09 «мне хочется, чтобы так это было
   сделано снаружи сферы»): the room reborn as the globe's surround — glass panels
   floating AROUND the sphere, the chosen card ON the sphere is the spine, the layer
   itself is transparent to the hand: the globe between the panels stays browsable. */
.arch-around{position:fixed;inset:0;z-index:12;pointer-events:none}
.arch-around .arch-sky--strip{position:absolute;top:92px;left:50%;transform:translateX(-50%);width:min(560px,46vw);padding:13px 22px 11px;border-radius:var(--r-surface);background:rgba(255,255,255,.92);box-shadow:inset 0 0 0 1px rgba(255,255,255,.7),0 6px 24px rgba(20,32,56,.1);pointer-events:auto}
.arch-around .arch-sky--strip small{display:block;font-size:11px;letter-spacing:1.8px}
.arch-around .arch-sky--strip h1{margin:5px auto 3px;max-width:30ch;font-size:clamp(16px,1.9vw,21px);font-weight:700;letter-spacing:-.5px;line-height:1.2;color:var(--ink);text-wrap:balance}
.arch-around .arch-sky--strip p{margin:0 auto;max-width:52ch;font-size:12px;line-height:1.45;color:var(--ink-2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.arch-around .arch-trail--around{position:absolute;top:96px;left:26px;max-width:26vw;pointer-events:auto;z-index:2}
.arch-around .arch-wall--around{position:absolute;top:158px;bottom:104px;width:254px;display:flex;flex-direction:column;padding:14px;border-radius:var(--r-surface);background:rgba(255,255,255,.92);box-shadow:inset 0 0 0 1px rgba(255,255,255,.7),0 6px 24px rgba(20,32,56,.1);pointer-events:auto}
.arch-wall--left.arch-wall--around{left:26px}
.arch-wall--right.arch-wall--around{right:26px}
.arch-around .arch-wall-list{max-height:none;flex:1;min-height:0}
.arch-around .arch-rivers--around{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.arch-around-in{animation:arch-around-in .34s cubic-bezier(.2,1,.3,1)}
@keyframes arch-around-in{from{opacity:0}to{opacity:1}}
.arch-around.arch-out{animation:arch-out .3s cubic-bezier(.4,0,1,1) forwards}
@media(max-width:1020px){.arch-wall--right.arch-wall--around{display:none}}
@media(max-width:840px){.arch-wall--left.arch-wall--around,.arch-around .arch-sky--strip,.arch-around .arch-trail--around{display:none}}
@media(prefers-reduced-motion:reduce){.arch-around-in{animation:none}}
@media(prefers-reduced-transparency:reduce){.arch-around .arch-sky--strip,.arch-around .arch-wall--around{backdrop-filter:none;background:var(--surface)}}
/* the surround's widgets never squeeze — the list scrolls, the widget keeps its measure */
.arch-around .arch-wbit,.arch-around .arch-rw{flex-shrink:0}


/* native4 — ПАЗЛ НА ПОВЕРХНОСТИ (Phil: «собирался в такие пазлы… частью сферы»): the
   gathered web tiles tightly on the globe — a raised mosaic. Each member gets the
   elevation of a standing widget (deep soft shadow + bright lens rim); the render
   loop sizes the hero up and steps the members down by seat ring; the rest of the
   sphere steps further back so the assembly owns the light. */
.tile.ink-gathered{box-shadow:inset 0 0 0 1px rgba(255,255,255,.55),0 2px 6px rgba(30,48,74,.08),0 12px 28px rgba(30,48,74,.15),var(--near-shadow)!important;transition:box-shadow 0.22s cubic-bezier(.2,1,.3,1)} /* deepF: стоячая тень виджета iOS, не ореол */

/* surround base (🪒 razor keep): the wall/list/chips/trail grammar — the room authored
   it, the surround inherits it; re-added compact after the dead room chrome was cut */
.arch-wall-head{display:flex;flex-direction:column;gap:8px;margin-bottom:4px}
.arch-wall-head>small{font-size:11px;letter-spacing:1.8px;text-transform:uppercase;color:var(--ink-3);font-weight:600}
.arch-types{display:flex;flex-wrap:wrap;gap:5px}
.arch-type{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:var(--r-field);background:rgba(120,135,155,.1);font-size:11px;color:var(--ink-2);font-family:inherit;transition:background .2s,color .2s cubic-bezier(.2,1,.3,1)}
.arch-type:hover{background:rgba(120,135,155,.18)}
.arch-type[aria-pressed=true]{background:var(--accent);color:#fff}
.arch-type i{width:7px;height:7px;border-radius:50%;flex:none}
.arch-wall-list{display:flex;flex-direction:column;gap:10px;overflow-y:auto;overscroll-behavior:contain;padding:2px 6px 2px 2px;margin:-2px -6px -2px -2px;scrollbar-width:thin;scrollbar-color:rgba(90,105,130,.35) transparent;-webkit-mask-image:linear-gradient(180deg,transparent,#000 16px,#000 calc(100% - 56px),transparent);mask-image:linear-gradient(180deg,transparent,#000 16px,#000 calc(100% - 56px),transparent)}
.arch-wall-list::-webkit-scrollbar{width:8px}
.arch-wall-list::-webkit-scrollbar-thumb{background:rgba(90,105,130,.3);border-radius:var(--r-mini)}
.arch-wall-quiet{margin:6px 2px;font-size:12px;line-height:1.5;color:var(--ink-3)}
.arch-rivers--around path{transition:stroke-opacity .25s ease,stroke-width .25s cubic-bezier(.2,1,.3,1)}
.arch-rivers--around path.dim{stroke-opacity:.14}
.arch-trail{display:flex;align-items:center;gap:8px;overflow:hidden;white-space:nowrap}
.arch-trail i{font-style:normal;color:#b3bcc8;font-size:11px}
.arch-trail span,.arch-trail button{font-size:11px;color:var(--ink-2);max-width:150px;overflow:hidden;text-overflow:ellipsis}
.arch-trail button{font-family:inherit;padding:3px 8px;border-radius:var(--r-mini);background:rgba(120,135,155,.1);transition:background .18s cubic-bezier(.2,1,.3,1)}
.arch-trail button:hover{background:rgba(120,135,155,.2)}
.arch-trail span{font-weight:600;color:var(--accent)}
/* native5 — глубина: внутри пазла небо растёт в паспорт */
.arch-around .arch-sky--deep{width:min(680px,52vw);top:88px;padding:16px 26px 14px}
.arch-around .arch-sky--deep .arch-metrics{justify-content:center}
.arch-around .arch-sky--deep .arch-facets{justify-content:center}
.arch-around .arch-rivers--around{pointer-events:none} /* 🪒 the cut room rule reborn: the rivers' SVG never eats the wheel */
/* the deep sky is a CAPTION, not a surface: it earns detail but never crawls onto
   the sphere's centre — the wheel is the dive's hand */
.arch-around .arch-sky--deep{max-height:236px;overflow:hidden}
.arch-around .arch-sky--deep p{-webkit-line-clamp:1}

/* native6 — стены = внутренняя экосистема глубины (Phil: «в глубине тоже могу так
   шастать, как и по поверхности… боковые панели должны быть внутренней экосистемой
   глубины»): inside, the panels drop their caption posture and become the depth's
   own walls — full height, wider, the вагончики get room to breathe. Walking them
   (tap = шаг, hover = подсветка) is walking the depth. */
.arch-around.arch-deep .arch-wall--around{top:340px;bottom:26px;width:288px}
.arch-around.arch-deep .arch-wall--left.arch-wall--around{left:22px}
.arch-around.arch-deep .arch-wall--right.arch-wall--around{right:22px}
.arch-around.arch-deep .arch-wbit{padding:13px 15px}
.arch-around.arch-deep .arch-trail--around{top:96px;left:22px;max-width:30vw}

/* native7 — фрактал: на каждом собранном члене — его собственный набор виджетов */
.aw-subweb .kind-badge{width:20px;height:20px;border-radius:5px;cursor:pointer;transition:transform .15s cubic-bezier(.2,1,.3,1)}
.aw-subweb .kind-badge:hover{transform:scale(1.15)}
.aw-subweb .kind-badge .sf-icon{width:10px;height:10px;position:static}

/* native7 — картография: над сферой библиотека читается как карта */
.cartograph{z-index:50;position:fixed;inset:0;z-index:14;display:flex;align-items:center;justify-content:center;pointer-events:none;animation:arch-around-in .34s cubic-bezier(.2,1,.3,1)}
.cartograph.carto-out{animation:arch-out .3s cubic-bezier(.4,0,1,1) forwards}
.carto-grid{position:relative;display:grid;grid-template-columns:repeat(2,minmax(240px,300px));gap:56px 72px;pointer-events:none}
.carto-plate{pointer-events:auto;display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:18px 20px 14px;border-radius:var(--r-surface);text-align:left;background:rgba(255,255,255,.92);box-shadow:inset 0 0 0 1px rgba(255,255,255,.7),0 6px 24px rgba(20,32,56,.1);cursor:pointer;font-family:inherit;transition:transform .2s cubic-bezier(.2,1,.3,1)}
.carto-plate:hover{transform:translateY(-3px)}
.carto-kicker{font-size:11px;letter-spacing:1.6px;text-transform:uppercase;color:var(--ink-3);font-weight:600}
.carto-plate h3{margin:0;font-size:20px;letter-spacing:var(--tr-20);color:var(--ink);font-weight:700}
.carto-plate p{margin:0;font-size:11px;line-height:1.4;color:var(--ink-2)}
.carto-hubs{display:flex;gap:6px;margin-top:6px}
.carto-hubs .kind-badge{width:26px;height:26px;border-radius:var(--r-mini)}
.carto-hubs .kind-badge .sf-icon{width:13px;height:13px;position:static}
.carto-count{margin-top:6px;font-size:11px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.carto-routes{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}
@media(max-width:900px){.carto-grid{grid-template-columns:1fr;gap:40px}}

/* deepB — line Б: the meander's rails. First child of #stage, equal z-index to the
   CSS3D scene → DOM order paints them UNDER the cards (depth's z-law); the thin ink
   (.link-ink, z2) stays above. Ports sit on the card edges, white-ringed pills. */
.rail-layer{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:visible}

/* deepA · линия А — МЕАНДР-ПЛИТЫ (native8: «виджет собирался в блоки из больших
   виджетов»): a gathered tile is a PLATE — block radius, lens rim, the elevation
   of a standing widget. The hero leads (plateScale), the wings step down by ring;
   the seams between plates read as one assembled field on the sphere. */
.tile.ink-gathered{border-radius:var(--r-surface)}
.tile.ink-gathered .kind-badge{box-shadow:inset 0 0 0 1px rgba(255,255,255,.34),inset 0 1px 0 rgba(255,255,255,.45),0 2px 6px rgba(30,48,74,.2)}
.tile.ink-gathered h3{letter-spacing:-.45px}

/* deepD — СТОЛ = один большой виджет: тихая стеклянная плита-подложка под всей
   решёткой (за плитами, прозрачна для руки), общий контур чтения (Phil: «рабочий
   стол просто большего размера»). Без blur — купол крутится, каждый кадр на счету. */

/* deepJ: a gathered member's OTHER representations (band satellites, companions)
   stand down while the desk lives — one material, one visible object */
.tile.ink-dupe{opacity:0!important;pointer-events:none!important}
/* corpus4: районы корпуса на карте экосистемы */
.carto-eco{grid-column:1/-1;pointer-events:auto;display:flex;flex-direction:column;gap:4px;padding:16px 18px;border-radius:var(--r-tile);border:none;background:rgba(0,113,227,.08);color:inherit;text-align:left;cursor:pointer}
.carto-eco:hover{background:rgba(0,113,227,.14)}
.carto-eco h3{font-size:17px;margin:0}
.carto-eco p{font-size:12px;color:var(--mut,var(--ink-2));margin:0}
.carto-plate--corpus h3{font-size:15px}
.carto-sheet{z-index:75;position:fixed;inset:0;background:rgba(0,0,0,.32);display:grid;place-items:center;z-index:70}
.carto-sheet-panel{position:relative;width:min(680px,92vw);max-height:80vh;overflow:auto;background:var(--card,#fff);border-radius:var(--r-tile);padding:20px 22px;box-shadow:var(--shadow-3)}
.carto-sheet-panel h3{margin:2px 40px 8px 0}
.carto-sheet-list{display:flex;flex-direction:column;gap:6px;margin-top:12px}
.carto-file{display:flex;flex-direction:column;gap:2px;padding:9px 12px;border:none;border-radius:var(--r-field);background:rgba(120,120,128,.07);text-align:left;cursor:pointer;color:inherit}
.carto-file:hover{background:rgba(0,113,227,.1)}
.carto-file span{font-size:13px;font-weight:600}
.carto-file small{font-size:11px;color:var(--mut,var(--ink-2))}
.carto-file-text{white-space:pre-wrap;font:12.5px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;padding:12px;border-radius:var(--r-field);background:rgba(120,120,128,.07);max-height:56vh;overflow:auto}
.carto-pager{display:flex;gap:12px;align-items:center;margin-top:10px}
.carto-pagebtn{border:none;border-radius:var(--r-field);background:rgba(120,120,128,.14);padding:7px 14px;font-size:13px;cursor:pointer;color:inherit}
.carto-pagebtn:hover{background:rgba(120,120,128,.24)}
.carto-chip-item{display:block;font-size:11px;color:var(--mut,var(--ink-2));margin-top:6px}

/* sphere-corpus5: original system glyphs and corpus content share the sphere's tiles. */
.apple-symbol{display:inline-block;width:20px;height:20px;flex:none;background:currentColor;-webkit-mask:var(--apple-symbol) center/contain no-repeat;mask:var(--apple-symbol) center/contain no-repeat;vertical-align:middle;color:inherit}
.apple-symbol--back{transform:rotate(180deg)}
#stage .tile .apple-symbol{display:inline-block;position:static;margin:0;width:22px;height:22px;color:inherit}
.aw-badge:has(.apple-symbol){background:transparent;box-shadow:none;color:#526277}
#stage .tile .aw-badge .apple-symbol{width:100%;height:100%}
#stage .tile.corpus-tile{width:158px;height:158px;padding:20px;border-radius:var(--r-surface);text-align:left;background:rgba(255,255,255,.96);color:#20242c;overflow:visible;cursor:grab;box-shadow:var(--shadow-2)}
#stage .tile.corpus-tile--open{width:316px;min-height:220px}
#stage .tile.corpus-tile--reading{width:min(420px,calc(100vw - 56px));min-height:300px}
.corpus-face{display:flex;flex-direction:column;gap:12px;min-width:0}
.corpus-head{display:flex;align-items:center;gap:8px;font-size:13px;color:#536279;font-weight:500}
#stage .corpus-face h3{font-size:22px;line-height:1.18;letter-spacing:var(--tr-22);margin:0;overflow-wrap:anywhere;display:block;-webkit-line-clamp:unset}
#stage .corpus-face .corpus-copy{font:400 13px/1.45 -apple-system,system-ui,sans-serif;color:#536071;margin:0;display:block;-webkit-line-clamp:unset;max-height:none;overflow-wrap:anywhere;white-space:pre-wrap}
#stage .corpus-face pre.corpus-copy{max-height:260px;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;padding:8px;border-radius:var(--r-mini);background:#f5f6f8;color:#283447;user-select:text;cursor:text}
.corpus-meta,.corpus-note{font-size:11px;line-height:1.4;color:#647083}
.corpus-members{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.corpus-member{display:flex;align-items:center;gap:6px;padding:8px 4px;min-height:44px;min-width:0;border:0;background:transparent;text-align:left;font:500 11px/1.25 -apple-system,system-ui,sans-serif;color:#3c5675;cursor:pointer}
.corpus-member span:not(.apple-symbol){min-width:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
#stage .corpus-member .apple-symbol{width:16px;height:16px}
#stage .corpus-member .apple-symbol:last-child{width:10px;margin-left:auto}
.corpus-controls{display:flex;flex-wrap:wrap;gap:4px;align-items:center}
.corpus-action{min-height:44px;padding:8px;border:0;border-radius:var(--r-field);background:#f0f4f8;color:var(--accent);font:500 12px/1.3 -apple-system,system-ui,sans-serif;display:flex;align-items:center;gap:6px;cursor:pointer}
#stage .corpus-action .apple-symbol{width:16px;height:16px}
.corpus-action:focus-visible,.corpus-member:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
@media(hover:hover){.corpus-member:hover,.corpus-action:hover{background:#e8f0f9}}
@media(max-width:650px){#stage .tile.corpus-tile--open{width:260px;padding:16px}.corpus-face{gap:8px}#stage .corpus-face h3{font-size:20px}.corpus-members{gap:0}}
#stage .corpus-tile:not(.corpus-tile--open) .corpus-copy{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;white-space:normal}
#stage .corpus-tile:not(.corpus-tile--open) h3{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
#stage .corpus-tile--reading h3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}

/* Selected sources share the corpus work area's measured widget dimensions. */
#stage .tile.surface-hero{width:316px;height:auto;min-height:240px;padding:20px;border-radius:var(--r-surface);background:#fff;overflow:hidden;text-align:left}
#stage .tile.surface-peer{width:268px;height:196px;padding:18px;border-radius:var(--r-surface);background:#fff;overflow:hidden;text-align:left} /* Н-7 (Фил 06:29 «не хватает места»): пир крупнее и просторней — планер меряет живые лица, рассадка подстроится */
#stage .surface-body{display:flex;flex-direction:column;gap:12px;min-width:0;max-height:340px;overflow:hidden}
#stage .surface-body h3{font-size:22px;line-height:1.18;letter-spacing:var(--tr-22);margin:0;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
#stage .surface-peer .surface-body h3{font-size:var(--fs-20);-webkit-line-clamp:3}
#stage .surface-body .aw-foot{margin-top:auto}
.surface-pages{margin-top:16px;min-height:44px;flex-wrap:nowrap;gap:6px}
.surface-pages>small{flex:1;min-width:0}
.surface-pages .corpus-action{min-width:44px;justify-content:center}
.surface-pages .corpus-action:disabled{opacity:.35;cursor:default}
@media(max-width:650px){#stage .tile.surface-hero{width:260px;padding:16px}#stage .surface-body{max-height:224px}#stage .surface-body h3{font-size:20px}}

#stage .surface-body>*{flex-shrink:0}
#stage .surface-body .aw-idea-clip{display:-webkit-box;-webkit-line-clamp:2;max-height:3em;font-size:13px;line-height:1.5}
#stage .tile.surface-hero .surface-body .card-foot{padding-top:0}
@media(max-width:650px) and (max-height:650px){
 #stage .tile.surface-hero{min-height:180px}
 #stage .tile.surface-peer{height:132px;padding:16px}
 #stage .surface-body .aw-metric-rows,#stage .surface-body .aw-idea-clip,#stage .surface-body .aw-link-chips,#stage .surface-body .card-foot{display:none}
 #stage .surface-body{max-height:110px;gap:8px}
 #stage .surface-body h3{-webkit-line-clamp:2}
 #stage .surface-hero .voice-detail{display:none}
}

@media(max-width:649px){#stage.has-gather{-webkit-mask-image:linear-gradient(to bottom,transparent 78px,#000 100px,#000 calc(100% - 80px),transparent calc(100% - 44px));mask-image:linear-gradient(to bottom,transparent 78px,#000 100px,#000 calc(100% - 80px),transparent calc(100% - 44px));}}

html,body{overflow:hidden!important;height:100%;max-width:100vw} /* окно = кадр: перспектива-контейнер рендера шире окна никогда не уводит док за экран */
/* Hidden overflow remains programmatically scrollable on focus; clip does not.
   Only the camera may move the 3D canvas. File previews retain their own scroll. */
#stage>.css3d-scene{overflow:clip!important}

/* A picked card has a temporary hand representation; its destination stays visible. */
.move-ghost{position:fixed;z-index:80;pointer-events:none;width:220px;padding:20px;border-radius:var(--r-surface);background:#fff;color:var(--ink);box-shadow:var(--shadow-3);transform:rotate(-2deg);font:600 17px/1.35 -apple-system,BlinkMacSystemFont,system-ui,sans-serif}
.move-ghost .voice-detail,.move-ghost .voice-meta,.move-ghost .card-foot{display:none}
.move-ghost h3{margin:10px 0 0}
#stage .tile.ink-moving{cursor:grabbing}
#stage .tile.move-target{box-shadow:var(--shadow-2)}
@media(prefers-reduced-motion:reduce){.move-ghost{transform:none}}
/* ab-lenin merge (C07): ширина peer — ёмкость данных; классы вешает dressGatherFace (см. MERGE_REQUEST) */
#stage .tile.surface-peer--rich{width:282px}
#stage .tile.surface-peer--wide{width:316px}

/* Computed widgets use the same sphere body and original symbol set. */
.projection-body{display:flex;flex-direction:column;gap:10px;min-width:0;text-align:left;color:#242a32}
.projection-head{display:flex;align-items:center;gap:8px}
#stage .projection-head .sf-icon{display:inline-block;width:16px;height:16px;flex:none;color:var(--ink-2)}
#stage .projection-head .tag{margin:0;font-size:11px;letter-spacing:1px;color:var(--ink-2)}
#stage .projection-tile h3.projection-title{margin:0;font-size:17px!important;line-height:1.18;font-weight:600;letter-spacing:var(--tr-17);-webkit-line-clamp:2}
.projection-count{display:flex;align-items:baseline;gap:8px;font-variant-numeric:tabular-nums}
.projection-count b{font-size:28px;font-weight:600;letter-spacing:var(--tr-26);line-height:1}
.projection-count span,.projection-note{font-size:11px;line-height:1.4;color:var(--ink-2)}
.projection-rows{display:grid;gap:8px}
.projection-rows:empty{display:none}
.projection-row{display:flex;align-items:center;gap:8px;font-size:12px;line-height:1.3;font-variant-numeric:tabular-nums}
.projection-row span:not(.sf-icon){flex:1;min-width:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.projection-row b{font-weight:600;flex:none}
#stage .projection-row .sf-icon{display:inline-block;width:14px;height:14px;flex:none;color:var(--ink-2)}
#stage .sphere-widget.projection-tile .projection-body{gap:5px}
#stage .sphere-widget.projection-tile:not(.surface-hero):not(.surface-peer) .projection-title{display:none}
#stage .sphere-widget.projection-tile:not(.surface-hero):not(.surface-peer) .projection-count b{font-size:28px}
#stage .sphere-widget.projection-tile:not(.surface-hero):not(.surface-peer) .projection-row{font-size:11px}
#stage .sphere-widget.projection-tile:not(.surface-hero):not(.surface-peer) .projection-rows{gap:3px}
#stage .edge-chip.projection-tile:not(.surface-hero):not(.surface-peer) .projection-title{display:none}
#stage .projection-tile.surface-hero .projection-body{gap:14px}
#stage .projection-tile.surface-hero h3.projection-title{font-size:22px!important}
#stage .projection-tile.surface-hero .projection-count b{font-size:40px}
#stage .projection-tile.surface-peer .projection-note{display:none}
/* Gathered peers use one spacing owner; inherited feature margins clipped rows. */
#stage .tile.surface-peer .surface-body{gap:10px}
#stage .tile.surface-peer .surface-body .aw-head,
#stage .tile.surface-peer .surface-body h3,
#stage .tile.surface-peer .surface-body .aw-metric-rows{margin:0}
#stage .tile.surface-peer .surface-body .card-foot{display:none}

/* A shared content hierarchy. Secondary fields yield before titles or source text. */
#stage .tile .sw-card{display:flex;flex-direction:column;gap:10px;min-width:0;height:100%;overflow:hidden;text-align:left;color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif}
#stage .tile .sw-card>*{min-width:0;margin:0}
#stage .tile .sw-head{display:flex;align-items:center;gap:8px;flex:none;height:20px}
#stage .tile .sw-head .apple-symbol,#stage .tile .sw-related-row .apple-symbol{position:static;display:inline-block;width:18px;height:18px;flex:none;margin:0;color:var(--ink-2)}
#stage .tile .sw-label{font-size:11px;font-weight:500;letter-spacing:0;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#stage .tile .sw-format{margin-left:auto;color:#777d87;font-size:11px;font-weight:600;letter-spacing:var(--tr-11)}
#stage .tile .sw-card h3.sw-title{margin:0;font-size:20px;line-height:25px;letter-spacing:var(--tr-20);font-weight:600;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;flex:none;color:var(--ink)}
#stage .tile .sw-preview{min-height:0;overflow:hidden;flex:1}
#stage .tile .sw-card p.sw-excerpt{margin:0;font-size:12px;line-height:1.45;font-weight:400;color:var(--ink-2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;max-height:none}
#stage .tile .sw-card[data-family=note] .sw-preview{padding:9px 11px;border-radius:var(--r-field);background:#fff9e9;border-top:2px solid #e4c164}
#stage .tile .sw-card[data-family=document] .sw-preview{padding:9px 11px;border-radius:var(--r-mini);background:var(--surface-2);border-left:2px solid #d3d9e2}
#stage .tile .sw-rows{display:flex;flex-direction:column;gap:8px;min-height:0;overflow:hidden}
#stage .tile .sw-row{display:flex;align-items:flex-start;gap:9px;font-size:12px;line-height:1.35}
#stage .tile .sw-index{flex:none;font-variant-numeric:tabular-nums;color:#737b89;min-width:15px}
#stage .tile .sw-card[data-family=chronology] .sw-index{font-size:11px;line-height:1.5;font-weight:600;color:#475c7a;min-width:35px}
#stage .tile .sw-row-text{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;color:var(--ink-2)}
#stage .tile .sw-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto;flex:none;font-size:11px;line-height:1.3;color:#717780;font-variant-numeric:tabular-nums}
#stage .tile .sw-origin{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#stage .tile .sw-related{display:flex;flex-direction:column;gap:8px;padding-top:10px;border-top:1px solid #edf0f3}
#stage .tile .sw-section-label{font-size:11px;color:#767c86}
#stage .tile .sw-related-row{display:flex;align-items:center;gap:8px;color:var(--ink-2);font-size:12px;line-height:1.4}
#stage .tile .sw-related-row .apple-symbol{width:12px;height:12px}
#stage .tile .sw-related-row>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#stage .tile .sw-card[data-size=large]{gap:12px}
#stage .tile .sw-card[data-size=large] .sw-title{font-size:28px;line-height:34px;-webkit-line-clamp:3}
#stage .tile .sw-card[data-size=large] .sw-excerpt{-webkit-line-clamp:3;font-size:13px}
#stage .tile .sw-card[data-size=large] .sw-row-text{-webkit-line-clamp:2}
#stage .tile .sw-card[data-size=mini]{gap:5px}
#stage .tile .sw-card[data-size=mini] .sw-head{height:16px}
#stage .tile .sw-card[data-size=mini] .sw-head .apple-symbol{width:14px;height:14px}
#stage .tile .sw-card[data-size=mini] .sw-label{font-size:11px}
#stage .tile .sw-card[data-size=mini] .sw-title{font-size:13px}
#stage .tile .sw-card[data-size=mini] .sw-meta{font-size:11px}
#stage .tile.micro .sw-meta,#stage .tile.micro .sw-label{display:none}
#stage .tile.surface-peer .surface-body{height:168px;max-height:168px}
#stage .tile.surface-peer .sw-card{gap:8px}
#stage .tile.surface-peer .sw-title{font-size:17px}
#stage .tile.surface-hero .surface-body{max-height:340px}
#stage .tile.surface-hero .sw-card{height:auto}
#stage .tile.surface-hero .sw-meta{padding-top:8px}
#stage .tile .surface-pages .corpus-action .apple-symbol{position:static;margin:0;width:16px;height:16px}
@media(max-width:650px){
 #stage .tile.surface-hero .surface-body{max-height:300px}
 #stage .tile.surface-hero .sw-title{font-size:20px}
 #stage .tile .sw-card[data-size=large] .sw-related-row:nth-child(n+3){display:none}
}
@media(max-width:650px) and (max-height:650px){
 #stage .tile.surface-peer .surface-body{height:100px;max-height:100px}
 #stage .tile.surface-hero .surface-body{max-height:200px}
 #stage .tile.surface-peer .sw-preview,#stage .tile.surface-peer .sw-rows,#stage .tile .sw-related{display:none}
 #stage .tile .sw-card[data-size=large] .sw-excerpt{-webkit-line-clamp:2}
}

#stage .tile.surface-peer:has(.sw-card){height:208px}
#stage .tile.compact:not(.surface-peer):not(.surface-hero) .sw-preview,
#stage .tile.wide:not(.surface-peer):not(.surface-hero) .sw-preview{display:none}
@media(max-width:650px) and (max-height:650px){#stage .tile.surface-peer:has(.sw-card){height:132px}}

/* One-project pilot. HIG's 16pt content margin is adapted to CSS layout units,
   not claimed as a universal native WidgetKit size after sphere projection. */
#stage .tile:has(.sw-project-pilot){padding:16px;background:#fff;color:var(--ink)}
#stage .tile .sw-project-pilot{gap:12px;font-optical-sizing:auto}
#stage .tile .sw-project-pilot .sw-head{height:24px;gap:8px}
#stage .tile .sw-project-pilot .sw-head .apple-symbol{width:20px;height:20px;color:var(--accent)}
#stage .tile .sw-project-pilot .sw-label{font-size:12px;color:var(--ink-2)}
#stage .tile .sw-project-pilot .sw-title{font-size:22px;font-weight:600;line-height:1.18;letter-spacing:var(--tr-22)}
#stage .tile .sw-project-pilot .sw-preview{flex:none;display:flex;flex-direction:column;gap:5px}
#stage .tile .sw-project-pilot .sw-section-label{font-size:11px;font-weight:500;color:var(--ink-2)}
#stage .tile .sw-project-pilot .sw-excerpt{font-size:13px;line-height:1.4;color:#3a3a3c;-webkit-line-clamp:3}
#stage .tile .sw-project-pilot .sw-related{gap:0;border-top:1px solid var(--sep);padding-top:12px}
#stage .tile .sw-project-pilot .sw-related>.sw-section-label{margin-bottom:4px}
#stage .tile .sw-project-pilot .sw-related-row{min-height:32px;gap:8px;font-size:13px;color:#3a3a3c}
#stage .tile .sw-project-pilot .sw-related-row .apple-symbol{width:16px;height:16px;color:var(--ink-2)}
#stage .tile .sw-project-pilot .sw-meta{font-size:11px;color:var(--ink-2);padding-top:4px}
#stage .tile .sw-project-pilot[data-size=mini]{gap:6px}
#stage .tile .sw-project-pilot[data-size=mini] .sw-title{font-size:15px}
#stage .tile .sw-project-pilot[data-size=mini] .sw-head{height:20px}
#stage .tile.surface-hero:has(.sw-project-pilot) .surface-body{max-height:none}
#stage .tile:has(.sw-project-pilot) .surface-pages{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--sep)}
#stage .tile:has(.sw-project-pilot) .surface-pages>.corpus-meta{flex-basis:100%;font-size:11px;color:var(--ink-2)}
#stage .tile:has(.sw-project-pilot) .surface-pages .corpus-action{height:44px;border-radius:var(--r-field);background:var(--chip);color:#3a3a3c}
#stage .tile:has(.sw-project-pilot) .surface-pages [aria-label="Открыть материал"]{flex:1;background:var(--accent);color:white;font-size:15px;font-weight:600}
#stage .tile:has(.sw-project-pilot) .corpus-action:active{filter:brightness(.9)}
@media(prefers-contrast:more){
 #stage .tile .sw-project-pilot .sw-label,#stage .tile .sw-project-pilot .sw-meta,#stage .tile .sw-project-pilot .sw-section-label{color:var(--ink)}
}
/* Pagination is navigation; keep it separate from the primary action row. */
#stage .tile:has(.sw-project-pilot) .surface-pages{display:grid;grid-template-columns:minmax(0,1fr) 44px 44px}
#stage .tile:has(.sw-project-pilot) .surface-pages>.corpus-meta{grid-area:1 / 1 / 2 / 4;white-space:normal}
#stage .tile:has(.sw-project-pilot) .surface-pages:has([aria-label="Следующие связи"])>.corpus-meta{grid-area:1 / 1 / 2 / 2}
#stage .tile:has(.sw-project-pilot) [aria-label="Предыдущие связи"]{grid-area:1 / 2}
#stage .tile:has(.sw-project-pilot) [aria-label="Следующие связи"]{grid-area:1 / 3}
#stage .tile:has(.sw-project-pilot) [aria-label="Открыть материал"]{grid-area:2 / 1}
#stage .tile:has(.sw-project-pilot) [aria-label="Переместить карточку"]{grid-area:2 / 2}
#stage .tile:has(.sw-project-pilot) .surface-pages .surface-info{grid-area:2 / 3;justify-self:stretch}

















/* macOS: панель с заголовком и таблицей данных */





/* visionOS: пространственная глубина + свечение */



/* MERGE: оригинальный artwork поверх градиент-плитки */
.aw-badge--art{position:relative}
.aw-badge--art .aw-badge-icon{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:inherit}
.aw-badge--art .sf-icon{opacity:.9}
/* MERGE: живые виджеты Wallet/Checklist/Contacts */
/* ══════════════════════════════════════════════════════════════════
   APPLE HIG CANON — точные спецификации виджетов (не «похоже на», а ПО БУКВЕ)
   Источник: Apple_комплект/docs/13_HIG_виджеты_полный.md + пресс-кадры
   ══════════════════════════════════════════════════════════════════ */

/* — БАЗОВАЯ ПЛИТА ВИДЖЕТА — */
#stage .tile.surface-hero,
#stage .tile.surface-peer,
#stage .tile.surface-peer--rich,
#stage .tile.surface-peer--wide {
  /* canon1 [materials]: Liquid Glass belongs to controls/navigation ABOVE content —
     the desk plates ARE content, so they carry a light standard underlay instead:
     translucent white, no blur (also what the rotating dome could never afford). */
  background: rgba(255,255,255,.84);
  /* Apple: скругление по размеру — small 16, medium 20, large 24 */
  border-radius: var(--widget-radius, 20px);
  /* Apple: внутреннее поле 16pt, НЕ больше */
  padding: 16px;
  /* Apple: нет border, только мягкая тень */
  border: none;
  box-shadow:var(--shadow-3);
}

/* Размеры виджетов: Apple-канон systemSmall/Medium/Large */
#stage .tile.surface-peer { --widget-radius: 16px; }
#stage .tile.surface-peer--rich { --widget-radius: 18px; }
#stage .tile.surface-peer--wide { --widget-radius: 20px; }
#stage .tile.surface-hero { --widget-radius: 24px; }

/* — ТИПОГРАФИКА ПО CANON — */
/* Заголовок: SF Pro Display, 22pt (large) / 17pt (medium), weight 600, tracking -0.02em */
#stage .surface-body h3,
#stage .tile.surface-hero .surface-body h3 {
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', system-ui, sans-serif;
  font-size: var(--title-size, 17px);
  font-weight: 600;
  letter-spacing: -0.02em;
  line-height: 1.21;
  color: #000;
  margin: 0 0 4px 0;
}
#stage .tile.surface-hero .surface-body h3 { --title-size: 22px; }

/* Метка приложения: 11pt, weight 500, uppercase, opacity 0.6 */
#stage .aw-head small,
#stage .tag {
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif;
  font-size: 11px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: rgba(0,0,0,.6);
  margin: 0;
}

/* Числа-герои: 34pt (large), weight 700, tabular-nums */
#stage .aw-metric-row b,
#stage .widget-numeral,
#stage .ui-rounded {
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', system-ui, sans-serif;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.022em;
  color: #000;
}
#stage .tile.surface-hero .aw-metric-row b { font-size: 34px; }
#stage .tile.surface-peer .aw-metric-row b { font-size: 20px; }

/* Подписи под числами: 13pt, weight 400, цвет secondaryLabel */
#stage .aw-metric-row small,
#stage .aw-doc-meta {
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif;
  font-size: 13px;
  font-weight: 400;
  letter-spacing: -0.01em;
  color: rgba(60,60,67,.6);
}

/* Текст тела: 15pt, weight 400, line-height 1.47 */
#stage .aw-doc-frag,
#stage .aw-note-text,
#stage .aw-idea-clip {
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif;
  font-size: 15px;
  font-weight: 400;
  line-height: 1.47;
  letter-spacing: -0.01em;
  color: #000;
}

/* — ИКОНКА ПРИЛОЖЕНИЯ: 28×28pt, radius 6pt — */
.kind-badge.aw-badge {
  width: 28px;
  height: 28px;
  border-radius: 6px;
  display: inline-grid;
  place-items: center;
  overflow: hidden;
  position: relative;
  flex: none;
}
.kind-badge.aw-badge .aw-badge-icon {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
}
.kind-badge.aw-badge .sf-icon {
  width: 16px;
  height: 16px;
  opacity: .85;
}

/* — СТРОКИ-СПИСКИ (Calendar, Reminders, Wallet) — */
#stage .aw-event,
#stage .aw-tx,
#stage .aw-check {
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', system-ui, sans-serif;
  font-size: 15px;
  font-weight: 400;
  letter-spacing: -0.01em;
  color: #000;
}

/* Календарь: красный блок даты — Apple Calendar red var(--danger) */
#stage .aw-cal-date b {
  font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', system-ui, sans-serif;
  font-size: 28px;
  font-weight: 700;
  color: var(--danger);
  letter-spacing: -0.02em;
}
#stage .aw-cal-date small {
  font-size: 13px;
  font-weight: 500;
  color: var(--danger);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

/* Заметки: жёлтая бумага #FFF9C4 → Apple Notes */
#stage .aw-note {
  background: #FFF9C4;
  border-radius: 12px;
  padding: 12px;
}

/* ─── ПЛАТФОРМЕННЫЕ ЗОНЫ (уточнённые) ─── */






/* visionOS: прозрачное стекло с глубиной */



/* macOS: панель с титульной полосой */









/* ═══ APPLE WATCH SMART STACK — настоящие watchOS-виджеты ═══ */
/* Компактный набор карточек, листается вертикально, кольца активности */

/* Кольца активности — три дуги как на Apple Watch */






/* Метрика-герой: крупная цифра + подпись, как complication */



/* Заголовок — маленький, как название приложения на Watch */

/* Метрики-строки: компактные, как в Smart Stack */




/* Цвет complication по типу: Move #FA114F, Exercise #92E82A, Stand #1EE8E4 */




/* Real files: their own preview and player inside the tile (dictation task 1, 18.09). */
.corpus-preview{display:block;width:100%;max-height:220px;object-fit:contain;border-radius:var(--r-field);margin:8px 0 2px;background:#ffffff0d;border:1px solid rgba(255,255,255,.08)}
.corpus-audio{display:block;width:100%;margin:8px 0 2px}

/* True composition strip: what a folder or theme is made of (dictation 2, 18.09). */
.corpus-comp{display:flex;gap:10px;flex-wrap:wrap;margin:8px 0 2px}
.corpus-comp-item{display:inline-flex;align-items:center;gap:4px}
.corpus-comp-item .widget-artwork{width:22px;height:22px;border-radius:var(--r-mini)}
.corpus-comp-item small{font:600 11px/1 -apple-system,system-ui,sans-serif;font-variant-numeric:tabular-nums;color:#6b7686}
.reader-comp{margin:10px 0 0}

/* Widget's own composition strip — right where the text lives (dictation 3, 18.09). */
.sw-files{display:flex;gap:8px;flex-wrap:wrap;margin:2px 0 6px}
.sw-file-item{display:inline-flex;align-items:center;gap:3px}
.sw-file-item .widget-artwork{width:17px;height:17px;border-radius:4.5px}
.sw-file-item small{font:600 10px/1 -apple-system,system-ui,sans-serif;font-variant-numeric:tabular-nums;color:var(--ink-2)}

/* Steps 2–3 (dictation 18.09): file brands in rows and strips; the opener IS the file. */
.sw-index-file{display:inline-flex;align-items:center;justify-content:center}
.sw-index-file .widget-artwork{width:15px;height:15px;border-radius:4px}
.reader-facet-file{display:inline-flex;align-items:center;gap:4px}
.reader-facet-file .widget-artwork{width:16px;height:16px;border-radius:4.5px}
.reader-facet-file small{font:600 10px/1 -apple-system,system-ui,sans-serif;font-variant-numeric:tabular-nums;color:var(--ink-2)}
.corpus-file-open{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:var(--r-field);background:#ffffff10;border:1px solid rgba(255,255,255,.12);cursor:pointer;padding:0}
.corpus-file-open .widget-artwork{width:30px;height:30px;border-radius:var(--r-mini)}
.corpus-file-open:hover{background:#ffffff1c}

/* Honest boot: the first frame takes real work (11k-file index) — say so calmly. */
/* canon1 [loading]+[progress]: the boot is an honest determinate checklist — each row
   ticks when its slice truly landed (scene.js marks it), no spinner, no pulse. The
   static frame paints instantly; the ticks fill it while the data streams. */
/* A1-бут (Фил 07:11 «загрузка сферы — не как у Apple»; HIG launching.md:23 «downplay
   the launch experience», :25 launch≈первый экран, :27 без текста; progress-indicators.md:28
   determinate when possible, :60 спиннер только до первого факта): фон = фон сцены,
   тихий монохромный индикатор, с первого факта — полоса 2px; чек-лист скрыт —
   двигатель фактов живёт в li[data-step], ширина = счёт фактов (--p, scene.js bootStep). */
#boot{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;pointer-events:none;transition:opacity .22s cubic-bezier(.2,1,.3,1)}
#boot.boot-out{opacity:0}
#boot .boot-steps{display:none}
#boot .boot-spin{width:11px;height:11px;border-radius:50%;border:1.5px solid var(--sep);border-top-color:var(--ink-3);animation:boot-rotate .9s linear infinite}
#boot:has(li.done) .boot-spin{display:none}
@keyframes boot-rotate{to{transform:rotate(1turn)}}
#boot .boot-track{width:132px;height:2px;border-radius:1px;background:var(--sep);opacity:0;transition:opacity .25s cubic-bezier(.2,1,.3,1)}
#boot:has(li.done) .boot-track{opacity:1}
#boot .boot-fill{display:block;height:100%;width:calc(var(--p,0)*100%);border-radius:1px;background:var(--ink-2);transition:width .3s cubic-bezier(.2,1,.3,1)}
@media(prefers-reduced-motion:reduce){#boot .boot-spin{animation-duration:2.4s}#boot{transition:none}}
/* A1/Д1: хром (док, статус) не показывается до сцены — проявляется вместе с первым
   экраном (launching.md:25), лечит «док квадратом слева до сцены» */
html[data-boot] .dock,html[data-boot] #edge-status{opacity:0;pointer-events:none}
.dock,#edge-status{transition:opacity .34s cubic-bezier(.2,1,.3,1)}
@media(prefers-reduced-motion:reduce){.dock,#edge-status{transition:none}}

/* Wallet-stack composition (Apple shift 1, 18.09): hero on top, tilted runners, one badge. */
.sw-stack{display:flex;align-items:center;gap:8px;margin:2px 0 8px}
.sw-stack-under .widget-artwork{width:26px;height:26px;border-radius:var(--r-mini);opacity:.5;filter:saturate(.8)}
.sw-stack-under.u1{left:-3px;top:9px;transform:rotate(-8deg)}
.sw-stack-under.u2{left:5px;top:6px;transform:rotate(6deg)}
.sw-stack-hero .widget-artwork{width:32px;height:32px;border-radius:var(--r-mini);box-shadow:var(--shadow-1)}

/* Quick Look flip (Apple shift 2): chevrons walk the folder's files in place. */
.corpus-ql{display:flex;align-items:center;gap:8px;margin:10px 0 2px}
.corpus-ql-nav{display:inline-flex;align-items:center;justify-content:center;width:30px;height:44px;border-radius:var(--r-mini);color:var(--ink-2);background:#ffffff0a;border:1px solid rgba(255,255,255,.1)}
.corpus-ql-nav .apple-symbol{width:15px;height:15px}
.corpus-ql-nav:hover{background:#ffffff1a;color:#2f3947}

/* Finder tag dots (Apple shift 3): the user's own curation, quiet colour points. */
.corpus-tags{display:inline-flex;gap:4px;margin:4px 0 0}
.corpus-tag-dot{width:7px;height:7px;border-radius:50%;display:inline-block;box-shadow:var(--shadow-1)}

/* 🪒 clip discipline (canon: the fold dissolves, never guillotines): small faces
   keep two honest lines; the hero keeps everything. */
.sw-card{overflow:hidden}
[data-layout=compact] .sw-rows .sw-row:nth-child(n+3),[data-layout=wide] .sw-rows .sw-row:nth-child(n+3),
[data-layout=detail] .sw-rows .sw-row:nth-child(n+3),[data-layout=satellite] .sw-rows .sw-row:nth-child(n+2){display:none}
[data-layout=compact] .sw-related,[data-layout=wide] .sw-related,[data-layout=detail] .sw-related,
[data-layout=satellite] .sw-related,[data-layout=satellite] .sw-preview{display:none}

/* Patina (Roy's fifth dimension): age is material truth — quiet desaturation,
   the date steps forward; falsified answers with a strike of honesty. */
.corpus-tile[data-fresh=patina] .corpus-face{filter:saturate(.82)}
.corpus-tile[data-fresh=old] .corpus-face{filter:saturate(.6)}
.corpus-tile[data-fresh=patina] .corpus-meta,.corpus-tile[data-fresh=old] .corpus-meta{color:#7c8494;font-weight:600}
.corpus-trust{display:inline-flex;align-items:center;gap:4px;margin:4px 0 0;padding:2px 8px;border-radius:var(--r-mini);font-size:11px}
.corpus-trust .apple-symbol{width:12px;height:12px}
.corpus-trust.t-falsified{background:#fbe9ed;color:var(--danger)}
.corpus-trust.t-hypothesis{background:#fdf3e0;color:#a06a12}
.corpus-trust.t-verified{background:#e8f4ea;color:#2e7d43}
@media(prefers-reduced-transparency:reduce){.corpus-tile[data-fresh=old] .corpus-face{filter:none;opacity:.75}}

/* gap2 [glass-interactive][glass-interactive]: the ⌘K palette answers the
   hand with the same light grammar as the chat glass — a top specular walks a
   couple of pixels on hover, typing densifies the sheet (+0.03 alpha per stop).
   Light and density only, never color. Appended block, nothing above touched. */
.palette-panel{position:relative}
.palette-panel::before{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:1;opacity:.5;transform:translateY(0);background:linear-gradient(180deg,rgba(255,255,255,.4),rgba(255,255,255,0) 64px);transition:transform 180ms cubic-bezier(.2,1,.3,1),opacity 180ms cubic-bezier(.2,1,.3,1)}
@media(hover:hover) and (pointer:fine){.palette-panel:hover::before{transform:translateY(2.5px);opacity:.68}}
.palette-panel:focus-within{background:var(--glass-2)}
@media(prefers-reduced-motion:reduce){.palette-panel::before{transition:none cubic-bezier(.2,1,.3,1)}}
@media(prefers-reduced-transparency:reduce){.palette-panel::before{display:none}.palette-panel:focus-within{background:var(--surface)}}

/* ── widgets1 (Phil, 21.09 «виджеты вместо карточек») — виджетное тело трёх семейств.
   Fitness-ячейки: глиф + SF Rounded нумерал 26/−.8 + Caption-подпись, волосяная под
   бандом, воздух вместо рамок. Бары-профиль — монохром (структура, не аудио). Календарь-
   герой — идиома systemRed-даты (как .aw-cal-date). Никаких новых цветов: акцент один. */
#stage .tile .sw-card .sw-w1{display:flex;flex-direction:column;gap:10px;min-height:0;flex:1;overflow:hidden}
#stage .tile .sw-card .sw-metric-band{display:flex;align-items:stretch;gap:8px;padding:8px 0 10px;border-bottom:.5px solid rgba(0,0,0,.08);flex:none}
#stage .tile .sw-card .sw-metric-cell{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
#stage .tile .sw-card .sw-metric-glyph{width:17px;height:17px;color:#aeaeb2;display:block}
#stage .tile .sw-card .sw-metric-glyph .sf-icon{width:17px;height:17px;display:block}
#stage .tile .sw-card .sw-metric-cell b{font-size:28px;font-weight:700;letter-spacing:var(--tr-26);line-height:1;color:var(--ink);font-variant-numeric:tabular-nums;font-family:ui-rounded,-apple-system,BlinkMacSystemFont,system-ui,sans-serif}
#stage .tile .sw-card .sw-metric-cell small{font-size:11px;line-height:1.3;color:var(--ink-3);letter-spacing:0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
#stage .tile .sw-card .sw-bars-hero{display:flex;align-items:flex-end;gap:3px;height:42px;flex:none;padding-top:2px}
#stage .tile .sw-card .sw-bar{flex:1;min-width:3px;background:#aeaeb2;opacity:.5;border-radius:2px 2px 0 0}
#stage .tile .sw-card p.sw-w1-quote{margin:0;font-size:12px;line-height:1.45;color:var(--ink-2);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
#stage .tile .sw-card .sw-cal-hero{display:flex;align-items:baseline;gap:6px;flex:none}
#stage .tile .sw-card .sw-cal-hero b{font-size:34px;font-weight:800;letter-spacing:var(--tr-26);line-height:1;color:var(--danger);font-variant-numeric:tabular-nums;font-family:ui-rounded,-apple-system,BlinkMacSystemFont,system-ui,sans-serif}
#stage .tile .sw-card .sw-cal-hero span{font-size:13px;color:var(--ink-2)}
#stage .tile .sw-card .sw-cal-rest{display:flex;flex-direction:column;gap:4px;min-height:0}
#stage .tile .sw-card .sw-cal-line{display:flex;gap:6px;align-items:baseline;min-width:0}
#stage .tile .sw-card .sw-cal-line b{font-size:13px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;flex:none}
#stage .tile .sw-card .sw-cal-line span{font-size:12px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#stage .tile .sw-card small.sw-w1-note{font-size:11px;color:var(--ink-3);line-height:1.3}

/* A2 (канон apple-interaction): press-отклик первым кадром на всём хроме сферы.
   Плитка продавливается (0.98), чипы и кнопки — 0.94–0.96; никаких transition —
   ответ виден в кадре нажатия, не догоняет палец. */
#stage .tile:active .sw-card{transform:scale(.98)}
#stage .tile button:active,.reader .corpus-action:active{transform:scale(.96)}
#stage .tile:focus-visible .sw-card{outline:2px solid var(--accent);outline-offset:3px;border-radius:inherit}
/* lg6 (рой-аудит): A2-отклик на всём хроме — пробелы аудитора закрываются
   той же грамматикой: продавливание первым кадром, без transition */
#projects-pill:active,#app-location button:active,.gchip:active,.reader-close:active,.pc-x:active,.aw-mini:active{transform:scale(.96)}
.pp-row:active,.pp-back:active{transform:scale(.98)}
@media(prefers-reduced-motion:reduce){#stage .tile:active .sw-card,#stage .tile button:active,.reader .corpus-action:active,#projects-pill:active,#app-location button:active,.gchip:active,.reader-close:active,.pc-x:active,.aw-mini:active,.pp-row:active,.pp-back:active{transform:none}}

/* widgets1 · тела трёх новых семейств: Reminders-шаги, Заметки-мысль, подборка-стек */
#stage .tile .sw-card .sw-step-list{display:flex;flex-direction:column;gap:5px;min-height:0;overflow:hidden}
#stage .tile .sw-card .sw-step-row{display:flex;gap:8px;align-items:baseline;font-size:12px;line-height:1.4;color:var(--ink);min-width:0}
#stage .tile .sw-card .sw-step-row span:last-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#stage .tile .sw-card .sw-step-dot{flex:none;width:15px;height:15px;border-radius:50%;background:var(--accent);font-size:11px;font-weight:700;color:#fff;display:grid;place-items:center}
#stage .tile .sw-card .sw-step-dot.is-done{background:#e9e9eb;color:var(--ink-3)}
#stage .tile .sw-card p.sw-w1-quote--doc{font-size:13px;line-height:1.5;color:var(--ink);-webkit-line-clamp:4;font-weight:500}
#stage .tile .sw-card .sw-stack-row{display:flex;gap:6px;align-items:center;padding:2px 0}
#stage .tile .sw-card .sw-stack-cell{width:30px;height:30px;border-radius:var(--r-mini);overflow:hidden;background:var(--chip);display:grid;place-items:center;box-shadow:var(--shadow-1)}
#stage .tile .sw-card .sw-stack-cell img,#stage .tile .sw-card .sw-stack-cell svg{width:22px;height:22px}

/* Layout v4 (LAYOUT_V4.md): стол = лист-подложка за группой карточек.
   Стекло адаптивно яркости (HIG materials: glass adapts to luminance),
   тонкая линия вместо рамки, мягкая тень глубины. Слой — указатели прочь. */
/* за карточками: первый потомок stage, DOM-порядок ниже .css3d-scene */
/* Ступень 3 v4: имя стола = ТОНКАЯ ПОДПИСЬ (Apple section header), не лист.
   Стекло-подложки не возвращаются (каша слоёв 16:43); bbox-механика
   updateDeskPlates жива и кормит подпись той же геометрией. */
#desk-plates{position:absolute;inset:0;pointer-events:none}
.desk-plate{position:absolute;pointer-events:none;background:none;box-shadow:none;border:0;backdrop-filter:none;-webkit-backdrop-filter:none}
.desk-plate-title{position:absolute;top:-26px;left:0;font:500 12px/22px -apple-system,system-ui,sans-serif;color:var(--ink);letter-spacing:.01em;white-space:nowrap;pointer-events:none;padding:0 10px;border-radius:var(--r-field);background:var(--chip);box-shadow:inset 0 0 0 .5px var(--glass-line)}

/* ===== Layout v4 · ступень 1 (Фил 17:51–17:55: «от иконки до XL, пропорционально»)
   =====
   Лестница Apple-канона, клетка-мера 158 (visionOS Small, HIG widgets,
   DOC_PACKAGES.md): ИКОНКА 79×79 (полклетки; ряд иконок плотнее) ·
   SMALL 158×158 · MEDIUM 338×158 (= 2S+зазор 22) · LARGE 338×338 (2×2).
   (XL 450×338 — канон visionOS — останется дашбордам фокуса, не рассадке:
   рим-миниатюры с ним раздували клетку стола до 472 юнитов.)
   Размер = роль записи (выбор Фила «а»), не место рождения карточки.
   Зазор виджетов 22, иконок ~13 — HIG spatial-layout: наложения запрещены. */

/* ===== Ступень 2: роль записи задаёт семью (v-класса из данных) =====
   v-класс назначается по kind/полю моста family (не по месту рождения),
   якорь стола поднимается до v-large. Правила ПОСЛЕДНИЕ — перекрывают
   унаследованные классы семей одинаковой специфичностью. */
#stage .variety-card.v-icon{width:79px;height:79px}
#stage .variety-card.v-tile{width:158px;height:158px}
#stage .variety-card.v-strip{width:338px;height:158px}
#stage .variety-card.v-large{width:338px;height:354px} /* C20: канон HIG */ /* lg8: HIG widgets System large 338×354 (канон 1gather) — покой выровнен с собранным якорем */

/* Волна 1L: строка-закон — тихая, как штамп среза; сфера объясняет себя сама */
#law-line{font:400 11px/1 -apple-system,system-ui,sans-serif;color:var(--ink-3,var(--ink-3));margin-left:10px;letter-spacing:.066px} /* канон-проход: 11pt→+6/1000em, не «на глаз ноль» */

/* ПОРТ 1L из Волны 3: токен --card (белый лист каталога ночью) + календарь на var(--danger) */
:root{--card:#fff}
.aw-cal-date b,.sw-cal-hero b{color:var(--danger,var(--danger))}

/* 1L-порт: окно индексации — System Settings-идиома (из Волны 3) */
.ixw{width:min(820px,94vw);height:min(600px,88vh)}
.ixw-body{flex:1;min-height:0;display:flex}
.ixw-side{width:216px;flex:none;overflow-y:auto;border-right:1px solid rgba(120,120,128,.18);padding:8px 6px}
.ixw-row{display:flex;align-items:center;gap:9px;width:100%;padding:8px 10px;border:0;border-radius:var(--r-mini);background:transparent;cursor:pointer;text-align:left;font-family:inherit}
.ixw-row:hover{background:rgba(120,120,128,.1)}
.ixw-row.sel{background:var(--accent,var(--accent))}
.ixw-row.sel .ixw-row-name,.ixw-row.sel .ixw-row-cnt{color:#fff}
.ixw-side-art{width:20px;height:20px;border-radius:5px;object-fit:cover;flex:none}
.ixw-side-art.mono{background:linear-gradient(145deg,#e8eaee,#d5d9e0)}
.ixw-row-name{flex:1;min-width:0;font-size:13px;font-weight:510;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ixw-row-cnt{font-size:11px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.ixw-main{flex:1;min-width:0;display:flex;flex-direction:column}
.ixw-title{display:flex;align-items:center;gap:12px;padding:14px 18px 8px}
.ixw-title .ixw-art{width:40px;height:40px;border-radius:var(--r-mini);overflow:hidden;flex:none;display:grid;place-items:center}
.ixw-title .ixw-art img{width:100%;height:100%;object-fit:cover}
.ixw-title .ixw-art.mono{background:linear-gradient(145deg,#e8eaee,#d5d9e0)}
.ixw-title b{display:block;font-size:17px;font-weight:600;letter-spacing:var(--tr-17);color:var(--ink)}
.ixw-title span{display:block;font-size:11px;color:var(--ink-3);margin-top:2px}
.ixw-list{flex:1;min-height:0;overflow-y:auto;padding:2px 12px 14px}
.ixw-sec{padding:12px 6px 6px;font-size:11px;font-weight:600;color:var(--ink-3);letter-spacing:var(--tr-11);text-transform:uppercase}
.ix-item{display:flex;align-items:center;gap:10px;padding:8px 8px;border-radius:var(--r-mini);cursor:pointer}
.ix-item:hover{background:rgba(120,120,128,.08)}
.ix-item input{width:15px;height:15px;accent-color:var(--accent,var(--accent));flex:none}
.ix-item-name{flex:1;min-width:0;font-size:13px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ix-item-meta{font-size:11px;color:var(--ink-3);white-space:nowrap}
.ix-empty{padding:12px 8px;font-size:12px;color:var(--ink-3)}
.ix-all{background:none;border:0;color:var(--accent,var(--accent));font:510 12px -apple-system,BlinkMacSystemFont,system-ui,sans-serif;padding:8px;cursor:pointer;text-align:left}
.ix-foot{display:flex;align-items:center;gap:12px}
.ix-count{width:110px;flex:none;font-size:12px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.ix-bar{position:relative;width:150px;height:5px;border-radius:3px;background:rgba(120,120,128,.25);overflow:hidden;flex:none}
.ix-bar i{position:absolute;top:0;bottom:0;width:44%;border-radius:3px;background:var(--accent,var(--accent));animation:ix-slide 1s ease-in-out infinite}
.ix-bar.done i{animation:none;left:0;width:100%;background:var(--acc-green)}
@keyframes ix-slide{0%{left:-44%}100%{left:100%}}
.ix-bar-txt{font-size:11px;color:var(--ink-2);white-space:nowrap}
.ix-go{height:34px;padding:0 16px;border-radius:var(--r-mini);background:var(--accent,var(--accent));color:#fff;font:600 14px -apple-system,BlinkMacSystemFont,system-ui,sans-serif;cursor:pointer}
.ix-go:disabled{opacity:.4;cursor:default}
.ix-skip{height:34px;padding:0 14px;border-radius:var(--r-mini);background:transparent;color:var(--ink-2);font:510 14px -apple-system,BlinkMacSystemFont,system-ui,sans-serif;cursor:pointer}
[data-theme=dark] .ixw-side{border-color:rgba(255,255,255,.12)}
@media(prefers-reduced-motion:reduce){.ix-bar i{animation:none;left:0}}

/* ЭППЛ-список п.4 (04.10): полный prefers-reduced-motion — движения гаснут,
   кроссфейды остаются (канон apple-motion: «альтернатива — crossfade») */
@media (prefers-reduced-motion: reduce){
 /* Keep the CSS3D placement matrix; only decorative hover transforms are disabled. */
 .pc-mi:hover,.pc-card .cc:hover{transform:none!important}
 .pc-out,.pc-in,.boot-out{transition:opacity .18s cubic-bezier(.2,1,.3,1)!important}
}


/* 1P: чипы типов связей над плитой — iOS-фильтры */
#gather-chips{position:absolute;top:18px;left:50%;transform:translateX(-50%);display:flex;gap:8px;z-index:25}
.gchip{display:inline-flex;align-items:center;gap:8px;font:500 12px/1 -apple-system,system-ui,sans-serif;color:var(--ink);background:var(--glass-2,#fff);border:.5px solid var(--glass-line,var(--sep));border-radius:var(--r-tile);padding:8px 13px;cursor:pointer;backdrop-filter:blur(var(--glass-blur-clear)) saturate(var(--lg-clear-sat));-webkit-backdrop-filter:blur(var(--glass-blur-clear)) saturate(var(--lg-clear-sat));box-shadow:var(--lg-spec),var(--lg-edge-lo);transition:opacity .2s cubic-bezier(.2,1,.3,1)}
.gchip i{width:8px;height:8px;border-radius:50%;display:inline-block}
.gchip.on{box-shadow:inset 0 0 0 1.5px var(--accent,var(--accent))}

/* Э6: размеры собранных плит-членов (1Q/1gather, дубль) снесены — после Э4
   собирается только якорь, его габариты держит правило .anchor-tall ниже.
   «Узда :not(.anchor-tall)» из плана superseded: носителей узды больше нет. */

/* Волна 1AB: живые плитки дока — пульс Ленина и число выровнены */
@keyframes leninpulse{0%,100%{transform:scale(1);opacity:.9}50%{transform:scale(1.3);opacity:.55}}

/* B2 (Фил 07:45 «оригинальные иконки Apple, как macOS»): арты приложений —
   подлинники 256px с Маса владельца; сквиркл + мягкая тень (Home Screen-даун).
   Спотлайт-лупа остаётся монохромной — так и в доке macOS */
.dapp .app-icon{width:44px;height:44px;border-radius:10px;display:block;box-shadow:0 1px 2px rgba(0,0,0,.14),0 5px 12px rgba(0,0,0,.10)}
/* B2: «Сегодня» = виджеты Home Screen — tinted-плитка с живым числом */
.dapp .t-tile{width:44px;height:44px;border-radius:10px;display:grid;place-items:center}
.dapp .t-tile b{font:700 15px/1 -apple-system,system-ui,sans-serif;font-variant-numeric:tabular-nums;color:var(--ink)}
/* 1AF: док macOS — иконки-приложения с живым экраном и подписью */
.dapp{width:56px;min-height:56px;padding:4px 0;border-radius:var(--r-menu);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;cursor:pointer;transition:background .15s,transform .26s cubic-bezier(.34,1.28,.4,1)}
/* B3 (Фил 07:53 «анимация не родная»): нативная магнификация macOS — иконки
   РАЗДВИГАЮТ док (width-поток раскладки, не transform-наложение); размер —
   прямая функция поля курсора (слежение без транзишена), пружина — только
   на возврат после ухода курсора. Ширина .dapp = 56×--s, арт = 44×--s */
.dapp{width:calc(56px*var(--s,1));min-height:calc(56px*var(--s,1));flex:none;transition:width .34s cubic-bezier(.34,1.28,.4,1),min-height .34s cubic-bezier(.34,1.28,.4,1),background .15s}
.dock.mag-track .dapp{transition:background .15s} /* слежение: размер мгновенный */
.dapp:focus-visible{--s:1.3}
.dapp:active{transform:scale(.94);transition-duration:.08s}
.dapp .app-icon{width:calc(44px*var(--s,1));height:calc(44px*var(--s,1))}
.dapp .t-tile{width:calc(44px*var(--s,1));height:calc(44px*var(--s,1))}
@media(prefers-reduced-motion:reduce){.dapp{transition:none}}
.dapp .dlab{font:500 var(--fs-11)/1 -apple-system,system-ui,sans-serif;color:var(--ink-3);letter-spacing:.06px;font-style:normal}
.dapp .dcol{display:flex;flex-direction:column;align-items:center;gap:2px}
.dapp .dnum{font:700 15px/1 -apple-system,system-ui,sans-serif;font-variant-numeric:tabular-nums;letter-spacing:-.2px}
/* 1scale: .dapp .dgl 14px снят — базовый .dgl уже 13 (рампа), дубль-перекрытие */
.dapp svg{color:var(--ink-2)}
/* lg4: одна иконочная база дока — системные символы и живые SVG 24px (VLM: visual rhythm) */
.dapp>.apple-symbol{width:24px;height:24px}

/* lg7a (Фил 23:12 «док выглядит не как док в iOS/macOS»): капсула возвращается
   доку (dock1 rule :13), блоки 1AH = группы внутри неё — DnD и расширяемость
   живут, силуэт = один непрерывный рейл у края (APPLE_DESKTOP_CANON §F:
   «док = отдельная полоса с тем же шагом, всегда при краю»). Подписи в покое
   скрыты (док-идиома), имя — баблом над иконкой при hover (macOS-жест);
   числа-плитки остаются лицами (прецедент — иконка Календаря в доке macOS). */
.dblock{display:flex;gap:4px;cursor:grab;position:relative}
/* lg5 зеркало поднимается с блока на капсулу (interactive-канон LG) */
.dock::before{content:'';position:absolute;inset:0 0 auto;height:55%;border-radius:calc(var(--r-surface) - 1px) calc(var(--r-surface) - 1px) 0 0;
 background:linear-gradient(180deg,rgba(255,255,255,.5),transparent);pointer-events:none;transition:opacity .22s cubic-bezier(.2,1,.3,1)}
.dock:hover::before{opacity:1.4}
/* сепараторы групп — волосяные, половина иконки (канон macOS-дока) */
.dock[data-pos=left] .dblock+.dblock::before,.dock[data-pos=right] .dblock+.dblock::before{content:'';position:absolute;top:-4.5px;left:50%;transform:translateX(-50%);width:22px;height:1px;background:var(--sep)}
.dock[data-pos=bottom] .dblock+.dblock::before{content:'';position:absolute;left:-7px;top:50%;transform:translateY(-50%);width:1px;height:22px;background:var(--sep)}
/* подписи: покой скрыт, hover/focus = бабл имени над иконкой (как macOS) */
.dapp{position:relative}
.dapp .dlab{display:none}
.dapp:hover .dlab,.dapp:focus-visible .dlab{display:block;position:absolute;bottom:calc(100% + 10px);left:50%;transform:translateX(-50%);padding:4px 9px;border-radius:var(--r-menu);background:var(--glass-2);backdrop-filter:blur(var(--glass-blur)) saturate(var(--lg-sat));-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--lg-sat));box-shadow:var(--lg-line),0 4px 14px rgba(0,0,0,.18);font:500 var(--fs-11)/1.2 -apple-system,system-ui,sans-serif;font-style:normal;color:var(--ink-2);white-space:nowrap;pointer-events:none;z-index:5}
/* точка поиска замыкает колонку (§F Duo) — тот же жест, что ⌘K */
#d-search{border:0;background:transparent;font:inherit;width:56px}
#d-search svg{opacity:.75}
#d-search::before{content:'';position:absolute;top:-4.5px;left:50%;transform:translateX(-50%);width:22px;height:1px;background:var(--sep)}
.dblock.dragging{opacity:.55;transform:scale(.97)}
.dblock.drop-target{outline:2px solid rgba(0,122,255,.6);outline-offset:2px}
/* 1AH: тёмная тема выключена — блоки всегда светлые (слово Фила 08:36) */
/* мобильный док: первый блок = 4 иконки (Home Screen), остальное — скролл */
@media(max-width:736px){
 #dock{flex-direction:column;gap:8px}
 .dblock{max-width:calc(100vw - 24px);overflow-x:auto;scrollbar-width:none}
 .dblock::-webkit-scrollbar{display:none}
}

/* 1L4→C5: УЗДАРЬ ВСЕХ плит сферы — контент (сырой YAML в faceStretch) раздувал
   члены до 647 481px (замер гигантов 11:4x): канон семьи = потолок, лишнее — crop */
#stage .tile{max-width:338px;max-height:354px;overflow:hidden}
/* Х5: активный блок-звено — тонкая полоса-индикатор (page-controls при трёх страницах) */
.dblock{border-radius:var(--r-menu)}
.dblock-active{box-shadow:inset 2px 0 0 var(--accent)} /* вертикальная полоса слева = «ты здесь» */
/* C5 (Фил 11:38 «в большой карточке огромные, в маленьких мелкие»): иерархия
   заголовков семей — Title1 28 / Title3 20 / Headline 17 / Caption 11 */
#stage .tile.v-large h3,#stage .tile.large h3{font-size:28px;letter-spacing:-.4px}
#stage .tile.v-tile h3{font-size:17px}
#stage .tile.v-large p,#stage .tile.large p{font-size:15px;line-height:1.5}
#stage .tile.v-tile p{font-size:13px}
/* C15 (Фил 12:45 «квадратная, хочу высокую, гармоничную с доком»): якорь-плита
   158×354 = iOS large 1:2.24, !important перебивает v-large CSS */
#stage .tile.anchor-tall.ink-gathered.v-large{width:360px!important;height:98vh!important;max-height:882px!important} /* В4: якорь = ЭКРАН iPhone (C7/C17: 26%×98%), слово Фила 18:23 «как рабочий стол iPhone» */
/* C17 (Фил 13:48 «выглядел как виджет Apple»): якорь = Apple Widget —
   сетка данных проекта, SF-стиль, минимум текста, максимум структуры */
#stage .anchor-widget{display:flex;flex-direction:column;gap:8px;padding:14px;height:100%;overflow:hidden}
#stage .anchor-widget .aw-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
#stage .anchor-widget .aw-app{font:600 15px/20px -apple-system,system-ui,sans-serif;letter-spacing:-.24px;color:var(--ink);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#stage .anchor-widget .aw-badge{font:500 11px/1 -apple-system,system-ui,sans-serif;padding:3px 8px;border-radius:8px;background:rgba(52,199,89,.12);color:#248A00;flex:none}
/* Д2 (Фил 03:15): точка живости линии — жизнь без тапа; system-цвета канона */
.alive-dot{position:absolute;top:10px;right:10px;width:8px;height:8px;border-radius:50%;pointer-events:none;flex:none;box-shadow:0 0 0 3px rgba(255,255,255,.55)}
.alive-dot--hot{background:var(--acc-orange,#FF9F0A)}
.alive-dot--live{background:var(--acc-green,#34C759)}
.alive-dot--grey{background:#8E8E93}
.alive-dot--dim{background:#C7C7CC;opacity:.55}
.tile-money{position:absolute;bottom:8px;left:10px;font:500 var(--fs-11)/14px -apple-system,system-ui,sans-serif;color:var(--ink-2);letter-spacing:var(--tr-11);font-variant-numeric:tabular-nums;pointer-events:none}
/* Д1: «ждёт тебя» — акцент действия, не декорация */
.aw-hero--hot{color:#B25000}
.aw-v--hot{color:#B25000}

/* Э6: статус-чип якоря — свой класс (прежде заимствовал aw-badge app-иконок и
   был голым); «архив» гасится по data-status. :has(text:contains) — не CSS,
   старое правило молча умирало в парсере */
#stage .tile.anchor-tall .aw-status{font:500 11px/14px -apple-system,system-ui,sans-serif;padding:2px 8px;border-radius:var(--r-mini);background:rgba(52,199,89,.12);color:#248A00;flex:none}
#stage .tile.anchor-tall .aw-status[data-status='архив']{background:rgba(120,120,128,.12);color:var(--ink-3)}
#stage .anchor-widget .aw-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:4px 0}
#stage .anchor-widget .aw-metric{display:flex;flex-direction:column;align-items:center;gap:1px;padding:8px 4px;border-radius:10px;background:rgba(120,120,128,.06)}
#stage .anchor-widget .aw-metric b{font:600 22px/28px ui-rounded,-apple-system,system-ui,sans-serif;letter-spacing:-.26px;color:var(--ink);font-variant-numeric:tabular-nums}
#stage .anchor-widget .aw-metric span{font:400 11px/1 -apple-system,system-ui,sans-serif;color:var(--ink-3)}
#stage .anchor-widget .aw-desc{font:400 13px/18px -apple-system,system-ui,sans-serif;color:var(--ink-2);overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;margin-top:auto}
#stage .anchor-widget .aw-crew{font:500 12px/1 -apple-system,system-ui,sans-serif;color:var(--accent);padding-top:6px;border-top:1px solid var(--sep)}
/* В2 (референс 25.09 · HIG focus-and-selection.md:11,21): фокус-кольцо акцентом + halo;
   кнопка-вход tinted-капсулой; экипаж — имена-чипы Caption2 */
#stage .tile.anchor-tall{box-shadow:0 0 0 2px var(--accent),0 10px 48px color-mix(in srgb,var(--accent) 34%,transparent),0 18px 35px #233f651b} /* halo сильнее (VLM: рамка без свечения) */
/* В4 (слово Фила 18:23 «размером как рабочий стол iPhone, у нас только карточки
   под размеры виджетов»): якорь = экран-поверхность; на ней карточки HIG-габаритов:
   medium 334×158 · small 155×155 · зазор 22 (канон сетки) */
#stage .tile.anchor-tall .anchor-widget{background:var(--surface,#F2F3F5);border-radius:44px;padding:18px;display:flex;flex-direction:column;gap:22px;height:100%;color:var(--ink)} /* Э6: безел 44px = зарегистрированное отклонение от шкалы --r-* (8/16/22/26): 44 ≈ 12% ширины экрана-iPhone (В4/C7), канон — непрерывный безел устройства, не контроль */
#stage .tile.anchor-tall .aw-card{background:linear-gradient(165deg,rgba(255,255,255,.98),rgba(246,248,251,.94));border-radius:var(--r-tile);box-shadow:0 1px 3px rgba(35,63,101,.10),0 10px 24px rgba(35,63,101,.10);padding:16px;display:flex;flex-direction:column;gap:6px;min-width:0}
#stage .tile.anchor-tall .aw-card.medium{min-height:158px}
#stage .tile.anchor-tall .aw-card.small{min-height:155px;justify-content:space-between}
#stage .tile.anchor-tall .aw-row{display:grid;grid-template-columns:1fr 1fr;gap:22px}
#stage .tile.anchor-tall .aw-k{font:400 11px/14px -apple-system,system-ui,sans-serif;color:var(--ink-3)}
#stage .tile.anchor-tall .aw-v{font:600 var(--fs-26)/34px ui-rounded,-apple-system,system-ui,sans-serif;color:var(--ink);font-variant-numeric:tabular-nums}
#stage .tile.anchor-tall .aw-v.small{font-size:var(--fs-22);line-height:28px}
#stage .tile.anchor-tall .aw-hero{font:600 var(--fs-40)/48px ui-rounded,-apple-system,system-ui,sans-serif;letter-spacing:var(--tr-40);color:#2059AC;font-variant-numeric:tabular-nums}
#stage .tile.anchor-tall .aw-hero small{font:500 var(--fs-13)/18px -apple-system,system-ui,sans-serif;letter-spacing:0;color:var(--ink-2);display:block;margin-top:2px}
#stage .tile.anchor-tall .aw-crewline{font:400 13px/18px -apple-system,system-ui,sans-serif;color:var(--ink-2);display:flex;flex-wrap:wrap;gap:4px}
#stage .tile.anchor-tall .aw-crewline b{font-weight:600;color:var(--ink)}
#stage .tile.anchor-tall .anchor-widget .aw-open{margin-top:auto}
#stage .tile.anchor-tall .aw-tl-row{display:flex;gap:10px;align-items:baseline;font:400 13px/18px -apple-system,system-ui,sans-serif;padding:2px 0}
#stage .tile.anchor-tall .aw-tl-row .aw-k{flex:none;min-width:52px}
#stage .tile.anchor-tall .aw-tl-n{color:var(--ink);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#stage .anchor-widget .aw-chips{display:flex;flex-wrap:wrap;gap:4px;padding-top:6px;border-top:1px solid var(--sep)}
#stage .anchor-widget .aw-chip{font:500 11px/14px -apple-system,system-ui,sans-serif;color:var(--ink-2);background:rgba(120,120,128,.10);border-radius:6px;padding:2px 7px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#stage .anchor-widget .aw-open{margin-top:8px;font:600 15px/20px -apple-system,system-ui,sans-serif;color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent);border:0;border-radius:12px;padding:7px 16px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .18s cubic-bezier(.2,1,.3,1),transform .18s cubic-bezier(.2,1,.3,1)}
#stage .anchor-widget .aw-open:hover{background:color-mix(in srgb,var(--accent) 20%,transparent)}
#stage .anchor-widget .aw-open:active{transform:scale(.97)}
/* v0-cleared (06.10 17:2x): срезаны латки C22-C25 — якорь возвращён к базе anchor-widget; новая типографика в В1 по канон-таблицам */

/* В6 «расшифровка» (слово Фила 18:53 + HIG widgets.md:341 iPad mini 744×1133
   Device-габариты): зона справа от якоря = экран iPad mini по грамматике —
   высота = якорю (iPhone), ширина по пропорции 744/1133; карточки канонные:
   medium 260×120 · large 260×260; единственный владелец позиций — CSS grid. */
#decode-zone{animation:dz-in .32s cubic-bezier(.2,1,.3,1)}
@keyframes dz-in{from{opacity:0;transform:translateX(14px)}to{opacity:1;transform:none}}
#decode-zone{position:fixed;display:grid;grid-template-columns:var(--w-dz);grid-auto-rows:min-content;gap:18px;align-content:start;z-index:60;pointer-events:auto;overflow-y:auto;transform-origin:0 0} /* Э6: колонка = токен канона; скролл и origin — здесь, не в инлайнах */
#decode-zone.cols-2{grid-template-columns:var(--w-dz) var(--w-dz)}
#decode-zone .dz-card{background:linear-gradient(165deg,rgba(255,255,255,.98),rgba(246,248,251,.94));border-radius:var(--r-tile);box-shadow:0 1px 3px rgba(35,63,101,.10),0 10px 24px rgba(35,63,101,.12);padding:16px;display:flex;flex-direction:column;gap:8px;cursor:pointer;transition:transform .22s cubic-bezier(.2,1,.3,1),box-shadow .22s cubic-bezier(.2,1,.3,1);text-align:left;border:0;font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;position:relative}
/* С3: статус-точка живости в шапке карт зоны — единый язык с плитками (Д2) */
#decode-zone .dz-card[data-alive]::after{content:'';position:absolute;top:10px;right:10px;width:8px;height:8px;border-radius:50%;box-shadow:0 0 0 3px rgba(255,255,255,.6)}
#decode-zone .dz-card[data-alive=hot]::after{background:var(--acc-orange,#FF9F0A)}
#decode-zone .dz-card[data-alive=live]::after{background:var(--acc-green,#34C759)}
#decode-zone .dz-card[data-alive=grey]::after{background:#8E8E93}
#decode-zone .dz-card[data-alive=dim]::after{background:#C7C7CC;opacity:.55}
#decode-zone .dz-card:hover{transform:translateY(-2px);box-shadow:0 2px 6px rgba(35,63,101,.12),0 16px 32px rgba(35,63,101,.18)}
#decode-zone .dz-card:active{transform:scale(.98)}
#decode-zone .dz-large{width:260px;min-height:260px}
#decode-zone .dz-medium{width:var(--w-dz);min-height:120px}
#decode-zone .dz-small{width:120px;min-height:120px;padding:12px;gap:4px}
#decode-zone .dz-title{font:600 13px/18px -apple-system,system-ui,sans-serif;color:var(--ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
#decode-zone .dz-small .dz-title{font-size:11px;line-height:14px}
#decode-zone .dz-row{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font:400 13px/18px -apple-system,system-ui,sans-serif;border-bottom:1px solid var(--sep);padding:3px 0}
#decode-zone .dz-row:last-child{border-bottom:0}
#decode-zone .dz-row span{color:var(--ink-3)}
#decode-zone .dz-row b{font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:60%}
#decode-zone .dz-fresh{font:400 11px/14px -apple-system,system-ui,sans-serif;color:var(--ink-3);margin-top:auto}
#decode-zone .dz-head{display:flex;justify-content:space-between;align-items:baseline;gap:6px}
#decode-zone .dz-badge{font:500 11px/14px -apple-system,system-ui,sans-serif;padding:2px 8px;border-radius:var(--r-mini);background:rgba(52,199,89,.12);color:#248A00;flex:none}

/* Phone dock keeps real touch targets; excess applications scroll locally. */
@media(max-width:600px){
 #dock.dock{left:50%;right:auto;top:auto;bottom:calc(8px + env(safe-area-inset-bottom));transform:translateX(-50%);flex-direction:row;width:max-content;max-width:calc(100vw - 24px - env(safe-area-inset-left) - env(safe-area-inset-right));box-sizing:border-box;gap:4px;padding:6px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;overscroll-behavior-x:contain;touch-action:pan-x;scrollbar-width:none;border-radius:22px}
 #dock::-webkit-scrollbar{display:none}
 #dock .dapp{--s:1!important;width:48px;min-height:48px;flex:0 0 48px;scroll-snap-align:center;transition:background .15s}
 #dock .dapp .app-icon,#dock .dapp .t-tile{width:40px;height:40px}
 #dock .dock-sep{width:1px;height:28px;margin:10px 3px}
 html.dock-autohide #dock.dock:not(:hover):not(:focus-within){transform:translateX(-50%)}
}
