@import url('/ui/vk-components.css?v=r19-engine-core');
@import url('/ui/vk-video-player.css?v=r19-engine-core');
html,body{width:100%;min-width:0;margin:0;overflow-x:clip}*{box-sizing:border-box}
@media (hover:none),(max-width:767px),(max-height:500px){
.wrap{width:100%;padding:0!important;min-height:0!important;height:100dvh;overflow:hidden}
#vk-app-shell{width:100%!important;max-width:none!important;min-width:0;height:100dvh!important;max-height:100dvh!important;padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}
#vk-app-shell #appframe,#vk-app-shell #appframe>.screen{width:100%!important;max-width:none!important;min-width:0!important}
#vk-app-shell #appframe{flex:1 1 0;min-height:0;overflow:hidden}
#vk-app-shell #appframe>.screen{min-height:0!important;height:100%!important;overflow:auto}
}
html[data-southern-mode=reader] #appframe .ctor-runtime,html[data-southern-mode=reader] #appframe .ctor-chat-tools,html[data-southern-mode=reader] #appframe .aw-chat-composer,html[data-southern-mode=reader] #appframe .aw-message-actions,html[data-southern-mode=reader] #appframe .aw-post-media-controls,html[data-southern-mode=reader] #cmodalBg .ctor-runtime{display:none!important}
#appframe [data-southern-author-actions]{display:none!important}
#vk-editor-dock{display:flex;justify-content:space-between;flex:0 0 30px;height:30px;min-width:0;gap:8px}#vk-editor-dock>span{white-space:nowrap;font-size:11px}#vk-editor-dock>button{height:28px;flex:none;font:13px var(--f)}
html[data-southern-mode=reader] #fabBtn{display:none!important}#ctrlPanel.open{display:flex!important}#appframe .southern-archive-link{display:block;width:100%;margin:0!important;border:0;border-bottom:1px solid var(--sep);padding:12px 15px;text-align:left;border-radius:0;background:white;color:#528bcc;font:15px/20px var(--f)}
#appframe .phead{min-height:0!important;height:auto!important;padding-bottom:12px!important}
#appframe .southern-video-card{padding:8px 12px;background:white}#appframe .southern-video-card>button:first-child{padding:0!important;color:#2c2d2e!important;align-items:flex-start;font:14px/18px var(--f)!important}#appframe .southern-video-card small{font-size:12px;line-height:16px;color:#909499}

.ctor-edit-notice{display:none!important}

/* VK 3.3 arm64 VideoCell: layoutSubviews 0x100105980, init 0x1001050e8. */
#appframe .southern-video-card{display:block;min-height:94px;padding:10px;border-bottom:1px solid var(--sep);background:#fff}
#appframe .southern-video-card>button:first-child{display:flex;gap:10px;width:100%;min-width:0;min-height:73px;margin:0;padding:0!important;border:0;background:none;border-radius:0;align-items:flex-start;color:#000!important;text-align:left}
#appframe .southern-video-cover{display:block;position:relative;flex:0 0 130px;width:130px;height:73px;overflow:hidden;border-radius:0;background:#eceef0}
#appframe .southern-video-cover>img{display:block;width:130px!important;height:73px!important;object-fit:cover;border-radius:0}
#appframe .southern-video-placeholder{display:flex;width:130px;height:73px;align-items:center;justify-content:center;color:#8c8c8c;background:#eceef0}
#appframe .southern-video-duration{position:absolute;right:5px;bottom:5px;padding:1px 3px 1px 4px;background:#000a;color:#fff;font:11px/14px var(--f);border-radius:1px}
#appframe .southern-video-meta{display:block;min-width:0;flex:1;margin-top:-1px}
#appframe .southern-video-title{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;color:#000;font:16px/19px var(--f)}
#appframe .southern-video-owner,#appframe .southern-video-views{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:#8c8c8c;font:13px/16px var(--f)}
#appframe .southern-video-owner{margin-top:3px}#appframe .southern-video-views{margin-top:2px}
.stv-caption{position:absolute;bottom:80px;left:16px;right:16px;white-space:pre-wrap;color:white;text-align:center}.pcov[hidden]{display:none!important}

