Created
May 25, 2026 13:44
-
-
Save lunamoth/40bb18171aa2bb224739199a698d4b89 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* ========================================================= | |
| 나빌레라 / Nabilera -> OpenTween Classic Compact UI | |
| Stylebot 사용자 CSS | |
| 기능: | |
| - 타임라인 게시물을 1행 "이름:본문" 형태로 표시 | |
| - 카드형 UI 제거 | |
| - 아바타, 핸들, 이미지, 영상, 링크카드, 인용, 반응 버튼 숨김 | |
| - FHD / QHD / 4K 자동 대응 | |
| - 가로폭 확장 | |
| ========================================================= */ | |
| /* ========================================================= | |
| 0. 기본 변수 | |
| ========================================================= */ | |
| :root { | |
| /* FHD 기본값 */ | |
| --ot-row-height: 18px !important; | |
| --ot-font-size: 12px !important; | |
| --ot-name-width: 13em !important; | |
| --ot-header-height: 22px !important; | |
| /* 전체 폭 */ | |
| --ot-main-max-width: 1280px !important; | |
| --ot-sidebar-left: 8px !important; | |
| --ot-sidebar-width: 34px !important; | |
| --ot-shell-gap: 8px !important; | |
| /* OpenTween / Windows Classic 색 */ | |
| --ot-app-bg: #d4d0c8 !important; | |
| --ot-bg: #ffffff !important; | |
| --ot-bg-alt: #f6f6f6 !important; | |
| --ot-bg-hover: #eaf3ff !important; | |
| --ot-bg-selected: #0a246a !important; | |
| --ot-border-light: #ffffff !important; | |
| --ot-border-mid: #b8b8b8 !important; | |
| --ot-border-dark: #808080 !important; | |
| --ot-border-row: #d0d0d0 !important; | |
| --ot-text: #000000 !important; | |
| --ot-name: #000080 !important; | |
| --ot-link: #0000cc !important; | |
| } | |
| /* QHD */ | |
| @media (min-width: 2200px) and (max-width: 3199px) { | |
| :root { | |
| --ot-row-height: 19px !important; | |
| --ot-font-size: 13px !important; | |
| --ot-name-width: 15em !important; | |
| --ot-header-height: 24px !important; | |
| --ot-main-max-width: 1600px !important; | |
| } | |
| } | |
| /* 4K / UHD */ | |
| @media (min-width: 3200px), | |
| (min-width: 3000px) and (min-resolution: 1.2dppx), | |
| (min-width: 2400px) and (min-resolution: 1.45dppx), | |
| (min-width: 2100px) and (min-resolution: 1.65dppx), | |
| (min-width: 1900px) and (min-resolution: 1.95dppx) { | |
| :root { | |
| --ot-row-height: 22px !important; | |
| --ot-font-size: 14px !important; | |
| --ot-name-width: 17em !important; | |
| --ot-header-height: 26px !important; | |
| --ot-main-max-width: 2200px !important; | |
| } | |
| } | |
| /* ========================================================= | |
| 1. 전체 앱을 OpenTween / Windows Classic 톤으로 | |
| ========================================================= */ | |
| html.reader-active, | |
| html.reader-active body, | |
| .reader-active { | |
| background: var(--ot-app-bg) !important; | |
| } | |
| html.reader-active body { | |
| color: var(--ot-text) !important; | |
| font-family: | |
| Tahoma, | |
| "MS UI Gothic", | |
| "Meiryo UI", | |
| "Yu Gothic UI", | |
| system-ui, | |
| sans-serif !important; | |
| font-size: var(--ot-font-size) !important; | |
| } | |
| /* 나빌레라 테마 변수 자체를 Classic 톤으로 덮어쓰기 */ | |
| html.reader-active body, | |
| html.reader-active [data-theme], | |
| html.reader-active { | |
| --bg: var(--ot-app-bg) !important; | |
| --surface: var(--ot-bg) !important; | |
| --surface-2: #f2f2f2 !important; | |
| --surface-hover: #e5e5e5 !important; | |
| --border: var(--ot-border-mid) !important; | |
| --border-strong: var(--ot-border-dark) !important; | |
| --text: var(--ot-text) !important; | |
| --text-muted: #444444 !important; | |
| --text-faint: #777777 !important; | |
| --accent: #003caa !important; | |
| --accent-hover: #002a80 !important; | |
| --accent-soft: #dbeaff !important; | |
| --radius: 0px !important; | |
| --radius-lg: 0px !important; | |
| --reader-card-alpha: 1 !important; | |
| } | |
| /* 둥근 모서리 제거 */ | |
| html.reader-active *, | |
| html.reader-active *::before, | |
| html.reader-active *::after { | |
| border-radius: 0 !important; | |
| } | |
| /* ========================================================= | |
| 2. 가로폭 확장 | |
| ========================================================= */ | |
| /* 기본 960px 근처로 제한된 container를 넓게 */ | |
| .reader-active .container { | |
| width: 100% !important; | |
| max-width: none !important; | |
| box-sizing: border-box !important; | |
| /* 좌측 고정 사이드바와 본문 사이 간격 */ | |
| padding: | |
| 2px | |
| 8px | |
| 2px | |
| calc(var(--ot-sidebar-left) + var(--ot-sidebar-width) + var(--ot-shell-gap)) !important; | |
| } | |
| /* shell / main 폭 확장 */ | |
| .reader-active .reader-shell { | |
| display: flex !important; | |
| gap: var(--ot-shell-gap) !important; | |
| align-items: flex-start !important; | |
| width: 100% !important; | |
| max-width: none !important; | |
| } | |
| .reader-active .reader-main { | |
| flex: 0 1 var(--ot-main-max-width) !important; | |
| width: min( | |
| var(--ot-main-max-width), | |
| calc(100vw - var(--ot-sidebar-left) - var(--ot-sidebar-width) - var(--ot-shell-gap) - 16px) | |
| ) !important; | |
| max-width: none !important; | |
| min-width: 0 !important; | |
| } | |
| /* 화면을 거의 꽉 채우고 싶으면 위의 --ot-main-max-width를 9999px로 바꾸셔도 됩니다. */ | |
| /* ========================================================= | |
| 3. 좌측 사이드바를 얇은 도구막대처럼 | |
| ========================================================= */ | |
| .reader-active .reader-sidebar { | |
| width: var(--ot-sidebar-width) !important; | |
| flex: 0 0 var(--ot-sidebar-width) !important; | |
| } | |
| .reader-active .reader-sidebar-fixed-top, | |
| .reader-active .reader-sidebar-feeds, | |
| .reader-active .reader-sidebar-bottom { | |
| left: var(--ot-sidebar-left) !important; | |
| width: var(--ot-sidebar-width) !important; | |
| gap: 3px !important; | |
| } | |
| .reader-active .reader-sidebar-fixed-top { | |
| top: 4px !important; | |
| } | |
| .reader-active .reader-sidebar-feeds { | |
| top: 160px !important; | |
| bottom: 112px !important; | |
| width: var(--ot-sidebar-width) !important; | |
| margin-left: 0 !important; | |
| } | |
| .reader-active .reader-sidebar-bottom { | |
| bottom: 4px !important; | |
| } | |
| .reader-active .reader-sidebar-btn { | |
| width: 30px !important; | |
| height: 24px !important; | |
| min-width: 30px !important; | |
| min-height: 24px !important; | |
| border: 1px solid var(--ot-border-dark) !important; | |
| border-top-color: var(--ot-border-light) !important; | |
| border-left-color: var(--ot-border-light) !important; | |
| background: #e8e8e8 !important; | |
| color: var(--ot-text) !important; | |
| box-shadow: none !important; | |
| } | |
| .reader-active .reader-sidebar-btn:hover, | |
| .reader-active .reader-sidebar-btn.is-active, | |
| .reader-active .reader-feed-tab.is-active, | |
| .reader-active .reader-feed-tab-custom.is-active { | |
| background: #dbeaff !important; | |
| border-color: var(--ot-border-dark) !important; | |
| } | |
| /* ========================================================= | |
| 4. 상단 검색 / 피드 헤더 / 프로필 헤더 압축 | |
| ========================================================= */ | |
| .reader-active .reader-search-view { | |
| gap: 4px !important; | |
| padding-top: 0 !important; | |
| } | |
| .reader-active .reader-search-header { | |
| gap: 4px !important; | |
| padding: 2px 0 !important; | |
| } | |
| .reader-active .reader-search-input, | |
| .reader-active .reader-search-submit, | |
| .reader-active .reader-search-mode-btn, | |
| .reader-active .reader-search-sort-btn, | |
| .reader-active .reader-search-advanced-toggle, | |
| .reader-active .reader-feed-tab { | |
| min-height: var(--ot-header-height) !important; | |
| max-height: var(--ot-header-height) !important; | |
| padding-top: 0 !important; | |
| padding-bottom: 0 !important; | |
| font-size: var(--ot-font-size) !important; | |
| line-height: var(--ot-header-height) !important; | |
| } | |
| .reader-active .reader-feed-header { | |
| margin: 0 !important; | |
| padding: 4px 2px !important; | |
| border-bottom: 1px solid var(--ot-border-dark) !important; | |
| background: #efefef !important; | |
| } | |
| .reader-active .reader-feed-header-avatar { | |
| width: 24px !important; | |
| height: 24px !important; | |
| flex-basis: 24px !important; | |
| } | |
| .reader-active .reader-feed-header-title { | |
| font-size: calc(var(--ot-font-size) + 1px) !important; | |
| line-height: var(--ot-header-height) !important; | |
| } | |
| .reader-active .reader-feed-header-desc { | |
| display: none !important; | |
| } | |
| /* ========================================================= | |
| 5. 타임라인 목록 간격 제거 | |
| ========================================================= */ | |
| .reader-active main .reader-list, | |
| .reader-active main .reader-search-list, | |
| .reader-active main .today-section-list, | |
| .reader-active main .reader-bonus-reaction-list { | |
| gap: 0 !important; | |
| margin: 0 !important; | |
| padding: 0 !important; | |
| } | |
| /* ========================================================= | |
| 6. 핵심: 게시물 카드를 OpenTween식 1행으로 | |
| ========================================================= */ | |
| /* 메인 타임라인 / 검색 결과 / 오늘의 글 / 알림 내 post-card */ | |
| .reader-active main :is( | |
| .reader-list, | |
| .reader-search-list, | |
| .today-section-list, | |
| .reader-bonus-reaction-list | |
| ) > .reader-card, | |
| .reader-active main .reader-notif-card-wrap > .reader-card { | |
| display: grid !important; | |
| grid-template-columns: minmax(2em, var(--ot-name-width)) minmax(0, 1fr) !important; | |
| align-items: center !important; | |
| column-gap: 0 !important; | |
| row-gap: 0 !important; | |
| height: var(--ot-row-height) !important; | |
| min-height: var(--ot-row-height) !important; | |
| max-height: var(--ot-row-height) !important; | |
| margin: 0 !important; | |
| padding: 0 4px !important; | |
| overflow: hidden !important; | |
| border: 0 !important; | |
| border-bottom: 1px solid var(--ot-border-row) !important; | |
| background: var(--ot-bg) !important; | |
| box-shadow: none !important; | |
| color: var(--ot-text) !important; | |
| font-family: | |
| Tahoma, | |
| "MS UI Gothic", | |
| "Meiryo UI", | |
| "Yu Gothic UI", | |
| system-ui, | |
| sans-serif !important; | |
| font-size: var(--ot-font-size) !important; | |
| line-height: var(--ot-row-height) !important; | |
| cursor: default !important; | |
| } | |
| /* 짝수 행 배경 */ | |
| .reader-active main :is( | |
| .reader-list, | |
| .reader-search-list, | |
| .today-section-list, | |
| .reader-bonus-reaction-list | |
| ) > .reader-card:nth-of-type(even), | |
| .reader-active main .reader-notif-card-wrap:nth-of-type(even) > .reader-card { | |
| background: var(--ot-bg-alt) !important; | |
| } | |
| /* 호버 */ | |
| .reader-active main :is( | |
| .reader-list, | |
| .reader-search-list, | |
| .today-section-list, | |
| .reader-bonus-reaction-list | |
| ) > .reader-card:hover, | |
| .reader-active main .reader-notif-card-wrap > .reader-card:hover { | |
| background: var(--ot-bg-hover) !important; | |
| } | |
| /* 키보드 포커스 / 선택 느낌 */ | |
| .reader-active main :is( | |
| .reader-list, | |
| .reader-search-list, | |
| .today-section-list, | |
| .reader-bonus-reaction-list | |
| ) > .reader-card:focus-within, | |
| .reader-active main .reader-notif-card-wrap > .reader-card:focus-within { | |
| background: var(--ot-bg-selected) !important; | |
| color: #ffffff !important; | |
| } | |
| /* parent/child peek 그림자 제거 */ | |
| .reader-active main .reader-card.has-parent-peek, | |
| .reader-active main .reader-card.has-child-peek { | |
| margin-top: 0 !important; | |
| margin-bottom: 0 !important; | |
| } | |
| .reader-active main .reader-card.has-parent-peek::before, | |
| .reader-active main .reader-card.has-child-peek::after { | |
| display: none !important; | |
| } | |
| /* ========================================================= | |
| 7. 카드 내부에서 작성자명과 본문만 남기기 | |
| ========================================================= */ | |
| /* 라벨 경고 wrapper가 있을 때도 내부를 grid item으로 풀기 */ | |
| .reader-active main .reader-card.reader-label-warn .reader-label-warn-content { | |
| display: contents !important; | |
| } | |
| /* 카드 헤더 / 작성자 정보 wrapper를 contents로 풀어 grid에 직접 올림 */ | |
| .reader-active main .reader-card .reader-card-head, | |
| .reader-active main .reader-card .reader-card-info, | |
| .reader-active main .reader-card .reader-who { | |
| display: contents !important; | |
| } | |
| /* 아바타 숨김 */ | |
| .reader-active main .reader-card .reader-avatar, | |
| .reader-active main .reader-card .reader-avatar-fallback { | |
| display: none !important; | |
| } | |
| /* 핸들, 관계 태그, 인증, 자동화, 나빌레라 via, 각종 chip 숨김 */ | |
| .reader-active main .reader-card .reader-who-handle-row, | |
| .reader-active main .reader-card .reader-handle, | |
| .reader-active main .reader-card .reader-relationship-tag, | |
| .reader-active main .reader-card .reader-actor-chip, | |
| .reader-active main .reader-card .reader-verified, | |
| .reader-active main .reader-card .reader-automated, | |
| .reader-active main .reader-card .reader-via-nabilera, | |
| .reader-active main .reader-card .reader-card-watermark, | |
| .reader-active main .reader-card .reader-mask-restrict-tag-row, | |
| .reader-active main .reader-card .reader-label-warn-strip, | |
| .reader-active main .reader-card .reader-tag { | |
| display: none !important; | |
| } | |
| /* 작성자명 */ | |
| .reader-active main .reader-card .reader-who strong, | |
| .reader-active main .reader-card .reader-displayname { | |
| grid-column: 1 !important; | |
| display: block !important; | |
| min-width: 0 !important; | |
| max-width: var(--ot-name-width) !important; | |
| width: auto !important; | |
| height: var(--ot-row-height) !important; | |
| margin: 0 !important; | |
| padding: 0 !important; | |
| overflow: hidden !important; | |
| color: var(--ot-name) !important; | |
| font-size: var(--ot-font-size) !important; | |
| font-weight: normal !important; | |
| line-height: var(--ot-row-height) !important; | |
| text-overflow: ellipsis !important; | |
| white-space: nowrap !important; | |
| } | |
| /* 이름 뒤 콜론 */ | |
| .reader-active main .reader-card .reader-who strong::after, | |
| .reader-active main .reader-card .reader-displayname::after { | |
| content: ":" !important; | |
| color: var(--ot-text) !important; | |
| margin-right: 3px !important; | |
| font-weight: normal !important; | |
| } | |
| /* 선택/포커스 시 이름 색 */ | |
| .reader-active main .reader-card:focus-within .reader-who strong, | |
| .reader-active main .reader-card:focus-within .reader-displayname, | |
| .reader-active main .reader-card:focus-within .reader-who strong::after, | |
| .reader-active main .reader-card:focus-within .reader-displayname::after { | |
| color: #ffffff !important; | |
| } | |
| /* ========================================================= | |
| 8. 본문 1행화 | |
| ========================================================= */ | |
| .reader-active main .reader-card .reader-body { | |
| grid-column: 2 !important; | |
| display: block !important; | |
| min-width: 0 !important; | |
| width: 100% !important; | |
| height: var(--ot-row-height) !important; | |
| min-height: var(--ot-row-height) !important; | |
| max-height: var(--ot-row-height) !important; | |
| margin: 0 !important; | |
| padding: 0 !important; | |
| overflow: hidden !important; | |
| color: var(--ot-text) !important; | |
| font-family: | |
| Tahoma, | |
| "MS UI Gothic", | |
| "Meiryo UI", | |
| "Yu Gothic UI", | |
| system-ui, | |
| sans-serif !important; | |
| font-size: var(--ot-font-size) !important; | |
| font-weight: normal !important; | |
| line-height: var(--ot-row-height) !important; | |
| text-align: left !important; | |
| text-overflow: ellipsis !important; | |
| white-space: nowrap !important; | |
| word-break: normal !important; | |
| overflow-wrap: normal !important; | |
| } | |
| /* 본문 내부 요소를 전부 inline으로 */ | |
| .reader-active main .reader-card .reader-body * { | |
| display: inline !important; | |
| float: none !important; | |
| margin: 0 !important; | |
| padding: 0 !important; | |
| font-size: var(--ot-font-size) !important; | |
| line-height: var(--ot-row-height) !important; | |
| vertical-align: baseline !important; | |
| white-space: nowrap !important; | |
| } | |
| /* 줄바꿈 제거 */ | |
| .reader-active main .reader-card .reader-body br { | |
| display: none !important; | |
| } | |
| /* 링크 색 */ | |
| .reader-active main .reader-card .reader-body a, | |
| .reader-active main .reader-card .reader-facet-link, | |
| .reader-active main .reader-card .reader-facet-mention, | |
| .reader-active main .reader-card .reader-facet-tag { | |
| color: var(--ot-link) !important; | |
| text-decoration: none !important; | |
| } | |
| /* 선택/포커스 행 본문 */ | |
| .reader-active main .reader-card:focus-within .reader-body, | |
| .reader-active main .reader-card:focus-within .reader-body *, | |
| .reader-active main .reader-card:focus-within .reader-facet-link, | |
| .reader-active main .reader-card:focus-within .reader-facet-mention, | |
| .reader-active main .reader-card:focus-within .reader-facet-tag { | |
| color: #ffffff !important; | |
| } | |
| /* ========================================================= | |
| 9. 이미지 / 영상 / 링크카드 / 인용 / 카운트 / 반응 버튼 숨김 | |
| ========================================================= */ | |
| .reader-active main .reader-card .reader-repost-banner, | |
| .reader-active main .reader-card .reader-reply-banner, | |
| .reader-active main .reader-card .reader-embed-stack, | |
| .reader-active main .reader-card .reader-images, | |
| .reader-active main .reader-card .reader-image, | |
| .reader-active main .reader-card .reader-image-placeholder, | |
| .reader-active main .reader-card .reader-video, | |
| .reader-active main .reader-card .reader-video-stage, | |
| .reader-active main .reader-card .reader-video-placeholder, | |
| .reader-active main .reader-card .reader-link-card, | |
| .reader-active main .reader-card .reader-quote, | |
| .reader-active main .reader-card .reader-feed-embed-card, | |
| .reader-active main .reader-card .reader-counts, | |
| .reader-active main .reader-card .reader-actions, | |
| .reader-active main .reader-card .reader-translate-wrap, | |
| .reader-active main .reader-card .reader-translate-btn, | |
| .reader-active main .reader-card .reader-translate-result, | |
| .reader-active main .reader-card .reader-rp-prefix, | |
| .reader-active main .reader-card .reader-media-stage, | |
| .reader-active main .reader-card .reader-media-badge, | |
| .reader-active main .reader-card .reader-gif-direct, | |
| .reader-active main .reader-card .reader-gif-embed { | |
| display: none !important; | |
| } | |
| /* ========================================================= | |
| 10. 알림 목록도 조금 더 OpenTween식으로 압축 | |
| ========================================================= */ | |
| .reader-active main .reader-notif-row { | |
| min-height: var(--ot-row-height) !important; | |
| max-height: calc(var(--ot-row-height) * 2) !important; | |
| padding: 2px 4px !important; | |
| border-bottom: 1px solid var(--ot-border-row) !important; | |
| background: var(--ot-bg) !important; | |
| font-size: var(--ot-font-size) !important; | |
| line-height: var(--ot-row-height) !important; | |
| overflow: hidden !important; | |
| } | |
| .reader-active main .reader-notif-row:hover { | |
| background: var(--ot-bg-hover) !important; | |
| } | |
| .reader-active main .reader-notif-row-avatar, | |
| .reader-active main .reader-notif-row-icon, | |
| .reader-active main .reader-notif-row-time { | |
| display: none !important; | |
| } | |
| .reader-active main .reader-notif-row-actor, | |
| .reader-active main .reader-notif-row-subject { | |
| font-size: var(--ot-font-size) !important; | |
| line-height: var(--ot-row-height) !important; | |
| white-space: nowrap !important; | |
| overflow: hidden !important; | |
| text-overflow: ellipsis !important; | |
| } | |
| /* ========================================================= | |
| 11. 더 보기 / 상태 / 끝 표시 압축 | |
| ========================================================= */ | |
| .reader-active main .reader-status, | |
| .reader-active main .reader-end, | |
| .reader-active main .reader-search-status, | |
| .reader-active main .today-status, | |
| .reader-active main .load-more, | |
| .reader-active main .loading { | |
| min-height: calc(var(--ot-row-height) + 4px) !important; | |
| max-height: calc(var(--ot-row-height) + 4px) !important; | |
| margin: 0 !important; | |
| padding: 0 4px !important; | |
| background: #efefef !important; | |
| border-top: 1px solid var(--ot-border-light) !important; | |
| border-bottom: 1px solid var(--ot-border-dark) !important; | |
| color: #444444 !important; | |
| font-size: var(--ot-font-size) !important; | |
| line-height: calc(var(--ot-row-height) + 4px) !important; | |
| overflow: hidden !important; | |
| } | |
| /* ========================================================= | |
| 12. 스크롤바 Classic 톤 | |
| ========================================================= */ | |
| html.reader-active * { | |
| scrollbar-width: thin !important; | |
| scrollbar-color: #a0a0a0 var(--ot-app-bg) !important; | |
| } | |
| html.reader-active *::-webkit-scrollbar { | |
| width: 14px !important; | |
| height: 14px !important; | |
| background: var(--ot-app-bg) !important; | |
| } | |
| html.reader-active *::-webkit-scrollbar-thumb { | |
| background: #a0a0a0 !important; | |
| border: 1px solid #707070 !important; | |
| } | |
| html.reader-active *::-webkit-scrollbar-track { | |
| background: var(--ot-app-bg) !important; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment