Skip to content

Instantly share code, notes, and snippets.

@lunamoth
Created May 25, 2026 13:44
Show Gist options
  • Select an option

  • Save lunamoth/40bb18171aa2bb224739199a698d4b89 to your computer and use it in GitHub Desktop.

Select an option

Save lunamoth/40bb18171aa2bb224739199a698d4b89 to your computer and use it in GitHub Desktop.
/* =========================================================
나빌레라 / 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