html[data-southern-mode=reader] #appframe .southern-story-author,html[data-southern-mode=reader] .block-toolbar,html[data-southern-mode=reader] #cmodalBg .ctor-comment-tools{display:none!important}

.southern-archive-entry{padding:14px 12px;background:#fff;border-bottom:1px solid var(--sep)}.southern-archive-entry>strong,.southern-archive-entry>small{display:block}.southern-archive-entry>small{margin-top:3px;color:#8c8c8c;font-size:12px}.southern-archive-entry>p{white-space:pre-wrap;margin:8px 0}.southern-archive-media{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}.southern-archive-media img{width:76px;height:76px;object-fit:contain}.southern-archive-media span{flex-basis:100%;font-size:13px}.southern-archive-entry>button{border:0;background:transparent;color:#528bcc;font:15px var(--f);padding:8px 0}

/* Gallery scroll belongs to the screen; taps are independent of author text mode. */
#appframe>.screen:has(.pgrid){overflow-y:auto!important;overflow-x:hidden!important;-webkit-overflow-scrolling:touch;touch-action:pan-y pinch-zoom}
#appframe .pgrid{height:auto!important;max-height:none!important;flex-shrink:0;touch-action:pan-y pinch-zoom}
#appframe .pgrid img,#appframe .hstrip img{pointer-events:auto!important;cursor:pointer;-webkit-user-drag:none}
input:not([type=checkbox]):not([type=radio]):not([type=range]),select,textarea,[contenteditable=true]:focus{font-size:16px!important}

html[data-southern-mode=reader] #vk-editor-dock,html[data-southern-mode=reader] #ctrlPanel{display:none!important}

/* VideoCell 0x100105b90–0x100105bf8: title origin (150,9), thumb (10,10,130,73). */
#appframe .southern-video-meta{margin-top:-1px}

/* ProfileView user=YES: avatar x7/85, name x106/font17medium.
 0x1004b59f8,0x1004b5f28–0x1004b5f6c,0x1004b6248. */
#appframe .vk-person-profile .phead{display:grid!important;grid-template-columns:85px minmax(0,1fr);column-gap:14px;align-content:start;min-height:105px!important;padding:10px 7px!important;text-align:left}
#appframe .vk-person-profile .phead>.pav{grid-column:1;grid-row:1/5;width:85px!important;height:85px!important;margin:0!important}
#appframe .vk-person-profile .phead>.pnm{grid-column:2;margin:10px 0 0!important;font-size:17px!important;font-weight:500!important;line-height:21px!important}
#appframe .vk-person-profile .phead>.pst{grid-column:2;margin:5px 0 0!important;font-size:14px;line-height:18px}
#appframe .vk-person-profile .phead>.pon{grid-column:2;margin:4px 0 0!important;font-size:12px;line-height:16px}
#appframe .vk-person-profile[data-no-cover="1"] .phead{padding-top:10px!important}
#appframe .vk-person-profile .pcov{height:auto;aspect-ratio:3;min-height:80px}
#appframe .vk-person-profile .pcov>img{display:block;width:100%;height:100%;object-fit:cover}
#appframe .vk-video-tabs{display:flex;align-items:center;height:44px;flex:none;padding:6px 10px;background:#f7f7f8;border-bottom:1px solid var(--sep)}
#appframe .vk-video-tabs button{flex:1;min-width:0;height:32px;padding:0 4px;margin:0;border:1px solid #8c8c8c;border-right:0;background:transparent;color:#8c8c8c;font:13px var(--f)}
#appframe .vk-video-tabs button:first-child{border-radius:5px 0 0 5px}#appframe .vk-video-tabs button:last-child{border-right:1px solid #8c8c8c;border-radius:0 5px 5px 0}#appframe .vk-video-tabs button.on{background:#8c8c8c;color:#fff}

#appframe .bb-attachment-placeholder,.bb-attachment-placeholder{padding:10px 12px;border:1px dashed #aab4bf;border-radius:5px;color:#62758a;font:14px/18px var(--f);background:#eef2f6;min-width:120px}.bb-attachment-placeholder small{display:block;font-size:11px;color:#8b96a3;margin-top:3px}

/* ProfileView's 85 pt avatar slot must also constrain legacy authored image dimensions. */
#appframe .vk-person-profile .phead>.pav{display:block!important;position:relative!important;top:auto!important;left:auto!important;right:auto!important;bottom:auto!important;transform:none!important;align-self:start;min-width:0;min-height:0}
#appframe .vk-person-profile .phead>.pav>img{display:block!important;width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;object-fit:cover!important;position:static!important;transform:none!important}
#appframe .vk-person-profile .pnm,#appframe .vk-person-profile .pst{min-width:0;overflow-wrap:anywhere}

/* Voice geometry also exists before the author assigns its recording. */
#appframe .bb-voice .life-voice-play{appearance:none;border:0;background:transparent;color:inherit;min-width:40px;height:40px;padding:5px;font:22px/30px var(--f);flex:0 0 40px;cursor:pointer}
#appframe .bb-voice .life-voice-play:disabled{opacity:.45;cursor:default}
#appframe .bb-voice[data-silent="1"]{cursor:default}
#appframe .bb-voice .bb-vd{white-space:nowrap;font-size:12px}

#appframe .vk-media-grid>.bb-attachment-placeholder[data-attachment-kind="photo"]{box-sizing:border-box;min-width:0;min-height:0;margin:0;padding:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;overflow:hidden;border:1px dashed #c1c8cf;font:12px/16px var(--f);color:#7a8592;background:#edf0f4}
#appframe .vk-media-grid>.bb-attachment-placeholder[data-attachment-kind="photo"] small{font:10px/14px var(--f);max-width:100%}
/* Absolute native tiles need a definite chat bubble width to avoid float collapse. */
#appframe .chat .bb:has(.vk-media-grid){width:min(280px,82%)}
#appframe .chat .ctor-attachment:has(>.vk-media-grid){width:100%;min-width:0}
#appframe .vk-media-grid>.bb-attachment-placeholder[data-attachment-kind="photo"]{display:flex!important;padding:4px!important;border:1px dashed #c1c8cf!important;cursor:default}
/* VK 3.3 AudioMessageAttachmentView: samples y=12,h=20; duration below,
   font 11, width 40 (0x10037960c / 0x100379588). Touch target retained. */
#appframe .bb-voice{display:grid;grid-template-columns:40px minmax(100px,1fr);grid-template-rows:20px 14px;column-gap:8px;row-gap:2px;min-height:54px;padding:12px 10px 6px 0}
#appframe .bb-voice .life-voice-play{grid-column:1;grid-row:1 / span 2;align-self:center;width:40px;height:44px}
#appframe .bb-voice .bb-wave{grid-column:2;grid-row:1;display:flex;height:20px;overflow:hidden;color:#528bcc;gap:2px}
#appframe .bb-voice .bb-wave i{max-height:20px;background:#9cb9d9;flex:1;max-width:3px;min-width:2px}
#appframe .bb-voice .bb-wave i.played{background:#528bcc}
#appframe .bb-voice .bb-vd{grid-column:2;grid-row:2;display:block;width:40px;margin:0;color:#528bcc;font:11px/14px var(--f);text-align:left}

#appframe [data-reader-tools]{margin-top:8px}
#appframe button.southern-reader-tool{appearance:none;-webkit-appearance:none;display:flex;width:100%;min-height:48px;margin:0;padding:0 15px;border:0;border-bottom:1px solid var(--separator,#e7e8ec);border-radius:0;background:var(--card,#fff);color:var(--text,#000);font:inherit;text-align:left;align-items:center;cursor:pointer}
#appframe button.southern-reader-tool .c-r{color:#c5c9ce;font:28px/1 var(--f)}
/* AudioMessageAttachmentView uses attachments/audio/play and /pause in VK 3.3. */
#appframe .bb-voice .life-voice-play{font-size:0;background:transparent url('/ui/ipa/7_att_audio_play.png') center/40px 40px no-repeat}
#appframe .bb-voice.playing .life-voice-play{background-image:url('/ui/ipa/7_att_audio_pause.png')}

/* Southern read-only projection: missing media remains a neutral placeholder, not author diagnostics. */
html[data-southern-mode="reader"] #appframe .bb-attachment-placeholder{font-size:0!important;color:transparent!important;user-select:none;min-height:80px;border-style:solid;border-color:#e4e7eb;background:#eef0f3}
html[data-southern-mode="reader"] #appframe .bb-attachment-placeholder small,html[data-southern-mode="reader"] #appframe [data-vk-missing-photos]{display:none!important}
html[data-southern-mode="reader"] #appframe .vk-media-grid>.bb-attachment-placeholder[data-attachment-kind="photo"]{font-size:0!important;border:1px solid #e2e6ea!important;background:#eef0f3}
/* Search media thumbnails must not inherit round people avatars. */
#appframe .vk-search-result.vk-search-music .c-av{border-radius:3px!important;width:50px!important;height:50px!important;flex-basis:50px!important}
#appframe .vk-search-result.vk-search-video .c-av{border-radius:2px!important;width:86px!important;height:50px!important;flex-basis:86px!important}
#appframe .vk-search-result.vk-search-video .c-av img{object-fit:cover!important}

/* R7 · AudioMessageAttachmentView controls are shared between Editor and Reader.
   Native extracted play/pause bitmaps 80x80 @2x = 40pt tap target.
   Native measurements: samples y=12 h=20, 8pt from play, duration 2pt below. */
#appframe .bb-voice[data-vk-voice-parity="r7"]{box-sizing:border-box;display:grid!important;grid-template-columns:40px minmax(100px,1fr)!important;grid-template-rows:20px 14px!important;gap:2px 8px!important;min-width:180px;max-width:min(310px,81vw);min-height:54px;padding:12px 10px 6px 0!important;align-items:start;}
#appframe .bb-voice[data-vk-voice-parity="r7"] .life-voice-play{grid-column:1;grid-row:1/span 2;align-self:center!important;display:block!important;flex:none!important;width:40px!important;min-width:40px!important;height:40px!important;min-height:40px!important;padding:0!important;border:0!important;opacity:1!important;background:transparent url('/ui/ipa/7_att_audio_play.png') center / 40px 40px no-repeat!important;font-size:0!important;cursor:pointer;}
#appframe .bb-voice[data-vk-voice-parity="r7"].playing .life-voice-play{background-image:url('/ui/ipa/7_att_audio_pause.png')!important;}
#appframe .bb-voice[data-vk-voice-parity="r7"] .bb-wave{grid-column:2;grid-row:1;display:flex!important;align-items:center!important;justify-content:flex-start;gap:2px!important;height:20px!important;max-width:100%;overflow:hidden;margin:0!important;}
#appframe .bb-voice[data-vk-voice-parity="r7"] .bb-wave i{display:block;flex:0 0 2px;min-width:2px;max-width:2px;min-height:3px;max-height:20px;border-radius:1px;background:#9cb9d9!important;}
#appframe .bb-voice[data-vk-voice-parity="r7"] .bb-wave i.played{background:#528bcc!important;}
#appframe .bb-voice[data-vk-voice-parity="r7"] .bb-vd{grid-column:2;grid-row:2;font:11px/14px -apple-system,BlinkMacSystemFont,sans-serif!important;color:#528bcc!important;width:40px;align-self:start;margin:0!important;}
#appframe .bb-voice[data-vk-voice-parity="r7"]>.bb-vp{display:none!important;}

/* R8 targeted geometry adjustment: no play button protrusion beyond bubble. */
#appframe .bb-voice[data-vk-voice-parity="r8"]{box-sizing:border-box;display:grid!important;grid-template-columns:40px minmax(100px,1fr)!important;grid-template-rows:20px 14px!important;gap:2px 8px!important;min-width:188px;max-width:min(310px,81vw);min-height:54px;padding:9px 10px 9px 8px!important;align-items:start;}
#appframe .bb-voice[data-vk-voice-parity="r8"] .life-voice-play{grid-column:1;grid-row:1/span 2;align-self:center!important;display:block!important;flex:none!important;width:40px!important;min-width:40px!important;height:40px!important;min-height:40px!important;padding:0!important;border:0!important;opacity:1!important;background:transparent url('/ui/ipa/7_att_audio_play.png') center/40px 40px no-repeat!important;font-size:0!important;cursor:pointer;}
#appframe .bb-voice[data-vk-voice-parity="r8"].playing .life-voice-play{background-image:url('/ui/ipa/7_att_audio_pause.png')!important;}
#appframe .bb-voice[data-vk-voice-parity="r8"] .bb-wave{grid-column:2;grid-row:1;display:flex!important;align-items:center!important;justify-content:flex-start;gap:2px!important;height:20px!important;max-width:100%;overflow:hidden;margin:0!important;}
#appframe .bb-voice[data-vk-voice-parity="r8"] .bb-wave i{display:block;flex:0 0 2px;min-width:2px;max-width:2px;min-height:3px;max-height:20px;border-radius:1px;background:#9cb9d9!important;}
#appframe .bb-voice[data-vk-voice-parity="r8"] .bb-wave i.played{background:#528bcc!important;}
#appframe .bb-voice[data-vk-voice-parity="r8"] .bb-vd{grid-column:2;grid-row:2;font:11px/14px -apple-system,BlinkMacSystemFont,sans-serif!important;color:#528bcc!important;width:40px;align-self:start;margin:0!important;}

/* R9. Preserve 40pt play and native-sized individual waveform ticks. The
   ResizeObserver in vk-voice-parity.js supplies enough samples for this grid. */
#appframe .bb-voice[data-vk-voice-parity="r9"]{box-sizing:border-box;display:grid!important;grid-template-columns:40px minmax(0,1fr)!important;grid-template-rows:20px 14px!important;column-gap:8px!important;row-gap:2px!important;min-width:188px;max-width:min(310px,81vw);min-height:54px;padding:9px 10px 9px 8px!important;align-items:start;}
#appframe .bb-voice[data-vk-voice-parity="r9"] .life-voice-play{grid-column:1;grid-row:1/span 2;align-self:center!important;display:block!important;flex:none!important;width:40px!important;min-width:40px!important;height:40px!important;min-height:40px!important;padding:0!important;border:0!important;opacity:1!important;background:transparent url('/ui/ipa/7_att_audio_play.png') center/40px 40px no-repeat!important;font-size:0!important;cursor:pointer;}
#appframe .bb-voice[data-vk-voice-parity="r9"].playing .life-voice-play{background-image:url('/ui/ipa/7_att_audio_pause.png')!important;}
#appframe .bb-voice[data-vk-voice-parity="r9"] .bb-wave{grid-column:2;grid-row:1;display:flex!important;align-items:center!important;justify-content:flex-start;box-sizing:border-box;width:100%;min-width:0;gap:2px!important;height:20px!important;max-width:100%;overflow:hidden;margin:0!important;}
#appframe .bb-voice[data-vk-voice-parity="r9"] .bb-wave i{display:block;box-sizing:border-box;flex:0 0 2px;min-width:2px;max-width:2px;min-height:3px;max-height:20px;border-radius:1px;background:#9cb9d9!important;}
#appframe .bb-voice[data-vk-voice-parity="r9"] .bb-wave i.played{background:#528bcc!important;}
#appframe .bb-voice[data-vk-voice-parity="r9"] .bb-vd{grid-column:2;grid-row:2;font:11px/14px -apple-system,BlinkMacSystemFont,sans-serif!important;color:#528bcc!important;width:40px;align-self:start;margin:0!important;}
/* Timestamp and final outgoing receipt share a baseline under the bubble. */
#appframe .chat .bb:has(.aw-read-ticks) .bb-tm{display:inline-block;vertical-align:baseline;margin-top:2px;}
#appframe .chat .bb .aw-read-ticks{display:inline-block;vertical-align:baseline;margin-left:4px;margin-top:2px;letter-spacing:-1px;white-space:nowrap;}

/* R9. An unread separator is injected only when first opening an unread dialog. */
#appframe .chat .aw-chat-new-divider{clear:both;display:flex;align-items:center;gap:9px;text-align:center;font:11px/15px -apple-system,BlinkMacSystemFont,sans-serif;color:#748baa;padding:10px 0;margin:3px 0 7px;}
#appframe .chat .aw-chat-new-divider:before,#appframe .chat .aw-chat-new-divider:after{content:'';height:1px;flex:1;background:#d8e0e8;}
/* A single message may intentionally contain line breaks. Importer decides messages. */
#appframe .chat .bb-t{white-space:pre-wrap;overflow-wrap:anywhere;}

/* R10: compact native-like receipt spacing pending physical IPA geometry confirmation. */
#appframe .chat .bb .aw-read-ticks{margin-left:3px!important;letter-spacing:-3px!important;font-size:11px!important;padding-right:2px!important}
