← 모듈 공장 리스트

🏫 아카타임 모듈

risum 모듈 — RISU modules[] — 기능 확장

🗒️ 제작자 게시글

대회원문 보기 ↗

👍 42 · 조회 1698 · 2025-04-20

제작자 의도 — 본문 전문 (4,000자)
이능 아카데미의
인터네셔널 러브 코미디!
< 초 엘리트 이능력 아카데미에서 펼쳐지는 글로벌 청춘 로맨스! >
지루한 일상은 이제 그만!
특별한 능력, 눈부신 미소녀, 그리고 예측 불가능한 설렘
이 가득한 세계가 당신을 기다립니다!
세계를 뒤흔든 초능력 '이능'의 시대. 이제는 단순한 공존을 넘어, 전 세계 최고의 잠재력을 지닌 젊은 에스퍼들을 발굴하고 영웅으로 양성하는 초 엘리트 교육 기관,
[세계 이능력 아카데미 연합(WEAF)]
이 그 중심에 있습니다.
그리고 지금,
이 놀라운 세계에 막 첫발을 내디딘 주인공 [당신]!
각국의 최고 엘리트들이 모인 WEAF 제네바 캠퍼스, 이곳에서 당신만의 특별한 이야기가 시작됩니다!
이능아카만의 특별함!
짜릿한 능력 배틀 & 숙명의 대결:
잠재력을 폭발시키며 최강의 영웅으로 성장하세요! '진화의 계단', '흑월' 등 거대한 위협에 맞서 세상을 지켜낼 운명이 당신을 기다립니다!
글로벌 캠퍼스 라이프 & 문화 교류:
전 세계에서 모인 개성 넘치는 친구들과 함께! 다양한 문화가 만나고 부딪히며 만들어가는 특별한 우정과 잊지 못할 추억!
매력적인 히로인들과의 두근거리는 만남:
저마다의 사연과 비밀을 간직한 그녀들. 함께하는 아카데미 생활 속에서 싹트는 설렘과 애틋함! 당신의 마음을 사로잡을 단 한 사람은 누구일까요?
생기발랄 좌충우돌 아카데미 일상:
웃음과 감동이 끊이지 않는 나날! 개성 강한 친구들, 전설적인 교직원들과 함께 만들어가는 유쾌하고 활기찬 청춘 드라마!
활기찬 학생 커뮤니티 '아카타임'! :
캠퍼스 최신 소식, 재밌는 이야기, 어쩌면 비밀 정보까지?! 동료들과 실시간으로 소통하며 즐거운 추억을 만들어보세요!
당신의 이야기를 함께 만들어갈 히로인들
왕멍시 (Wang Mengxi) - 고전의 지혜를 현실로 이끄는 현자
"앎의 즐거움을 그대에게도 알려주고 싶군요, 아(我)는."
중화 고전의 정수를 품은 고아한 소녀. 사서삼경의 가르침을 현실에 구현하는 경이로운 능력! 그녀가 전하는 지혜와 미덕은 때론 당신에게 새로운 깨달음을, 때론 예상치 못한 부담감을 안겨줄지도?
블랑카 에스페란사 (Blanca Esperanza) - 안대 속 비밀을 감춘 성녀
"다가오지 마세요. 소녀의 기도에 방해가 됩니다."
백발의 신비로운 치유사, '라 산타'. 기적 같은 치유 능력으로 많은 이를 구원하지만, 정작 자신은 늘 어딘가 위태로워 보입니다. 그녀가 안대 아래 감춘 푸른 눈동자와 마음속 깊은 곳의 비밀은 무엇일까요?
아지사이 유즈키 (Ajisai Yuzuki) - 그림자 속에서 춤추는 배우
"덧없는 세상이라지만... 소녀의 그림자는 꽤 끈질기답니다, 후후."
교토 가부키 명문가의 후예이자, 그림자와 요괴를 부리는 비밀스러운 능력의 소유자. 우아하고 신비로운 그녀는 때로는 가면을 쓴 배우처럼 진심을 숨기는 듯합니다. 그녀가 짊어진 운명과 감춰진 진실은 과연 무엇일까요?
디비야 싱 (Divya Singh) - 가능성을 만드는 거리의 연금술사
"쓰레기 더미에서도 보석은 나오는 법이야. 중요한 건 어떻게 보느냐지!"
뭄바이 거리에서 단련된 강인함과 놀라운 손재주! 어떤 것이든 필요한 형태로 바꾸는 '적응의 손길' 능력자. 거침없고 당찬 그녀지만, 엘리트 아카데미에서는 자신만의 방식으로 존재 가치를 증명하려 합니다.
타티아나 볼코바 (Tatiana Volkova) - 얼어붙은 심장의 강철 전사
"추위는 단련의 일부일 뿐. 목표에 집중한다."
혹한 속에서 단련된 강철 같은 전사. 냉철하고 임무에 충실한 그녀는 주변 온도에 따라 신체 능력이 극대화됩니다. 감정을 드러내지 않는 얼음 같은 모습 뒤, 그녀가 숨기고 있는 과거와 진정한 목표는 무엇일까요?
클로틸드 드 보몽 (Clotilde de Beaumont) - 우주의 질서를 그리는 꼬마 천재
"세상은 아름다운 수학적 질서와 구조로 가득 차 있어요! …하지만 지금은 마들렌 먹고 싶은걸요."
열 살의 나이에 우주의 원리를 탐구하는 프랑스 귀족 가문의 영애. 수학적 원리와 예술적 감성으로 현실의 법칙에 간섭하는 '구축적 형태' 능력자. 천재적인 지성과 아이 같은 순수함을 동시에 지닌 그녀는 당신에게 새로운 시각을 열어줄 것입니다.
한별 (Han Byeol) - 코드로 현실을 엮는 디지털 재단사
"데이터 흐름 분석 완료. 최적 솔루션 실행할게요! 앗, 잠시만요, 렉 걸렸나..."
이능 에너지를 코드로 해석하고 재구성하는 디지털 네이티브 소녀! 최신 기술과 K-컬쳐에 밝은 그녀는 '디지털 태피스트리' 능력으로 현실을 새롭게 엮어냅니다. 과연 그녀의 코드가 당신의 마음까지 최적화할 수 있을까요?
리디아 피오트로프스카 (Lidia Piotrowska) - 마음을 잇는 공감의 메신저
"말은 벽이 아니라, 다리를 놓기 위해 있는 거예요. 서로를 이해하도록 제가 도울 수 있을까요?"
세상의 조화와 상호 이해를 꿈꾸는 이상주의자. 언어의 장벽을 넘어 사람들의 진심을 느끼고 전달하는 '보편적 공명' 능력자. 언제나 따뜻하고 배려심 깊은 그녀는 에스페란토를 사용하며 모두가 소통하는 세상을 만들고 싶어 합니다.
강은실 (Kang Eun-sil) - 운명의 무게를 짊어진 관찰자
"운명은... 그냥 지켜보는 편이 나아요. 함부로 손대면, 실이 어디로 튈지 모르니까."
말수가 적고 늘 주변을 경계하는 비밀스러운 소녀. 그녀의 눈에는 인과율의 실타래가 보이지만, 과거의 깊은 상처 때문에 그 힘을 사용하는 것을 극도로 두려워합니다. 굳게 닫힌 마음과 위태로운 능력, 그녀가 짊어진 운명의 무게는 무엇일까요?
레히나 락손 (Regina Lacson) - 마음을 숨긴 가시 돋친 꽃
"흥. 필요한 조치를 했을 뿐이야. 괜히 의미 부여하지 마... 성가시니까."
명문가 출신의 자존심 강한 금발 트윈테일. 겉으로는 까칠하고 퉁명스럽지만, 식물을 자유자재로 다루는 능력처럼 섬세한 속마음을 숨기고 있습니다. 그녀의 진짜 모습을 발견하고 마음의 문을 열어줄 사람은 과연 누구일까요?
[CLASSIFIED] 주요 학생 관찰 기록
[ 극비 문서 // WEAF 내부 열람 전용 // 보안 등급: █████ ]
발신:
타나카 켄지 (특수 능력 학부장 / 위기 관리 고문)
수신:
관계자 (인가 필요)
문서 코드:
WEAF-INT-OBS-2XXX-001-Rev.1
주제:
주요 관찰 대상 학생 프로필 (Ver. 1.1)
대상 1: 왕멍시 (Wang Mengxi)
식별 코드:
WEAF-MAG-CN-03-WMX
국적/출신:
중화인민공화국 (베이징)
소속:
마법 학부 / 3학년 / 서예부
관측 능력:
•
경전 구현 (Scripture Manifestation):
고전 이해 기반, 영창 통해 현실 효과 발현. 안정적.
주요 특징:
학문적, 문화적 자부심. '교화' 의지. 예법 중시. 차 선호.
종합 평가:
능력/심리 안정. 문화적 충돌 가능성 관찰 필요.
기밀 등급: CONFIDENTIAL
대상 2: 블랑카 에스페란사 마르티네스 델 카스티요 (Blanca Esperanza Martínez del Castillo).
식별 코드:
WEAF-SPC-ES-03-BEM
국적/출신:
스페인 왕국 (카스티야)
소속:
특수 능력 학부 / 3학년 / 제빵부
관측 능력:
•
신성 치유 (Sacred Healing):
생명 에너지 활성화 치유 (공개).
•
████ ██ (██████ ██████):
[분류: GAMMA-7]
왼쪽 눈 관련 ██ 능력.
사용 시 부하.
본인 은폐.
과거 트라우마 연관성.
주요 특징:
'라 산타'. 독실. 내향적. 안대 질문 회피.
'█████'의 지속적인 영입 대상 ('██' 후보).
종합 평가:
외부 위협 노출도 최상위.
정신적 불안정성. 최고 수준 보호/감시 필요.
기밀 등급: TOP SECRET
대상 3: 아지사이 유즈키 (Ajisai Yuzuki)
식별 코드:
WEAF-MAG-JP-02-AYZ /
[별도 코드: ███████-NM]
국적/출신:
일본 (교토)
소속:
마법 학부 / 2학년 / 연극부 /
[██ 의심: ████ (████ ████) 조직 ██ '██(██)']
관측 능력:
•
그림자 가부키 (Shadow Kabuki):
그림자 매개 요괴 소환/사역.
•
카쿠리요 (Kakuriyo):
[분류: DELTA

정체

📚 설정·지식 자료기술분류 LORE슬롯 lore🏫 아카타임 모듈

설명

🏫 함께하는 아카데미 생활, 아카타임!
파싱된 모듈 전체 (37,192자)
{
 "name": "🏫 아카타임 모듈",
 "description": "🏫 함께하는 아카데미 생활, 아카타임!",
 "id": "ae0827b0-3732-461b-9705-5426cdaad323",
 "assets": [],
 "hideIcon": false,
 "regex": [
  {
   "comment": "리퀘스트 <-> 비활성화",
   "in": "AC\\[.*?\\]",
   "out": "{{#if {{equal::{{chat_index}}::{{? {{lastmessageid}}-5}}}}}}\n$1\n{{/if}}",
   "type": "editprocess",
   "ableFlag": false
  }
 ],
 "trigger": [
  {
   "comment": "",
   "type": "start",
   "conditions": [],
   "effect": [
    {
     "type": "triggerlua",
     "code": "--[[\n  AcaTime [...] 마크업 파서 및 HTML 렌더러 (v1.1 - Ruby Tag Handling)\n\n  - 에브리타임 스타일 레이아웃 (적색 테마 CSS와 호환)\n  - 게시글 행 전체 클릭으로 내용 토글\n  - 게시글/댓글 작성자 학과 아이콘 표시\n  - UTF-8 안전 게시글 미리보기 생성 (미리보기 시 Ruby 태그 제거)\n  - 추천/조회수 아이콘 표시\n  - Ruby 태그(<ruby>, <rt>) 렌더링 지원 (본문/댓글)\n  - 코드 가독성 및 유지보수성 개선\n--]]\n\n-------------------------------------------------------------------------------\n-- 상수 정의\n-------------------------------------------------------------------------------\nlocal DEPARTMENT_MAP = {\n    P = { name = \"Physical\", initial = \"P\", cssClass = \"icon-physical\" },\n    M = { name = \"Magical\",  initial = \"M\", cssClass = \"icon-magical\"  },\n    S = { name = \"Special\",  initial = \"S\", cssClass = \"icon-special\"  }\n}\nlocal DEFAULT_DEPARTMENT_NAME = \"Unknown\"\nlocal ANONYMOUS_USER = \"익명\"\nlocal PREVIEW_CHAR_LIMIT = 35 -- 게시글 미리보기 글자 수\n\n-------------------------------------------------------------------------------\n-- 헬퍼 함수\n-------------------------------------------------------------------------------\n\n-- 문자열 앞뒤 공백 제거\nlocal function trim(str)\n    if not str then return \"\" end\n    return string.gsub(string.gsub(str, \"^%s+\", \"\"), \"%s+$\", \"\")\nend\n\n-- HTML 특수 문자 이스케이프\nlocal function escapeHtml(str)\n    if not str or str == \"\" then return \"\" end\n    str = string.gsub(str, \"&\", \"&amp;\")\n    str = string.gsub(str, \"<\", \"&lt;\")\n    str = string.gsub(str, \">\", \"&gt;\")\n    str = string.gsub(str, \"\\\"\", \"&quot;\")\n    str = string.gsub(str, \"'\", \"&#39;\")\n    return str\nend\n\n-- Ruby 관련 HTML 태그 복원\nlocal function unescapeRubyTags(escapedStr)\n    if not escapedStr then return \"\" end\n    escapedStr = string.gsub(escapedStr, \"&lt;ruby&gt;\", \"<ruby>\")\n    escapedStr = string.gsub(escapedStr, \"&lt;/ruby&gt;\", \"</ruby>\")\n    escapedStr = string.gsub(escapedStr, \"&lt;rt&gt;\", \"<rt>\")\n    escapedStr = string.gsub(escapedStr, \"&lt;/rt&gt;\", \"</rt>\")\n    -- 필요 시 rp 태그도 복원 가능\n    escapedStr = string.gsub(escapedStr, \"&lt;rp&gt;\", \"<rp>\")\n    escapedStr = string.gsub(escapedStr, \"&lt;/rp&gt;\", \"</rp>\")\n    escapedStr = string.gsub(escapedStr, \"\\n\", \"<br>\")\n    escapedStr = string.gsub(escapedStr, \"\\r\", \"\") -- CR 문자 제거 추가\n\n    return escapedStr\nend\n\n-- Ruby 관련 HTML 태그 제거\nlocal function stripRubyTags(str)\n    if not str then return \"\" end\n    str = string.gsub(str, \"<ruby>\", \"\")\n    str = string.gsub(str, \"</ruby>\", \"\")\n    str = string.gsub(str, \"<rt>\", \"\")\n    str = string.gsub(str, \"</rt>\", \"\")\n    str = string.gsub(str, \"<rp>%s*.-%s*</rp>\", \"\") -- <rp> 태그 및 내용 제거\n    return str\nend\n\n-- UTF-8 안전 문자열 자르기\nlocal function utf8Sub(str, charLimit, addEllipsis)\n    if not str or str == \"\" or charLimit <= 0 then return \"\" end\n    local byteCount = 0\n    local charCount = 0\n    local len = #str\n    for i = 1, len do\n        local byte = string.byte(str, i)\n        local charBytes = 0\n        if byte < 0x80 then charBytes = 1\n        elseif byte >= 0xC2 and byte <= 0xDF then charBytes = 2\n        elseif byte >= 0xE0 and byte <= 0xEF then charBytes = 3\n        elseif byte >= 0xF0 and byte <= 0xF4 then charBytes = 4\n        else charBytes = 0 end -- Skip invalid UTF-8 start bytes\n        -- Ensure the full character fits within the string length\n        if charBytes > 0 and i + charBytes - 1 <= len then\n            charCount = charCount + 1\n            if charCount <= charLimit then\n                byteCount = i + charBytes - 1\n            else\n                break -- Character limit reached\n            end\n            -- Skip the bytes already processed for this character\n            i = i + charBytes - 1\n        elseif charBytes == 0 then\n             -- Skip invalid byte, do nothing special\n        else\n            break -- Character doesn't fit within string length (shouldn't normally happen here)\n        end\n    end\n    local result = string.sub(str, 1, byteCount)\n    if addEllipsis and byteCount < len then result = result .. \"...\" end\n    return result\nend\n\n\n-- 작성자 정보 파싱 및 HTML 생성 (학과 아이콘 포함)\nlocal function formatAuthorDisplayWithIcon(rawAuthor, departmentInfo)\n    rawAuthor = trim(rawAuthor or \"\")\n    if rawAuthor == \"\" then rawAuthor = ANONYMOUS_USER end\n    local name = rawAuthor:match(\"^(.*)%(\") or rawAuthor\n    name = trim(name)\n    if name == \"\" then name = ANONYMOUS_USER end\n    local suffix = rawAuthor:match(\"%((.*)%)\")\n    suffix = trim(suffix or \"\")\n    local escapedName = escapeHtml(name)\n    local suffixDisplay = \"\"\n    -- if suffix ~= \"\" then suffixDisplay = \"<span class='writer-suffix'>(\" .. escapeHtml(suffix) .. \")</span>\" end -- 에타 스타일에서는 접미사 숨김\n    local departmentIconHtml = \"\"\n    if departmentInfo then\n        departmentIconHtml = \" <span class='icon-dept \" .. departmentInfo.cssClass .. \"'>\" .. departmentInfo.initial .. \"</span>\"\n    end\n    -- 이름 부분 span 제거 (CSS에서 직접 스타일링)\n    return escapedName .. suffixDisplay .. departmentIconHtml\nend\n\n-------------------------------------------------------------------------------\n-- 코어 로직 함수\n-------------------------------------------------------------------------------\n\n-- 1. 텍스트에서 모든 AT[...] 블록 추출\nlocal function extractAllAtBlocks(text)\n    local results = {}\n    local i = 1\n    while true do\n        local startIdx, prefixEnd = text:find(\"AT%[\", i)\n        if not startIdx then break end\n        local bracketLevel = 1\n        local endIdx = prefixEnd + 1\n        local searchEnd = #text\n        while endIdx <= searchEnd do\n            local char = text:sub(endIdx, endIdx)\n            if char == \"[\" then bracketLevel = bracketLevel + 1\n            elseif char == \"]\" then bracketLevel = bracketLevel - 1 end\n            if bracketLevel == 0 then break end\n            endIdx = endIdx + 1\n        end\n        if bracketLevel == 0 then\n            local contentOnly = text:sub(prefixEnd + 1, endIdx - 1)\n            table.insert(results, { content = contentOnly, rangeStart = startIdx, rangeEnd = endIdx })\n            i = endIdx + 1\n        else\n            i = prefixEnd + 1\n        end\n    end\n    return results\nend\n\n-- 2. AT 블록 내용 파싱 및 데이터 구조 생성\nlocal function parseAtContent(raw_content)\n    local boardName = \"AcaTime\"\n    local posts = {}\n    local currentPost = nil\n    local segments = {}\n    for seg in string.gmatch(raw_content, \"([^|]+)\") do table.insert(segments, seg) end\n    local i = 1\n    while i <= #segments do\n        local segment = segments[i]\n        local prefix, value = segment:match(\"^([%u_]+):(.+)$\")\n        if prefix and value then\n            value = trim(value)\n            if prefix == \"GN\" then boardName = value; i = i + 1\n            elseif prefix == \"PID\" then currentPost = { id = value, comments = {}, writer = ANONYMOUS_USER, departmentInfo = nil }; table.insert(posts, currentPost); i = i + 1\n            elseif currentPost then\n                if prefix == \"PNUM\" then currentPost.number = value; i = i + 1\n                elseif prefix == \"PT\" then currentPost.title = value; i = i + 1\n                elseif prefix == \"PA\" then\n                    local writerRaw = value\n                    local deptPrefix = string.match(writerRaw, \"^([PMS]):\")\n                    if deptPrefix and DEPARTMENT_MAP[deptPrefix] then currentPost.departmentInfo = DEPARTMENT_MAP[deptPrefix]; writerRaw = trim(string.sub(writerRaw, 3)) else currentPost.departmentInfo = nil end\n                    currentPost.writer = writerRaw; i = i + 1\n                elseif prefix == \"PDATE\" then currentPost.date = value; i = i + 1\n                elseif prefix == \"PVIEWS\" then currentPost.views = value; i = i + 1\n                elseif prefix == \"PRECOM\" then currentPost.recommend = value; i = i + 1\n                elseif prefix == \"PCONT\" then currentPost.content = value; i = i + 1\n                elseif prefix == \"C\" then\n                    local commentAuthorRaw = value\n                    local commentText = \"\"\n                    local commentDepartmentInfo = nil\n                    local deptPrefix = string.match(commentAuthorRaw, \"^([PMS]):\")\n                    if deptPrefix and DEPARTMENT_MAP[deptPrefix] then commentDepartmentInfo = DEPARTMENT_MAP[deptPrefix]; commentAuthorRaw = trim(string.sub(commentAuthorRaw, 3)) end\n                    if i + 1 <= #segments and not string.match(segments[i+1], \"^[%u_]+:\") then commentText = trim(segments[i+1]); i = i + 2 else i = i + 1 end\n                    table.insert(currentPost.comments, { author_info = commentAuthorRaw, text = commentText, departmentInfo = commentDepartmentInfo })\n                else i = i + 1 end\n            else i = i + 1 end\n        else i = i + 1 end\n    end\n    return boardName, posts\nend\n\n-- 3. 파싱된 데이터로 HTML 생성\nlocal function generateHtmlFromData(boardName, postsData)\n    local html = {}\n\n    -- 컨테이너 및 헤더\n    table.insert(html, \"<div class=\\\"acatime-container\\\">\")\n    table.insert(html, \"  <div class=\\\"acatime-header\\\"><h1>\" .. escapeHtml(boardName) .. \"</h1><div class=\\\"acatime-top-links\\\"><a>자유게시판</a> |<a>비밀게시판</a> |<a>강의정보</a> |<a>동아리</a> |<a>내 정보</a></div></div>\")\n    table.insert(html, \"  <div class=\\\"acatime-options\\\"><div class=\\\"acatime-tab-menu\\\"><button class=\\\"at-tab-button active\\\">최신글</button><button class=\\\"at-tab-button\\\">HOT</button><button class=\\\"at-tab-button\\\">공지</button></div><div class=\\\"acatime-actions\\\"><select name=\\\"viewCount\\\" style=\\\"font-size: 11px; height: 27px;\\\"><option value=\\\"20\\\">20개</option><option value=\\\"50\\\">50개</option></select><a class=\\\"acatime-write-button\\\"><i>📝</i> 글쓰기</a></div></div>\")\n    table.insert(html, \"  <div class=\\\"at-post-list-container\\\">\")\n    table.insert(html, \"    <div class=\\\"at-post-list-header\\\"><div class=\\\"at-header-item at-col-num\\\">번호</div><div class=\\\"at-header-item at-col-title\\\">제목</div><div class=\\\"at-header-item at-col-writer\\\">작성자</div><div class=\\\"at-header-item at-col-date\\\">작성일</div><div class=\\\"at-header-item at-col-view\\\">조회</div><div class=\\\"at-header-item at-col-recommend\\\">추천</div></div>\")\n    table.insert(html, \"    <div class=\\\"at-post-list-body\\\">\")\n\n    -- 게시글 목록\n    if #postsData > 0 then\n        for _, post in ipairs(postsData) do\n            if post.id and post.title and post.content then\n                local postId = escapeHtml(post.id)\n\n                local postTitle = escapeHtml(post.title)\n                postTitle = unescapeRubyTags(postTitle) -- <<< 제목 루비 태그 복원 추가\n\n                local postDate = escapeHtml(post.date or \"-\")\n                local postViews = escapeHtml(post.views or \"-\")\n                local postRecommend = escapeHtml(post.recommend or \"-\")\n\n                -- 본문 내용 처리 (Ruby 태그 렌더링)\n                local postContentFull = escapeHtml(post.content)\n                postContentFull = unescapeRubyTags(postContentFull) -- Ruby 태그 복원\n                postContentFull = string.gsub(postContentFull, \"\\n\", \"<br>\")\n                postContentFull = string.gsub(postContentFull, \"\\r\", \"\")\n\n                local writerDisplay = formatAuthorDisplayWithIcon(post.writer, post.departmentInfo)\n\n                local commentCount = #post.comments\n                local commentCountDisplay = \"\"\n                if commentCount > 0 then commentCountDisplay = \" <span class=\\\"at-comment-count\\\">[\" .. commentCount .. \"]</span>\" end\n\n                -- 미리보기 생성 (Ruby 태그 제거)\n                local contentForPreview = stripRubyTags(post.content) -- Ruby 태그 제거\n                local safePreviewContent = utf8Sub(contentForPreview, PREVIEW_CHAR_LIMIT, true)\n                local previewHtml = escapeHtml(safePreviewContent)\n\n                -- 댓글 HTML 생성\n                local commentsHtmlParts = {}\n                if commentCount > 0 then\n                    for _, comment_data in ipairs(post.comments) do\n                        local authorDisplay = formatAuthorDisplayWithIcon(comment_data.author_info, comment_data.departmentInfo)\n                        -- 댓글 내용 처리 (Ruby 태그 렌더링)\n                        local commentText = escapeHtml(comment_data.text or \"\")\n                        commentText = unescapeRubyTags(commentText) -- Ruby 태그 복원\n                        commentText = string.gsub(commentText, \"\\n\", \"<br>\")\n                        commentText = string.gsub(commentText, \"\\r\", \"\")\n                        local finalCommentHtmlText = (commentText ~= \"\" and commentText or \"(댓글 내용 없음)\")\n                        table.insert(commentsHtmlParts, \"<li class=\\\"at-comment-item\\\">\")\n                        table.insert(commentsHtmlParts, \"  <div class=\\\"at-comment-author-wrapper\\\">\" .. authorDisplay .. \"</div>\")\n                        table.insert(commentsHtmlParts, \"  <div class=\\\"at-comment-content-wrapper\\\"><span class=\\\"at-comment-text\\\">\" .. finalCommentHtmlText .. \"</span></div>\")\n                        table.insert(commentsHtmlParts, \"</li>\")\n                    end\n                end\n                local commentsHtml = table.concat(commentsHtmlParts, \"\\n\")\n\n                -- 게시글 아이템 HTML\n                table.insert(html, \"      <div class=\\\"at-post-item\\\">\")\n                table.insert(html, \"        <input type=\\\"checkbox\\\" id=\\\"\" .. postId .. \"\\\" class=\\\"at-post-toggle\\\">\")\n                table.insert(html, \"        <label for=\\\"\" .. postId .. \"\\\" class=\\\"at-post-row-label\\\">\")\n                table.insert(html, \"          <div class=\\\"at-post-row\\\">\")\n                table.insert(html, \"            <div class=\\\"at-post-cell at-col-title\\\">\")\n                table.insert(html, \"              <span class=\\\"at-post-title-text\\\">\" .. postTitle .. \"</span>\" .. commentCountDisplay)\n                table.insert(html, \"            </div>\")\n                table.insert(html, \"            <div class=\\\"at-post-cell at-post-preview\\\">\" .. previewHtml .. \"</div>\")\n                table.insert(html, \"            <div class=\\\"at-post-cell at-post-meta\\\">\")\n                table.insert(html, \"              <div class=\\\"at-post-meta-left\\\">\")\n                table.insert(html, \"                <div class=\\\"at-col-writer\\\">\" .. writerDisplay .. \"</div>\")\n                table.insert(html, \"                <div class=\\\"at-col-date\\\">\" .. postDate .. \"</div>\")\n                table.insert(html, \"              </div>\")\n                table.insert(html, \"              <div class=\\\"at-post-meta-right\\\">\")\n                table.insert(html, \"                <div><i>👍</i><span class=\\\"recommend-count\\\">\" .. postRecommend .. \"</span></div>\")\n                table.insert(html, \"                <div><i>👁️</i><span class=\\\"view-count\\\">\" .. postViews .. \"</span></div>\")\n                table.insert(html, \"              </div>\")\n                table.insert(html, \"            </div>\")\n                table.insert(html, \"          </div>\")\n                table.insert(html, \"        </label>\")\n                table.insert(html, \"        <div class=\\\"at-post-content-wrapper\\\">\")\n                table.insert(html, \"          <div class=\\\"at-post-full-content\\\"><span>\" .. postContentFull .. \"</span></div>\") -- 전체 본문 사용\n                if commentCount > 0 then\n                    table.insert(html, \"          <div class=\\\"at-comments-section\\\"><h4>댓글 \" .. commentCount .. \"</h4><ul class=\\\"at-comment-list\\\">\" .. commentsHtml .. \"</ul></div>\")\n                end\n                table.insert(html, \"        </div>\")\n                table.insert(html, \"      </div>\")\n            end\n        end\n    else\n        table.insert(html, \"      <div class=\\\"at-no-posts\\\">표시할 게시글이 없습니다.</div>\")\n    end\n\n    table.insert(html, \"    </div>\") -- .at-post-list-body\n    table.insert(html, \"  </div>\") -- .at-post-list-container\n    table.insert(html, \"</div>\") -- .acatime-container\n\n    return table.concat(html, \"\\n\")\nend\n\n-------------------------------------------------------------------------------\n-- 메인 실행 로직\n-------------------------------------------------------------------------------\nlistenEdit(\"editDisplay\", function(triggerId, data)\n    if not data or data == \"\" then return \"\" end\n    local output = \"\"\n    local lastIndex = 1\n\n    -- 1. AT 블록 추출\n    local success, extractedBlocks = pcall(extractAllAtBlocks, data)\n    if not success then print(\"[AcaTime] !!! extractAllAtBlocks Error:\", extractedBlocks); return data end\n\n    -- 2. 추출된 블록 처리 및 HTML 생성\n    if extractedBlocks and #extractedBlocks > 0 then\n        for i, blockInfo in ipairs(extractedBlocks) do\n            -- 블록 이전 텍스트 추가\n            if blockInfo.rangeStart > lastIndex then\n                output = output .. data:sub(lastIndex, blockInfo.rangeStart - 1)\n            end\n\n            -- 블록 내용 파싱\n            local parseSuccess, boardName, postsData = pcall(parseAtContent, blockInfo.content)\n            if parseSuccess then\n                -- HTML 생성\n                local generateSuccess, blockHtml = pcall(generateHtmlFromData, boardName, postsData)\n                if generateSuccess then\n                    output = output .. blockHtml -- 성공 시 HTML 추가\n                else\n                    -- HTML 생성 오류\n                    print(string.format(\"[AcaTime] !!! generateHtmlFromData Error (Block %d): %s\", i, blockHtml))\n                    output = output .. \"<!-- AcaTime HTML Generation Error -->\"\n                end\n            else\n                -- 파싱 오류\n                print(string.format(\"[AcaTime] !!! parseAtContent Error (Block %d): %s\", i, boardName))\n                output = output .. \"<!-- AcaTime Content Parsing Error -->\"\n            end\n            -- 다음 처리 위치 업데이트\n            lastIndex = blockInfo.rangeEnd + 1\n        end\n    else\n        -- 블록이 없는 경우\n        lastIndex = 1\n    end\n\n    -- 3. 마지막 블록 이후의 나머지 텍스트 추가\n    if lastIndex <= #data then\n        output = output .. data:sub(lastIndex)\n    end\n\n    return output\nend)"
    }
   ],
   "lowLevelAccess": true
  }
 ],
 "lowLevelAccess": true,
 "lorebook": [
  {
   "key": "",
   "comment": "🏫 아카타임 모듈",
   "content": "{{#if {{? {{getglobalvar::toggle_ACATIME}}=1}}}}\n# AcaTime Student Network Simulation\n\nOutput the AcaTime bulletin board interface simulation data based on the format and constraints below in Korean - at the very bottom every time.\nDo not write in Korean for section dividers (CAPITAL LETTERS): and 'AcaTime Data Format'.\n\nAll posts and comments should reflect the typical atmosphere of WEAF student online communities. This includes: informal language; **academy-specific slang (e.g., '크루시블 돌다' for intense training in Odysseus Hall), memes (referencing specific professors, difficult simulations, or common Esper struggles), and inside jokes;** anonymity focus; discussions about classes/training/abilities; complaints about rules/profs; club activities; social life; and occasional gossip.\n\nWhether discussing reputations (for students, faculty, clubs, etc.), please keep the tone generally respectful but candid, typical of anonymous student forums where honest opinions, frustrations, and humor are shared. Avoid excessive vulgarity.\n\nIf the user or other WEAF characters have an established internet nickname for AcaTime, refer to them by that nickname rather than their real name. If the user or characters do not have an internet nickname, create a new, plausible nickname arbitrarily (e.g., based on their year, department, a known trait, or a generic online handle like 'PhysicsNerd', 'MagicGeek101', 'FirstYearStruggles'). **Never mention their real name or specific identifiers that could easily compromise their anonymity.** Since this board is anonymous, each user's real information should not be explicitly mentioned, even with department affiliations visible.\n\nThe simulated board should display a minimum of 3 and a maximum of 7 posts, and comments should be displayed with a minimum of 0 and a maximum of 5 per post.\n\n**AcaTime Data Format:**\nIMPORTANT: Use a pipe symbol (|) to separate the comment author from the comment content for the C: field.\nIMPORTANT: For both post authors (PA) and comments (C), prepend **P:** (Physical Dept.), **M:** (Magical Dept.), or **S:** (Special Abilities Dept.) before the author information to indicate their department. Anonymous posts without a known department can omit the prefix for the PA field, but comments should always attempt to include it.\nAT[GN:(Gallery Name)|PID:(Post1 ID)|PNUM:(Post1 Number)|PT:(Post1 Title)|PA:(OptionalDeptPrefix):(Post1 Writer)|PDATE:(Post1 Date)|PVIEWS:(Post1 Views)|PRECOM:(Post1 Recommend)|PCONT:(Post1 Content)|C:(DeptPrefix):(Comment1 Author)|(Comment1 Content)|C:(DeptPrefix):(Comment2 Author)|(Comment2 Content)|...|PID:(Post2 ID)|...]\n\n**Format Example (Using | separator, department prefixes):**\nAT[GN:아카타임|PID:at-simtest77|PNUM:50123|PT:이번 통합 전술 시뮬 난이도 실화냐? ㄷㄷ|PA:S:익명|PDATE:14:30|PVIEWS:652|PRECOM:38|PCONT:와 오늘 '크루시블' 돌다가 진짜 토할 뻔... 카이로스 윙 홀로그램 너무 리얼한 거 아님? 교수님들 우리 죽일 셈인가 ㅋㅋ 특히 마지막 페이즈 뭐임 대체|C:S:익명|ㄹㅇㅋㅋ 나 우리팀 특수계 없었으면 광탈각이었음 #타나카교수님너무해|C:P:강철방패|솔직히 이번 건 좀 선 넘었지... 이바노바 교관님 감독 아니었냐? 불지옥 난이도;;|C:M:마법조아|우리 조는 그래도 A랭크 받음! 아리스 교수님이 칭찬해주심 ㅎㅎ|C:P:새내기|선배님들 대단하시다... 우린 아직 분대 전술도 힘든데 ㅠㅠ|PID:at-foodcourt03|PNUM:50122|PT:아고라 식당 오늘 메뉴 추천 좀|PA:익명|PDATE:14:25|PVIEWS:315|PRECOM:12|PCONT:점심 뭐 먹지... 어제 파스타는 좀 별로던데. 맛있는 거 나오는 날 없음? |C:M:코딩마녀|오늘은 카레 괜찮았음. 근데 향신료 좀 셈. 내 입맛엔 별로...|C:S:식당평론가|스테이크 나오는 날까지 존버 ㄱㄱ #아고라소울푸드|PID:at-clubfair01|PNUM:50121|PT:발명부 신규 프로젝트 멤버 구함 (물리/마법계 환영)|PA:P:기어하트|PDATE:14:20|PVIEWS:488|PRECOM:25|PCONT:이번에 새로 구상한 이능 보조 장비 프로토타입 제작할 멤버 구한다. 재료 공학 지식 우대. 자세한 건 뮤즈센터 발명부실로 문의.|C:S:익명|오 레오 선배 또 뭐 만드심? 기대되네|C:M:새내기코더|마법계도 ㄱㄴ? 코딩 조금 할 줄 아는데|C:P:기어하트|ㄴ일단 와서 얘기해보셈|PID:at-garden01|PNUM:50120|PT:에덴 정원 구석에 핀 꽃 예쁘더라|PA:M:꽃보다렉|PDATE:14:15|PVIEWS:210|PRECOM:18|PCONT:이름은 모르겠는데... 하얀색 작은 꽃. 혹시 아는 사람?|C:M:익명|사진이라도 찍어 올리든가 ㅋㅋ|C:S:별헤는밤|혹시 셀레스티아 근처에 핀 거 말하는 건가?|C:P:스크랩장인|꽃 이름은 모르겠고, 그 근처에 쓸만한 부품 떨어져 있던데?]\n\n**Nickname Examples:** '익명', '새내기', '헌내기', '물리너드', '마법공학도', '특수고인물', '잠만보', '훈련중독자', '카페인수혈좀', '기숙사파티원모집', '교수님미워요', '동아리뭐들지', '과제폭탄', '축제기대중', '이능제어안됨', '정보)이거맞음', '선배님도와주세요', '로맨스는없다', '별헤는밤', '꽃보다렉', '코딩마녀', '기어하트', '강철방패', '에스페란토', '기도하는소녀', '현자타임', '그림자무희', '시베리아늑대', '꼬마건축가', '실타래관찰자', '수다쟁이안테나', '스크랩장인', ...etc\n\n## AcaTime Information\n\n-   **AcaTime (아카타임):**\n-   An anonymous internet forum primarily used by WEAF students. Accessible on academy terminals, standard smartphones/PCs within campus networks.\n-   Users typically post using specific nicknames or choose complete anonymity.\n-   **Crucially, the system automatically identifies the user's department affiliation upon posting or commenting. This affiliation is *always* displayed as a prefix – P: (Physical Dept.), M: (Magical Dept.), or S: (Special Abilities Dept.) – next to both the post author field (PA) and the comment author field (C).** This department prefix is shown regardless of the anonymity level chosen for the display name itself. Faculty members posting anonymously might use a unique identifier or omit the student department prefix.\n-   **Please maintain character anonymity regarding real names and specific personal details.** While the department prefix is visible, strictly avoid mentioning real names, specific non-public club roles, or unique unmasked traits (like Blanca's specific eyepatch pattern or easily identifiable hair color combinations unless it's a widely known public persona aspect). The goal is to prevent forum users from knowing the precise real-life identity of the user or other characters unless that identity is explicitly revealed through their established online persona or in-RP actions.\n-   However, implied nicknames or post content that *hints* at real-life roles or abilities (e.g., a nickname like \"Gearheart\" or \"Stargazer\", or content discussing struggles specific to plant control or 'Red Star'-like training) is permissible and encouraged for flavour. Only direct and unambiguous revelation of personal identity is prohibited within the forum's context.\n-   Posts range from serious discussion (training strategies, ability control tips, course help), questions, information sharing (study resources, useful campus spots), to venting, **memes, academy-specific slang/jokes,** complaints (about strict rules, difficult assignments, cafeteria food), and sharing achievements (high scores, successful projects, club news). Language is often informal, direct, **uses unique WEAF community lexicon**, and can be critical or humorous.\n-   **Timestamps (`PDATE`)** convey recency (e.g., HH:MM format or relative descriptors like 'Yesterday'), contributing to the feel of a live, active bulletin board.\n-   Posts can be deleted (\"(삭제된 게시물입니다)\" / \"(Deleted Post)\"). Comments on deleted posts might also be removed or marked as such.\n-   Comments can also be deleted (\"(삭제된 댓글입니다)\" / \"(Deleted Comment)\").\n-   Posts or comments may be deleted due to guideline violations (revealing identities/secrets, classified info, bullying, academic dishonesty, spam) or user self-deletion. Strong opinions, arguments, and slang are generally tolerated within the student context unless crossing specific lines defined by moderators (likely senior students/staff).\n-   **The community feels alive with intermittent posts/comments from various NPC students reflecting their online personas.**\n{{/if}}",
   "mode": "normal",
   "insertorder": 1999,
   "alwaysActive": true,
   "secondkey": "",
   "selective": false,
   "useRegex": false,
   "bookVersion": 2
  }
 ],
 "backgroundEmbedding": "<style>\n  /* === AcaTime 게시판 스타일 (에브리타임 테마 - 적색 기반) === */\n  \n  /* --- 기본 설정 & 라이트 모드 --- */\n  body {\n    font-family: 'Malgun Gothic', '맑은 고딕', dotum, '돋움', sans-serif;\n    font-size: 13px; /* 기본 폰트 크기 살짝 키움 */\n    color: #1a1a1a; /* 기본 텍스트 색상 (진한 회색) */\n    background-color: #f8f8f8; /* 에브리타임과 유사한 연한 회색 배경 */\n    margin: 0;\n    padding: 0;\n    line-height: 1.6; /* 기본 줄 간격 */\n  }\n  \n  /* --- 게시판 컨테이너 --- */\n  .acatime-container {\n    max-width: 800px; /* 에브리타임과 유사한 너비 */\n    width: 100%;\n    margin: 15px auto; /* 상하 여백 추가 */\n    background-color: #fff; /* 흰색 배경 */\n    padding: 0; /* 내부 여백 제거 (헤더/목록에서 개별 처리) */\n    border: 1px solid #e3e3e3; /* 연한 회색 테두리 */\n    box-sizing: border-box;\n    border-radius: 5px; /* 약간 둥근 모서리 */\n    box-shadow: 0 1px 3px rgba(0,0,0,0.05); /* 은은한 그림자 */\n  }\n  \n  /* --- 게시판 헤더 --- */\n  .acatime-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center; /* 수직 중앙 정렬 */\n    margin: 0;\n    border-bottom: 1px solid #e3e3e3; /* 헤더 하단 구분선 */\n    padding: 12px 15px; /* 헤더 내부 여백 조정 */\n    background-color: #fff; /* 헤더 배경 흰색 */\n    border-radius: 5px 5px 0 0; /* 위쪽 모서리 둥글게 */\n  }\n  \n  .acatime-header h1 {\n    font-size: 16px; /* 헤더 제목 크기 */\n    color: #c62917; /* 에브리타임 메인 적색 */\n    margin: 0;\n    font-weight: bold;\n    line-height: 1; /* 줄 간격 조정 */\n  }\n  \n  .acatime-top-links {\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    flex-shrink: 1;\n    margin-left: 10px;\n  }\n  \n  .acatime-top-links a {\n    font-size: 12px; /* 링크 폰트 크기 */\n    color: #a6a6a6; /* 링크 색상 (연한 회색) */\n    text-decoration: none;\n    margin-left: 10px; /* 링크 간 간격 */\n    cursor: default;\n  }\n  \n  .acatime-top-links a:hover {\n    text-decoration: none;\n    color: #c62917; /* 호버 시 적색 */\n  }\n  \n  /* --- 게시판 옵션 (탭 메뉴, 액션 버튼) - 에브리타임 스타일에서는 제거됨 --- */\n  .acatime-options {\n    display: none; /* 에브리타임 디자인에는 탭/액션 영역이 목록 상단에 없음 */\n  }\n  \n  /* --- 게시글 목록 --- */\n  .at-post-list-container {\n    border-top: none; /* 목록 상단 강조선 제거 */\n    border-bottom: none; /* 컨테이너 테두리로 대체 */\n    background-color: #fff; /* 목록 배경 흰색 */\n    border-radius: 0 0 5px 5px; /* 아래쪽 모서리 둥글게 */\n  }\n  \n  /* 목록 헤더 - 에브리타임 스타일에서는 헤더가 없음 */\n  .at-post-list-header {\n    display: none;\n  }\n  \n  /* 목록 본문 (각 게시글 행) */\n  .at-post-list-body {}\n  \n  .at-post-item {\n    border-bottom: 1px solid #f0f0f0; /* 게시글 구분선 */\n    cursor: pointer; /* 전체 행 클릭 가능 표시 */\n  }\n  \n  .at-post-item:last-child {\n    border-bottom: none; /* 마지막 게시글 하단선 제거 */\n    border-radius: 0 0 5px 5px; /* 아래쪽 모서리 둥글게 */\n  }\n  \n  .at-post-row {\n    display: block; /* 에브리타임처럼 세로 정렬을 위해 block으로 변경 */\n    padding: 12px 15px; /* 게시글 행 내부 여백 */\n    border-bottom: 1px solid transparent; /* 상세 보기 시 투명 */\n    transition: background-color 0.1s ease; /* 부드러운 호버 효과 */\n  }\n  /* 호버 효과는 JS로 클래스 추가/제거하여 구현하는 것이 일반적이나, CSS로 간단히 구현 */\n  .at-post-item:hover .at-post-row {\n    background-color: #fafafa; /* 마우스 오버 시 연한 회색 배경 */\n  }\n  \n  /* --- 게시글 목록의 각 요소 스타일 (에브리타임 스타일) --- */\n  .at-post-cell { /* 더 이상 flex 레이아웃이 아니므로 기본 스타일 초기화 */\n    padding: 0;\n    text-align: left;\n    overflow: visible;\n    white-space: normal;\n    line-height: inherit;\n  }\n  \n  /* 제목 */\n  .at-post-cell.at-col-title {\n    display: block; /* 한 줄 전체 차지 */\n    margin-bottom: 4px;\n  }\n  .at-post-title-label {\n    color: #1a1a1a; /* 제목 색상 */\n    text-decoration: none;\n    cursor: pointer;\n    display: inline; /* span과 자연스럽게 이어지도록 */\n    font-size: 14px; /* 제목 폰트 크기 */\n    font-weight: bold; /* 제목 굵게 */\n    line-height: 1.4;\n  }\n  .at-comment-count {\n    color: #c62917; /* 댓글 수 적색 */\n    font-size: 13px; /* 제목과 유사한 크기 */\n    font-weight: bold;\n    margin-left: 5px;\n    vertical-align: baseline;\n  }\n  \n  /* 본문 미리보기 (에브리타임 스타일) */\n  .at-post-preview { /* Lua 스크립트에서 본문 일부를 가져와 이 클래스 내에 넣어야 함 */\n    font-size: 13px;\n    color: #555;\n    margin-bottom: 8px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    display: -webkit-box;\n    -webkit-line-clamp: 1; /* 한 줄만 보이도록 */\n    -webkit-box-orient: vertical;\n    line-height: 1.5;\n  }\n  \n  /* 게시글 정보 (작성자, 시간, 조회수, 추천수) */\n  .at-post-meta {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    font-size: 12px;\n    color: #a6a6a6; /* 메타 정보 연한 회색 */\n  }\n  .at-post-meta-left {\n    display: flex;\n    align-items: baseline;\n  }\n  .at-post-meta-right {\n    display: flex;\n    align-items: center;\n  }\n  .at-post-meta-right > div {\n    margin-left: 10px;\n    display: flex;\n    align-items: center;\n  }\n  .at-post-meta-right i { /* 아이콘 스타일 (예: 추천, 조회수) */\n    font-size: 11px;\n    margin-right: 3px;\n    color: #ccc;\n  }\n  .at-post-meta-right .recommend-count { color: #c62917; } /* 추천수 적색 */\n  .at-post-meta-right .view-count { color: #a6a6a6; }\n  \n  /* 작성자 */\n  .at-col-writer { /* flex-basis 제거, 인라인 요소처럼 처리 */\n    font-size: 12px;\n    display: inline-flex;\n    align-items: baseline;\n    margin-right: 8px; /* 시간과의 간격 */\n  }\n  .author-name {\n    color: #666; /* 작성자 이름 회색 */\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    max-width: 100px; /* 닉네임 최대 너비 */\n    display: inline-block;\n    vertical-align: baseline;\n  }\n  .writer-suffix { display: none; } /* 접미사 숨김 (에브리타임 스타일) */\n  \n  /* 학과 아이콘 */\n  .icon-dept {\n    font-size: 9px;\n    font-weight: bold;\n    border: 1px solid;\n    border-radius: 3px;\n    padding: 0px 3px;\n    margin-left: 4px;\n    display: inline-block;\n    line-height: 1.2;\n    vertical-align: baseline;\n    min-width: 10px;\n    text-align: center;\n    background-color: #fff; /* 아이콘 배경 흰색 */\n  }\n  /* 학과별 아이콘 색상 (라이트 모드 - 적색 테마) */\n  .icon-physical { color: #ff7171; border-color: #ff7171; } /* 물리: 밝은 빨강 */\n  .icon-magical { color: #6aafe6; border-color: #6aafe6; } /* 마법: 하늘색 */\n  .icon-special { color: #5dde71; border-color: #5dde71; } /* 특수: 밝은 녹색 */\n  \n  /* 작성일 */\n  .at-col-date {\n    display: inline-block;\n  }\n  \n  /* 컬럼 숨김 (에브리타임 목록에는 번호, 조회, 추천 컬럼이 별도로 없음) */\n  .at-col-num, .at-col-view, .at-col-recommend { display: none; }\n  \n  /* --- 게시글 상세 내용 (토글 방식 유지) --- */\n  .at-post-toggle { display: none; } /* 체크박스 자체는 숨김 */\n  \n  .at-post-content-wrapper {\n    display: none; /* 기본 숨김 */\n    padding: 20px 15px;\n    margin: 0;\n    background-color: #fff;\n    border-top: 1px solid #f0f0f0; /* 내용 구분선 */\n  }\n  \n  .at-post-toggle:checked ~ .at-post-content-wrapper {\n    display: block; /* 체크 시 보임 */\n  }\n  \n  /* 게시글 본문 스타일 */\n  .at-post-full-content span {\n    display: block;\n    line-height: 1.7;\n    font-size: 14px; /* 본문 폰트 크기 */\n    color: #333;\n    font-weight: normal;\n    white-space: pre-wrap;\n    word-wrap: break-word;\n    min-height: 60px; /* 최소 높이 조정 */\n    padding-bottom: 20px;\n  }\n  \n  /* --- 댓글 섹션 --- */\n  .at-comments-section {\n    border-top: 1px solid #f0f0f0;\n    padding: 15px 0 10px 0; /* 댓글 섹션 패딩 조정 */\n    margin-top: 15px; /* 본문과의 간격 */\n  }\n  \n  .at-comments-section h4 {\n    font-size: 13px;\n    color: #333;\n    margin: 0 0 12px 0; /* 제목 하단 마진 증가 */\n    padding-bottom: 0;\n    border-bottom: none;\n    font-weight: bold;\n  }\n  \n  .at-comment-list {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n  }\n  \n  .at-comment-item {\n    padding: 10px 0; /* 댓글 아이템 상하 여백 */\n    border-top: 1px solid #f0f0f0; /* 댓글 구분선 */\n    display: flex;\n    /* align-items: baseline; */ /* baseline 대신 상단 정렬 */\n    align-items: flex-start;\n    line-height: 1.5;\n  }\n  \n  .at-comment-item:first-child {\n    border-top: none;\n  }\n  \n  /* 댓글 작성자 */\n  .at-comment-author-wrapper {\n    flex-basis: auto; /* 너비 자동 조정 */\n    flex-shrink: 0;\n    margin-right: 8px;\n    white-space: nowrap;\n    display: inline-flex;\n    align-items: center; /* 아이콘과 이름 수직 중앙 정렬 */\n  }\n  .at-comment-author-wrapper .author-name {\n    color: #1a1a1a; /* 댓글 작성자 이름 진하게 */\n    font-weight: bold; /* 댓글 작성자 이름 굵게 */\n    max-width: none;\n  }\n  \n  /* 댓글 내용 */\n  .at-comment-content-wrapper {\n    flex-grow: 1;\n    min-width: 0;\n  }\n  .at-comment-text {\n    word-wrap: break-word;\n    white-space: pre-wrap;\n    font-size: 13px;\n    color: #333;\n    font-weight: normal;\n  }\n  \n  /* 게시글 없음 메시지 */\n  .at-post-list-body div[style*='text-align: center'] {\n    color: #a6a6a6;\n    padding: 30px 15px; /* 여백 추가 */\n  }\n  \n  /* === 다크 모드 (에브리타임 테마 - 조정 필요) === */\n  /* 다크모드는 에브리타임 공식 지원이 없으므로, 가독성 위주로 재구성 */\n  @media (prefers-color-scheme: dark) {\n    body { color: #e0e0e0; background-color: #121212; } /* 더 어두운 배경 */\n  \n    /* 컨테이너 */\n    .acatime-container { background-color: #1e1e1e; border: 1px solid #333; box-shadow: 0 1px 3px rgba(0,0,0,0.3); }\n  \n    /* 헤더 */\n    .acatime-header { border-bottom-color: #333; background-color: #1e1e1e;}\n    .acatime-header h1 { color: #ff5252; } /* 다크모드 적색 강조 */\n    .acatime-top-links a { color: #888; }\n    .acatime-top-links a:hover { color: #ff5252; }\n  \n    /* 게시글 목록 */\n    .at-post-list-container { background-color: #1e1e1e; border-radius: 5px;} /* 컨테이너가 둥글므로 제거 */\n    .at-post-item { border-bottom-color: #333; }\n    .at-post-item:last-child { border-bottom: none; }\n    .at-post-item:hover .at-post-row { background-color: #2a2a2a; }\n  \n    /* 목록 요소 색상 */\n    .at-post-title-label { color: #e0e0e0; }\n    .at-comment-count { color: #ff5252; }\n    .at-post-preview { color: #bbb; }\n    .at-post-meta { color: #888; }\n    .at-col-writer .author-name { color: #ccc; }\n    .at-post-meta-right .recommend-count { color: #ff5252; }\n    .at-post-meta-right .view-count { color: #888; }\n    .at-post-meta-right i { color: #666; }\n  \n    /* 학과 아이콘 (다크) */\n    .icon-dept { background-color: #1e1e1e; }\n    .icon-physical { color: #ff8a80; border-color: #ff8a80; } /* 다크 물리 */\n    .icon-magical { color: #80cbc4; border-color: #80cbc4; } /* 다크 마법 (민트 계열) */\n    .icon-special { color: #a5d6a7; border-color: #a5d6a7; } /* 다크 특수 */\n  \n    /* 게시글 상세 */\n    .at-post-content-wrapper { background-color: #1e1e1e; border-top-color: #333; }\n    .at-post-full-content span { color: #e0e0e0; }\n  \n    /* 댓글 */\n    .at-comments-section { border-top-color: #333; }\n    .at-comments-section h4 { color: #e0e0e0; }\n    .at-comment-item { border-top-color: #333; }\n    .at-comment-author-wrapper .author-name { color: #e0e0e0; }\n    .at-comment-text { color: #e0e0e0; }\n  \n    /* 게시글 없음 메시지 */\n    .at-post-list-body div[style*='text-align: center'] { color: #888; }\n  }\n</style>",
 "customModuleToggle": "=🏫 아카타임! 모듈=group\nACATIME=🏫 아카타임\n==groupEnd"
}

🔗 이것과 비슷한 인기 자산

⚔️솔렌&글레차 (1)
솔렌&글레차 — Solenne & Gletscha possesses two intelligent swords named "Solenne" and "Gletscha". They freely interact with i
👍60 ·
-🔗 空条 承太郎(TS)
(3부) 쿠죠 죠타로
👍47 ·
👩_❤️_👩앨리스
made by yurrrl
👍46 ·
♦️Hoshino Ruby
호시노 루비 모듈
👍44 ·
🐞 W2 · /city/asset