codebuff-agent 2.1.74__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- codebuff_agent-2.1.74.data/data/etc/jupyter/jupyter_server_config.d/codebuff_agent.json +7 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/package.json +157 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/104.2b8f20f9d1ac2c9db01b.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/150.39fa98117cc8ca590465.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/166.386ff9b2c37ac865fdee.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/216.25cf81131bf7274dabf4.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/353.581bd1cb00746399b62e.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/367.575f9621b63c9a641aa9.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/421.11dac223a2c2da1b09f5.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/432.8513b4c6cc1d1232d165.js +2 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/432.8513b4c6cc1d1232d165.js.LICENSE.txt +19 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/439.ba5b5ef70ec6de214b8c.js +2 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/439.ba5b5ef70ec6de214b8c.js.LICENSE.txt +8 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/481.cc2dec9fa869d66f1407.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/487.0796e931d6e651482c14.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/49.d326f554b6f9ccde6580.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/541.26897ea32845659e36be.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/579.e569d3edd8391fd8fbb3.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/58.eb7cc679f7535cc8a2f1.js +2 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/58.eb7cc679f7535cc8a2f1.js.LICENSE.txt +8 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/666.d9bfdb23f98489d0a188.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/677.d266c39dbed33bc388b3.js +2 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/677.d266c39dbed33bc388b3.js.LICENSE.txt +8 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/68.26b6f59c8454adb17f20.js +204 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/694.4ac443814260057e68f7.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/791.61affb8d3480d3d60e0d.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/848.4d2db09cfbb09374b299.js +2 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/848.4d2db09cfbb09374b299.js.LICENSE.txt +9 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/868.5cfe7e1a348ec5af1b8c.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/97.ea559a5b8a9a09f17c6b.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/remoteEntry.5292fc9c6df7e7920cc8.js +1 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/style.js +4 -0
- codebuff_agent-2.1.74.data/data/share/jupyter/labextensions/codebuff/static/third-party-licenses.json +724 -0
- codebuff_agent-2.1.74.dist-info/METADATA +142 -0
- codebuff_agent-2.1.74.dist-info/RECORD +217 -0
- codebuff_agent-2.1.74.dist-info/WHEEL +4 -0
- codebuff_agent-2.1.74.dist-info/licenses/LICENSE +21 -0
- codebuff_core/__init__.py +153 -0
- codebuff_core/codebuff_config_defaults.json +64 -0
- codebuff_core/core/__init__.py +35 -0
- codebuff_core/core/code_validator.py +1238 -0
- codebuff_core/core/error_classifier.py +579 -0
- codebuff_core/core/exceptions.py +49 -0
- codebuff_core/data/tiktoken_cache/9b5ad71b2ce5302211f9c61530b329a4922fc6a4 +100256 -0
- codebuff_core/directory_policy.py +32 -0
- codebuff_core/factory.py +155 -0
- codebuff_core/interfaces.py +197 -0
- codebuff_core/knowledge/__init__.py +31 -0
- codebuff_core/knowledge/chunking.py +375 -0
- codebuff_core/knowledge/loader.py +339 -0
- codebuff_core/knowledge/watchdog_service.py +354 -0
- codebuff_core/legacy_paths.py +69 -0
- codebuff_core/llm/__init__.py +13 -0
- codebuff_core/llm/service.py +407 -0
- codebuff_core/managers/__init__.py +22 -0
- codebuff_core/managers/config_manager.py +690 -0
- codebuff_core/managers/remote_config.py +673 -0
- codebuff_core/managers/remote_skills.py +539 -0
- codebuff_core/managers/session_manager.py +255 -0
- codebuff_core/middleware/__init__.py +3 -0
- codebuff_core/middleware/error_recovery.py +394 -0
- codebuff_core/middleware/logging_utils.py +33 -0
- codebuff_core/models/__init__.py +111 -0
- codebuff_core/models/agent.py +306 -0
- codebuff_core/models/chat.py +57 -0
- codebuff_core/models/common.py +82 -0
- codebuff_core/models/rag.py +300 -0
- codebuff_core/platform_rules.py +127 -0
- codebuff_core/prompts/__init__.py +44 -0
- codebuff_core/prompts/auto_agent_prompts.py +1278 -0
- codebuff_core/services/__init__.py +30 -0
- codebuff_core/services/agent_service.py +345 -0
- codebuff_core/services/analytics_aggregate.py +837 -0
- codebuff_core/services/chat_service.py +898 -0
- codebuff_core/services/context_condenser.py +306 -0
- codebuff_core/services/pii_guardrail.py +393 -0
- codebuff_core/services/rag_chat_agent.py +2993 -0
- codebuff_core/services/rag_collections.py +2740 -0
- codebuff_core/services/rag_manager.py +890 -0
- codebuff_core/services/rag_service.py +145 -0
- codebuff_core/services/retriever.py +260 -0
- codebuff_core/services/vllm_embedding_service.py +290 -0
- codebuff_core/tests/__init__.py +1 -0
- codebuff_core/tests/conftest.py +81 -0
- codebuff_core/tests/test_error_recovery.py +647 -0
- codebuff_core/tests/test_factory.py +135 -0
- codebuff_core/tests/test_services.py +150 -0
- jupyter_ext/__init__.py +266 -0
- jupyter_ext/_version.py +4 -0
- jupyter_ext/agent/__init__.py +49 -0
- jupyter_ext/agent/agent_factory.py +2270 -0
- jupyter_ext/agent/ast_tools.py +451 -0
- jupyter_ext/agent/autofix_middleware.py +481 -0
- jupyter_ext/agent/background_procs.py +372 -0
- jupyter_ext/agent/code_history_middleware.py +211 -0
- jupyter_ext/agent/codex_autofix.py +160 -0
- jupyter_ext/agent/codex_bridge.py +3339 -0
- jupyter_ext/agent/codex_hooks.py +320 -0
- jupyter_ext/agent/codex_slash.py +685 -0
- jupyter_ext/agent/codex_threads.py +114 -0
- jupyter_ext/agent/content_injection.py +377 -0
- jupyter_ext/agent/continuation_middleware.py +548 -0
- jupyter_ext/agent/custom_skills.py +335 -0
- jupyter_ext/agent/file_diffs.py +99 -0
- jupyter_ext/agent/git_history.py +188 -0
- jupyter_ext/agent/guardrail_middleware.py +421 -0
- jupyter_ext/agent/json_repair_utils.py +54 -0
- jupyter_ext/agent/langchain_tools.py +2673 -0
- jupyter_ext/agent/mermaid_fixer.py +289 -0
- jupyter_ext/agent/mermaid_middleware.py +135 -0
- jupyter_ext/agent/middleware.py +359 -0
- jupyter_ext/agent/middleware_prompts.py +53 -0
- jupyter_ext/agent/observability.py +334 -0
- jupyter_ext/agent/patch_tool_calls.py +57 -0
- jupyter_ext/agent/prompts.py +112 -0
- jupyter_ext/agent/skill_middleware.py +257 -0
- jupyter_ext/agent/skills/airflow_dag_development.md +36 -0
- jupyter_ext/agent/skills/anomaly_detection.md +12 -0
- jupyter_ext/agent/skills/athena_sql.md +156 -0
- jupyter_ext/agent/skills/bdp_table_search.md +33 -0
- jupyter_ext/agent/skills/bigquery.md +65 -0
- jupyter_ext/agent/skills/bigquery_oracle.md +231 -0
- jupyter_ext/agent/skills/bigquery_tuning.md +307 -0
- jupyter_ext/agent/skills/classification_evaluation.md +11 -0
- jupyter_ext/agent/skills/clustering_analysis.md +12 -0
- jupyter_ext/agent/skills/comprehensive_eda.md +11 -0
- jupyter_ext/agent/skills/data_analysis.md +236 -0
- jupyter_ext/agent/skills/data_cleaning_pipeline.md +12 -0
- jupyter_ext/agent/skills/data_loading.md +158 -0
- jupyter_ext/agent/skills/data_quality_report.md +13 -0
- jupyter_ext/agent/skills/dimensionality_reduction.md +12 -0
- jupyter_ext/agent/skills/emr_script_development.md +17 -0
- jupyter_ext/agent/skills/experiment_tracking.md +13 -0
- jupyter_ext/agent/skills/feature_importance_analysis.md +10 -0
- jupyter_ext/agent/skills/hyperparameter_tuning.md +12 -0
- jupyter_ext/agent/skills/hypothesis_testing.md +12 -0
- jupyter_ext/agent/skills/imbalanced_data_handling.md +12 -0
- jupyter_ext/agent/skills/inference.md +392 -0
- jupyter_ext/agent/skills/lambda_function_development.md +19 -0
- jupyter_ext/agent/skills/model_comparison.md +11 -0
- jupyter_ext/agent/skills/model_explainability.md +12 -0
- jupyter_ext/agent/skills/model_training.md +318 -0
- jupyter_ext/agent/skills/pyspark.md +352 -0
- jupyter_ext/agent/skills/python_code_quality.md +35 -0
- jupyter_ext/agent/skills/regression_evaluation.md +12 -0
- jupyter_ext/agent/skills/spring_java_development.md +35 -0
- jupyter_ext/agent/skills/text_preprocessing.md +12 -0
- jupyter_ext/agent/skills/time_series_analysis.md +13 -0
- jupyter_ext/agent/skills/unit_testing.md +203 -0
- jupyter_ext/agent/todo_prompts.py +57 -0
- jupyter_ext/agent/tool_report.py +45 -0
- jupyter_ext/analytics_ingest.py +599 -0
- jupyter_ext/etc/jupyter/jupyter_server_config.d/codebuff_agent.json +7 -0
- jupyter_ext/handlers/__init__.py +8 -0
- jupyter_ext/handlers/analytics_handler.py +170 -0
- jupyter_ext/handlers/benchmark_handler.py +794 -0
- jupyter_ext/handlers/eda_benchmark_handler.py +1328 -0
- jupyter_ext/handlers/rag_admin_handler.py +689 -0
- jupyter_ext/handlers/websocket.py +497 -0
- jupyter_ext/http_handlers.py +8744 -0
- jupyter_ext/idle_monitor.py +346 -0
- jupyter_ext/labextension/package.json +157 -0
- jupyter_ext/labextension/static/104.2b8f20f9d1ac2c9db01b.js +1 -0
- jupyter_ext/labextension/static/150.39fa98117cc8ca590465.js +1 -0
- jupyter_ext/labextension/static/166.386ff9b2c37ac865fdee.js +1 -0
- jupyter_ext/labextension/static/216.25cf81131bf7274dabf4.js +1 -0
- jupyter_ext/labextension/static/353.581bd1cb00746399b62e.js +1 -0
- jupyter_ext/labextension/static/367.575f9621b63c9a641aa9.js +1 -0
- jupyter_ext/labextension/static/421.11dac223a2c2da1b09f5.js +1 -0
- jupyter_ext/labextension/static/432.8513b4c6cc1d1232d165.js +2 -0
- jupyter_ext/labextension/static/432.8513b4c6cc1d1232d165.js.LICENSE.txt +19 -0
- jupyter_ext/labextension/static/439.ba5b5ef70ec6de214b8c.js +2 -0
- jupyter_ext/labextension/static/439.ba5b5ef70ec6de214b8c.js.LICENSE.txt +8 -0
- jupyter_ext/labextension/static/481.cc2dec9fa869d66f1407.js +1 -0
- jupyter_ext/labextension/static/487.0796e931d6e651482c14.js +1 -0
- jupyter_ext/labextension/static/49.d326f554b6f9ccde6580.js +1 -0
- jupyter_ext/labextension/static/541.26897ea32845659e36be.js +1 -0
- jupyter_ext/labextension/static/579.e569d3edd8391fd8fbb3.js +1 -0
- jupyter_ext/labextension/static/58.eb7cc679f7535cc8a2f1.js +2 -0
- jupyter_ext/labextension/static/58.eb7cc679f7535cc8a2f1.js.LICENSE.txt +8 -0
- jupyter_ext/labextension/static/666.d9bfdb23f98489d0a188.js +1 -0
- jupyter_ext/labextension/static/677.d266c39dbed33bc388b3.js +2 -0
- jupyter_ext/labextension/static/677.d266c39dbed33bc388b3.js.LICENSE.txt +8 -0
- jupyter_ext/labextension/static/68.26b6f59c8454adb17f20.js +204 -0
- jupyter_ext/labextension/static/694.4ac443814260057e68f7.js +1 -0
- jupyter_ext/labextension/static/791.61affb8d3480d3d60e0d.js +1 -0
- jupyter_ext/labextension/static/848.4d2db09cfbb09374b299.js +2 -0
- jupyter_ext/labextension/static/848.4d2db09cfbb09374b299.js.LICENSE.txt +9 -0
- jupyter_ext/labextension/static/868.5cfe7e1a348ec5af1b8c.js +1 -0
- jupyter_ext/labextension/static/97.ea559a5b8a9a09f17c6b.js +1 -0
- jupyter_ext/labextension/static/remoteEntry.5292fc9c6df7e7920cc8.js +1 -0
- jupyter_ext/labextension/static/style.js +4 -0
- jupyter_ext/labextension/static/third-party-licenses.json +724 -0
- jupyter_ext/log_paths.py +113 -0
- jupyter_ext/resource_usage.py +519 -0
- jupyter_ext/secrets_bootstrap.py +116 -0
- jupyter_ext/team_access.py +105 -0
- jupyter_ext/tests/__init__.py +1 -0
- jupyter_ext/tests/test_context.py +234 -0
- jupyter_ext/tests/test_factory.py +563 -0
- jupyter_ext/tests/test_file_finder.py +139 -0
- jupyter_ext/tests/test_handlers.py +58 -0
- jupyter_ext/tests/test_mcp_selftest.py +204 -0
- jupyter_ext/tests/test_mermaid_fixer.py +272 -0
- jupyter_ext/tests/test_resource_tiers.py +298 -0
- jupyter_ext/tools/__init__.py +15 -0
- jupyter_ext/tools/base.py +90 -0
- jupyter_ext/tools/context.py +268 -0
- jupyter_ext/tools/dir_complete.py +86 -0
- jupyter_ext/tools/file_finder.py +303 -0
- jupyter_ext/tools/file_tools.py +244 -0
- jupyter_ext/tools/jupyter_tools.py +296 -0
- jupyter_ext/tools/registry.py +159 -0
- jupyter_ext/tools/search_tools.py +230 -0
- jupyter_ext/tools/security_tools.py +657 -0
- jupyter_ext/tools/shell_tools.py +109 -0
- jupyter_ext/tools/user_tools.py +132 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkcodebuff=self.webpackChunkcodebuff||[]).push([[579],{6579(n,o,e){var r=e.cw(function(n,o){var e=[];function r(n){for(var o=-1,r=0;r<e.length;r++)if(e[r].identifier===n){o=r;break}return o}function t(n,o){for(var t={},i=[],p=0;p<n.length;p++){var l=n[p],d=o.base?l[0]+o.base:l[0],c=t[d]||0,s="".concat(d," ").concat(c);t[d]=c+1;var g=r(s),b={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==g)e[g].references++,e[g].updater(b);else{var f=a(b,o);o.byIndex=p,e.splice(p,0,{identifier:s,updater:f,references:1})}i.push(s)}return i}function a(n,o){var e=o.domAPI(o);return e.update(n),function(o){if(o){if(o.css===n.css&&o.media===n.media&&o.sourceMap===n.sourceMap&&o.supports===n.supports&&o.layer===n.layer)return;e.update(n=o)}else e.remove()}}n.exports=function(n,o){var a=t(n=n||[],o=o||{});return function(n){n=n||[];for(var i=0;i<a.length;i++){var p=r(a[i]);e[p].references--}for(var l=t(n,o),d=0;d<a.length;d++){var c=r(a[d]);0===e[c].references&&(e[c].updater(),e.splice(c,1))}a=l}}}),t=e.cw(function(n,o){var e={};n.exports=function(n,o){var r=function(n){if(void 0===e[n]){var o=document.querySelector(n);if(window.HTMLIFrameElement&&o instanceof window.HTMLIFrameElement)try{o=o.contentDocument.head}catch(n){o=null}e[n]=o}return e[n]}(n);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(o)}}),a=e.cw(function(n,o){n.exports=function(n){var o=document.createElement("style");return n.setAttributes(o,n.attributes),n.insert(o,n.options),o}}),i=e.cw(function(n,o){n.exports=function(n){var o=e.nc;o&&n.setAttribute("nonce",o)}}),p=e.cw(function(n,o){n.exports=function(n){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var o=n.insertStyleElement(n);return{update:function(e){!function(n,o,e){var r="";e.supports&&(r+="@supports (".concat(e.supports,") {")),e.media&&(r+="@media ".concat(e.media," {"));var t=void 0!==e.layer;t&&(r+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),r+=e.css,t&&(r+="}"),e.media&&(r+="}"),e.supports&&(r+="}");var a=e.sourceMap;a&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),o.styleTagTransform(r,n,o.options)}(o,n,e)},remove:function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(o)}}}}),l=e.cw(function(n,o){n.exports=function(n,o){if(o.styleSheet)o.styleSheet.cssText=n;else{for(;o.firstChild;)o.removeChild(o.firstChild);o.appendChild(document.createTextNode(n))}}});r(),p(),t(),i(),a(),l();var d=e(4040),c={};c.styleTagTransform=function n(){return n.c||(n.c=e.n(l()))}()(),c.setAttributes=function n(){return n.c||(n.c=e.n(i()))}()(),c.insert=function n(){return n.c||(n.c=e.n(t()))}()().bind(null,"head"),c.domAPI=function n(){return n.c||(n.c=e.n(p()))}()(),c.insertStyleElement=function n(){return n.c||(n.c=e.n(a()))}()(),function n(){return n.c||(n.c=e.n(r()))}()()(d.A,c),d.A&&d.A.locals&&d.A.locals},9922(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a),p=e(4417),l=e.n(p),d=new URL(e(9862),e.b),c=new URL(e(5549),e.b),s=new URL(e(854),e.b),g=new URL(e(2368),e.b),b=new URL(e(8378),e.b),f=new URL(e(8380),e.b),x=new URL(e(7086),e.b),u=new URL(e(7063),e.b),m=new URL(e(5129),e.b),j=new URL(e(2921),e.b),h=new URL(e(8660),e.b),v=new URL(e(5043),e.b),y=new URL(e(668),e.b),k=i()(t()),w=l()(d),z=l()(c),C=l()(s),M=l()(g),L=l()(b),S=l()(f),R=l()(x),T=l()(u),H=l()(m),I=l()(j),A=l()(h),D=l()(v),E=l()(y);k.push([n.id,`/**\n * Agent Panel Styling - Sidebar Chat Interface\n */\n\n/* Panel Container */\n.jp-agent-widget {\n display: flex;\n flex-direction: column;\n min-width: 600px;\n height: 100%;\n background: var(--jp-layout-color1);\n}\n\n.jp-agent-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n min-height: 0;\n overflow-x: hidden;\n}\n\n/* Header */\n.jp-agent-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 2px 16px;\n border-bottom: 1px solid var(--jp-border-color2);\n background: var(--jp-layout-color2);\n}\n\n.jp-agent-header h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.jp-agent-logo {\n height: 24px;\n width: auto;\n}\n\n/* Header Logo (SVG inline) */\n.jp-agent-header-logo {\n height: 20px;\n width: auto;\n display: flex;\n align-items: center;\n}\n\n.jp-agent-header-logo svg {\n height: 20px;\n width: auto;\n}\n\n.jp-agent-header-buttons {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.jp-agent-settings-button-icon {\n padding: 4px 8px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n background: transparent;\n color: var(--jp-ui-font-color2);\n font-size: 16px;\n cursor: pointer;\n transition: all 0.2s ease;\n line-height: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.jp-agent-settings-button-icon svg {\n display: block;\n}\n\n/* 연결 상태 오류 표시 (이슈 #183 PR-B) */\n.jp-agent-settings-button-icon {\n position: relative;\n}\n\n.jp-agent-settings-warn-dot {\n position: absolute;\n top: 1px;\n right: 1px;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: #f59e0b;\n}\n\n.jp-agent-settings-button-icon:hover {\n background: var(--jp-layout-color3);\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-clear-button,\n.jp-agent-theme-button {\n padding: 4px 8px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n background: transparent;\n color: var(--jp-ui-font-color2);\n font-size: 16px;\n cursor: pointer;\n transition: all 0.2s ease;\n line-height: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.jp-agent-clear-button svg,\n.jp-agent-theme-button svg {\n display: block;\n}\n\n.jp-agent-clear-button:hover,\n.jp-agent-theme-button:hover {\n background: var(--jp-layout-color3);\n color: var(--jp-ui-font-color1);\n}\n\n/* 개인정보 입력 금지 안내 — 예전 모달을 대신하는 고정 줄 (이슈 #255) */\n.jp-agent-privacy-notice {\n flex-shrink: 0;\n padding: 6px 16px;\n font-size: 12px;\n line-height: 1.5;\n text-align: center;\n color: var(--jp-ui-font-color2);\n background: var(--jp-layout-color2);\n border-bottom: 1px solid var(--jp-border-color2);\n}\n\n/* Messages Container */\n.jp-agent-messages {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-height: 0;\n /* Prevent CSS smooth scroll from conflicting with JS scroll */\n scroll-behavior: auto;\n /* Help browser stabilize scroll position during streaming content updates */\n overflow-anchor: auto;\n /* Improve scroll performance */\n will-change: scroll-position;\n contain: layout style paint;\n /* Prevent momentum scrolling bounce on iOS */\n overscroll-behavior: contain;\n}\n\n/* Empty State */\n.jp-agent-empty-state {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 16px 20px;\n color: #2d2d2d;\n}\n\n.jp-agent-empty-state p {\n margin: 8px 0;\n font-size: 14px;\n color: #4a4a4a;\n}\n\n/* Guide: 중앙 영역 (살짝 위로) */\n.jp-agent-guide-center-area {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding-top: 50px;\n}\n\n.jp-agent-guide-title {\n font-size: 18px;\n font-weight: 600;\n color: #222;\n margin-bottom: 20px;\n}\n\n.jp-agent-guide-tips {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 12px 0;\n width: 85%;\n}\n\n.jp-agent-guide-tip {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n font-size: 12.5px;\n color: #999;\n text-align: center;\n line-height: 1.6;\n}\n\n.jp-agent-guide-icon {\n flex-shrink: 0;\n font-size: 15px;\n margin-top: 1px;\n}\n\n.jp-agent-guide-tip code {\n background: var(--jp-layout-color2, #eee);\n padding: 1px 6px;\n border-radius: 3px;\n font-family: 'Menlo', 'Monaco', monospace;\n font-size: 11px;\n}\n\n/* Dark theme */\nbody[data-jp-theme-light="false"] .jp-agent-guide-title {\n color: #e0e0e0;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-guide-tips {\n background: var(--jp-layout-color2);\n border-color: var(--jp-border-color1);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-guide-tip {\n color: #aaa;\n}\n\n.jp-agent-suggestions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 16px;\n width: 100%;\n max-width: 240px;\n}\n\n.jp-agent-suggestions button {\n padding: 8px 12px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n background: var(--jp-layout-color2);\n color: var(--jp-ui-font-color1);\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n text-align: left;\n}\n\n.jp-agent-suggestions button:hover {\n background: var(--jp-layout-color3);\n border-color: var(--jp-brand-color1);\n}\n\n/* Message */\n.jp-agent-message {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 12px;\n border-radius: 8px;\n}\n\n.jp-agent-message-user {\n align-self: flex-end;\n background: var(--jp-brand-color1);\n color: white;\n}\n\n.jp-agent-message-assistant {\n align-self: flex-start;\n background: var(--jp-layout-color2);\n border: 1px solid var(--jp-border-color2);\n}\n\n.jp-agent-message-assistant-inline {\n align-self: flex-start;\n background: transparent;\n border: none;\n padding: 4px 12px 8px 12px;\n max-width: 95%;\n}\n\n.jp-agent-message-assistant-inline .jp-agent-message-content {\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-message-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 4px;\n}\n\n.jp-agent-message-role {\n font-size: 11px;\n font-weight: 600;\n opacity: 0.8;\n}\n\n.jp-agent-message-time {\n font-size: 10px;\n opacity: 0.6;\n}\n\n/* PII 자동 마스킹 — 본문 아래 center-aligned indicator */\n.jp-pii-mask-strip {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n margin-top: 10px;\n font-size: 10.5px;\n font-weight: 400;\n line-height: 1;\n color: var(--jp-ui-font-color2, rgba(0, 0, 0, 0.54));\n opacity: 0.75;\n user-select: none;\n}\n\n.jp-pii-mask-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 13px;\n height: 13px;\n font-size: 11px;\n font-style: normal;\n font-weight: 600;\n color: #b45309;\n opacity: 0.9;\n}\n\n.jp-pii-mask-text {\n letter-spacing: 0.02em;\n white-space: nowrap;\n}\n\n.jp-agent-message-content {\n font-size: 13px;\n line-height: 1.0;\n white-space: pre-wrap;\n word-wrap: break-word;\n overflow: hidden;\n overflow-x: auto;\n max-width: 100%;\n}\n\n.jp-agent-message-content.jp-agent-message-content-shell {\n font-family: var(--jp-code-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);\n font-size: 12px;\n line-height: 1.4;\n}\n\n.jp-agent-message-user .jp-agent-message-content {\n color: white;\n}\n\n/* Loading Animation */\n.jp-agent-loading {\n display: flex;\n gap: 4px;\n padding: 4px 0;\n}\n\n.jp-agent-loading-dot {\n animation: jp-agent-loading-bounce 1.4s infinite ease-in-out both;\n font-size: 20px;\n line-height: 1;\n}\n\n.jp-agent-loading-dot:nth-child(1) {\n animation-delay: -0.32s;\n}\n\n.jp-agent-loading-dot:nth-child(2) {\n animation-delay: -0.16s;\n}\n\n@keyframes jp-agent-loading-bounce {\n 0%, 80%, 100% {\n opacity: 0.3;\n transform: translateY(0);\n }\n 40% {\n opacity: 1;\n transform: translateY(-4px);\n }\n}\n\n/* Streaming Cursor Animation - DISABLED */\n.jp-agent-message-content.streaming::after {\n content: none;\n}\n\n@keyframes jp-agent-cursor-blink {\n 0%, 50% {\n opacity: 1;\n }\n 51%, 100% {\n opacity: 0;\n }\n}\n\n/* Input Container */\n.jp-agent-input-container {\n padding: 6px 8px;\n border-top: 1px solid var(--jp-border-color2);\n background: var(--jp-layout-color2);\n}\n\n.jp-agent-input-wrapper {\n display: flex;\n gap: 8px;\n align-items: flex-end;\n}\n\n.jp-agent-input {\n flex: 1;\n height: 38px;\n min-height: 38px;\n max-height: 150px;\n padding: 10px 12px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n font-family: var(--jp-ui-font-family);\n font-size: 13px;\n resize: vertical;\n outline: none;\n transition: border-color 0.2s ease;\n box-sizing: border-box;\n}\n\n.jp-agent-input:focus {\n border-color: var(--jp-brand-color1);\n box-shadow: 0 0 0 1px var(--jp-brand-color1);\n}\n\n.jp-agent-input:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.jp-agent-input::placeholder {\n color: var(--jp-ui-font-color3);\n}\n\n.jp-agent-send-button {\n padding: 10px 24px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.jp-agent-send-button:hover:not(:disabled) {\n background: var(--jp-layout-color3);\n border-color: var(--jp-border-color1);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n.jp-agent-send-button:active:not(:disabled) {\n background: var(--jp-layout-color3);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.jp-agent-send-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n box-shadow: none;\n}\n\n/* Knowledge 검색 체크박스 토글 */\n.jp-agent-kb-toggle-wrap {\n position: relative;\n display: flex;\n align-items: flex-end;\n}\n\n/* 모드 선택 셀렉트 (Chat / RAG / Orbit) */\n.jp-agent-mode-select {\n height: 38px;\n padding: 0 8px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n background: linear-gradient(135deg, var(--jp-layout-color1) 0%, var(--jp-layout-color2) 100%);\n color: var(--jp-ui-font-color1);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.18s ease;\n box-sizing: border-box;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0 1px 0 rgba(255, 255, 255, 0.4);\n}\n\n.jp-agent-mode-select:hover {\n border-color: #8b5cf6;\n color: #8b5cf6;\n}\n\n.jp-agent-mode-select:focus {\n outline: none;\n border-color: #7c3aed;\n box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.2);\n}\n\n/* ── 모드 선택 커스텀 드롭다운 (Chat / BDP Agent / providers) ── */\n.jp-agent-mode-dd-trigger {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n height: 38px;\n min-width: 100px;\n padding: 0 10px 0 11px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 9px;\n background: linear-gradient(135deg, var(--jp-layout-color1) 0%, var(--jp-layout-color2) 100%);\n color: var(--jp-ui-font-color1);\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n white-space: nowrap;\n box-sizing: border-box;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.06), inset 0 1px 0 rgba(255, 255, 255, 0.35);\n transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.08s ease;\n}\n.jp-agent-mode-dd-trigger:hover {\n border-color: #8b5cf6;\n box-shadow: 0 2px 8px rgba(139, 92, 246, 0.18);\n}\n.jp-agent-mode-dd-trigger.is-open {\n border-color: #7c3aed;\n box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.2);\n}\n.jp-agent-mode-dd-trigger:active { transform: translateY(1px); }\n.jp-agent-mode-dd-ic {\n display: inline-flex;\n flex-shrink: 0;\n color: #8b5cf6;\n}\n.jp-agent-mode-dd-lb {\n line-height: 1;\n text-align: left;\n white-space: nowrap;\n}\n.jp-agent-mode-dd-chev {\n flex-shrink: 0;\n margin-left: 1px;\n opacity: 0.55;\n transition: transform 0.18s ease;\n}\n.jp-agent-mode-dd-trigger.is-open .jp-agent-mode-dd-chev { transform: rotate(180deg); }\n\n.jp-agent-mode-dd-menu {\n position: absolute;\n bottom: calc(100% + 6px);\n left: 0;\n min-width: 250px;\n max-width: 330px;\n padding: 5px;\n background: var(--jp-layout-color1, #fff);\n border: 1px solid var(--jp-border-color1);\n border-radius: 12px;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18);\n z-index: 300;\n display: flex;\n flex-direction: column;\n gap: 1px;\n animation: jp-agent-mode-dd-in 0.14s ease;\n}\n@keyframes jp-agent-mode-dd-in {\n from { opacity: 0; transform: translateY(5px); }\n to { opacity: 1; transform: translateY(0); }\n}\n.jp-agent-mode-dd-item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n width: 100%;\n padding: 8px 10px;\n border: none;\n border-radius: 8px;\n background: transparent;\n color: var(--jp-ui-font-color1);\n text-align: left;\n cursor: pointer;\n transition: background 0.12s ease;\n}\n.jp-agent-mode-dd-item:hover { background: var(--jp-layout-color2); }\n.jp-agent-mode-dd-item.is-active { background: rgba(139, 92, 246, 0.12); }\n.jp-agent-mode-dd-item-ic {\n display: inline-flex;\n flex-shrink: 0;\n margin-top: 1px;\n color: #8b5cf6;\n}\n.jp-agent-mode-dd-item-tx {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n}\n.jp-agent-mode-dd-item-lb { font-size: 12.5px; font-weight: 600; }\n.jp-agent-mode-dd-item-ds {\n font-size: 11px;\n line-height: 1.4;\n color: var(--jp-ui-font-color2);\n white-space: normal;\n}\n.jp-agent-mode-dd-item-ck {\n flex-shrink: 0;\n margin-top: 2px;\n color: #7c3aed;\n}\n\n.jp-agent-kb-toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n height: 38px;\n padding: 0;\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n background: linear-gradient(135deg, var(--jp-layout-color1) 0%, var(--jp-layout-color2) 100%);\n color: var(--jp-ui-font-color2);\n cursor: pointer;\n transition: all 0.18s ease;\n box-sizing: border-box;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), inset 0 1px 0 rgba(255, 255, 255, 0.4);\n --kb-halo-bg: var(--jp-layout-color1, #fff);\n}\n\n.jp-agent-kb-toggle:hover:not(:disabled) {\n border-color: #8b5cf6;\n color: #8b5cf6;\n background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%);\n box-shadow: 0 2px 5px rgba(139, 92, 246, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.5);\n}\n\n.jp-agent-kb-toggle--active {\n background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n border-color: #7c3aed;\n color: #fff;\n box-shadow: 0 2px 6px rgba(139, 92, 246, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.2);\n --kb-halo-bg: #8b5cf6;\n}\n\n.jp-agent-kb-toggle--active:hover:not(:disabled) {\n background: linear-gradient(135deg, #5856eb 0%, #7c3aed 100%);\n border-color: #6d28d9;\n color: #fff;\n box-shadow: 0 3px 8px rgba(139, 92, 246, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.25);\n --kb-halo-bg: #7c3aed;\n}\n\n.jp-agent-kb-toggle:active:not(:disabled) {\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), inset 0 1px 3px rgba(0, 0, 0, 0.1);\n transform: translateY(1px);\n}\n\n.jp-agent-kb-toggle:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* hover 시 표시되는 툴팁 */\n.jp-agent-kb-tooltip {\n position: absolute;\n bottom: calc(100% + 6px);\n left: 0;\n min-width: 340px;\n max-width: 460px;\n width: max-content;\n padding: 10px 12px;\n background: #1e293b;\n color: #f8fafc;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 6px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n opacity: 0;\n visibility: hidden;\n transform: translateY(4px);\n transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;\n pointer-events: none;\n z-index: 100;\n}\n\n.jp-agent-kb-tooltip strong {\n display: block;\n margin-bottom: 4px;\n font-weight: 600;\n}\n\n.jp-agent-kb-tooltip div {\n margin-top: 2px;\n color: #cbd5e1;\n}\n\n.jp-agent-kb-toggle-wrap:hover .jp-agent-kb-tooltip {\n opacity: 1;\n visibility: visible;\n transform: translateY(0);\n}\n\n/* Button container - single button at a time */\n.jp-agent-button-container {\n display: flex;\n align-items: center;\n}\n\n/* Stop button - same size as send button */\n.jp-agent-stop-button {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 10px 24px;\n border: 1px solid var(--jp-border-color1);\n border-radius: 4px;\n background: var(--jp-layout-color1);\n color: var(--jp-error-color1);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n white-space: nowrap;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.jp-agent-stop-button:hover {\n background: var(--jp-error-color1);\n color: white;\n border-color: var(--jp-error-color1);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n.jp-agent-stop-button:active {\n opacity: 0.8;\n}\n\n.jp-agent-stop-button svg {\n flex-shrink: 0;\n}\n\n/* Icon */\n.jp-agent-icon {\n background-image: url(${w});\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n\n/* Scrollbar Styling */\n.jp-agent-messages::-webkit-scrollbar {\n width: 8px;\n}\n\n.jp-agent-messages::-webkit-scrollbar-track {\n background: var(--jp-layout-color1);\n}\n\n.jp-agent-messages::-webkit-scrollbar-thumb {\n background: var(--jp-border-color2);\n border-radius: 4px;\n}\n\n.jp-agent-messages::-webkit-scrollbar-thumb:hover {\n background: var(--jp-border-color1);\n}\n\n/* Dark Theme Adjustments */\nbody[data-jp-theme-light="false"] .jp-agent-message-assistant {\n background: var(--jp-layout-color0);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-input {\n background: var(--jp-layout-color0);\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════ */\n/* Rendermime Markdown Styles (from jupyter-ai) */\n/* Using JupyterLab CSS Variables for theme consistency */\n/* ═══════════════════════════════════════════════════════════════════════════ */\n\n/*\n * Selectors must be nested in \`.jp-ThemedContainer\` to have a higher\n * specificity than selectors in rules provided by JupyterLab.\n * See: https://github.com/jupyterlab/jupyter-ai/issues/1090\n */\n\n.jp-ThemedContainer .jp-ai-rendermime-markdown .jp-RenderedHTMLCommon {\n padding-right: 0;\n}\n\n.jp-ThemedContainer .jp-ai-rendermime-markdown pre {\n background-color: var(--jp-cell-editor-background);\n overflow-x: auto;\n white-space: pre;\n margin: 0;\n padding: 4px 2px 0 6px;\n border: var(--jp-border-width) solid var(--jp-cell-editor-border-color);\n}\n\n.jp-ThemedContainer .jp-ai-rendermime-markdown pre > code {\n background-color: inherit;\n overflow-x: inherit;\n white-space: inherit;\n}\n\n.jp-ThemedContainer .jp-ai-rendermime-markdown mjx-container {\n font-size: 119%;\n}\n\n/* Code Block Styling - Uses JupyterLab CSS Variables */\n.jp-agent-message-content .code-block-container,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block-container,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block-container {\n margin: 0 !important;\n border-radius: 6px !important;\n overflow: hidden !important;\n background: var(--jp-cell-editor-background) !important;\n border: 1px solid var(--jp-border-color2) !important;\n position: relative !important;\n max-width: 100% !important;\n min-width: 0 !important;\n border-left: 3px solid var(--jp-brand-color1) !important;\n}\n\n.jp-agent-message-content .code-block-header,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block-header,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block-header {\n display: flex !important;\n justify-content: space-between !important;\n align-items: center !important;\n padding: 0 12px !important;\n background: var(--jp-layout-color2) !important;\n border-bottom: 1px solid var(--jp-border-color2) !important;\n}\n\n.jp-agent-message-content .code-block-language,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block-language,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block-language {\n font-size: 11px !important;\n font-weight: 600 !important;\n color: var(--jp-brand-color1) !important;\n text-transform: uppercase !important;\n letter-spacing: 0.5px !important;\n font-family: var(--jp-code-font-family) !important;\n}\n\n.jp-agent-message-content .code-block-language.jp-agent-interrupt-path,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block-language.jp-agent-interrupt-path,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block-language.jp-agent-interrupt-path {\n text-transform: none !important;\n letter-spacing: 0 !important;\n font-family: var(--jp-code-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);\n font-weight: 500 !important;\n}\n\n.jp-agent-message-content .code-block-actions {\n display: flex;\n gap: 6px;\n}\n\n/* Toggle Button - Uses JupyterLab CSS Variables */\n.jp-agent-message-content .code-block-toggle {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: var(--jp-layout-color2) !important;\n color: var(--jp-ui-font-color2) !important;\n border: none !important;\n border-radius: 4px !important;\n width: 24px !important;\n height: 24px !important;\n font-size: 11px !important;\n cursor: pointer !important;\n transition: all 0.2s ease !important;\n position: absolute !important;\n right: 8px;\n bottom: 8px;\n z-index: 2;\n opacity: 0.8;\n}\n\n.jp-agent-message-content .code-block-toggle:hover {\n background: var(--jp-layout-color3) !important;\n color: var(--jp-ui-font-color1) !important;\n opacity: 1;\n}\n\n.jp-agent-message-content .code-block-toggle-icon {\n font-size: 12px;\n line-height: 1;\n}\n\n.jp-agent-message-content .code-block-apply {\n background: var(--jp-brand-color1) !important;\n color: var(--jp-ui-inverse-font-color1) !important;\n border: none !important;\n border-radius: 3px !important;\n padding: 4px 10px !important;\n font-size: 11px !important;\n cursor: pointer !important;\n transition: all 0.2s ease !important;\n font-weight: 500 !important;\n}\n\n.jp-agent-message-content .code-block-apply:hover {\n background: var(--jp-brand-color0) !important;\n}\n\n.jp-agent-message-content .code-block-apply:active {\n opacity: 0.9;\n}\n\n.jp-agent-message-content .code-block-apply:disabled {\n opacity: 0.5 !important;\n cursor: not-allowed !important;\n}\n\n/* Copy Button - Uses JupyterLab CSS Variables */\n.jp-agent-message-content .code-block-copy {\n background: var(--jp-layout-color2) !important;\n color: var(--jp-ui-font-color2) !important;\n border: 1px solid var(--jp-border-color2) !important;\n border-radius: 3px !important;\n padding: 4px 10px !important;\n font-size: 11px !important;\n cursor: pointer !important;\n transition: all 0.2s ease !important;\n font-weight: 500 !important;\n}\n\n.jp-agent-message-content .code-block-copy:hover {\n background: var(--jp-layout-color3) !important;\n color: var(--jp-ui-font-color1) !important;\n}\n\n.jp-agent-message-content .code-block-container:not(.is-expanded) .code-block,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block-container:not(.is-expanded) .code-block,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block-container:not(.is-expanded) .code-block {\n max-height: 110px !important;\n overflow-y: hidden !important;\n position: relative !important;\n}\n\n/* Fade gradient - Uses JupyterLab CSS Variables */\n.jp-agent-message-content .code-block-container:not(.is-expanded) .code-block::after,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block-container:not(.is-expanded) .code-block::after,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block-container:not(.is-expanded) .code-block::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 28px;\n background: linear-gradient(180deg, transparent 0%, var(--jp-cell-editor-background) 100%);\n pointer-events: none;\n}\n\n.jp-agent-message-content .code-block-container.is-expanded .code-block,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block-container.is-expanded .code-block,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block-container.is-expanded .code-block {\n max-height: none !important;\n overflow-x: auto !important;\n overflow-y: visible !important;\n}\n\n.jp-agent-message-content .code-block-container.is-expanded,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block-container.is-expanded,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block-container.is-expanded {\n overflow: hidden !important;\n}\n\n/* Code Block Content - Uses JupyterLab CSS Variables */\n.jp-agent-message-content .code-block,\n.jp-agent-message-content pre.code-block,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block,\n.jp-agent-message-content .jp-RenderedHTMLCommon pre.code-block,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block,\n.jp-RenderedHTMLCommon .jp-agent-message-content pre.code-block {\n margin: 0 !important;\n padding: 14px 14px 36px !important;\n width: 100% !important;\n max-width: 100% !important;\n box-sizing: border-box !important;\n background: var(--jp-cell-editor-background) !important;\n overflow-x: auto !important;\n font-family: var(--jp-code-font-family) !important;\n font-size: var(--jp-code-font-size) !important;\n line-height: var(--jp-code-line-height) !important;\n color: var(--jp-content-font-color1) !important;\n}\n\n.jp-agent-message-content .code-block code,\n.jp-agent-message-content pre.code-block code,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block code,\n.jp-agent-message-content .jp-RenderedHTMLCommon pre.code-block code,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block code,\n.jp-RenderedHTMLCommon .jp-agent-message-content pre.code-block code {\n color: var(--jp-content-font-color1) !important;\n background: transparent !important;\n padding: 0 !important;\n border: none !important;\n display: block !important;\n white-space: pre !important;\n font-family: inherit !important;\n}\n\n/* Inline Code Styling - Uses JupyterLab CSS Variables */\n.jp-agent-message-content .inline-code,\n.jp-agent-message-content code.inline-code,\n.jp-agent-message-content .jp-RenderedHTMLCommon code.inline-code,\n.jp-RenderedHTMLCommon .jp-agent-message-content code.inline-code {\n background: var(--jp-layout-color2) !important;\n color: var(--jp-mirror-editor-keyword-color, var(--jp-content-font-color1)) !important;\n padding: 2px 6px !important;\n border-radius: 4px !important;\n font-family: var(--jp-code-font-family) !important;\n font-size: 0.9em !important;\n font-weight: 500 !important;\n}\n\n/* Markdown Elements in Message Content */\n/* Markdown Elements - Using JupyterLab CSS Variables (like jupyter-ai) */\n.jp-agent-message-content h1 {\n font-size: 16px;\n font-weight: 600;\n color: var(--jp-brand-color1);\n margin: 12px 0 8px 0;\n padding-bottom: 6px;\n border-bottom: 2px solid var(--jp-border-color2);\n}\n\n.jp-agent-message-content h2 {\n font-size: 14px;\n font-weight: 600;\n color: var(--jp-brand-color1);\n margin: 10px 0 6px 0;\n padding-bottom: 4px;\n border-bottom: 1px solid var(--jp-border-color2);\n}\n\n.jp-agent-message-content h3 {\n font-size: 13px;\n font-weight: 600;\n color: var(--jp-brand-color2);\n margin: 8px 0 4px 0;\n}\n\n.jp-agent-message-content strong {\n font-weight: 600;\n color: var(--jp-content-font-color0);\n}\n\n.jp-agent-message-content em {\n font-style: italic;\n color: var(--jp-content-font-color2);\n}\n\n.jp-agent-message-content ul,\n.jp-agent-message-content ol {\n margin: 8px 0;\n padding-left: 24px;\n list-style-position: outside;\n white-space: normal;\n}\n\n.jp-agent-message-content ul {\n list-style-type: disc;\n}\n\n.jp-agent-message-content ol {\n list-style-type: decimal;\n}\n\n.jp-agent-message-content li {\n margin: 4px 0;\n line-height: 1.5;\n color: var(--jp-content-font-color1);\n}\n\n.jp-agent-message-content li::marker {\n color: var(--jp-ui-font-color2);\n}\n\n/* Nested lists */\n.jp-agent-message-content ul ul,\n.jp-agent-message-content ol ul {\n list-style-type: circle;\n margin: 4px 0;\n}\n\n.jp-agent-message-content ul ul ul,\n.jp-agent-message-content ol ul ul {\n list-style-type: square;\n}\n\n/* Summary Block - jp-agent-code-description 스타일과 완전 통일 */\n.jp-RenderedHTMLCommon .jp-summary-block {\n margin: 0 0 0 0;\n padding: 10px 14px;\n border-radius: 4px;\n background: rgba(0, 0, 0, 0.03);\n border-left: 3px solid var(--jp-success-color1, #10b981);\n overflow: hidden;\n white-space: normal;\n}\n\n.jp-RenderedHTMLCommon .jp-summary-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 0 6px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n line-height: 1.5;\n}\n\n.jp-RenderedHTMLCommon .jp-summary-header-icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n padding-right: 6px !important;\n}\n\n.jp-RenderedHTMLCommon .jp-summary-body {\n padding: 0;\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.jp-RenderedHTMLCommon .jp-summary-icon {\n display: none;\n}\n\n.jp-RenderedHTMLCommon .jp-summary-content {\n flex: 1;\n min-width: 0;\n font-size: 13px;\n font-weight: 400;\n color: var(--jp-ui-font-color1);\n line-height: 1.5;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n\n\n\n/* Next Items - jp-agent-code-description 스타일과 완전 통일 */\n.jp-RenderedHTMLCommon .jp-next-items {\n margin: -12px 0 0 0;\n padding: 10px 14px;\n border-radius: 4px;\n background: rgba(0, 0, 0, 0.03);\n border-left: 3px solid var(--jp-brand-color1, #2196f3);\n overflow: hidden;\n white-space: normal;\n}\n\n/* Header */\n.jp-RenderedHTMLCommon .jp-next-items-header {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 0 6px 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n line-height: 1.5;\n}\n\n.jp-RenderedHTMLCommon .jp-next-items-header-icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n padding-right: 6px !important;\n}\n\n/* List */\n.jp-RenderedHTMLCommon .jp-next-items-list {\n list-style: none;\n margin: 0;\n padding: 0;\n padding-left: 0 !important;\n}\n\n/* List Item */\n.jp-RenderedHTMLCommon .jp-next-items-item {\n margin: 0;\n padding: 6px 0;\n text-indent: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n list-style: none;\n transition: background 0.15s ease;\n border-radius: 2px;\n}\n\n.jp-RenderedHTMLCommon .jp-next-items-item:hover {\n background: rgba(0, 0, 0, 0.04);\n margin: 0 -8px;\n padding: 6px 8px;\n}\n\n.jp-RenderedHTMLCommon .jp-next-items-item:active {\n background: rgba(0, 0, 0, 0.06);\n}\n\n.jp-RenderedHTMLCommon .jp-next-items-item:focus-visible {\n outline: 2px solid var(--jp-brand-color1);\n outline-offset: -2px;\n}\n\n/* Text Container */\n.jp-RenderedHTMLCommon .jp-next-items-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n flex: 1;\n min-width: 0;\n}\n\n/* Subject */\n.jp-RenderedHTMLCommon .jp-next-items-subject {\n font-size: 13px;\n font-weight: 500;\n color: var(--jp-ui-font-color1);\n line-height: 1.4;\n}\n\n/* Description */\n.jp-RenderedHTMLCommon .jp-next-items-description {\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n line-height: 1.4;\n}\n\n/* Arrow Icon */\n.jp-RenderedHTMLCommon .jp-next-items-icon {\n width: 16px;\n height: 16px;\n color: var(--jp-ui-font-color3);\n flex-shrink: 0;\n transition: transform 0.15s ease;\n}\n\n.jp-RenderedHTMLCommon .jp-next-items-item:hover .jp-next-items-icon {\n color: var(--jp-brand-color1);\n transform: translateX(2px);\n}\n\n/* Links - Using JupyterLab CSS Variables */\n.jp-agent-message-content a {\n color: var(--jp-content-link-color);\n text-decoration: none;\n border-bottom: 1px solid var(--jp-border-color2);\n transition: all 0.15s ease;\n}\n\n.jp-agent-message-content a:hover {\n color: var(--jp-brand-color0);\n border-bottom-color: var(--jp-brand-color1);\n background: var(--jp-layout-color2);\n}\n\n/* Markdown Table Styling - Using JupyterLab CSS Variables */\n.jp-agent-message-content .markdown-table {\n width: auto;\n min-width: 100%;\n border-collapse: collapse;\n margin: 12px 0;\n font-size: 12px;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n display: table;\n table-layout: auto;\n}\n\n/* Table wrapper for horizontal scroll */\n.jp-agent-message-content .markdown-table-wrapper {\n width: 100%;\n overflow-x: auto;\n margin: 12px 0;\n}\n\n.jp-agent-message-content .markdown-table thead {\n background: var(--jp-layout-color2);\n}\n\n.jp-agent-message-content .markdown-table th {\n padding: 10px 14px;\n font-weight: 600;\n color: var(--jp-brand-color1);\n border-bottom: 2px solid var(--jp-border-color1);\n text-transform: none;\n font-size: 12px;\n letter-spacing: 0;\n white-space: normal;\n word-break: break-word;\n min-width: 60px;\n}\n\n.jp-agent-message-content .markdown-table td {\n padding: 10px 14px;\n color: var(--jp-content-font-color1);\n border-bottom: 1px solid var(--jp-border-color2);\n white-space: normal;\n word-break: break-word;\n min-width: 60px;\n max-width: 300px;\n}\n\n.jp-agent-message-content .markdown-table tbody tr:last-child td {\n border-bottom: none;\n}\n\n.jp-agent-message-content .markdown-table tbody tr:nth-child(even) {\n background: var(--jp-layout-color2);\n}\n\n.jp-agent-message-content .markdown-table tbody tr:hover {\n background: var(--jp-layout-color3);\n}\n\n/* Table inline styles */\n.jp-agent-message-content .markdown-table strong {\n color: var(--jp-content-font-color0);\n font-weight: 600;\n}\n\n.jp-agent-message-content .markdown-table code.inline-code {\n background: var(--jp-layout-color2);\n color: var(--jp-content-font-color1);\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 11px;\n border: 1px solid var(--jp-border-color2);\n word-break: break-all;\n white-space: normal;\n}\n\n/* Note: Dark theme is now handled automatically via CSS variables */\n\n/* ═══════════════════════════════════════════════════════════════════════════ */\n/* Mode Selector - Cursor/Claude Style (Bottom Left) */\n/* ═══════════════════════════════════════════════════════════════════════════ */\n\n.jp-agent-mode-selector {\n display: flex;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.jp-agent-mode-select {\n padding: 4px 8px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n outline: none;\n transition: all 0.15s ease;\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n background-image: url(${z});\n background-repeat: no-repeat;\n background-position: right 6px center;\n padding-right: 24px;\n}\n\n.jp-agent-mode-select:hover {\n border-color: var(--jp-border-color1);\n background-color: var(--jp-layout-color2);\n}\n\n.jp-agent-mode-select:focus {\n border-color: var(--jp-brand-color1);\n box-shadow: 0 0 0 1px var(--jp-brand-color1);\n}\n\n.jp-agent-mode-select option {\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n padding: 8px;\n}\n\n/* Dark Theme */\nbody[data-jp-theme-light="false"] .jp-agent-mode-select {\n background-image: url(${C});\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════ */\n/* Cursor AI Style: Unified Chat + Agent Execution */\n/* ═══════════════════════════════════════════════════════════════════════════ */\n\n/* Empty State Hint */\n.jp-agent-empty-hint {\n font-size: 12px;\n color: #6b6b6b;\n margin-top: 8px;\n white-space: pre-line;\n}\n\n.jp-agent-empty-hint code {\n background: var(--jp-layout-color2);\n padding: 2px 6px;\n border-radius: 3px;\n font-family: 'Menlo', 'Monaco', monospace;\n font-size: 11px;\n}\n\n/* Input Hint */\n.jp-agent-input-hint {\n font-size: 11px;\n color: var(--jp-ui-font-color3);\n margin-top: 6px;\n padding-left: 2px;\n}\n\n.jp-agent-input-hint code {\n background: var(--jp-layout-color3);\n padding: 1px 4px;\n border-radius: 2px;\n font-family: 'Menlo', 'Monaco', monospace;\n font-size: 10px;\n margin: 0 2px;\n}\n\n/* Agent Execution Message Container */\n.jp-agent-message-agent-execution {\n align-self: stretch !important;\n max-width: 100% !important;\n background: transparent !important;\n border: none !important;\n padding: 0 !important;\n}\n\n.jp-agent-execution-message {\n background: var(--jp-layout-color2);\n border: 1px solid var(--jp-border-color2);\n border-radius: 8px;\n padding: 12px;\n width: 100%;\n}\n\n/* Agent Execution Header */\n.jp-agent-execution-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 10px;\n}\n\n.jp-agent-execution-badge {\n display: flex;\n align-items: center;\n gap: 4px;\n background: linear-gradient(135deg, #667eea, #764ba2);\n color: white;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.jp-agent-execution-badge svg {\n width: 12px;\n height: 12px;\n}\n\n.jp-agent-execution-request {\n font-size: 13px;\n color: var(--jp-ui-font-color1);\n font-weight: 500;\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Agent Execution Status */\n.jp-agent-execution-status {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 10px;\n border-radius: 6px;\n margin-bottom: 10px;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n}\n\n.jp-agent-execution-status--planning,\n.jp-agent-execution-status--executing,\n.jp-agent-execution-status--tool_calling,\n.jp-agent-execution-status--validating,\n.jp-agent-execution-status--reflecting {\n background: linear-gradient(90deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.05));\n border-color: rgba(102, 126, 234, 0.3);\n}\n\n.jp-agent-execution-status--completed {\n background: linear-gradient(90deg, rgba(16, 185, 129, 0.1), rgba(16, 185, 129, 0.05));\n border-color: rgba(16, 185, 129, 0.3);\n}\n\n.jp-agent-execution-status--failed {\n background: linear-gradient(90deg, rgba(239, 68, 68, 0.1), rgba(239, 68, 68, 0.05));\n border-color: rgba(239, 68, 68, 0.3);\n}\n\n.jp-agent-execution-spinner {\n width: 14px;\n height: 14px;\n border: 2px solid var(--jp-border-color2);\n border-top-color: #667eea;\n border-radius: 50%;\n animation: jp-agent-spin 0.8s linear infinite;\n}\n\n@keyframes jp-agent-spin {\n to { transform: rotate(360deg); }\n}\n\n.jp-agent-execution-icon--success {\n width: 16px;\n height: 16px;\n color: #10b981;\n}\n\n.jp-agent-execution-icon--error {\n width: 16px;\n height: 16px;\n color: #ef4444;\n}\n\n.jp-agent-execution-status-text {\n font-size: 12px;\n color: var(--jp-ui-font-color1);\n flex: 1;\n}\n\n.jp-agent-execution-confidence {\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n background: var(--jp-layout-color2);\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n/* Agent Execution Plan */\n.jp-agent-execution-plan {\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n padding: 10px;\n margin-bottom: 10px;\n}\n\n.jp-agent-execution-plan-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 12px;\n font-weight: 500;\n color: var(--jp-ui-font-color1);\n margin-bottom: 8px;\n}\n\n.jp-agent-execution-plan-progress {\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n background: var(--jp-layout-color2);\n padding: 2px 6px;\n border-radius: 4px;\n}\n\n/* Progress Bar */\n.jp-agent-execution-progress-bar {\n height: 4px;\n background: var(--jp-layout-color3);\n border-radius: 2px;\n margin-bottom: 10px;\n overflow: hidden;\n}\n\n.jp-agent-execution-progress-fill {\n height: 100%;\n background: linear-gradient(90deg, #667eea, #764ba2);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n/* Execution Steps */\n.jp-agent-execution-steps {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.jp-agent-execution-step {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 6px 8px;\n border-radius: 4px;\n background: var(--jp-layout-color2);\n border: 1px solid var(--jp-border-color3);\n transition: all 0.2s ease;\n}\n\n.jp-agent-execution-step--current {\n background: linear-gradient(90deg, rgba(102, 126, 234, 0.1), rgba(118, 75, 162, 0.05));\n border-color: rgba(102, 126, 234, 0.3);\n}\n\n.jp-agent-execution-step--completed {\n background: rgba(16, 185, 129, 0.05);\n border-color: rgba(16, 185, 129, 0.2);\n}\n\n.jp-agent-execution-step--failed {\n background: rgba(239, 68, 68, 0.05);\n border-color: rgba(239, 68, 68, 0.2);\n}\n\n.jp-agent-execution-step-indicator {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n font-size: 11px;\n font-weight: 500;\n color: var(--jp-ui-font-color2);\n}\n\n.jp-agent-execution-step--completed .jp-agent-execution-step-indicator {\n color: #10b981;\n}\n\n.jp-agent-execution-step--completed .jp-agent-execution-step-indicator svg {\n width: 14px;\n height: 14px;\n}\n\n.jp-agent-execution-step--failed .jp-agent-execution-step-indicator {\n color: #ef4444;\n}\n\n.jp-agent-execution-step--failed .jp-agent-execution-step-indicator svg {\n width: 14px;\n height: 14px;\n}\n\n.jp-agent-execution-step-spinner {\n width: 12px;\n height: 12px;\n border: 2px solid var(--jp-border-color2);\n border-top-color: #667eea;\n border-radius: 50%;\n animation: jp-agent-spin 0.8s linear infinite;\n}\n\n.jp-agent-execution-step-content {\n flex: 1;\n min-width: 0;\n}\n\n.jp-agent-execution-step-desc {\n font-size: 12px;\n color: var(--jp-ui-font-color1);\n display: block;\n margin-bottom: 4px;\n}\n\n.jp-agent-execution-step-desc--done {\n color: var(--jp-ui-font-color2);\n}\n\n.jp-agent-execution-step-tools {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.jp-agent-execution-tool-tag {\n font-size: 10px;\n padding: 1px 5px;\n border-radius: 3px;\n background: var(--jp-layout-color3);\n color: var(--jp-ui-font-color2);\n}\n\n/* Execution Result */\n.jp-agent-execution-result {\n padding: 10px;\n border-radius: 6px;\n border: 1px solid var(--jp-border-color2);\n}\n\n.jp-agent-execution-result--success {\n background: rgba(16, 185, 129, 0.05);\n border-color: rgba(16, 185, 129, 0.2);\n}\n\n.jp-agent-execution-result--error {\n background: rgba(239, 68, 68, 0.05);\n border-color: rgba(239, 68, 68, 0.2);\n}\n\n.jp-agent-execution-result-message {\n font-size: 13px;\n color: var(--jp-ui-font-color1);\n margin: 0 0 8px 0;\n line-height: 1.5;\n}\n\n.jp-agent-execution-result-message ul,\n.jp-agent-execution-result-message ol {\n padding-left: 1.5em;\n margin: 0.5em 0;\n}\n\n.jp-agent-execution-result-message li {\n margin: 0.25em 0;\n}\n\n.jp-agent-execution-result-error {\n font-size: 12px;\n color: #ef4444;\n margin: 0 0 8px 0;\n}\n\n.jp-agent-execution-result-stats {\n display: flex;\n gap: 12px;\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n}\n\n.jp-agent-execution-result-stats span {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Dark Theme Adjustments */\nbody[data-jp-theme-light="false"] .jp-agent-execution-badge {\n background: linear-gradient(135deg, #5a67d8, #6b46c1);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-empty-hint code,\nbody[data-jp-theme-light="false"] .jp-agent-input-hint code {\n background: var(--jp-layout-color3);\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════ */\n/* Cursor AI Style: Mode Toggle Bar */\n/* ═══════════════════════════════════════════════════════════════════════════ */\n\n/* Mode Bar Container */\n.jp-agent-mode-bar {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0px;\n margin-bottom: 4px;\n}\n\n/* Mode Toggle Container */\n.jp-agent-mode-toggle-container {\n position: relative;\n}\n\n/* Mode Toggle Button - Cursor AI Style */\n.jp-agent-mode-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color2);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.jp-agent-mode-toggle:hover {\n background: var(--jp-layout-color2);\n border-color: var(--jp-border-color1);\n color: var(--jp-ui-font-color1);\n}\n\n/* Active (Agent Mode) */\n.jp-agent-mode-toggle--active {\n background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);\n border-color: #6366f1;\n color: white;\n}\n\n.jp-agent-mode-toggle--active:hover {\n background: linear-gradient(135deg, #5558e8 0%, #7c4ddb 100%);\n border-color: #5558e8;\n color: white;\n}\n\n/* Mode Icon */\n.jp-agent-mode-icon {\n flex-shrink: 0;\n}\n\n/* Mode Label */\n.jp-agent-mode-label {\n min-width: 40px;\n}\n\n/* Chevron */\n.jp-agent-mode-chevron {\n flex-shrink: 0;\n opacity: 0.6;\n transition: transform 0.15s ease;\n}\n\n.jp-agent-mode-toggle:hover .jp-agent-mode-chevron {\n opacity: 1;\n}\n\n/* Mode Dropdown */\n.jp-agent-mode-dropdown {\n position: absolute;\n bottom: 100%;\n left: 0;\n margin-bottom: 4px;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n overflow: hidden;\n z-index: 1000;\n min-width: 180px;\n}\n\n/* Mode Option */\n.jp-agent-mode-option {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 10px 12px;\n border: none;\n background: transparent;\n color: var(--jp-ui-font-color1);\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n transition: background 0.1s ease;\n}\n\n.jp-agent-mode-option:hover {\n background: var(--jp-layout-color2);\n}\n\n.jp-agent-mode-option--selected {\n background: var(--jp-layout-color2);\n}\n\n.jp-agent-mode-option svg {\n flex-shrink: 0;\n color: var(--jp-ui-font-color2);\n}\n\n.jp-agent-mode-option--selected svg {\n color: #6366f1;\n}\n\n/* Mode Description - shown to the right of mode button */\n.jp-agent-mode-description {\n font-size: 11px;\n color: var(--jp-ui-font-color3);\n opacity: 0.7;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Agent Mode Input Style */\n.jp-agent-input--agent-mode {\n border-color: #6366f1 !important;\n box-shadow: 0 0 0 1px rgba(99, 102, 241, 0.2) !important;\n}\n\n.jp-agent-input--agent-mode:focus {\n border-color: #6366f1 !important;\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.3) !important;\n}\n\n/* Rejection Mode - Red border for feedback input */\n.jp-agent-input--rejection-mode {\n border-color: #ef4444 !important;\n box-shadow: 0 0 0 1px rgba(239, 68, 68, 0.2) !important;\n}\n\n.jp-agent-input--rejection-mode:focus {\n border-color: #ef4444 !important;\n box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.3) !important;\n}\n\n.jp-agent-input--rejection-mode::placeholder {\n color: #ef4444 !important;\n}\n\n/* Dark Theme */\nbody[data-jp-theme-light="false"] .jp-agent-mode-toggle {\n background: var(--jp-layout-color2);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-mode-toggle--active {\n background: linear-gradient(135deg, #5a67d8 0%, #7c3aed 100%);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-mode-dropdown {\n background: var(--jp-layout-color2);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-mode-option:hover {\n background: var(--jp-layout-color3);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-mode-option--selected {\n background: var(--jp-layout-color3);\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════\n Console Error Notification - 콘솔 에러 자동 감지 알림\n ═══════════════════════════════════════════════════════════════════════════ */\n\n.jp-agent-console-error-notification {\n margin: 12px;\n padding: 12px;\n background: linear-gradient(135deg, #fef2f2 0%, #fecaca 100%);\n border: 1px solid #f87171;\n border-radius: 8px;\n box-shadow: 0 2px 8px rgba(239, 68, 68, 0.2);\n animation: consoleErrorSlideIn 0.3s ease-out;\n}\n\n@keyframes consoleErrorSlideIn {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.jp-agent-console-error-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 10px;\n color: #991b1b;\n font-weight: 600;\n font-size: 13px;\n}\n\n.jp-agent-console-error-header svg {\n color: #dc2626;\n flex-shrink: 0;\n}\n\n.jp-agent-console-error-preview {\n padding: 10px;\n background: rgba(255, 255, 255, 0.7);\n border: 1px solid #fca5a5;\n border-radius: 4px;\n font-family: 'Menlo', 'Monaco', 'Courier New', monospace;\n font-size: 11px;\n color: #7f1d1d;\n line-height: 1.4;\n max-height: 100px;\n overflow-y: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n.jp-agent-console-error-actions {\n display: flex;\n gap: 8px;\n margin-top: 12px;\n}\n\n.jp-agent-console-error-fix-btn {\n flex: 1;\n padding: 8px 16px;\n background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);\n color: white;\n border: none;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.jp-agent-console-error-fix-btn:hover {\n background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%);\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(220, 38, 38, 0.3);\n}\n\n.jp-agent-console-error-dismiss-btn {\n padding: 8px 16px;\n background: transparent;\n color: #6b7280;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.jp-agent-console-error-dismiss-btn:hover {\n background: #f3f4f6;\n color: #374151;\n}\n\n/* Dark theme for Console Error Notification */\nbody[data-jp-theme-light="false"] .jp-agent-console-error-notification {\n background: linear-gradient(135deg, #450a0a 0%, #7f1d1d 100%);\n border-color: #dc2626;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-console-error-header {\n color: #fecaca;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-console-error-header svg {\n color: #f87171;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-console-error-preview {\n background: rgba(0, 0, 0, 0.3);\n border-color: #991b1b;\n color: #fca5a5;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-console-error-dismiss-btn {\n color: #9ca3af;\n border-color: #4b5563;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-console-error-dismiss-btn:hover {\n background: var(--jp-layout-color3);\n color: #d1d5db;\n}\n\n/* Human-in-the-Loop Interrupt Dialog */\n.jp-agent-interrupt-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n backdrop-filter: blur(2px);\n}\n\n.jp-agent-interrupt-dialog {\n background: var(--jp-layout-color0);\n border: 2px solid #f59e0b;\n border-radius: 8px;\n padding: 24px;\n max-width: 600px;\n width: 90%;\n max-height: 80vh;\n overflow-y: auto;\n box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);\n}\n\n.jp-agent-interrupt-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 16px;\n font-size: 18px;\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n}\n\n/* 코드 블록 위에 표시되는 설명 - 공통 스타일 */\n.jp-agent-interrupt-description,\n.jp-agent-code-description {\n padding: 10px 14px;\n color: var(--jp-ui-font-color1);\n font-size: 13px;\n line-height: 1.5;\n background: rgba(0, 0, 0, 0.03);\n border-radius: 4px;\n}\n\n/* HITL 승인 메시지 (노란색) - 코드 블록 바로 위 */\n.jp-agent-interrupt-description {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 0;\n border-left: 3px solid var(--jp-warn-color1, #f59e0b);\n border-radius: 4px 4px 0 0;\n}\n\n.jp-agent-interrupt-description svg {\n flex-shrink: 0;\n}\n\n/* python_developer 상세 설명 (파란색) - 맨 위 */\n.jp-agent-code-description {\n margin-bottom: 8px;\n border-left: 3px solid var(--jp-brand-color1, #2196f3);\n}\n\n/* jp-agent-interrupt-description 다음에 오는 코드 블록의 상단 모서리 제거 */\n.jp-agent-interrupt-description + .code-block-container {\n border-radius: 0 0 6px 6px !important;\n}\n\n.jp-agent-interrupt-action {\n}\n\n.jp-agent-interrupt-action-label {\n margin-bottom: 8px;\n color: var(--jp-ui-font-color1);\n font-size: 14px;\n}\n\n.jp-agent-interrupt-action-args {\n margin-top: 12px;\n}\n\n.jp-agent-interrupt-action-args strong {\n display: block;\n margin-bottom: 8px;\n color: var(--jp-ui-font-color1);\n font-size: 14px;\n}\n\n.jp-agent-interrupt-action-args pre {\n font-family: var(--jp-code-font-family);\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-interrupt-actions {\n display: flex;\n gap: 4px;\n justify-content: flex-end;\n align-items: center;\n margin: 5px;\n}\n\n/* Icon button base styles */\n.jp-agent-interrupt-actions .jp-agent-interrupt-approve-btn,\n.jp-agent-interrupt-actions .jp-agent-interrupt-reject-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 4px;\n border: none;\n border-radius: 4px;\n background: transparent;\n cursor: pointer;\n transition: background-color 0.15s ease, transform 0.15s ease;\n}\n\n.jp-agent-interrupt-actions .jp-agent-interrupt-approve-btn:hover {\n background: rgba(76, 175, 80, 0.15);\n transform: scale(1.1);\n}\n\n.jp-agent-interrupt-actions .jp-agent-interrupt-reject-btn:hover {\n background: rgba(244, 67, 54, 0.15);\n transform: scale(1.1);\n}\n\n.jp-agent-interrupt-actions .jp-agent-interrupt-approve-btn:active,\n.jp-agent-interrupt-actions .jp-agent-interrupt-reject-btn:active {\n transform: scale(0.95);\n}\n\n/* Resolved/Rejected status icons */\n.jp-agent-interrupt-actions--resolved,\n.jp-agent-interrupt-actions--rejected {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n}\n\n/* 자동 승인 배지 스타일 - 코드블럭 헤더 오른쪽 위 */\n.jp-agent-auto-approved-badge {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n font-size: 11px;\n font-weight: 600;\n color: #2e7d32; /* '승인됨' 배지와 동일한 색상 */\n background: rgba(46, 125, 50, 0.1);\n border: 1px solid rgba(46, 125, 50, 0.3);\n border-radius: 12px;\n margin-left: 8px;\n white-space: nowrap;\n order: 10; /* 배지를 가장 오른쪽에 배치 */\n}\n\n/* code-block-actions 내부에서 배지가 오른쪽에 표시되도록 */\n.jp-agent-message-content .code-block-actions,\n.jp-agent-message-content .jp-RenderedHTMLCommon .code-block-actions,\n.jp-RenderedHTMLCommon .jp-agent-message-content .code-block-actions {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n\n.jp-agent-interrupt-inline .code-block-apply {\n display: none;\n}\n\n/* Interrupt 영역 내 복사 버튼: 승인/거부 버튼과 통일된 pill 스타일 */\n.jp-agent-interrupt-inline .code-block-copy {\n display: none !important;\n}\n\n.jp-agent-interrupt-inline .code-block-copy:hover {\n background: rgba(158, 158, 158, 0.1) !important;\n color: #bdbdbd !important;\n border-color: rgba(158, 158, 158, 0.6) !important;\n}\n\n/* 자동 승인 모드일 때 간격 최소화 */\n.jp-agent-interrupt-inline.jp-agent-interrupt-auto-approved {\n margin-top: 0;\n}\n\n.jp-agent-interrupt-inline.jp-agent-interrupt-auto-approved .jp-agent-interrupt-action {\n margin-top: 0;\n}\n\n.jp-agent-auto-approved-summary {\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n padding: 2px 8px;\n}\n\n/* Markdown Preview Container - for markdown_tool */\n.jp-agent-markdown-preview {\n position: relative;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n padding: 12px;\n margin: 4px 0;\n}\n\n.jp-agent-markdown-preview h1,\n.jp-agent-markdown-preview h2,\n.jp-agent-markdown-preview h3 {\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n\n.jp-agent-markdown-preview h1:first-child,\n.jp-agent-markdown-preview h2:first-child,\n.jp-agent-markdown-preview h3:first-child {\n margin-top: 0;\n}\n\n.jp-agent-markdown-preview .jp-agent-interrupt-actions {\n position: absolute;\n top: 8px;\n right: 8px;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-markdown-preview {\n background: var(--jp-layout-color2);\n border-color: var(--jp-border-color1);\n}\n\n/* Dark theme for Interrupt Dialog */\nbody[data-jp-theme-light="false"] .jp-agent-interrupt-dialog {\n background: var(--jp-layout-color1);\n border-color: #f59e0b;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-interrupt-action-args pre {\n background: rgba(0, 0, 0, 0.3) !important;\n color: var(--jp-ui-font-color0);\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════\n Debug Status Display with Spinner\n ═══════════════════════════════════════════════════════════════════════════ */\n\n.jp-agent-message-debug {\n padding: 8px 12px;\n margin: 4px 12px;\n background: transparent;\n border-radius: 6px;\n}\n\n.jp-agent-debug-content {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #888;\n font-size: 0.9em;\n}\n\n.jp-agent-debug-icon {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n font-style: italic;\n}\n\n.jp-agent-message-debug--inline {\n margin: 0 0 8px 0;\n padding: 0 12px 0px 12px;\n}\n\n.jp-agent-message-debug--above-input {\n margin: 0 12px 4px 12px;\n padding: 0 12px 4px 12px;\n}\n\n.jp-agent-debug-branch {\n width: 10px;\n height: 12px;\n border-left: 2px solid var(--jp-border-color2);\n border-bottom: 2px solid var(--jp-border-color2);\n border-radius: 0 0 0 3px;\n flex-shrink: 0;\n margin-left: 26px;\n margin-top: -12px;\n}\n\n.jp-agent-debug-ellipsis::after {\n content: '...';\n display: inline-block;\n width: 0;\n overflow: hidden;\n margin-left: -2px;\n animation: jp-agent-debug-ellipsis 1.2s steps(4, end) infinite;\n}\n\n.jp-agent-debug-spinner {\n width: 12px;\n height: 12px;\n border: 2px solid #e0e0e0;\n border-top-color: #667eea;\n border-radius: 50%;\n animation: jp-agent-debug-spin 0.8s linear infinite;\n flex-shrink: 0;\n}\n\n@keyframes jp-agent-debug-spin {\n to { transform: rotate(360deg); }\n}\n\n@keyframes jp-agent-debug-ellipsis {\n 0% { width: 0; }\n 33% { width: 1ch; }\n 66% { width: 2ch; }\n 100% { width: 3ch; }\n}\n\n.jp-agent-debug-text {\n flex: 0 1 auto;\n}\n\n.jp-agent-debug-text--expandable {\n cursor: pointer;\n border-radius: 4px;\n padding: 2px 4px;\n margin: -2px -4px;\n transition: background-color 0.2s;\n}\n\n.jp-agent-debug-text--expandable:hover {\n background-color: rgba(0, 0, 0, 0.08);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-debug-text--expandable:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n\n.jp-agent-debug-expand-icon {\n color: #888;\n font-size: 0.85em;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-debug-expand-icon {\n color: #aaa;\n}\n\n.jp-agent-message-debug-error .jp-agent-debug-text {\n color: var(--jp-error-color1);\n font-style: normal;\n}\n\n/* Dark theme */\nbody[data-jp-theme-light="false"] .jp-agent-debug-content {\n color: #aaa;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-debug-spinner {\n border-color: #444;\n border-top-color: #667eea;\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════\n Compact Todo Progress (Above Input)\n ═══════════════════════════════════════════════════════════════════════════ */\n\n.jp-agent-todo-compact {\n margin: 0 12px 8px 12px;\n background: var(--jp-layout-color2);\n border: 1px solid var(--jp-border-color2);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.jp-agent-todo-compact-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.jp-agent-todo-compact-header:hover {\n background: var(--jp-layout-color3);\n}\n\n.jp-agent-todo-compact-left {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n}\n\n.jp-agent-todo-expand-icon {\n flex-shrink: 0;\n color: var(--jp-ui-font-color2);\n transition: transform 0.2s ease;\n}\n\n.jp-agent-todo-expand-icon--expanded {\n transform: rotate(90deg);\n}\n\n.jp-agent-todo-compact-spinner {\n width: 12px;\n height: 12px;\n border: 2px solid var(--jp-border-color2);\n border-top-color: #667eea;\n border-radius: 50%;\n animation: jp-agent-todo-spin 0.8s linear infinite;\n flex-shrink: 0;\n}\n\n@keyframes jp-agent-todo-spin {\n to { transform: rotate(360deg); }\n}\n\n.jp-agent-todo-compact-current {\n font-size: 13px;\n color: var(--jp-ui-font-color1);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.jp-agent-todo-compact-progress {\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n background: var(--jp-layout-color3);\n padding: 2px 8px;\n border-radius: 10px;\n flex-shrink: 0;\n}\n\n/* Expanded Todo List */\n.jp-agent-todo-expanded {\n border-top: 1px solid var(--jp-border-color2);\n padding: 8px 0;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.jp-agent-todo-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n transition: background 0.1s ease;\n}\n\n.jp-agent-todo-item:hover {\n background: var(--jp-layout-color3);\n}\n\n.jp-agent-todo-item-indicator {\n width: 18px;\n height: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.jp-agent-todo-item--completed .jp-agent-todo-item-indicator {\n color: #4caf50;\n}\n\n.jp-agent-todo-item--cancelled .jp-agent-todo-item-indicator {\n color: #f44336;\n}\n\n.jp-agent-todo-item--in_progress .jp-agent-todo-item-indicator {\n color: #667eea;\n}\n\n.jp-agent-todo-item-spinner {\n width: 14px;\n height: 14px;\n border: 2px solid var(--jp-border-color2);\n border-top-color: #667eea;\n border-radius: 50%;\n animation: jp-agent-todo-spin 0.8s linear infinite;\n}\n\n.jp-agent-todo-item-number {\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--jp-layout-color3);\n border-radius: 50%;\n}\n\n.jp-agent-todo-item-text {\n font-size: 13px;\n color: var(--jp-ui-font-color1);\n flex: 1;\n min-width: 0;\n}\n\n.jp-agent-todo-item-text--done {\n color: var(--jp-ui-font-color2);\n text-decoration: line-through;\n}\n\n/* Stop button in todo compact header - only visible on hover, positioned before progress */\n.jp-agent-todo-stop-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n margin-right: 6px;\n padding: 2px;\n border: 1px solid transparent;\n border-radius: 4px;\n background: transparent;\n color: var(--jp-ui-font-color2);\n cursor: pointer;\n opacity: 0;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.jp-agent-todo-compact-header:hover .jp-agent-todo-stop-btn {\n opacity: 1;\n}\n\n.jp-agent-todo-stop-btn:hover {\n background: rgba(244, 67, 54, 0.1);\n border-color: var(--jp-error-color1);\n color: var(--jp-error-color1);\n}\n\n.jp-agent-todo-stop-btn svg {\n width: 10px;\n height: 10px;\n}\n\n/* Dark theme adjustments */\nbody[data-jp-theme-light="false"] .jp-agent-todo-compact {\n background: rgba(40, 42, 54, 0.8);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-todo-compact-header:hover {\n background: rgba(255, 255, 255, 0.05);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-todo-compact-progress {\n background: rgba(255, 255, 255, 0.1);\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════\n Diff Styling - edit_file_tool diff preview\n ═══════════════════════════════════════════════════════════════════════════ */\n\n/* Diff code block container */\n.jp-agent-message-content .code-block[class*="language-diff"] code,\n.jp-agent-message-content pre.code-block code {\n white-space: pre !important;\n}\n\n/* Diff line colors - Light theme */\n.jp-agent-message-content .code-block code .diff-add,\n.jp-agent-message-content pre code .diff-add {\n color: #22863a !important;\n display: block;\n}\n\n.jp-agent-message-content .code-block code .diff-del,\n.jp-agent-message-content pre code .diff-del {\n color: #cb2431 !important;\n display: block;\n}\n\n.jp-agent-message-content .code-block code .diff-header,\n.jp-agent-message-content pre code .diff-header {\n color: #6a737d !important;\n font-weight: bold;\n display: block;\n}\n\n/* Diff line colors - Dark theme */\nbody[data-jp-theme-light="false"] .jp-agent-message-content .code-block code .diff-add,\nbody[data-jp-theme-light="false"] .jp-agent-message-content pre code .diff-add {\n color: #85e89d !important;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-message-content .code-block code .diff-del,\nbody[data-jp-theme-light="false"] .jp-agent-message-content pre code .diff-del {\n color: #f97583 !important;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-message-content .code-block code .diff-header,\nbody[data-jp-theme-light="false"] .jp-agent-message-content pre code .diff-header {\n color: #8b949e !important;\n}\n\n/* Simple line-based diff coloring for plain text diffs */\n.jp-agent-message-content pre.code-block code {\n /* Ensure lines starting with + or - get colored via CSS content matching */\n}\n\n/* Highlight lines starting with + (additions) */\n.jp-agent-interrupt-action-args pre.code-block code {\n line-height: 1.5;\n}\n\n/* Diff hunk header (@@ ... @@) */\n.jp-agent-message-content .code-block code .diff-hunk,\n.jp-agent-message-content pre code .diff-hunk {\n color: #6f42c1 !important;\n display: block;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-message-content .code-block code .diff-hunk,\nbody[data-jp-theme-light="false"] .jp-agent-message-content pre code .diff-hunk {\n color: #b392f0 !important;\n}\n\n/* Diff context lines (unchanged) */\n.jp-agent-message-content .code-block code .diff-context,\n.jp-agent-message-content pre code .diff-context {\n color: #6a737d !important;\n display: block;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-message-content .code-block code .diff-context,\nbody[data-jp-theme-light="false"] .jp-agent-message-content pre code .diff-context {\n color: #8b949e !important;\n}\n\n/* Diff block container - diff 전용 스타일 */\n.jp-agent-message-content .code-block-container.diff-block {\n border-left: 3px solid #6f42c1;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-message-content .code-block-container.diff-block {\n border-left-color: #b392f0;\n}\n\n/* Diff line counts in header (+N/-M) */\n.jp-agent-message-content .diff-line-counts,\n.jp-agent-message-content .code-block-header .diff-line-counts {\n display: flex;\n gap: 8px;\n margin-left: 12px;\n font-size: 11px;\n font-weight: 600;\n font-family: var(--jp-code-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);\n}\n\n.jp-agent-message-content .diff-additions {\n color: #28a745 !important;\n background: rgba(40, 167, 69, 0.15);\n padding: 2px 6px;\n border-radius: 3px;\n}\n\n.jp-agent-message-content .diff-deletions {\n color: #cb2431 !important;\n background: rgba(203, 36, 49, 0.15);\n padding: 2px 6px;\n border-radius: 3px;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-message-content .diff-additions {\n color: #85e89d !important;\n background: rgba(133, 232, 157, 0.15);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-message-content .diff-deletions {\n color: #f97583 !important;\n background: rgba(249, 117, 131, 0.15);\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════\n Streaming Message Indicator - Phase 1 Improvement\n ═══════════════════════════════════════════════════════════════════════════ */\n\n/* Streaming message container */\n.jp-streaming-message {\n position: relative;\n min-height: 24px;\n}\n\n.jp-streaming-message.streaming {\n /* Subtle background during streaming */\n}\n\n/* Writing indicator container */\n.jp-streaming-indicator {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 0;\n color: var(--jp-ui-font-color2);\n font-size: 13px;\n}\n\n/* Animated dots */\n.jp-streaming-dots {\n display: flex;\n gap: 4px;\n align-items: center;\n}\n\n.jp-streaming-dot {\n width: 6px;\n height: 6px;\n background-color: var(--jp-brand-color1, #2196f3);\n border-radius: 50%;\n animation: jp-streaming-bounce 1.4s ease-in-out infinite;\n}\n\n.jp-streaming-dot:nth-child(1) {\n animation-delay: 0s;\n}\n\n.jp-streaming-dot:nth-child(2) {\n animation-delay: 0.2s;\n}\n\n.jp-streaming-dot:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n@keyframes jp-streaming-bounce {\n 0%, 60%, 100% {\n transform: translateY(0);\n opacity: 0.4;\n }\n 30% {\n transform: translateY(-4px);\n opacity: 1;\n }\n}\n\n/* Streaming text */\n.jp-streaming-text {\n color: var(--jp-ui-font-color2);\n font-style: italic;\n}\n\n/* 작업 표시줄 — 스트리밍 내내 메시지 아래에서 지금 하는 일과 경과 초를 보인다 */\n.jp-working-bar {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding: 6px 10px;\n border-left: 3px solid var(--jp-brand-color1);\n border-radius: 4px;\n background: var(--jp-layout-color2);\n font-size: 13px;\n color: var(--jp-ui-font-color1);\n}\n\n.jp-working-spinner {\n flex: none;\n width: 12px;\n height: 12px;\n border: 2px solid var(--jp-border-color2);\n border-top-color: var(--jp-brand-color1);\n border-radius: 50%;\n animation: jp-agent-spin 0.8s linear infinite;\n}\n\n.jp-working-label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.jp-working-elapsed {\n flex: none;\n color: var(--jp-ui-font-color2);\n font-variant-numeric: tabular-nums;\n}\n\n/* 진행 줄 이력 — 끝난 단계는 ✓, 지금 단계는 강조, 끝나면 접힌다 */\n.jp-status-history {\n margin-bottom: 8px;\n font-size: 12px;\n line-height: 1.6;\n color: var(--jp-ui-font-color2);\n}\n\n.jp-status-history > summary {\n cursor: pointer;\n user-select: none;\n}\n\n.jp-status-line {\n display: flex;\n gap: 6px;\n}\n\n.jp-status-mark {\n flex: none;\n width: 12px;\n color: var(--jp-success-color1);\n}\n\n.jp-status-text {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n.jp-status-line-command .jp-status-text {\n font-family: var(--jp-code-font-family);\n}\n\n.jp-status-line-thought .jp-status-text {\n font-style: italic;\n}\n\n.jp-status-line-active {\n color: var(--jp-ui-font-color0);\n font-weight: 600;\n}\n\n.jp-status-line-active .jp-status-mark {\n color: var(--jp-brand-color1);\n}\n\n/* 터미널 블록 — codex 의 명령 출력·diff(\`│ \` 줄)를 CLI 처럼 보인다.\n 색은 블록 변수로 두고 다크 테마에서 변수만 바꾼다. */\n.jp-terminal-block {\n --jp-terminal-bg: #1e1e1e;\n --jp-terminal-fg: #d4d4d4;\n --jp-terminal-dim: #8b949e;\n --jp-terminal-border: #1e1e1e;\n --jp-terminal-add-fg: #7ee787;\n --jp-terminal-add-bg: rgba(46, 160, 67, 0.18);\n --jp-terminal-del-fg: #ffa198;\n --jp-terminal-del-bg: rgba(248, 81, 73, 0.18);\n --jp-terminal-hunk-fg: #79c0ff;\n margin: 2px 0 4px 18px;\n border: 1px solid var(--jp-terminal-border);\n border-radius: 4px;\n background: var(--jp-terminal-bg);\n color: var(--jp-terminal-fg);\n font-family: var(--jp-code-font-family);\n font-size: 11px;\n font-weight: normal;\n font-style: normal;\n line-height: 1.45;\n}\n\nbody[data-jp-theme-light="false"] .jp-terminal-block {\n --jp-terminal-bg: var(--jp-layout-color0, #111111);\n --jp-terminal-border: var(--jp-border-color1, #616161);\n}\n\n.jp-terminal-block .jp-terminal-count {\n padding: 3px 8px;\n color: var(--jp-terminal-dim);\n cursor: default;\n user-select: none;\n}\n\n.jp-terminal-block > summary.jp-terminal-count {\n cursor: pointer;\n}\n\n.jp-streaming-message .jp-terminal-block pre.jp-terminal-pre {\n margin: 0;\n padding: 0 8px 6px;\n max-height: 240px;\n overflow: auto;\n border: none;\n background: transparent;\n color: inherit;\n font: inherit;\n white-space: pre;\n}\n\n.jp-terminal-line {\n display: block;\n min-width: max-content;\n}\n\n.jp-terminal-add {\n color: var(--jp-terminal-add-fg);\n background: var(--jp-terminal-add-bg);\n}\n\n.jp-terminal-del {\n color: var(--jp-terminal-del-fg);\n background: var(--jp-terminal-del-bg);\n}\n\n.jp-terminal-hunk {\n color: var(--jp-terminal-hunk-fg);\n}\n\n/* 터미널 블록 머리줄 오른쪽의 복사 버튼 */\n.jp-terminal-block .jp-terminal-count {\n display: flex;\n align-items: center;\n}\n\n.jp-terminal-copy {\n margin-left: auto;\n}\n\n.jp-terminal-copy .jp-codebuff-toolbar-btn {\n width: 22px;\n height: 22px;\n padding: 3px;\n color: var(--jp-terminal-dim);\n}\n\n.jp-terminal-copy .jp-codebuff-toolbar-btn:hover {\n color: var(--jp-terminal-fg);\n background-color: rgba(255, 255, 255, 0.1);\n}\n\n.jp-terminal-copy .jp-codebuff-toolbar-btn-copied {\n color: var(--jp-terminal-add-fg);\n}\n\n/* 구문 색 — 터미널 배경은 테마와 무관하게 어두우므로 전역 hljs 색(밝은 테마용)을 덮는다 */\n.jp-terminal-block .hljs-comment,\n.jp-terminal-block .hljs-quote {\n color: #6a9955;\n font-style: italic;\n}\n\n.jp-terminal-block .hljs-keyword,\n.jp-terminal-block .hljs-selector-tag,\n.jp-terminal-block .hljs-literal {\n color: #569cd6;\n font-weight: normal;\n}\n\n.jp-terminal-block .hljs-string,\n.jp-terminal-block .hljs-regexp {\n color: #ce9178;\n}\n\n.jp-terminal-block .hljs-number {\n color: #b5cea8;\n}\n\n.jp-terminal-block .hljs-built_in,\n.jp-terminal-block .hljs-type,\n.jp-terminal-block .hljs-class .hljs-title {\n color: #4ec9b0;\n}\n\n.jp-terminal-block .hljs-title,\n.jp-terminal-block .hljs-section {\n color: #dcdcaa;\n}\n\n.jp-terminal-block .hljs-variable,\n.jp-terminal-block .hljs-template-variable,\n.jp-terminal-block .hljs-attr,\n.jp-terminal-block .hljs-attribute,\n.jp-terminal-block .hljs-params {\n color: #9cdcfe;\n}\n\n.jp-terminal-block .hljs-name,\n.jp-terminal-block .hljs-tag {\n color: #569cd6;\n}\n\n.jp-terminal-block .hljs-meta,\n.jp-terminal-block .hljs-meta .hljs-keyword {\n color: #c586c0;\n}\n\n/* Skeleton loader — blurred placeholder lines while LLM response is buffered */\n.jp-skeleton-loader {\n display: flex;\n flex-direction: column;\n gap: 10px;\n padding: 8px 0;\n min-width: 280px;\n width: 100%;\n animation: jp-skeleton-fade-in 0.3s ease-out;\n}\n\n.jp-skeleton-line {\n height: 14px;\n border-radius: 6px;\n background: linear-gradient(\n 90deg,\n var(--jp-layout-color2, #e0e0e0) 25%,\n var(--jp-layout-color3, #f0f0f0) 50%,\n var(--jp-layout-color2, #e0e0e0) 75%\n );\n background-size: 200% 100%;\n animation: jp-skeleton-shimmer 1.8s ease-in-out infinite;\n}\n\n@keyframes jp-skeleton-shimmer {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n}\n\n@keyframes jp-skeleton-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n/* Content container — only animate on initial appearance, not during streaming updates */\n.jp-streaming-content {\n /* Allow browser scroll-anchoring to stabilize position during content updates */\n overflow-anchor: auto;\n}\n\n/* Fade-in only on first render (non-streaming messages) */\n.jp-streaming-message:not(.streaming) .jp-streaming-content {\n animation: jp-streaming-fade-in 0.15s ease-out;\n}\n\n@keyframes jp-streaming-fade-in {\n from {\n opacity: 0.7;\n }\n to {\n opacity: 1;\n }\n}\n\n/* Blinking cursor at end of streaming content - DISABLED */\n.jp-streaming-cursor {\n display: none;\n}\n\n@keyframes jp-streaming-cursor-blink {\n 0%, 50% {\n opacity: 1;\n }\n 51%, 100% {\n opacity: 0;\n }\n}\n\n/* Hide cursor when not streaming */\n.jp-streaming-message:not(.streaming) .jp-streaming-cursor {\n display: none;\n}\n\n/* Disable transitions during streaming to prevent jitter */\n.jp-streaming-message.streaming .jp-streaming-content {\n transition: none;\n}\n\n/* Smooth transition only for completed messages */\n.jp-streaming-message:not(.streaming) .jp-streaming-content {\n transition: opacity 0.1s ease-out;\n}\n\n/* Incomplete block indicator (optional subtle styling) */\n.jp-streaming-message.incomplete .jp-streaming-content {\n /* Could add subtle indicator that content is incomplete */\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════\n Code Block Toolbar - jupyter-chat style\n ═══════════════════════════════════════════════════════════════════════════ */\n\n/* Hide element utility - overrides !important rules */\n.jp-codebuff-hidden {\n display: none !important;\n}\n\n/* Code toolbar container - attached below pre blocks */\n.jp-codebuff-code-toolbar-container {\n margin-top: -1px;\n margin-bottom: 1em;\n}\n\n/* When CodeToolbar is inside code-block-container (fallback renderer),\n remove extra margin since container handles spacing */\n.code-block-container .jp-codebuff-code-toolbar-container {\n margin-bottom: 0;\n}\n\n/* Code toolbar styling */\n.jp-codebuff-code-toolbar {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 2px;\n padding: 4px 8px;\n background: var(--jp-layout-color2);\n border: 1px solid var(--jp-border-color1);\n border-top: none;\n border-radius: 0 0 4px 4px;\n}\n\n.jp-codebuff-code-toolbar-item {\n padding: 4px;\n}\n\n/* Ensure pre blocks have proper border radius when toolbar is attached */\n.jp-streaming-content pre {\n margin-bottom: 0 !important;\n border-bottom-left-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n/* Code block with toolbar - adjust pre styling */\n.jp-streaming-content pre:has(+ .jp-codebuff-code-toolbar-container) {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n/* Rendermime pre block styling for toolbar attachment */\n/* Note: !important needed for Edge browser compatibility (overrides JupyterLab defaults) */\n.jp-streaming-message .jp-RenderedHTMLCommon pre {\n background-color: var(--jp-cell-editor-background) !important;\n overflow-x: auto !important;\n white-space: pre !important;\n margin: 0 0 0 0 !important;\n padding: 8px 12px !important;\n border: var(--jp-border-width) solid var(--jp-cell-editor-border-color) !important;\n border-radius: 4px 4px 0 0 !important;\n}\n\n.jp-streaming-message .jp-RenderedHTMLCommon pre > code {\n background-color: inherit;\n overflow-x: inherit;\n white-space: inherit;\n}\n\n/* Dark theme adjustments for code toolbar */\nbody[data-jp-theme-light="false"] .jp-codebuff-code-toolbar {\n background: var(--jp-layout-color3);\n border-color: var(--jp-border-color2);\n}\n\n/* Toolbar icon buttons (plain HTML buttons with inline SVG) */\n.jp-codebuff-toolbar-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n padding: 4px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--jp-ui-font-color2);\n cursor: pointer;\n transition: color 0.15s ease, background-color 0.15s ease;\n}\n\n.jp-codebuff-toolbar-btn:hover {\n color: var(--jp-ui-font-color1);\n background-color: var(--jp-layout-color3);\n}\n\nbody[data-jp-theme-light="false"] .jp-codebuff-toolbar-btn:hover {\n background-color: var(--jp-layout-color2);\n}\n\n.jp-codebuff-toolbar-btn-copied {\n color: var(--jp-success-color1, #28a745);\n}\n\n/* 복사 직후 버튼 위에 뜨는 말풍선 — title 은 마우스를 올려 기다려야 보인다 */\n.jp-codebuff-toolbar-btn {\n position: relative;\n}\n\n.jp-codebuff-copy-tooltip {\n position: absolute;\n bottom: calc(100% + 4px);\n left: 50%;\n transform: translateX(-50%);\n padding: 2px 6px;\n border-radius: 4px;\n background: var(--jp-inverse-layout-color1, #333333);\n color: var(--jp-ui-inverse-font-color0, #ffffff);\n font-size: 11px;\n line-height: 1.4;\n white-space: nowrap;\n pointer-events: none;\n z-index: 10;\n}\n\n/* Toolbar divider between insert buttons and copy button */\n.jp-codebuff-toolbar-divider {\n display: inline-block;\n width: 1px;\n height: 16px;\n background-color: var(--jp-border-color1);\n margin: 0 4px;\n vertical-align: middle;\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════\n Compact Layout - Tighter spacing for all elements\n ═══════════════════════════════════════════════════════════════════════════ */\n\n/* Base paragraph and text spacing */\n.jp-streaming-message .jp-RenderedHTMLCommon p {\n margin: 0.2em 0;\n line-height: 1.4;\n}\n\n.jp-streaming-message .jp-RenderedHTMLCommon > *:first-child {\n margin-top: 0;\n}\n\n.jp-streaming-message .jp-RenderedHTMLCommon > *:last-child {\n margin-bottom: 0;\n}\n\n/* Headings - tighter margins */\n.jp-streaming-message .jp-RenderedHTMLCommon h1,\n.jp-streaming-message .jp-RenderedHTMLCommon h2,\n.jp-streaming-message .jp-RenderedHTMLCommon h3,\n.jp-streaming-message .jp-RenderedHTMLCommon h4,\n.jp-streaming-message .jp-RenderedHTMLCommon h5,\n.jp-streaming-message .jp-RenderedHTMLCommon h6 {\n margin: 0.35em 0 0.15em 0;\n line-height: 1.25;\n}\n\n/* Lists - compact spacing */\n.jp-streaming-message .jp-RenderedHTMLCommon ul,\n.jp-streaming-message .jp-RenderedHTMLCommon ol {\n margin: 0.15em 0;\n padding-left: 1.3em;\n}\n\n.jp-streaming-message .jp-RenderedHTMLCommon li {\n margin: 0;\n padding: 0;\n line-height: 1.35;\n}\n\n/* Nested lists - even tighter */\n.jp-streaming-message .jp-RenderedHTMLCommon li ul,\n.jp-streaming-message .jp-RenderedHTMLCommon li ol {\n margin: 0;\n}\n\n/* Blockquotes */\n.jp-streaming-message .jp-RenderedHTMLCommon blockquote {\n margin: 0.25em 0;\n padding: 0.15em 0.7em;\n}\n\n/* Code blocks - compact (only font/line-height, margin/padding set above with !important) */\n.jp-streaming-message .jp-RenderedHTMLCommon pre {\n font-size: 12px;\n line-height: 1.35;\n}\n\n.jp-streaming-message .jp-RenderedHTMLCommon pre code {\n font-size: 12px;\n line-height: 1.35;\n}\n\n/* Inline code */\n.jp-streaming-message .jp-RenderedHTMLCommon code:not(pre code) {\n font-size: 0.88em;\n padding: 1px 4px;\n}\n\n/* Tables */\n.jp-streaming-message .jp-RenderedHTMLCommon table {\n margin: 0.25em 0;\n}\n\n.jp-streaming-message .jp-RenderedHTMLCommon th,\n.jp-streaming-message .jp-RenderedHTMLCommon td {\n padding: 3px 6px;\n}\n\n/* Horizontal rules */\n.jp-streaming-message .jp-RenderedHTMLCommon hr {\n margin: 0.3em 0;\n}\n\n/* Definition lists */\n.jp-streaming-message .jp-RenderedHTMLCommon dl {\n margin: 0.15em 0;\n}\n\n.jp-streaming-message .jp-RenderedHTMLCommon dt,\n.jp-streaming-message .jp-RenderedHTMLCommon dd {\n margin: 0;\n}\n\n/* Disabled button styling */\n.jp-codebuff-toolbar-btn:disabled {\n color: var(--jp-ui-font-color3);\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════\n Cell Error Fix Button - Floating button on error cells\n ═══════════════════════════════════════════════════════════════════════════ */\n\n.jp-codebuff-error-fix-btn {\n position: absolute;\n top: 4px;\n right: 4px;\n z-index: 10;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n border: none;\n border-radius: 14px;\n background: #ef5350;\n color: white;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n box-shadow: 0 2px 8px rgba(239, 83, 80, 0.4);\n transition: background 0.15s ease, box-shadow 0.15s ease;\n}\n\n.jp-codebuff-error-fix-btn:hover {\n background: #d32f2f;\n box-shadow: 0 2px 12px rgba(211, 47, 47, 0.5);\n}\n\n.jp-codebuff-error-fix-btn svg {\n width: 14px;\n height: 14px;\n stroke: white;\n}\n\n.jp-codebuff-error-fix-label {\n white-space: nowrap;\n}\n\n@keyframes codebuff-fix-blink {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.7; transform: scale(1.05); }\n}\n\n.jp-codebuff-fix-blink {\n animation: codebuff-fix-blink 1.2s ease-in-out infinite;\n}\n\n/* Language badge in toolbar */\n.jp-codebuff-code-toolbar .jp-code-language-badge {\n font-size: 10px;\n color: var(--jp-ui-font-color2);\n font-family: var(--jp-code-font-family);\n text-transform: lowercase;\n padding-left: 4px;\n margin-right: auto;\n}\n\n/* ============================================= */\n/* Material Design Icon Styles (CSS-based) */\n/* ============================================= */\n\n/* Base icon style */\n.icon-folder,\n.icon-file,\n.icon-error,\n.icon-success,\n.icon-warning,\n.icon-skip,\n.icon-risk-low,\n.icon-risk-medium,\n.icon-risk-high,\n.icon-risk-critical {\n display: inline-block;\n width: 16px;\n height: 16px;\n vertical-align: middle;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n/* Folder icon (Material Design: folder) */\n.icon-folder {\n background-image: url(${M});\n}\n\n/* File icon (Material Design: insert_drive_file) */\n.icon-file {\n background-image: url(${L});\n}\n\n/* Error icon (Material Design: error) */\n.icon-error {\n background-image: url(${S});\n}\n\n/* Success icon (Material Design: check_circle) */\n.icon-success {\n background-image: url(${R});\n}\n\n/* Warning icon (Material Design: warning) */\n.icon-warning {\n background-image: url(${T});\n}\n\n/* Skip icon (Material Design: skip_next) */\n.icon-skip {\n background-image: url(${H});\n}\n\n/* Risk level icons */\n.icon-risk-low {\n background-image: url(${R});\n}\n\n.icon-risk-medium {\n background-image: url(${I});\n}\n\n.icon-risk-high {\n background-image: url(${T});\n}\n\n.icon-risk-critical {\n background-image: url(${S});\n}\n\n/* Additional icons */\n.icon-question,\n.icon-edit,\n.icon-description {\n display: inline-block;\n width: 16px;\n height: 16px;\n vertical-align: middle;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n\n/* Question icon (Material Design: help) */\n.icon-question {\n background-image: url(${A});\n}\n\n/* Edit icon (Material Design: edit) */\n.icon-edit {\n background-image: url(${D});\n}\n\n/* Description icon (Material Design: description) */\n.icon-description {\n background-image: url(${E});\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════ */\n/* Context Autocomplete (@file) */\n/* ═══════════════════════════════════════════════════════════════════════════ */\n\n.jp-context-autocomplete {\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color1);\n border-radius: 6px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n max-height: 300px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.jp-context-autocomplete-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n border-bottom: 1px solid var(--jp-border-color2);\n background: var(--jp-layout-color2);\n}\n\n.jp-context-autocomplete-hint {\n font-size: 11px;\n font-weight: 500;\n color: var(--jp-ui-font-color2);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.jp-context-autocomplete-loading {\n font-size: 11px;\n color: var(--jp-brand-color1);\n}\n\n.jp-context-autocomplete-list {\n flex: 1;\n overflow-y: auto;\n padding: 4px 0;\n}\n\n.jp-context-autocomplete-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n transition: background-color 0.1s ease;\n}\n\n.jp-context-autocomplete-item:hover,\n.jp-context-autocomplete-item--selected {\n background: var(--jp-layout-color2);\n}\n\n.jp-context-autocomplete-item--selected {\n background: var(--jp-brand-color3, rgba(33, 150, 243, 0.1));\n}\n\n.jp-context-autocomplete-item-icon {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n}\n\n.jp-context-autocomplete-item-label {\n flex: 1;\n font-size: 13px;\n font-family: var(--jp-code-font-family);\n color: var(--jp-content-font-color1);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.jp-context-autocomplete-item-description {\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.jp-context-autocomplete-footer {\n padding: 6px 12px;\n border-top: 1px solid var(--jp-border-color2);\n background: var(--jp-layout-color2);\n font-size: 10px;\n color: var(--jp-ui-font-color2);\n text-align: center;\n}\n\n.jp-context-autocomplete-footer kbd {\n display: inline-block;\n padding: 1px 4px;\n margin: 0 2px;\n font-size: 10px;\n font-family: var(--jp-code-font-family);\n background: var(--jp-layout-color0);\n border: 1px solid var(--jp-border-color2);\n border-radius: 3px;\n box-shadow: 0 1px 0 var(--jp-border-color2);\n}\n\n/* ═══════════════════════════════════════════════════════════════════════════\n /compact Compacting Indicator\n ═══════════════════════════════════════════════════════════════════════════ */\n\n.jp-agent-compacting-indicator {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n margin: 8px;\n background: linear-gradient(135deg, #667eea15 0%, #764ba215 100%);\n border: 1px solid var(--jp-brand-color1);\n border-radius: 8px;\n color: var(--jp-ui-font-color1);\n font-size: 13px;\n}\n\n.jp-agent-compacting-spinner {\n width: 14px;\n height: 14px;\n border: 2px solid var(--jp-border-color2);\n border-top-color: var(--jp-brand-color1);\n border-radius: 50%;\n animation: jp-agent-compact-spin 0.8s linear infinite;\n flex-shrink: 0;\n}\n\n@keyframes jp-agent-compact-spin {\n to { transform: rotate(360deg); }\n}\n\n.jp-agent-compacting-text {\n flex: 1;\n}\n\n/* Dark mode adjustments */\nbody[data-jp-theme-light="false"] .jp-agent-compacting-indicator {\n background: linear-gradient(135deg, #667eea20 0%, #764ba220 100%);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-compacting-spinner {\n border-color: #444;\n border-top-color: #667eea;\n}\n\n/* ═══════════════════════════════════════════════════════════════\n Orbit 원문 뷰 (SSE raw view — 렌더링 vs 서버 응답 문제 판별용)\n ═══════════════════════════════════════════════════════════════ */\n\n.jp-agent-orbit-raw-toggle {\n background: none;\n border: none;\n color: var(--jp-ui-font-color2);\n font-size: 11px;\n cursor: pointer;\n padding: 2px 4px;\n margin-top: 4px;\n opacity: 0.7;\n}\n\n.jp-agent-orbit-raw-toggle:hover {\n opacity: 1;\n text-decoration: underline;\n}\n\n.jp-agent-orbit-raw {\n margin-top: 6px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n overflow: hidden;\n font-size: 11px;\n}\n\n.jp-agent-orbit-raw-header {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 4px 6px;\n background: var(--jp-layout-color2);\n border-bottom: 1px solid var(--jp-border-color2);\n}\n\n.jp-agent-orbit-raw-spacer {\n flex: 1;\n}\n\n.jp-agent-orbit-raw-tab {\n background: none;\n border: none;\n border-radius: 3px;\n color: var(--jp-ui-font-color2);\n font-size: 11px;\n cursor: pointer;\n padding: 2px 8px;\n}\n\n.jp-agent-orbit-raw-tab:hover {\n background: var(--jp-layout-color3);\n}\n\n.jp-agent-orbit-raw-tab.active {\n background: var(--jp-layout-color3);\n color: var(--jp-ui-font-color1);\n font-weight: 600;\n}\n\n.jp-agent-orbit-raw-body {\n margin: 0;\n padding: 8px;\n max-height: 300px;\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-all;\n font-family: var(--jp-code-font-family);\n font-size: 11px;\n line-height: 1.5;\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-orbit-raw-title {\n color: var(--jp-ui-font-color2);\n font-weight: 600;\n padding: 2px 4px;\n}\n\n/* ===================================================================\n 다크 테마 보정 — JupyterLab Settings → Theme → JupyterLab Dark.\n 라이트 값은 그대로 두고, 다크 패널(#212121) 위에서 안 읽히는 색만 덮는다.\n 회귀 가드: frontend/tests/codex-terminal.test.js\n =================================================================== */\nbody[data-jp-theme-light="false"] .jp-agent-empty-state {\n color: var(--jp-ui-font-color1);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-empty-state p,\nbody[data-jp-theme-light="false"] .jp-agent-empty-hint {\n color: var(--jp-ui-font-color2);\n}\n\nbody[data-jp-theme-light="false"] .jp-pii-mask-icon {\n color: #f59e0b;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-mode-dd-item-ck {\n color: #a78bfa;\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-kb-toggle:hover:not(:disabled) {\n color: #a78bfa;\n background: rgba(139, 92, 246, 0.18);\n box-shadow: 0 2px 5px rgba(139, 92, 246, 0.25);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-auto-approved-badge {\n color: #81c784;\n background: rgba(129, 199, 132, 0.12);\n border-color: rgba(129, 199, 132, 0.35);\n}\n\n/* 검은색 3% 는 다크 배경에서 사라진다 — 흰색으로 같은 옅음을 준다 */\nbody[data-jp-theme-light="false"] .jp-RenderedHTMLCommon .jp-summary-block,\nbody[data-jp-theme-light="false"] .jp-RenderedHTMLCommon .jp-next-items,\nbody[data-jp-theme-light="false"] .jp-agent-interrupt-description,\nbody[data-jp-theme-light="false"] .jp-agent-code-description {\n background: rgba(255, 255, 255, 0.04);\n}\n\nbody[data-jp-theme-light="false"] .jp-RenderedHTMLCommon .jp-next-items-item:hover {\n background: rgba(255, 255, 255, 0.06);\n}\n\n/* 파일 찾아 열기 (Navigate File, Accel Shift O) — plugins/navigate-file-plugin.ts */\n.jp-codebuff-navigate-backdrop {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: rgba(0, 0, 0, 0.2);\n}\n\n.jp-codebuff-navigate {\n position: absolute;\n top: 12%;\n left: 50%;\n transform: translateX(-50%);\n width: min(640px, calc(100vw - 32px));\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color1);\n border-radius: 6px;\n box-shadow: var(--jp-elevation-z8);\n overflow: hidden;\n}\n\n.jp-codebuff-navigate-input {\n box-sizing: border-box;\n width: 100%;\n padding: 10px 12px;\n border: none;\n border-bottom: 1px solid var(--jp-border-color2);\n outline: none;\n background: transparent;\n color: var(--jp-ui-font-color0);\n font-size: var(--jp-ui-font-size2);\n}\n\n.jp-codebuff-navigate-list {\n max-height: 50vh;\n margin: 0;\n padding: 4px 0;\n overflow-y: auto;\n list-style: none;\n}\n\n.jp-codebuff-navigate-item {\n display: flex;\n gap: 10px;\n align-items: baseline;\n padding: 4px 12px;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.jp-codebuff-navigate-item.jp-mod-selected {\n background: var(--jp-brand-color3);\n}\n\n.jp-codebuff-navigate-name {\n color: var(--jp-ui-font-color0);\n}\n\n.jp-codebuff-navigate-name b {\n color: var(--jp-brand-color0);\n}\n\n.jp-codebuff-navigate-dir {\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--jp-ui-font-color2);\n font-size: var(--jp-ui-font-size0);\n}\n\n/* File Structure — 종류 배지 (C 클래스 · I 인터페이스 · m 메서드 · f 함수/필드 · # 제목) */\n.jp-codebuff-structure-badge {\n display: inline-block;\n flex: none;\n width: 16px;\n margin-right: 6px;\n border-radius: 3px;\n text-align: center;\n font-size: var(--jp-ui-font-size0);\n font-weight: 600;\n color: var(--jp-ui-inverse-font-color1);\n background: var(--jp-layout-color4);\n}\n.jp-codebuff-structure-class,\n.jp-codebuff-structure-interface,\n.jp-codebuff-structure-enum,\n.jp-codebuff-structure-type {\n background: var(--jp-brand-color1);\n}\n.jp-codebuff-structure-method,\n.jp-codebuff-structure-function {\n background: var(--jp-warn-color1);\n}\n.jp-codebuff-structure-field {\n background: var(--jp-accent-color1);\n}\n\n/* 빌드·테스트 결과 (BUILD SUCCESS, Tests run, [ERROR] …) — utils/markdownRenderer.highlightBuildLog */\n.jp-log-success {\n color: var(--jp-success-color1, #388e3c);\n font-weight: 600;\n}\n\n.jp-log-failure {\n color: var(--jp-error-color1, #d32f2f);\n font-weight: 600;\n}\n\n.jp-log-warning {\n color: var(--jp-warn-color1, #f57c00);\n font-weight: 600;\n}\n\n.jp-log-info {\n color: var(--jp-ui-font-color2, #757575);\n}\n\n.jp-log-number {\n color: var(--jp-brand-color1, #1976d2);\n font-weight: 600;\n}\n\n/* 터미널 블록은 테마와 상관없이 어두운 배경이라 밝은 색을 쓴다 */\n.jp-terminal-block .jp-log-success { color: #7ee787; }\n.jp-terminal-block .jp-log-failure { color: #ff7b72; }\n.jp-terminal-block .jp-log-warning { color: #e3b341; }\n.jp-terminal-block .jp-log-info { color: #8b949e; }\n.jp-terminal-block .jp-log-number { color: #79c0ff; }\n\n/* codex /resume 스레드 선택 (이슈 #121) */\n.jp-agent-codex-threads {\n display: flex;\n flex-direction: column;\n gap: 2px;\n max-height: 240px;\n overflow-y: auto;\n margin-bottom: 6px;\n padding: 4px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n background: var(--jp-layout-color1);\n}\n\n.jp-agent-codex-threads-head {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 2px 6px;\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n}\n\n.jp-agent-codex-threads-close {\n border: none;\n background: none;\n cursor: pointer;\n font-size: 14px;\n color: var(--jp-ui-font-color2);\n}\n\n.jp-agent-codex-thread {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n padding: 6px 8px;\n border: none;\n border-radius: 4px;\n background: none;\n text-align: left;\n cursor: pointer;\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-codex-thread:hover:not(:disabled),\n.jp-agent-codex-thread.is-current {\n background: var(--jp-layout-color2);\n}\n\n.jp-agent-codex-thread:disabled {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.jp-agent-codex-thread-title {\n display: flex;\n gap: 6px;\n align-items: center;\n font-size: 12px;\n}\n\n.jp-agent-codex-thread-badge {\n padding: 0 5px;\n border-radius: 8px;\n font-size: 10px;\n background: var(--jp-layout-color3);\n color: var(--jp-ui-font-color2);\n}\n\n.jp-agent-codex-thread-meta {\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n}\n\n/* codex 백그라운드 프로세스 스트립 (이슈 #130) — 입력창 위에 상주한다 */\n.jp-agent-codex-procs {\n display: flex;\n flex-direction: column;\n gap: 2px;\n max-height: 120px;\n overflow-y: auto;\n margin-bottom: 6px;\n padding: 4px 6px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n background: var(--jp-layout-color1);\n font-size: var(--jp-ui-font-size0);\n}\n\n.jp-agent-codex-proc {\n display: flex;\n align-items: center;\n gap: 6px;\n min-width: 0;\n}\n\n.jp-agent-codex-proc-dot {\n flex: none;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: var(--jp-success-color1);\n}\n\n.jp-agent-codex-proc.is-exited .jp-agent-codex-proc-dot {\n background: var(--jp-layout-color4);\n}\n\n.jp-agent-codex-proc-cmd {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-family: var(--jp-code-font-family);\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-codex-proc-open,\n.jp-agent-codex-proc-port,\n.jp-agent-codex-proc-meta {\n flex: none;\n white-space: nowrap;\n color: var(--jp-ui-font-color2);\n}\n\n.jp-agent-codex-proc-open {\n color: var(--jp-brand-color1);\n text-decoration: none;\n}\n\n.jp-agent-codex-proc-open:hover {\n text-decoration: underline;\n}\n\n.jp-agent-codex-proc-logbtn,\n.jp-agent-codex-proc-kill,\n.jp-agent-codex-proc-dismiss {\n flex: none;\n padding: 0 6px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n background: transparent;\n color: var(--jp-ui-font-color1);\n font-size: inherit;\n cursor: pointer;\n}\n\n.jp-agent-codex-proc-kill:hover {\n border-color: var(--jp-error-color1);\n color: var(--jp-error-color1);\n}\n\n.jp-agent-codex-proc-logbtn:hover,\n.jp-agent-codex-proc-logbtn.is-open {\n border-color: var(--jp-brand-color1);\n color: var(--jp-brand-color1);\n}\n\n/* 스트립 행의 로그 버튼으로 여는 로그 창 — body 에 띄워 사이드패널 폭에 갇히지 않는다 */\n.jp-agent-codex-proc-logwin-backdrop {\n position: fixed;\n inset: 0;\n z-index: 10000;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.35);\n}\n\n.jp-agent-codex-proc-logwin {\n display: flex;\n flex-direction: column;\n width: min(960px, 92vw);\n height: min(640px, 80vh);\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n background: var(--jp-layout-color1);\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);\n overflow: hidden;\n}\n\n.jp-agent-codex-proc-logwin.is-exited .jp-agent-codex-proc-dot {\n background: var(--jp-layout-color4);\n}\n\n.jp-agent-codex-proc-logwin-head {\n display: flex;\n flex: none;\n align-items: center;\n gap: 8px;\n min-width: 0;\n padding: 6px 10px;\n border-bottom: 1px solid var(--jp-border-color2);\n font-size: var(--jp-ui-font-size1);\n}\n\n.jp-agent-codex-proc-logwin-head code {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-family: var(--jp-code-font-family);\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-codex-proc-logwin-close {\n flex: none;\n padding: 0 8px;\n border: none;\n background: transparent;\n color: var(--jp-ui-font-color2);\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n}\n\n.jp-agent-codex-proc-logwin-close:hover {\n color: var(--jp-ui-font-color0);\n}\n\n.jp-agent-codex-proc-logwin-body {\n flex: 1 1 auto;\n overflow: auto;\n background: var(--jp-layout-color0);\n}\n\n.jp-agent-codex-proc-logwin-body pre {\n margin: 0;\n padding: 8px 12px;\n font-family: var(--jp-code-font-family);\n font-size: var(--jp-code-font-size);\n line-height: 1.5;\n color: var(--jp-content-font-color1);\n background: transparent;\n}\n\n.jp-agent-codex-proc-logwin-empty {\n padding: 12px;\n color: var(--jp-ui-font-color2);\n}\n\n/* Prism \`log\` 토큰 — 편집기 테마 변수를 써서 밝은·어두운 테마를 따른다 */\n.jp-agent-codex-proc-logwin-body .token.level.error,\n.jp-agent-codex-proc-logwin-body .token.exception {\n color: var(--jp-error-color1);\n font-weight: 600;\n}\n.jp-agent-codex-proc-logwin-body .token.level.warning {\n color: var(--jp-warn-color1);\n font-weight: 600;\n}\n.jp-agent-codex-proc-logwin-body .token.level.info {\n color: var(--jp-info-color1);\n}\n.jp-agent-codex-proc-logwin-body .token.level.debug,\n.jp-agent-codex-proc-logwin-body .token.boolean {\n color: var(--jp-mirror-editor-keyword-color);\n}\n.jp-agent-codex-proc-logwin-body .token.level.trace,\n.jp-agent-codex-proc-logwin-body .token.separator {\n color: var(--jp-mirror-editor-comment-color);\n}\n.jp-agent-codex-proc-logwin-body .token.string,\n.jp-agent-codex-proc-logwin-body .token.file-path {\n color: var(--jp-mirror-editor-string-color);\n}\n.jp-agent-codex-proc-logwin-body .token.number,\n.jp-agent-codex-proc-logwin-body .token.date,\n.jp-agent-codex-proc-logwin-body .token.time {\n color: var(--jp-mirror-editor-number-color);\n}\n.jp-agent-codex-proc-logwin-body .token.url {\n color: var(--jp-content-link-color);\n text-decoration: underline;\n}\n.jp-agent-codex-proc-logwin-body .token.constant {\n color: var(--jp-mirror-editor-variable-2-color);\n}\n.jp-agent-codex-proc-logwin-body .token.property {\n color: var(--jp-mirror-editor-attribute-color);\n}\n.jp-agent-codex-proc-logwin-body .token.operator,\n.jp-agent-codex-proc-logwin-body .token.punctuation {\n color: var(--jp-ui-font-color2);\n}\n`,""]);const B=k;e.d(o,["A",0,B])},4289(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a)()(t());i.push([n.id,'/* ═══════════════════════════════════════════════════════════════════════════ */\n/* Analytics Panel */\n/* ═══════════════════════════════════════════════════════════════════════════ */\n\n.jp-analytics-panel {\n padding: 24px;\n font-family: var(--jp-ui-font-family);\n color: var(--jp-ui-font-color0);\n overflow-y: auto;\n height: 100%;\n box-sizing: border-box;\n}\n\n/* Header */\n.jp-analytics-header {\n margin-bottom: 24px;\n}\n\n.jp-analytics-header h2 {\n font-size: 18px;\n font-weight: 700;\n margin: 0 0 6px 0;\n}\n\n.jp-analytics-subtitle {\n font-size: 12px;\n color: var(--jp-ui-font-color2, #888);\n}\n\n/* Section */\n.jp-analytics-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n margin-bottom: 20px;\n}\n\n/* Field */\n.jp-analytics-field label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n margin-bottom: 6px;\n color: var(--jp-ui-font-color1);\n}\n\n.jp-analytics-optional {\n font-weight: 400;\n color: var(--jp-ui-font-color2, #999);\n}\n\n.jp-analytics-field input[type="text"],\n.jp-analytics-field input[type="date"] {\n padding: 8px 10px;\n border: 1px solid var(--jp-border-color1, #ddd);\n border-radius: 6px;\n font-size: 13px;\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color0);\n transition: border-color 0.15s;\n box-sizing: border-box;\n}\n\n.jp-analytics-field input[type="text"] {\n width: 100%;\n}\n\n.jp-analytics-field input:focus {\n outline: none;\n border-color: #4a7cf7;\n}\n\n.jp-analytics-field input:disabled {\n opacity: 0.6;\n}\n\n/* Date row */\n.jp-analytics-date-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.jp-analytics-date-sep {\n font-size: 13px;\n color: var(--jp-ui-font-color2);\n}\n\n/* Presets */\n.jp-analytics-presets {\n display: flex;\n gap: 6px;\n margin-top: 8px;\n}\n\n.jp-analytics-preset-btn {\n padding: 4px 12px;\n font-size: 11px;\n border: 1px solid var(--jp-border-color2, #ccc);\n border-radius: 14px;\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.jp-analytics-preset-btn:hover:not(:disabled) {\n background: var(--jp-layout-color2);\n border-color: #4a7cf7;\n color: #4a7cf7;\n}\n\n.jp-analytics-preset-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Run button */\n.jp-analytics-actions {\n margin-bottom: 20px;\n}\n\n.jp-analytics-run-btn {\n padding: 10px 28px;\n font-size: 13px;\n font-weight: 600;\n background: #4a7cf7;\n color: #fff;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.jp-analytics-run-btn:hover:not(:disabled) {\n background: #3a6ce5;\n}\n\n.jp-analytics-run-btn:disabled {\n background: var(--jp-layout-color3, #ccc);\n cursor: not-allowed;\n}\n\n/* Progress */\n.jp-analytics-progress {\n margin-bottom: 20px;\n padding: 12px 16px;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2, #e0e0e0);\n border-radius: 8px;\n}\n\n.jp-analytics-progress-label {\n display: flex;\n justify-content: space-between;\n font-size: 12px;\n color: var(--jp-ui-font-color1);\n margin-bottom: 8px;\n}\n\n.jp-analytics-progress-count {\n color: var(--jp-ui-font-color2);\n}\n\n.jp-analytics-progress-bar {\n height: 6px;\n background: var(--jp-layout-color3, #e0e0e0);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.jp-analytics-progress-fill {\n height: 100%;\n background: #4a7cf7;\n border-radius: 3px;\n transition: width 0.3s ease;\n}\n\n/* Error */\n.jp-analytics-error {\n padding: 10px 14px;\n background: #fff0f0;\n border: 1px solid #ffccc7;\n border-radius: 8px;\n font-size: 12px;\n color: #cf1322;\n margin-bottom: 16px;\n}\n\n/* Results */\n.jp-analytics-results {\n margin-top: 8px;\n}\n\n.jp-analytics-results-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.jp-analytics-results-title {\n font-size: 14px;\n font-weight: 600;\n color: #389e0d;\n}\n\n.jp-analytics-results-meta {\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n}\n\n.jp-analytics-results-path {\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n margin-bottom: 12px;\n}\n\n.jp-analytics-results-path code {\n background: var(--jp-layout-color2, #f0f0f0);\n padding: 2px 6px;\n border-radius: 3px;\n font-family: \'Menlo\', \'Monaco\', monospace;\n font-size: 11px;\n}\n\n/* Report cards grid */\n.jp-analytics-results-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.jp-analytics-report-card {\n padding: 10px 12px;\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2, #e8e8e8);\n border-radius: 8px;\n transition: border-color 0.15s;\n}\n\n.jp-analytics-report-card:hover {\n border-color: #4a7cf7;\n}\n\n.jp-analytics-report-name {\n font-size: 11px;\n font-weight: 600;\n color: var(--jp-ui-font-color0);\n margin-bottom: 2px;\n word-break: break-all;\n}\n\n.jp-analytics-report-desc {\n font-size: 10.5px;\n color: var(--jp-ui-font-color2, #888);\n margin-bottom: 4px;\n}\n\n.jp-analytics-report-rows {\n font-size: 12px;\n font-weight: 600;\n color: #4a7cf7;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.jp-analytics-expand-icon {\n font-size: 10px;\n color: var(--jp-ui-font-color2, #999);\n}\n\n.jp-analytics-report-card.expanded {\n border-color: #4a7cf7;\n background: var(--jp-layout-color2, #f0f4ff);\n}\n\n/* CSV Preview */\n.jp-analytics-csv-preview {\n grid-column: 1 / -1;\n margin-top: 6px;\n margin-bottom: 8px;\n border: 1px solid var(--jp-border-color2, #e0e0e0);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.jp-analytics-csv-loading {\n padding: 12px;\n text-align: center;\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n}\n\n.jp-analytics-csv-table-wrap {\n max-height: 300px;\n overflow: auto;\n}\n\n.jp-analytics-csv-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 11px;\n}\n\n.jp-analytics-csv-table th {\n position: sticky;\n top: 0;\n background: var(--jp-layout-color2, #f5f5f5);\n padding: 6px 8px;\n text-align: left;\n font-weight: 600;\n border-bottom: 1px solid var(--jp-border-color1, #ddd);\n white-space: nowrap;\n}\n\n.jp-analytics-csv-table td {\n padding: 4px 8px;\n border-bottom: 1px solid var(--jp-border-color2, #f0f0f0);\n white-space: nowrap;\n}\n\n.jp-analytics-csv-table tbody tr:hover {\n background: var(--jp-layout-color1, #fafafa);\n}\n\n/* Dark theme */\nbody[data-jp-theme-light="false"] .jp-analytics-error {\n background: #2a1215;\n border-color: #58181c;\n color: #ff7875;\n}\n\nbody[data-jp-theme-light="false"] .jp-analytics-results-title {\n color: #73d13d;\n}\n',""]);const p=i;e.d(o,["A",0,p])},324(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a)()(t());i.push([n.id,"/* ============================================================\n Athena Query Tuning Panel\n ============================================================ */\n\n.jp-AthenaQueryWidget { height: 100%; overflow: hidden; }\n\n/* 공통 스크롤바: 얇게 + hover 시에만 표시 */\n.athena-panel * { scrollbar-width: thin; scrollbar-color: transparent transparent; }\n.athena-panel *:hover { scrollbar-color: rgba(0, 0, 0, 0.15) transparent; }\n.athena-panel ::-webkit-scrollbar { width: 6px; height: 6px; }\n.athena-panel ::-webkit-scrollbar-track { background: transparent; }\n.athena-panel ::-webkit-scrollbar-thumb { background: transparent; border-radius: 3px; }\n.athena-panel *:hover::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.15); }\n.athena-panel *:hover::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.25); }\n\n.athena-panel {\n height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 13px;\n background: var(--jp-layout-color1, #ffffff);\n color: var(--jp-ui-font-color0, #1f2937);\n}\n\n/* Header */\n.athena-header {\n padding: 14px 20px;\n flex-shrink: 0;\n background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%);\n color: #fff;\n}\n.athena-header-left { display: flex; align-items: center; gap: 10px; }\n.athena-header-icon { flex-shrink: 0; }\n.athena-header-title { font-size: 15px; font-weight: 600; display: flex; align-items: center; gap: 6px; }\n\n.athena-beta-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: #f59e0b;\n color: #fff;\n font-size: 10px;\n font-weight: 700;\n padding: 1px 6px;\n border-radius: 4px;\n cursor: default;\n position: relative;\n}\n.athena-beta-badge:hover::after {\n content: attr(title);\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n white-space: nowrap;\n background: rgba(17, 24, 39, 0.92);\n color: #fff;\n font-size: 11px;\n font-weight: 400;\n padding: 5px 10px;\n border-radius: 5px;\n pointer-events: none;\n z-index: 100;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n}\n.athena-header-sub { font-size: 11px; opacity: 0.82; margin-top: 2px; line-height: 1.5; }\n\n/* Body */\n.athena-body {\n padding: 0;\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n/* ─── Main Layout: 사이드바 탭 + 사이드바 패널 + 콘텐츠 ─── */\n.athena-main-layout {\n display: flex;\n flex: 1;\n overflow: hidden;\n height: 100%;\n}\n.athena-main-content {\n flex: 1;\n min-width: 0;\n padding: 12px 16px;\n display: block;\n overflow-y: auto;\n transition: flex 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.athena-main-content > * + * {\n margin-top: 12px;\n}\n/* .athena-sidebar-open .athena-main-content는 사이드바 패널 블록에서 flex:1로 설정 */\n\n/* 사이드바 패널 */\n.athena-sidebar-panel {\n flex: 0 0 0%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n transition: flex 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n opacity: 0;\n padding: 0;\n}\n.athena-sidebar-open .athena-sidebar-panel {\n flex: 1 1 0%;\n opacity: 1;\n padding: 12px 12px 12px 0;\n transition: flex 0.35s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s ease 0.1s;\n}\n.athena-sidebar-open .athena-main-content {\n flex: 1 1 0%;\n}\n\n/* 사이드바 내부 카드 */\n.athena-sidebar-panel > .athena-sidebar-search,\n.athena-sidebar-panel > .athena-sidebar-content {\n background: var(--jp-layout-color0, #fff);\n}\n.athena-sidebar-panel > .athena-sidebar-search {\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-bottom: none;\n border-radius: 0 8px 0 0;\n}\n.athena-sidebar-panel > .athena-sidebar-content {\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-top: none;\n border-radius: 0 0 8px 0;\n overflow-y: auto;\n min-height: 0;\n}\n/* 검색 바가 숨겨졌을 때 content가 전체 카드 */\n.athena-sidebar-panel > .athena-sidebar-content:first-child {\n border-top: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 0 8px 8px 0;\n}\n\n/* 검색 바 */\n.athena-sidebar-search {\n display: flex;\n gap: 6px;\n padding: 10px 12px;\n background: var(--jp-layout-color0, #fff);\n border-bottom: 1px solid var(--jp-border-color2, #f1f5f9);\n flex-shrink: 0;\n}\n.athena-sidebar-input {\n flex: 1;\n padding: 7px 10px;\n border: 1px solid var(--jp-border-color1, #e2e8f0);\n border-radius: 6px;\n font-size: 12px;\n outline: none;\n background: var(--jp-layout-color0, #fff);\n color: var(--jp-ui-font-color0, #1e293b);\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n.athena-sidebar-input:focus {\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.12);\n}\n.athena-sidebar-input::placeholder { color: var(--jp-ui-font-color3, #cbd5e1); }\n.athena-sidebar-search-btn {\n padding: 7px 14px;\n border: none;\n border-radius: 6px;\n background: #2563eb;\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s;\n min-height: 30px;\n min-width: 44px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n}\n.athena-sidebar-search-btn .athena-spinner-sm {\n width: 12px;\n height: 12px;\n border-width: 1.5px;\n}\n.athena-sidebar-search-btn:hover { background: #1d4ed8; }\n.athena-sidebar-search-btn:disabled { opacity: 0.4; cursor: not-allowed; }\n\n/* 검색 Tip 툴팁 */\n/* ── Generic tip icon (reusable) ── */\n.athena-tip-wrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n.athena-tip-icon {\n color: var(--jp-ui-font-color2, #94a3b8);\n cursor: help;\n transition: color 0.15s;\n}\n.athena-tip-icon:hover { color: #3b82f6; }\n.athena-tip-popup {\n display: none;\n position: absolute;\n top: calc(100% + 8px);\n left: -4px;\n z-index: 200;\n width: 360px;\n max-height: 70vh;\n overflow-y: auto;\n background: var(--jp-layout-color0, #fff);\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n padding: 12px 14px;\n font-size: 11px;\n line-height: 1.6;\n color: var(--jp-ui-font-color0, #1e293b);\n}\n.athena-tip-wrap:hover .athena-tip-popup { display: block; }\n/* Popup above (for bottom-positioned tips) */\n.athena-prompt-actions .athena-tip-popup {\n top: auto;\n bottom: calc(100% + 8px);\n left: auto;\n right: -4px;\n}\n.athena-tip-title {\n display: block;\n font-size: 12px;\n font-weight: 700;\n margin-bottom: 6px;\n color: var(--jp-ui-font-color0, #0f172a);\n}\n.athena-tip-body { display: block; }\n.athena-tip-body p { margin: 4px 0; }\n.athena-tip-body code {\n background: var(--jp-layout-color2, #f1f5f9);\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 10.5px;\n font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', monospace;\n color: #1e40af;\n}\n.athena-tip-body strong { font-weight: 600; color: var(--jp-ui-font-color0, #0f172a); }\n\n/* ── Sidebar search tip ── */\n.athena-sidebar-search-tip-wrap {\n position: relative;\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n.athena-sidebar-search-tip-icon {\n color: var(--jp-ui-font-color2, #94a3b8);\n cursor: help;\n transition: color 0.15s;\n}\n.athena-sidebar-search-tip-icon:hover { color: #3b82f6; }\n.athena-sidebar-search-tip-popup {\n display: none;\n position: absolute;\n top: calc(100% + 8px);\n left: -4px;\n z-index: 100;\n width: 280px;\n background: var(--jp-layout-color0, #fff);\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n padding: 12px 14px;\n font-size: 11px;\n line-height: 1.6;\n color: var(--jp-ui-font-color0, #1e293b);\n}\n.athena-sidebar-search-tip-wrap:hover .athena-sidebar-search-tip-popup { display: block; }\n.athena-sidebar-search-tip-title {\n font-size: 12px;\n font-weight: 700;\n margin-bottom: 6px;\n color: var(--jp-ui-font-color0, #0f172a);\n}\n.athena-sidebar-search-tip-body p {\n margin: 4px 0;\n}\n.athena-sidebar-search-tip-body ul {\n margin: 2px 0 6px 0;\n padding-left: 16px;\n}\n.athena-sidebar-search-tip-body li {\n margin: 1px 0;\n}\n.athena-sidebar-search-tip-body code {\n background: var(--jp-layout-color2, #f1f5f9);\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 10.5px;\n font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', monospace;\n color: #1e40af;\n}\n.athena-sidebar-search-tip-body strong {\n font-weight: 600;\n color: var(--jp-ui-font-color0, #0f172a);\n}\n.athena-sidebar-research-btn {\n background: #7c3aed;\n}\n.athena-sidebar-research-btn:hover { background: #6d28d9; }\n\n/* 콘텐츠 영역 */\n.athena-sidebar-content {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n min-height: 0;\n}\n\n/* 테이블 리스트 */\n.athena-sidebar-list { padding: 4px 0; flex: 1; overflow-y: auto; min-height: 0; display: flex; flex-direction: column; }\n.athena-sidebar-item {\n padding: 10px 14px;\n cursor: pointer;\n position: relative;\n border-left: 3px solid transparent;\n transition: all 0.12s ease;\n}\n.athena-sidebar-item + .athena-sidebar-item {\n border-top: 1px solid var(--jp-border-color2, #f1f5f9);\n}\n.athena-sidebar-item:hover {\n background: var(--jp-layout-color2, #f8fafc);\n border-left-color: #3b82f6;\n}\n.athena-sidebar-item-name {\n font-size: 12px;\n font-weight: 600;\n color: var(--jp-ui-font-color0, #0f172a);\n font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', monospace;\n letter-spacing: -0.2px;\n}\n.athena-sidebar-item-korean {\n font-size: 11px;\n color: var(--jp-ui-font-color2, #64748b);\n margin-top: 2px;\n}\n.athena-sidebar-item-score {\n position: absolute;\n top: 10px;\n right: 12px;\n font-size: 10px;\n font-weight: 600;\n color: #94a3b8;\n background: var(--jp-layout-color2, #f1f5f9);\n padding: 1px 6px;\n border-radius: 3px;\n}\n\n/* 테이블 상세 */\n.athena-sidebar-detail { padding-right: 14px; display: flex; flex-direction: column; flex: 1; min-height: 0; overflow: hidden; }\n.athena-sidebar-back {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: none;\n color: #3b82f6;\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n padding: 14px 14px 0px 14px;\n}\n.athena-sidebar-back:hover { color: #1d4ed8; }\n.athena-sidebar-table-header {\n padding: 8px 14px 10px;\n border-bottom: 1px solid var(--jp-border-color2, #f1f5f9);\n}\n.athena-sidebar-table-name {\n font-size: 13px;\n font-weight: 700;\n font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Consolas', monospace;\n color: var(--jp-ui-font-color0, #0f172a);\n letter-spacing: -0.3px;\n}\n.athena-sidebar-table-korean {\n font-size: 11px;\n color: var(--jp-ui-font-color2, #64748b);\n margin-top: 3px;\n}\n\n/* 메타데이터 */\n.athena-sidebar-meta {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0;\n padding: 0;\n border-bottom: 1px solid var(--jp-border-color2, #f1f5f9);\n /* 세로 4줄 (2열 그리드 × 4행 = 메타항목 8개) */\n /* meta-row 높이 ≈ padding(12) + font(11) + gap(1) + border(1) ≈ 38px */\n max-height: calc(38px * 4);\n overflow-y: auto;\n flex-shrink: 0;\n}\n.athena-sidebar-meta-row {\n display: flex;\n flex-direction: column;\n gap: 1px;\n padding: 6px 14px;\n font-size: 11px;\n border-bottom: 1px solid var(--jp-border-color2, #f1f5f9);\n}\n.athena-sidebar-meta-key {\n color: var(--jp-ui-font-color2, #94a3b8);\n font-size: 9px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n.athena-sidebar-meta-val {\n color: var(--jp-ui-font-color0, #1e293b);\n word-break: break-all;\n font-weight: 500;\n}\n\n/* 컬럼 리스트 */\n.athena-sidebar-columns-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n border-bottom: 1px solid var(--jp-border-color2, #f1f5f9);\n flex-shrink: 0;\n}\n.athena-sidebar-columns-title {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n color: var(--jp-ui-font-color2, #64748b);\n white-space: nowrap;\n}\n.athena-sidebar-col-filter {\n flex: 1;\n padding: 4px 8px;\n border: 1px solid var(--jp-border-color1, #e2e8f0);\n border-radius: 4px;\n font-size: 11px;\n outline: none;\n background: var(--jp-layout-color0, #fff);\n color: var(--jp-ui-font-color0, #1e293b);\n}\n.athena-sidebar-col-filter:focus { border-color: #3b82f6; }\n/* 컬럼 테이블 */\n.athena-sidebar-columns-table-wrap {\n overflow: auto;\n flex: 1;\n min-height: 0;\n}\n.athena-sidebar-columns-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 11px;\n}\n.athena-sidebar-columns-table th {\n position: sticky;\n top: 0;\n background: var(--jp-layout-color2, #f9fafb);\n color: var(--jp-ui-font-color2, #6b7280);\n font-size: 10px;\n font-weight: 600;\n padding: 6px 8px;\n text-align: left;\n white-space: nowrap;\n border-bottom: 1px solid var(--jp-border-color1, #e5e7eb);\n}\n.athena-sidebar-columns-table td {\n padding: 4px 8px;\n color: var(--jp-ui-font-color0, #374151);\n font-size: 11px;\n white-space: nowrap;\n border-bottom: 1px solid var(--jp-border-color2, #f3f4f6);\n}\n.athena-sidebar-columns-table tbody tr:hover {\n background: var(--jp-layout-color2, #f9fafb);\n}\n.athena-sidebar-columns { padding: 0 10px 10px; }\n.athena-sidebar-col-pager {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n color: var(--jp-ui-font-color2, #64748b);\n flex-shrink: 0;\n white-space: nowrap;\n}\n.athena-sidebar-col-pager button {\n background: none;\n border: 1px solid var(--jp-border-color1, #e2e8f0);\n border-radius: 4px;\n padding: 2px 8px;\n cursor: pointer;\n font-size: 11px;\n color: var(--jp-ui-font-color1, #374151);\n}\n.athena-sidebar-col-pager button:hover:not(:disabled) { background: var(--jp-layout-color2, #f1f5f9); }\n.athena-sidebar-col-pager button:disabled { opacity: 0.3; cursor: not-allowed; }\n\n/* 빈 상태 & 로딩 */\n.athena-sidebar-empty {\n text-align: center;\n color: var(--jp-ui-font-color2, #94a3b8);\n font-size: 12px;\n padding: 32px 20px;\n line-height: 1.6;\n}\n.athena-sidebar-empty-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: 0;\n height: 100%;\n min-height: 0;\n}\n.athena-sidebar-loading {\n display: flex;\n align-items: center;\n gap: 8px;\n justify-content: center;\n padding: 28px;\n color: var(--jp-ui-font-color2, #64748b);\n font-size: 12px;\n}\n\n/* Result title */\n.athena-result-title {\n font-size: 15px;\n font-weight: 600;\n color: var(--jp-ui-font-color0, #111827);\n padding: 2px 0 6px 0;\n border-bottom: 2px solid var(--jp-brand-color1, #2563eb);\n line-height: 1.4;\n}\n\n/* ─── AI SQL Editor (통합 컴포넌트) ─── */\n.athena-editor-wrap {\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 8px;\n overflow: hidden;\n background: var(--jp-layout-color0, #fff);\n transition: border-color 0.15s;\n}\n.athena-editor-wrap:focus-within { border-color: #2563eb; box-shadow: 0 0 0 2px rgba(37,99,235,0.08); }\n/* SQL container 로딩 오버레이 */\n.athena-sql-busy { position: relative; }\n.athena-sql-busy::after {\n content: '';\n position: absolute;\n inset: 0;\n background: var(--jp-layout-color2, rgba(241,245,249,0.6));\n opacity: 0.6;\n z-index: 5;\n}\n.athena-sql-busy .athena-sql-loading { display: flex; }\n.athena-sql-loading {\n display: none;\n position: absolute;\n inset: 0;\n z-index: 6;\n align-items: center;\n justify-content: center;\n}\n.athena-sql-loading-spinner {\n width: 28px; height: 28px;\n border: 3px solid var(--jp-border-color1, #d1d5db);\n border-top-color: #2563eb;\n border-radius: 50%;\n animation: athena-spin .8s linear infinite;\n}\n\n/* SQL container — 에디터 wrap 안에 border 제거 */\n.athena-sql-container {\n position: relative;\n height: 45vh;\n max-height: 70vh;\n min-height: 120px;\n resize: vertical;\n overflow: hidden;\n display: flex;\n background: var(--jp-layout-color0, #fff);\n}\n\n/* Line numbers */\n.athena-sql-line-numbers {\n flex-shrink: 0;\n width: 36px;\n padding: 10px 0;\n background: var(--jp-layout-color2, #f1f5f9);\n border-right: 1px solid var(--jp-border-color2, #e5e7eb);\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n font-size: 12px;\n line-height: 1.6;\n text-align: right;\n color: var(--jp-ui-font-color2, #9ca3af);\n overflow: hidden;\n user-select: none;\n white-space: pre;\n}\n.athena-sql-line-numbers span { padding-right: 8px; }\n\n/* Editor area */\n.athena-sql-editor { flex: 1; position: relative; overflow: hidden; }\n\n.athena-sql-highlight-layer {\n position: absolute; inset: 0;\n padding: 10px 12px;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n font-size: 12px; line-height: 1.6;\n white-space: pre; overflow: auto;\n pointer-events: none;\n color: var(--jp-ui-font-color0, #1f2937);\n}\n\n.athena-sql-textarea-overlay {\n position: absolute; inset: 0;\n width: 100%; height: 100%;\n padding: 10px 12px;\n border: none;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n font-size: 12px; line-height: 1.6;\n white-space: pre;\n background: transparent;\n color: transparent;\n caret-color: var(--jp-ui-font-color0, #1f2937);\n resize: none; box-sizing: border-box;\n z-index: 1; overflow: auto;\n}\n.athena-sql-textarea-overlay:focus { outline: none; }\n.athena-sql-textarea-overlay::placeholder { color: var(--jp-ui-font-color2, #9ca3af); }\n\n/* highlight.js SQL 색상 — .athena-sql-highlight-layer 내부 */\n.athena-sql-highlight-layer .hljs-keyword,\n.athena-sql-highlight-layer .hljs-selector-tag { color: #2563eb; font-weight: 600; }\n.athena-sql-highlight-layer .hljs-string,\n.athena-sql-highlight-layer .hljs-attr { color: #16a34a; }\n.athena-sql-highlight-layer .hljs-number { color: #d97706; }\n.athena-sql-highlight-layer .hljs-comment { color: #9ca3af; font-style: italic; }\n.athena-sql-highlight-layer .hljs-built_in,\n.athena-sql-highlight-layer .hljs-title.function_ { color: #7c3aed; }\n.athena-sql-highlight-layer .hljs-variable,\n.athena-sql-highlight-layer .hljs-name { color: #0891b2; }\n.athena-sql-highlight-layer .hljs-operator { color: #dc2626; }\n.athena-sql-highlight-layer .hljs-punctuation { color: var(--jp-ui-font-color1, #374151); }\n\n/* SQL toolbar (우하단) */\n.athena-sql-toolbar { position: absolute; bottom: 8px; right: 8px; display: flex; gap: 4px; z-index: 2; }\n\n.athena-sql-tool-btn {\n padding: 2px 8px; border-radius: 3px;\n font-size: 10px; font-weight: 500; cursor: pointer;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n background: var(--jp-layout-color1, rgba(255,255,255,0.92));\n color: var(--jp-ui-font-color1, #6b7280);\n transition: all 0.15s; opacity: 0.6;\n display: inline-flex; align-items: center; gap: 3px;\n}\n.athena-sql-tool-btn:hover { opacity: 1; border-color: #2563eb; color: #2563eb; }\n\n/* ─── Prompt bar (에디터 하단) ─── */\n.athena-prompt-bar {\n display: flex;\n align-items: center;\n border-top: 1px solid var(--jp-border-color2, #e5e7eb);\n background: var(--jp-layout-color2, #f8fafc);\n}\n\n.athena-prompt-reset-btn {\n flex-shrink: 0;\n width: 36px; /* line-numbers 폭과 동일 */\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--jp-ui-font-color2, #9ca3af);\n padding: 0;\n border-radius: 4px;\n transition: color 0.15s, background 0.15s;\n}\n.athena-prompt-reset-btn:hover {\n color: #ef4444;\n background: rgba(239, 68, 68, 0.08);\n}\n\n.athena-prompt-icon {\n flex-shrink: 0;\n width: 36px; /* line-numbers 폭과 동일 */\n display: flex; align-items: center; justify-content: center;\n align-self: stretch;\n font-size: 14px;\n}\n\n.athena-prompt-content {\n flex: 1; min-width: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px 6px 0px; /* SQL textarea padding-left(12px)와 동일 */\n}\n\n.athena-prompt-input {\n flex: 1; min-width: 0;\n padding: 6px 10px;\n border: 1px solid transparent;\n border-radius: 6px;\n font-size: 13px;\n background: var(--jp-layout-color0, #fff);\n color: var(--jp-ui-font-color0, #1f2937);\n transition: border-color 0.15s;\n}\n.athena-prompt-input:focus { outline: none; border-color: #2563eb; }\n.athena-prompt-input:disabled { background: var(--jp-layout-color2, #f3f4f6); color: var(--jp-ui-font-color2, #9ca3af); }\n.athena-prompt-input::placeholder { color: var(--jp-ui-font-color2, #9ca3af); }\n\n.athena-prompt-actions { display: flex; gap: 6px; flex-shrink: 0; }\n\n/* ─── Buttons ─── */\n.athena-btn {\n padding: 6px 14px; border-radius: 6px;\n font-size: 12px; font-weight: 500;\n cursor: pointer; border: none;\n transition: all 0.15s; white-space: nowrap;\n min-width: 72px; text-align: center;\n display: inline-flex; align-items: center; justify-content: center; gap: 4px;\n}\n.athena-btn .MuiSvgIcon-root { vertical-align: middle; }\n\n.athena-btn-primary { background: #2563eb; color: #fff; }\n.athena-btn-primary:hover:not(:disabled) { background: #1d4ed8; }\n.athena-btn-primary:disabled { background: var(--jp-layout-color3, #d1d5db); color: var(--jp-ui-font-color2, #9ca3af); cursor: not-allowed; }\n\n.athena-btn-execute { background: #16a34a; color: #fff; }\n.athena-btn-execute:hover:not(:disabled) { background: #15803d; }\n.athena-btn-execute:disabled { background: var(--jp-layout-color3, #d1d5db); color: var(--jp-ui-font-color2, #9ca3af); cursor: not-allowed; }\n\n.athena-btn-stop { background: #dc2626; color: #fff; }\n.athena-btn-stop:hover { background: #b91c1c; }\n\n.athena-btn-fix { background: #ea580c; color: #fff; font-size: 12px; padding: 5px 12px; }\n.athena-btn-fix:hover { background: #c2410c; }\n\n.athena-btn-secondary { background: var(--jp-layout-color3, #e5e7eb); color: var(--jp-ui-font-color0, #374151); }\n.athena-btn-secondary:hover { background: var(--jp-layout-color4, #d1d5db); }\n\n.athena-btn-explore {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n background: transparent;\n color: #2563eb;\n border: 1.5px solid #2563eb;\n font-size: 12px;\n}\n.athena-btn-explore:hover:not(:disabled) { background: rgba(37, 99, 235, 0.08); }\n.athena-btn-explore:disabled { color: var(--jp-ui-font-color2, #9ca3af); border-color: var(--jp-layout-color3, #d1d5db); cursor: not-allowed; opacity: 0.5; }\n\n/* 사이드바 토글 세로 바 */\n.athena-sidebar-bar {\n width: 18px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n background: var(--jp-layout-color2, #f1f5f9);\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 8px 0 0 8px;\n border-right: none;\n margin: 12px 0;\n transition: all 0.15s;\n color: var(--jp-ui-font-color2, #94a3b8);\n position: relative;\n z-index: 2;\n}\n.athena-sidebar-bar:hover {\n background: var(--jp-layout-color3, #e2e8f0);\n color: #3b82f6;\n}\n.athena-sidebar-bar-open {\n background: var(--jp-layout-color0, #fff);\n border-color: var(--jp-border-color1, #d1d5db);\n color: #3b82f6;\n margin-right: -1px;\n}\n.athena-sidebar-bar-open:hover {\n background: var(--jp-layout-color2, #f1f5f9);\n}\n\n/* Status */\n.athena-status { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--jp-ui-font-color1, #6b7280); }\n.athena-status-dot { width: 6px; height: 6px; border-radius: 50%; background: #2563eb; animation: athena-blink 1s ease-in-out infinite; }\n@keyframes athena-blink { 0%,100%{opacity:1} 50%{opacity:.3} }\n\n/* Messages */\n.athena-msg { padding: 10px 14px; border-radius: 6px; font-size: 12px; line-height: 1.5; }\n.athena-msg-error { background: #fef2f2; border: 1px solid #fecaca; color: #dc2626; }\n.athena-msg-error-actions { margin-top: 8px; display: flex; justify-content: flex-end; }\n.athena-msg-info { background: #eff6ff; border: 1px solid #bfdbfe; color: #2563eb; }\n\n/* Result */\n.athena-result { flex-shrink: 0; }\n.athena-result-label {\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n color: var(--jp-ui-font-color2, #9ca3af);\n margin-bottom: 6px;\n}\n.athena-result-text {\n padding: 14px 16px;\n background: var(--jp-layout-color0, #fff);\n border: 1px solid var(--jp-border-color1, #e5e7eb);\n border-radius: 8px;\n font-size: 13px; line-height: 1.65;\n color: var(--jp-ui-font-color0, #374151);\n}\n.athena-result-markdown { white-space: normal; }\n\n/* Markdown typography */\n.athena-result-markdown > *:first-child { margin-top: 0; }\n.athena-result-markdown > *:last-child { margin-bottom: 0; }\n.athena-result-markdown p { margin: 0 0 8px; }\n.athena-result-markdown p:last-child { margin-bottom: 0; }\n.athena-result-markdown h1, .athena-result-markdown h2, .athena-result-markdown h3 {\n font-weight: 600; margin: 12px 0 6px;\n color: var(--jp-ui-font-color0, #1f2937);\n line-height: 1.4;\n}\n.athena-result-markdown h1 { font-size: 15px; }\n.athena-result-markdown h2 { font-size: 14px; }\n.athena-result-markdown h3 { font-size: 13px; }\n.athena-result-markdown ul, .athena-result-markdown ol {\n margin: 4px 0 8px 20px; padding: 0;\n}\n.athena-result-markdown li { margin-bottom: 3px; line-height: 1.6; }\n.athena-result-markdown li > ul, .athena-result-markdown li > ol { margin-top: 2px; margin-bottom: 2px; }\n.athena-result-markdown strong { font-weight: 600; color: var(--jp-ui-font-color0, #1f2937); }\n.athena-result-markdown em { font-style: italic; }\n.athena-result-markdown code {\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n background: var(--jp-layout-color2, #f3f4f6);\n border: 1px solid var(--jp-border-color2, #e5e7eb);\n padding: 1px 5px; border-radius: 4px;\n font-size: 11.5px; color: var(--jp-ui-font-color0, #374151);\n}\n.athena-result-markdown pre {\n background: var(--jp-layout-color2, #f3f4f6);\n border: 1px solid var(--jp-border-color1, #e5e7eb);\n border-radius: 6px;\n padding: 10px 14px; margin: 8px 0;\n overflow-x: auto;\n}\n.athena-result-markdown pre code {\n background: none; border: none; padding: 0;\n font-size: 12px; color: var(--jp-ui-font-color0, #1f2937);\n}\n.athena-result-markdown blockquote {\n border-left: 3px solid #818cf8;\n margin: 8px 0; padding: 8px 14px;\n color: var(--jp-ui-font-color0, #374151);\n background: rgba(99, 102, 241, 0.04);\n border-radius: 0 6px 6px 0;\n font-size: 12.5px;\n}\n.athena-result-markdown hr {\n border: none; border-top: 1px solid var(--jp-border-color1, #e5e7eb);\n margin: 12px 0;\n}\n.athena-result-markdown table {\n border-collapse: collapse; width: 100%; margin: 8px 0; font-size: 12px;\n}\n.athena-result-markdown th {\n background: var(--jp-layout-color2, #f1f5f9);\n padding: 5px 10px; text-align: left; font-weight: 600;\n border: 1px solid var(--jp-border-color1, #e5e7eb);\n}\n.athena-result-markdown td {\n padding: 4px 10px;\n border: 1px solid var(--jp-border-color2, #f1f5f9);\n}\n.athena-result-markdown tr:nth-child(even) td {\n background: var(--jp-layout-color2, #f8fafc);\n}\n\n/* 설명 접기/펼치기 */\n.athena-desc-collapse {\n position: relative;\n max-height: calc(1.65em * 6 + 28px);\n overflow: hidden;\n transition: max-height 0.3s ease;\n}\n.athena-desc-expanded { max-height: none; }\n.athena-desc-fade {\n position: absolute;\n bottom: 0; left: 0; right: 0;\n height: 40px;\n background: linear-gradient(to bottom, transparent, var(--jp-layout-color0, #fff));\n pointer-events: none;\n}\n.athena-desc-toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n width: 100%;\n margin: 0;\n padding: 5px 0;\n background: var(--jp-layout-color0, #fff);\n border: 1px solid var(--jp-border-color1, #e5e7eb);\n border-top: none;\n border-radius: 0 0 8px 8px;\n color: var(--jp-brand-color1, #2563eb);\n font-size: 11px;\n cursor: pointer;\n transition: color 0.15s;\n}\n.athena-desc-toggle:hover { color: #1d4ed8; }\n.athena-desc-wrap { padding-bottom: 0; }\n.athena-desc-wrap .athena-result-text { margin-bottom: 0; padding-bottom: 0; border-bottom: none; border-bottom-left-radius: 0; border-bottom-right-radius: 0; }\n\n/* ─── Table candidates ─── */\n.athena-candidates {\n border: 1px solid var(--jp-border-color1, #e5e7eb);\n border-radius: 6px;\n overflow: hidden;\n position: relative;\n transition: opacity 0.2s;\n}\n.athena-candidates-loading .athena-candidates-group {\n opacity: 0.45;\n pointer-events: none;\n}\n.athena-spinner-sm {\n display: inline-block; width: 13px; height: 13px;\n border: 2px solid currentColor; border-top-color: transparent;\n border-radius: 50%;\n animation: athena-spin 0.6s linear infinite;\n}\n@keyframes athena-spin { to { transform: rotate(360deg); } }\n.athena-candidates-exhausted {\n font-size: 11px;\n color: var(--jp-warn-color1, #d97706);\n background: var(--jp-warn-color3, #fef3c7);\n padding: 3px 8px;\n border-radius: 4px;\n}\n\n.athena-candidates-header {\n display: flex; align-items: center; justify-content: space-between;\n padding: 10px 14px;\n background: var(--jp-layout-color2, #f1f5f9);\n border-bottom: 1px solid var(--jp-border-color1, #e5e7eb);\n}\n.athena-candidates-title { font-size: 13px; font-weight: 600; color: var(--jp-ui-font-color0, #1f2937); }\n.athena-candidates-actions { display: flex; gap: 8px; align-items: center; }\n\n.athena-direct-table-input {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px;\n border-bottom: 1px solid var(--jp-border-color2, #f1f5f9);\n flex-wrap: wrap;\n}\n.athena-direct-table-input input {\n flex: 1;\n min-width: 160px;\n padding: 5px 10px;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 5px;\n font-size: 12px;\n outline: none;\n}\n.athena-direct-table-input input:focus { border-color: #3b82f6; }\n.athena-direct-table-input button {\n padding: 5px 12px;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 5px;\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n background: var(--jp-layout-color0, #fff);\n color: var(--jp-ui-font-color0, #374151);\n}\n.athena-direct-table-input button:hover { background: var(--jp-layout-color2, #f3f4f6); }\n.athena-direct-table-input button:disabled { opacity: 0.4; cursor: not-allowed; }\n.athena-direct-table-error {\n width: 100%;\n font-size: 11px;\n color: #dc2626;\n margin-top: 2px;\n}\n.athena-candidates-group { padding: 8px 14px; }\n.athena-candidates-group + .athena-candidates-group { border-top: 1px solid var(--jp-border-color2, #f1f5f9); }\n.athena-candidates-query { font-size: 11px; color: var(--jp-ui-font-color2, #9ca3af); margin-bottom: 6px; }\n\n.athena-candidate-item {\n border: 1px solid var(--jp-border-color1, #e5e7eb);\n border-radius: 5px; margin-bottom: 4px;\n background: var(--jp-layout-color0, #fff);\n transition: border-color 0.15s;\n}\n.athena-candidate-item:hover { border-color: #2563eb; }\n.athena-candidate-selected { border-color: #2563eb; background: #eff6ff; }\n\n.athena-candidate-row {\n display: flex; align-items: center; gap: 8px;\n padding: 8px 10px; cursor: pointer; font-size: 12px;\n}\n.athena-candidate-name { font-weight: 600; font-family: monospace; color: var(--jp-ui-font-color0, #1f2937); }\n.athena-candidate-row-clickable { cursor: pointer; }\n.athena-candidate-row-clickable:hover .athena-candidate-name { color: #2563eb; }\n.athena-candidate-korean { color: var(--jp-ui-font-color1, #6b7280); }\n.athena-candidate-meta { margin-left: auto; font-size: 10px; color: var(--jp-ui-font-color2, #9ca3af); white-space: nowrap; }\n.athena-candidate-expand { font-size: 12px; color: var(--jp-ui-font-color2, #9ca3af); flex-shrink: 0; width: 16px; text-align: center; }\n\n.athena-candidate-detail {\n padding: 8px 10px 10px 34px;\n border-top: 1px solid var(--jp-border-color2, #f1f5f9);\n font-size: 11px; color: var(--jp-ui-font-color1, #6b7280); line-height: 1.6;\n}\n.athena-candidate-desc { margin-bottom: 4px; }\n.athena-candidate-kv span { font-weight: 500; }\n\n/* ─── Column table (동적) ─── */\n.athena-candidate-columns { margin-top: 6px; }\n.athena-candidate-columns-title { font-weight: 600; margin-bottom: 4px; font-size: 11px; }\n\n.athena-candidate-columns-table-wrap {\n max-height: 220px;\n overflow: auto;\n border: 1px solid var(--jp-border-color2, #e5e7eb);\n border-radius: 4px;\n}\n\n.athena-candidate-columns-table {\n width: 100%;\n border-collapse: collapse;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;\n font-size: 10px;\n}\n.athena-candidate-columns-table th {\n position: sticky; top: 0;\n padding: 4px 8px;\n text-align: left; font-weight: 600;\n background: var(--jp-layout-color2, #f1f5f9);\n border-bottom: 1px solid var(--jp-border-color1, #e5e7eb);\n white-space: nowrap;\n color: var(--jp-ui-font-color1, #6b7280);\n}\n.athena-candidate-columns-table td {\n padding: 3px 8px;\n border-bottom: 1px solid var(--jp-border-color2, #f1f5f9);\n white-space: nowrap;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--jp-ui-font-color0, #374151);\n}\n.athena-candidate-columns-table tr:hover td {\n background: var(--jp-layout-color2, #f8fafc);\n}\n\n/* Stats bar */\n.athena-stats-bar {\n display: flex; gap: 16px; padding: 8px 12px; align-items: center;\n background: var(--jp-layout-color2, #f1f5f9);\n border: 1px solid var(--jp-border-color1, #e5e7eb);\n border-bottom: none; border-radius: 6px 6px 0 0;\n font-size: 11px; color: var(--jp-ui-font-color1, #6b7280);\n}\n.athena-stats-bar span { white-space: nowrap; }\n.athena-download-btn {\n margin-left: auto;\n display: inline-flex; align-items: center; gap: 3px;\n padding: 3px 10px;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 4px;\n background: var(--jp-layout-color0, #fff);\n font-size: 11px; font-weight: 500;\n color: var(--jp-ui-font-color0, #374151);\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n}\n.athena-download-btn:hover {\n background: #eff6ff;\n border-color: #93c5fd;\n color: #2563eb;\n}\n\n/* Result table */\n.athena-result-table-wrap { overflow: auto; max-height: 400px; border: 1px solid var(--jp-border-color1, #e5e7eb); border-radius: 6px; }\n.athena-stats-bar + .athena-result-table-wrap { border-radius: 0 0 6px 6px; }\n.athena-result-table { width: 100%; border-collapse: collapse; font-size: 12px; }\n.athena-result-table th { position: sticky; top: 0; background: var(--jp-layout-color2, #f1f5f9); padding: 6px 10px; text-align: left; font-weight: 600; border-bottom: 1px solid var(--jp-border-color1, #e5e7eb); white-space: nowrap; }\n.athena-result-table td { padding: 5px 10px; border-bottom: 1px solid var(--jp-border-color2, #f1f5f9); white-space: nowrap; max-width: 300px; overflow: hidden; text-overflow: ellipsis; }\n.athena-result-table tr:hover td { background: var(--jp-layout-color2, #f8fafc); }\n.athena-result-table-meta { padding: 6px 10px; font-size: 11px; color: var(--jp-ui-font-color2, #9ca3af); border-top: 1px solid var(--jp-border-color1, #e5e7eb); }\n.athena-page-btn { padding: 2px 8px; border: 1px solid var(--jp-border-color1, #d1d5db); border-radius: 4px; background: var(--jp-layout-color0, #fff); font-size: 11px; cursor: pointer; color: var(--jp-ui-font-color0, #374151); }\n.athena-page-btn:hover { background: var(--jp-layout-color2, #f1f5f9); }\n.athena-page-btn:disabled { opacity: 0.3; cursor: not-allowed; }\n\n/* SQL Diff View */\n.athena-diff-bar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n background: var(--jp-layout-color0, #fff);\n border-bottom: 1px solid var(--jp-border-color1, #e5e7eb);\n}\n.athena-diff-bar-left {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--jp-ui-font-color1, #6b7280);\n}\n.athena-diff-bar-title {\n font-size: 12px;\n font-weight: 600;\n color: var(--jp-ui-font-color0, #374151);\n}\n.athena-diff-bar-actions { display: flex; gap: 8px; }\n.athena-diff-btn {\n padding: 5px 16px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n border: 1px solid transparent;\n transition: background 0.15s;\n}\n.athena-diff-btn-apply {\n background: #2563eb;\n color: #fff;\n border-color: #2563eb;\n}\n.athena-diff-btn-apply:hover { background: #1d4ed8; }\n.athena-diff-btn-cancel {\n background: var(--jp-layout-color0, #fff);\n color: var(--jp-ui-font-color1, #6b7280);\n border-color: var(--jp-border-color1, #d1d5db);\n}\n.athena-diff-btn-cancel:hover { background: var(--jp-layout-color2, #f3f4f6); }\n/* ── Side-by-side diff ── */\n.athena-diff-container {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n min-height: 120px;\n max-height: 500px;\n background: var(--jp-layout-color0, #fff);\n box-shadow: 0 1px 3px rgba(0,0,0,0.06);\n}\n.athena-diff-side-by-side {\n display: flex;\n flex: 1;\n overflow: hidden;\n font-family: 'JetBrains Mono', 'SF Mono', 'Fira Code', monospace;\n font-size: 12px;\n line-height: 20px;\n}\n.athena-diff-pane {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.athena-diff-pane-header {\n padding: 4px 10px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--jp-ui-font-color2, #9ca3af);\n background: var(--jp-layout-color2, #f3f4f6);\n border-bottom: 1px solid var(--jp-border-color1, #e5e7eb);\n flex-shrink: 0;\n}\n.athena-diff-pane-body {\n flex: 1;\n overflow-x: auto;\n overflow-y: auto;\n}\n/* Divider between panes */\n.athena-diff-divider {\n width: 1px;\n flex-shrink: 0;\n background: var(--jp-border-color1, #d1d5db);\n}\n/* Rows */\n.athena-diff-row {\n display: flex;\n align-items: baseline;\n padding: 0 6px;\n height: 20px;\n box-sizing: border-box;\n position: relative;\n}\n.athena-diff-ln {\n width: 32px;\n flex-shrink: 0;\n text-align: right;\n padding-right: 8px;\n font-size: 11px;\n color: #b0b0b0;\n user-select: none;\n}\n.athena-diff-code {\n flex: 1;\n white-space: pre;\n}\n/* Context (unchanged) */\n.athena-diff-row-context { color: var(--jp-content-font-color1, #2b2b2b); }\n/* Removed — text color + left border accent */\n.athena-diff-row-removed {\n border-left: 3px solid #e5a0a0;\n color: #994444;\n}\n.athena-diff-row-removed .athena-diff-code { text-decoration: line-through; text-decoration-color: rgba(153,68,68,0.35); }\n.athena-diff-row-removed .athena-diff-ln { color: #c49898; }\n/* Added — text color + left border accent */\n.athena-diff-row-added {\n border-left: 3px solid #7bb87b;\n color: #2d6e2d;\n}\n.athena-diff-row-added .athena-diff-ln { color: #8cb88c; }\n/* Pad (empty opposite side) */\n.athena-diff-row-pad { height: 20px; }\n/* REASON: background hint + tooltip */\n.athena-diff-row-added[data-reason] {\n cursor: help;\n background: rgba(99, 102, 241, 0.06);\n border-left-color: #818cf8;\n}\n.athena-diff-row-added[data-reason] .athena-diff-code {\n border-bottom: 1px dashed rgba(99, 102, 241, 0.35);\n}\n.athena-diff-row-added[data-reason]::after {\n content: attr(data-reason);\n display: none;\n position: absolute;\n left: 40px;\n bottom: calc(100% + 4px);\n background: rgba(255, 255, 255, 0.95);\n color: #374151;\n padding: 10px 16px 10px 16px;\n border-radius: 6px;\n font-size: 11.5px;\n line-height: 1.4;\n max-width: 360px;\n white-space: normal;\n z-index: 300;\n pointer-events: none;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n border: 1px solid #e5e7eb;\n border-left: 3px solid #818cf8;\n}\n.athena-diff-row-added[data-reason]:hover::after {\n display: block;\n}\n/* SQL syntax highlight (diff lines) */\n.athena-hl-kw { color: #7c3aed; font-weight: 500; }\n.athena-hl-num { color: #0284c7; }\n.athena-hl-str { color: #b45309; }\n.athena-hl-cmt { color: #9ca3af; font-style: italic; }\n/* Removed lines: mute all highlight */\n.athena-diff-row-removed .athena-hl-kw,\n.athena-diff-row-removed .athena-hl-num,\n.athena-diff-row-removed .athena-hl-str,\n.athena-diff-row-removed .athena-hl-cmt { color: inherit; font-weight: inherit; font-style: inherit; }\n/* Executing */\n.athena-executing { display: flex; align-items: center; gap: 8px; padding: 12px 14px; background: #f0fdf4; border: 1px solid #bbf7d0; border-radius: 6px; font-size: 12px; color: #16a34a; }\n.athena-executing-spinner { width: 14px; height: 14px; border: 2px solid #bbf7d0; border-top-color: #16a34a; border-radius: 50%; animation: athena-spin .8s linear infinite; }\n@keyframes athena-spin { to{transform:rotate(360deg)} }\n\n/* 다크 테마 — 옅은 강조 배경(라이트 전용 틴트)을 어두운 틴트로 (이슈 #256).\n 색은 index.css 의 RAG 다크 팔레트(`--codebuff-rag-*-light`)와 같은 톤이다. */\nbody[data-jp-theme-light=\"false\"] .athena-msg-error { background: #3b1d1d; border-color: #7f1d1d; color: #fca5a5; }\nbody[data-jp-theme-light=\"false\"] .athena-msg-info { background: #1e3a5f; border-color: #2b5486; color: #93c5fd; }\nbody[data-jp-theme-light=\"false\"] .athena-candidate-selected { background: #1e3a5f; }\nbody[data-jp-theme-light=\"false\"] .athena-download-btn:hover { background: #1e3a5f; border-color: #2b5486; color: #93c5fd; }\nbody[data-jp-theme-light=\"false\"] .athena-executing { background: #16301f; border-color: #166534; color: #86efac; }\n",""]);const p=i;e.d(o,["A",0,p])},4065(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a)()(t());i.push([n.id,'/* ============================================================\n RAG Benchmark Panel\n ============================================================ */\n\n.jp-BenchmarkWidget { height: 100%; overflow: hidden; }\n\n.benchmark-panel {\n height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n font-family: -apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, sans-serif;\n font-size: 13px;\n background: var(--jp-layout-color1, #fff);\n color: var(--jp-ui-font-color0, #1f2937);\n}\n\n/* Header */\n.benchmark-header {\n padding: 14px 20px;\n background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%);\n color: #fff;\n flex-shrink: 0;\n}\n.benchmark-header-title { font-size: 15px; font-weight: 600; }\n.benchmark-header-sub { font-size: 11px; opacity: 0.82; margin-top: 2px; }\n\n/* Tabs */\n.benchmark-tabs {\n display: flex;\n border-bottom: 1px solid var(--jp-border-color1, #d1d5db);\n flex-shrink: 0;\n}\n.benchmark-tab {\n padding: 8px 16px;\n font-size: 12px;\n font-weight: 500;\n border: none;\n background: none;\n cursor: pointer;\n color: var(--jp-ui-font-color2, #6b7280);\n border-bottom: 2px solid transparent;\n}\n.benchmark-tab.active {\n color: #7c3aed;\n border-bottom-color: #7c3aed;\n}\n.benchmark-tab:hover { color: #7c3aed; }\n\n/* Body */\n.benchmark-body {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 16px;\n}\n\n/* Actions */\n.benchmark-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n margin-bottom: 12px;\n flex-wrap: wrap;\n}\n.benchmark-memo-input {\n flex: 1;\n min-width: 200px;\n padding: 6px 10px;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 6px;\n font-size: 12px;\n outline: none;\n}\n.benchmark-memo-input:focus { border-color: #7c3aed; }\n\n/* Buttons */\n.benchmark-btn {\n padding: 6px 14px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n background: var(--jp-layout-color0, #fff);\n color: var(--jp-ui-font-color0, #374151);\n display: inline-flex;\n align-items: center;\n gap: 4px;\n white-space: nowrap;\n}\n.benchmark-btn:hover { background: var(--jp-layout-color2, #f1f5f9); }\n.benchmark-btn:disabled { opacity: 0.4; cursor: not-allowed; }\n.benchmark-btn-primary { background: #7c3aed; color: #fff; border-color: #7c3aed; }\n.benchmark-btn-primary:hover { background: #6d28d9; }\n.benchmark-btn-execute { background: #16a34a; color: #fff; border-color: #16a34a; }\n.benchmark-btn-execute:hover { background: #15803d; }\n.benchmark-btn-stop { background: #dc2626; color: #fff; border-color: #dc2626; }\n.benchmark-btn-stop:hover { background: #b91c1c; }\n.benchmark-btn-icon {\n padding: 4px 8px;\n border: none;\n background: none;\n cursor: pointer;\n color: var(--jp-ui-font-color2, #9ca3af);\n font-size: 14px;\n}\n.benchmark-btn-icon:hover { color: #dc2626; }\n\n/* Section title */\n.benchmark-section-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--jp-ui-font-color0, #111827);\n margin-bottom: 8px;\n}\n\n/* Generate section */\n.benchmark-generate-section {\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 8px;\n padding: 12px;\n margin-bottom: 16px;\n}\n.benchmark-generate-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n}\n.benchmark-select {\n padding: 4px 8px;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 4px;\n font-size: 12px;\n}\n.benchmark-sources-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n.benchmark-sources-list {\n max-height: 150px;\n overflow-y: auto;\n border: 1px solid var(--jp-border-color2, #e5e7eb);\n border-radius: 4px;\n padding: 4px;\n}\n.benchmark-source-item {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 3px 6px;\n font-size: 11px;\n cursor: pointer;\n}\n.benchmark-source-item:hover { background: var(--jp-layout-color2, #f1f5f9); }\n.benchmark-source-name { flex: 1; font-family: monospace; }\n.benchmark-source-chunks { color: var(--jp-ui-font-color2, #9ca3af); font-size: 10px; }\n\n/* Generate progress */\n.benchmark-gen-progress { margin: 8px 0; }\n\n/* Generated preview */\n.benchmark-gen-preview {\n margin-top: 12px;\n border-top: 1px solid var(--jp-border-color2, #e5e7eb);\n padding-top: 12px;\n}\n.benchmark-gen-item {\n padding: 8px;\n border: 1px solid var(--jp-border-color2, #e5e7eb);\n border-radius: 6px;\n margin-bottom: 8px;\n font-size: 12px;\n}\n.benchmark-gen-field { display: flex; gap: 6px; margin-bottom: 6px; align-items: flex-start; }\n.benchmark-gen-label { font-weight: 600; font-size: 11px; min-width: 16px; padding-top: 4px; }\n.benchmark-gen-input {\n flex: 1;\n padding: 6px 8px;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 4px;\n font-size: 12px;\n font-family: inherit;\n resize: vertical;\n box-sizing: border-box;\n}\n.benchmark-gen-input:focus { border-color: #7c3aed; outline: none; }\n.benchmark-gen-footer { display: flex; align-items: center; justify-content: space-between; }\n.benchmark-gen-actions { display: flex; gap: 4px; align-items: center; }\n.benchmark-gen-src { color: var(--jp-ui-font-color2, #9ca3af); font-size: 10px; }\n\n/* Case list */\n.benchmark-case-list { display: flex; flex-direction: column; gap: 4px; }\n.benchmark-case-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border: 1px solid var(--jp-border-color2, #e5e7eb);\n border-radius: 6px;\n transition: background 0.1s;\n}\n.benchmark-case-item:hover { background: var(--jp-layout-color2, #f8fafc); }\n.benchmark-case-content { flex: 1; cursor: pointer; }\n.benchmark-case-q { font-size: 12px; font-weight: 500; }\n.benchmark-case-meta { display: flex; gap: 8px; margin-top: 2px; }\n.benchmark-case-category {\n font-size: 10px;\n background: #ede9fe;\n color: #7c3aed;\n padding: 1px 6px;\n border-radius: 3px;\n}\n.benchmark-case-difficulty {\n font-size: 10px;\n color: var(--jp-ui-font-color2, #9ca3af);\n}\n.benchmark-case-source {\n font-size: 10px;\n color: var(--jp-ui-font-color2, #9ca3af);\n font-family: monospace;\n}\n\n/* Progress */\n.benchmark-progress { margin-bottom: 16px; }\n.benchmark-progress-text { font-size: 12px; margin-bottom: 4px; }\n.benchmark-progress-bar {\n height: 6px;\n background: var(--jp-layout-color3, #e5e7eb);\n border-radius: 3px;\n overflow: hidden;\n}\n.benchmark-progress-fill {\n height: 100%;\n background: #7c3aed;\n border-radius: 3px;\n transition: width 0.3s;\n}\n\n/* Summary cards */\n.benchmark-summary { margin-bottom: 16px; }\n.benchmark-summary-title { font-size: 14px; font-weight: 600; margin-bottom: 10px; }\n.benchmark-summary-cards {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n.benchmark-score-card {\n flex: 1;\n min-width: 100px;\n padding: 12px;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 8px;\n text-align: center;\n}\n.benchmark-score-label {\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n color: var(--jp-ui-font-color2, #6b7280);\n margin-bottom: 4px;\n}\n.benchmark-score-value { font-size: 20px; font-weight: 700; }\n.benchmark-score-max { font-size: 10px; color: var(--jp-ui-font-color2, #9ca3af); }\n\n/* Results list */\n.benchmark-results-list { display: flex; flex-direction: column; gap: 4px; }\n.benchmark-result-item {\n border: 1px solid var(--jp-border-color2, #e5e7eb);\n border-radius: 6px;\n overflow: hidden;\n}\n.benchmark-result-summary {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 12px;\n cursor: pointer;\n font-size: 12px;\n}\n.benchmark-result-summary:hover { background: var(--jp-layout-color2, #f8fafc); }\n.benchmark-result-id { font-weight: 600; font-family: monospace; min-width: 120px; }\n.benchmark-result-score { font-weight: 600; min-width: 50px; }\n.benchmark-result-detail { padding: 12px; border-top: 1px solid var(--jp-border-color2, #e5e7eb); }\n.benchmark-result-section { margin-bottom: 8px; font-size: 12px; }\n.benchmark-result-response {\n background: var(--jp-layout-color2, #f8fafc);\n padding: 8px;\n border-radius: 4px;\n margin-top: 4px;\n max-height: 200px;\n overflow-y: auto;\n font-size: 11px;\n white-space: pre-wrap;\n}\n.benchmark-result-halluc {\n background: #fef2f2;\n padding: 8px;\n border-radius: 4px;\n color: #dc2626;\n}\n.benchmark-result-halluc ul { margin: 4px 0; padding-left: 16px; }\n\n/* History */\n.benchmark-history-list { display: flex; flex-direction: column; gap: 4px; }\n.benchmark-history-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 12px;\n}\n.benchmark-history-info { flex: 1; }\n.benchmark-history-date { font-size: 12px; font-weight: 500; }\n.benchmark-history-memo { font-size: 11px; color: var(--jp-ui-font-color2, #6b7280); }\n.benchmark-history-score { font-size: 14px; font-weight: 700; }\n.benchmark-history-count { font-size: 11px; color: var(--jp-ui-font-color2, #9ca3af); }\n.benchmark-history-entry { border: 1px solid var(--jp-border-color2, #e5e7eb); border-radius: 6px; margin-bottom: 4px; overflow: hidden; }\n.benchmark-history-detail { border-top: 1px solid var(--jp-border-color2, #e5e7eb); padding: 8px; display: flex; flex-direction: column; gap: 4px; max-height: 400px; overflow-y: auto; }\n\n/* Compare table */\n.benchmark-compare { margin-top: 16px; }\n.benchmark-compare-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n}\n.benchmark-compare-table th {\n background: var(--jp-layout-color2, #f1f5f9);\n padding: 6px 10px;\n text-align: left;\n font-weight: 600;\n border-bottom: 2px solid var(--jp-border-color1, #d1d5db);\n}\n.benchmark-compare-table td {\n padding: 6px 10px;\n border-bottom: 1px solid var(--jp-border-color2, #f1f5f9);\n}\n\n/* Modal */\n.benchmark-modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n.benchmark-modal {\n background: var(--jp-layout-color0, #fff);\n border-radius: 12px;\n padding: 20px;\n width: 480px;\n max-height: 80vh;\n overflow-y: auto;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);\n}\n.benchmark-modal-title {\n font-size: 15px;\n font-weight: 600;\n margin-bottom: 16px;\n}\n.benchmark-modal label {\n display: block;\n margin-bottom: 12px;\n font-size: 12px;\n font-weight: 500;\n color: var(--jp-ui-font-color1, #374151);\n}\n.benchmark-modal select,\n.benchmark-modal textarea {\n display: block;\n width: 100%;\n margin-top: 4px;\n padding: 6px 10px;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 6px;\n font-size: 12px;\n font-family: inherit;\n box-sizing: border-box;\n}\n.benchmark-modal textarea { resize: vertical; }\n.benchmark-modal-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 16px;\n}\n\n/* Empty state */\n.benchmark-empty {\n text-align: center;\n color: var(--jp-ui-font-color2, #9ca3af);\n padding: 32px;\n font-size: 12px;\n}\n\n/* 다크 테마 — 옅은 강조 배경을 어두운 틴트로 (이슈 #256) */\nbody[data-jp-theme-light="false"] .benchmark-case-category { background: #2e1f4d; color: #c4b5fd; }\nbody[data-jp-theme-light="false"] .benchmark-result-halluc { background: #3b1d1d; color: #fca5a5; }\n',""]);const p=i;e.d(o,["A",0,p])},562(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a)()(t());i.push([n.id,'/**\n * Cell Action Buttons Styling\n * Based on Chrome Agent button patterns\n */\n\n/* Button Container - Horizontal layout at top of cell, aligned with code */\n.jp-agent-cell-buttons {\n display: flex !important;\n flex-direction: row !important;\n gap: 4px !important;\n align-items: center !important;\n justify-content: flex-start !important;\n padding: 4px 8px !important;\n background: rgba(255, 255, 255, 0.05) !important;\n border-bottom: 1px solid var(--jp-border-color2) !important;\n /* padding-left will be set dynamically via inline style to match prompt width */\n}\n\n/* Base Button Style */\n.jp-agent-button {\n width: 24px !important;\n height: 24px !important;\n border: 1px solid var(--jp-border-color2) !important;\n border-radius: 4px !important;\n background: var(--jp-layout-color1) !important;\n cursor: pointer !important;\n display: inline-flex !important;\n align-items: center !important;\n justify-content: center !important;\n font-size: 12px !important;\n font-weight: bold !important;\n color: var(--jp-ui-font-color1) !important;\n transition: all 0.2s ease;\n padding: 0 !important;\n margin: 0 2px !important;\n outline: none;\n opacity: 1 !important;\n visibility: visible !important;\n}\n\n.jp-agent-button:hover {\n background: var(--jp-layout-color2);\n border-color: var(--jp-brand-color1);\n transform: scale(1.05);\n}\n\n.jp-agent-button:active {\n transform: scale(0.95);\n}\n\n.jp-agent-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.jp-agent-button:disabled:hover {\n transform: none;\n background: transparent;\n border-color: var(--jp-border-color2);\n}\n\n/* Button Variants */\n.jp-agent-button-explain {\n color: var(--jp-info-color1);\n}\n\n.jp-agent-button-explain:hover {\n background: var(--jp-info-color3);\n border-color: var(--jp-info-color1);\n}\n\n.jp-agent-button-custom {\n color: var(--jp-warn-color1);\n}\n\n.jp-agent-button-custom:hover {\n background: var(--jp-warn-color3);\n border-color: var(--jp-warn-color1);\n}\n\n/* Custom Prompt Dialog Overlay */\n.jp-agent-dialog-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n backdrop-filter: blur(2px);\n}\n\n/* Dialog Container */\n.jp-agent-dialog {\n background: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color1);\n border-radius: 8px;\n padding: 24px;\n max-width: 600px;\n width: 90%;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.jp-agent-dialog h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n}\n\n/* Dialog Labels */\n.jp-agent-dialog-label {\n display: block;\n font-size: 12px;\n font-weight: 500;\n color: var(--jp-ui-font-color2);\n margin-bottom: 4px;\n}\n\n/* Cell Preview */\n.jp-agent-dialog-preview {\n background: var(--jp-layout-color0);\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n padding: 12px;\n max-height: 100px;\n overflow: auto;\n font-family: var(--jp-code-font-family);\n font-size: 12px;\n color: var(--jp-ui-font-color1);\n margin: 0;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* Prompt Input */\n.jp-agent-dialog-input {\n width: 100%;\n min-height: 100px;\n padding: 12px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n font-family: var(--jp-ui-font-family);\n font-size: 14px;\n resize: vertical;\n outline: none;\n box-sizing: border-box;\n}\n\n.jp-agent-dialog-input:focus {\n border-color: var(--jp-brand-color1);\n box-shadow: 0 0 0 2px var(--jp-brand-color3);\n}\n\n.jp-agent-dialog-input::placeholder {\n color: var(--jp-ui-font-color3);\n}\n\n/* Helper Text */\n.jp-agent-dialog-helper {\n font-size: 11px;\n color: var(--jp-ui-font-color3);\n margin-top: -8px;\n}\n\n/* Dialog Buttons */\n.jp-agent-dialog-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 8px;\n}\n\n.jp-agent-dialog-button {\n padding: 8px 16px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n background: var(--jp-layout-color2);\n color: var(--jp-ui-font-color1);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n outline: none;\n}\n\n.jp-agent-dialog-button:hover {\n background: var(--jp-layout-color3);\n border-color: var(--jp-border-color1);\n}\n\n.jp-agent-dialog-button:active {\n transform: scale(0.98);\n}\n\n.jp-agent-dialog-button-primary {\n background: var(--jp-brand-color1);\n color: white;\n border-color: var(--jp-brand-color1);\n}\n\n.jp-agent-dialog-button-primary:hover {\n background: var(--jp-brand-color2);\n border-color: var(--jp-brand-color2);\n}\n\n.jp-agent-dialog-button-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Dark Theme Adjustments */\nbody[data-jp-theme-light="false"] .jp-agent-dialog {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.6);\n}\n\nbody[data-jp-theme-light="false"] .jp-agent-dialog-preview {\n background: var(--jp-layout-color2);\n}\n\n/* Accessibility: Focus Visible */\n.jp-agent-button:focus-visible {\n outline: 2px solid var(--jp-brand-color1);\n outline-offset: 2px;\n}\n\n.jp-agent-dialog-button:focus-visible {\n outline: 2px solid var(--jp-brand-color1);\n outline-offset: 2px;\n}\n\n.jp-agent-dialog-input:focus-visible {\n outline: none;\n}\n',""]);const p=i;e.d(o,["A",0,p])},3414(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a)()(t());i.push([n.id,"/**\n * Shared Code Block Styles\n * Used by both Chat mode and Agent mode\n * Uses JupyterLab CSS variables for theme integration\n */\n\n/* ================================\n Code Block Container\n ================================ */\n.code-block-container {\n border-radius: 6px !important;\n overflow: hidden !important;\n margin: 8px 0 !important;\n position: relative;\n background-color: var(--jp-layout-color1) !important;\n border: 1px solid var(--jp-border-color2) !important;\n}\n\n/* ================================\n Code Block Header\n ================================ */\n.code-block-header {\n display: flex !important;\n align-items: center !important;\n justify-content: space-between !important;\n padding: 6px 12px !important;\n background-color: var(--jp-layout-color2) !important;\n border-bottom: 1px solid var(--jp-border-color2) !important;\n}\n\n/* Language label */\n.code-block-language {\n font-size: 11px !important;\n font-weight: 500 !important;\n text-transform: uppercase !important;\n letter-spacing: 0.5px !important;\n color: var(--jp-ui-font-color2) !important;\n font-family: var(--jp-code-font-family) !important;\n}\n\n/* Special path display */\n.code-block-language.jp-agent-interrupt-path {\n text-transform: none !important;\n font-weight: 400 !important;\n color: var(--jp-brand-color1) !important;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 200px;\n}\n\n/* ================================\n Code Block Actions\n ================================ */\n.code-block-actions {\n display: flex !important;\n align-items: center !important;\n gap: 6px !important;\n}\n\n/* Toggle button */\n.code-block-toggle {\n position: absolute;\n bottom: 8px;\n right: 8px;\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n background: var(--jp-layout-color2);\n color: var(--jp-ui-font-color2);\n opacity: 0.8;\n}\n\n.code-block-toggle:hover {\n color: var(--jp-ui-font-color1);\n opacity: 1;\n}\n\n.code-block-toggle-icon {\n font-size: 12px;\n transition: transform 0.2s ease;\n}\n\n/* Apply button (for agent mode) */\n.code-block-apply {\n padding: 4px 8px !important;\n font-size: 11px !important;\n font-weight: 500 !important;\n border-radius: 4px !important;\n cursor: pointer !important;\n transition: all 0.15s ease !important;\n background: var(--jp-brand-color1) !important;\n color: var(--jp-ui-inverse-font-color1) !important;\n border: none !important;\n}\n\n.code-block-apply:hover {\n background: var(--jp-brand-color0) !important;\n}\n\n.code-block-apply:active {\n transform: scale(0.98);\n}\n\n.code-block-apply:disabled {\n opacity: 0.5 !important;\n cursor: not-allowed !important;\n}\n\n/* Copy button */\n.code-block-copy {\n padding: 4px 8px !important;\n font-size: 11px !important;\n font-weight: 500 !important;\n border-radius: 4px !important;\n cursor: pointer !important;\n transition: all 0.15s ease !important;\n background: var(--jp-layout-color2) !important;\n color: var(--jp-ui-font-color2) !important;\n border: 1px solid var(--jp-border-color2) !important;\n}\n\n.code-block-copy:hover {\n background: var(--jp-layout-color3) !important;\n color: var(--jp-ui-font-color1) !important;\n}\n\n/* ================================\n Code Block Content\n ================================ */\n\n/* Collapsed state */\n.code-block-container:not(.is-expanded) .code-block {\n max-height: 200px !important;\n overflow: hidden !important;\n position: relative !important;\n}\n\n/* Fade gradient for collapsed blocks */\n.code-block-container:not(.is-expanded) .code-block::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 50px;\n pointer-events: none;\n background: linear-gradient(to bottom, transparent, var(--jp-layout-color1));\n}\n\n/* Expanded state */\n.code-block-container.is-expanded .code-block {\n max-height: none !important;\n overflow: auto !important;\n}\n\n.code-block-container.is-expanded {\n max-height: 600px;\n overflow: auto;\n}\n\n/* Pre and code elements */\npre.code-block,\n.code-block {\n margin: 0 !important;\n padding: 12px !important;\n overflow-x: auto !important;\n font-size: inherit !important;\n line-height: var(--jp-code-line-height) !important;\n font-family: var(--jp-code-font-family) !important;\n background-color: var(--jp-layout-color0) !important;\n color: var(--jp-content-font-color1) !important;\n}\n\n.code-block code,\npre.code-block code {\n font-family: inherit !important;\n font-size: inherit !important;\n background: transparent !important;\n padding: 0 !important;\n color: var(--jp-content-font-color1) !important;\n}\n\n/* ================================\n Syntax Highlighting\n Uses JupyterLab mirror-editor variables where available\n ================================ */\n/* highlight.js (hljs) 클래스 — JupyterLab 테마 변수 사용 */\n.hljs-comment,\n.hljs-quote {\n color: var(--jp-mirror-editor-comment-color, #6a737d);\n font-style: italic;\n}\n\n.hljs-string,\n.hljs-regexp,\n.hljs-addition {\n color: var(--jp-mirror-editor-string-color, #032f62);\n}\n\n.hljs-number {\n color: var(--jp-mirror-editor-number-color, #005cc5);\n}\n\n.hljs-keyword,\n.hljs-selector-tag {\n color: var(--jp-mirror-editor-keyword-color, #d73a49);\n font-weight: 500;\n}\n\n.hljs-built_in,\n.hljs-type {\n color: var(--jp-mirror-editor-builtin-color, #6f42c1);\n}\n\n.hljs-title,\n.hljs-title\\.function_,\n.hljs-section {\n color: var(--jp-mirror-editor-def-color, #6f42c1);\n}\n\n.hljs-literal,\n.hljs-variable,\n.hljs-template-variable {\n color: var(--jp-mirror-editor-number-color, #005cc5);\n}\n\n.hljs-attr,\n.hljs-attribute {\n color: var(--jp-mirror-editor-attribute-color, #005cc5);\n}\n\n.hljs-deletion {\n color: #d73a49;\n}\n\n.hljs-meta,\n.hljs-meta .hljs-keyword {\n color: var(--jp-mirror-editor-meta-color, #005cc5);\n}\n\n.hljs-params {\n color: var(--jp-content-font-color1, #24292e);\n}\n\n/* Legacy syntax-* 클래스 (하위 호환) */\n.syntax-comment {\n color: var(--jp-mirror-editor-comment-color, #6a737d);\n font-style: italic;\n}\n\n.syntax-string {\n color: var(--jp-mirror-editor-string-color, #032f62);\n}\n\n.syntax-number {\n color: var(--jp-mirror-editor-number-color, #005cc5);\n}\n\n.syntax-keyword {\n color: var(--jp-mirror-editor-keyword-color, #d73a49);\n font-weight: 500;\n}\n\n.syntax-builtin {\n color: var(--jp-mirror-editor-builtin-color, #6f42c1);\n}\n\n.syntax-function {\n color: var(--jp-mirror-editor-def-color, #6f42c1);\n}\n\n.syntax-operator {\n color: var(--jp-mirror-editor-operator-color, var(--jp-content-font-color1));\n}\n\n.syntax-bracket {\n color: var(--jp-mirror-editor-bracket-color, var(--jp-content-font-color1));\n}\n\n/* ================================\n Diff Highlighting\n ================================ */\n.code-block-container.diff-block {\n border-left: 3px solid var(--jp-success-color1, #28a745);\n}\n\n.diff-add {\n display: block;\n background-color: var(--jp-success-color3, rgba(40, 167, 69, 0.15));\n color: var(--jp-success-color1, #22863a);\n}\n\n.diff-del {\n display: block;\n background-color: var(--jp-error-color3, rgba(215, 58, 73, 0.15));\n color: var(--jp-error-color1, #cb2431);\n}\n\n.diff-header {\n color: var(--jp-brand-color1, #005cc5);\n font-weight: bold;\n}\n\n.diff-hunk {\n color: var(--jp-mirror-editor-builtin-color, #6f42c1);\n font-style: italic;\n}\n\n.diff-context {\n color: var(--jp-content-font-color1);\n}\n\n/* Diff line counts in header */\n.diff-line-counts {\n display: flex;\n gap: 8px;\n font-size: 11px;\n font-weight: 500;\n font-family: var(--jp-code-font-family);\n margin-left: auto;\n margin-right: 8px;\n}\n\n.diff-additions {\n color: var(--jp-success-color1, #22863a);\n background: var(--jp-success-color3, rgba(40, 167, 69, 0.15));\n padding: 1px 6px;\n border-radius: 3px;\n}\n\n.diff-deletions {\n color: var(--jp-error-color1, #cb2431);\n background: var(--jp-error-color3, rgba(215, 58, 73, 0.15));\n padding: 1px 6px;\n border-radius: 3px;\n}\n\n/* ================================\n Inline Code\n ================================ */\n.inline-code {\n font-family: var(--jp-code-font-family) !important;\n font-size: 0.9em !important;\n padding: 2px 6px !important;\n border-radius: 4px !important;\n background: var(--jp-layout-color2) !important;\n color: var(--jp-mirror-editor-keyword-color, var(--jp-content-font-color1)) !important;\n}\n",""]);const p=i;e.d(o,["A",0,p])},8065(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a)()(t());i.push([n.id,"/**\n * diff 뷰어 (이슈 #147) — utils/diff.ts 의 renderDiffHtml 이 만든 마크업을 그린다.\n *\n * 한 뷰에 unified 와 split 본문이 둘 다 들어 있고, data-layout 이 어느 쪽을 보일지 정한다.\n * 토글이 DOM 을 다시 그리지 않고 속성만 바꾸게 한 것은 rendermime 이 메시지를 다시 그릴 때\n * React 상태가 남지 않기 때문이다.\n */\n\n.jp-diff-view,\n.jp-agent-session-diff {\n --codebuff-diff-add-bg: rgba(46, 160, 67, 0.15);\n --codebuff-diff-add-fg: #1a7f37;\n --codebuff-diff-del-bg: rgba(248, 81, 73, 0.15);\n --codebuff-diff-del-fg: #cf222e;\n --codebuff-diff-hunk-bg: rgba(84, 174, 255, 0.12);\n --codebuff-diff-ln-fg: var(--jp-ui-font-color3, #999);\n}\n\n.jp-diff-view {\n margin: 6px 0;\n border: 1px solid var(--jp-border-color2, #e0e0e0);\n border-radius: var(--jp-agent-border-radius, 4px);\n font-size: var(--jp-code-font-size, 12px);\n background: var(--jp-layout-color0, #fff);\n overflow: hidden;\n}\n\nbody[data-jp-theme-light=\"false\"] .jp-diff-view,\nbody[data-jp-theme-light=\"false\"] .jp-agent-session-diff {\n --codebuff-diff-add-fg: #3fb950;\n --codebuff-diff-del-fg: #f85149;\n}\n\n.jp-diff-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 4px 8px;\n border-bottom: 1px solid var(--jp-border-color2, #e0e0e0);\n background: var(--jp-layout-color1, #f7f7f7);\n font-family: var(--jp-ui-font-family);\n}\n\n.jp-diff-count-add {\n color: var(--codebuff-diff-add-fg);\n font-weight: 600;\n}\n\n.jp-diff-count-del {\n color: var(--codebuff-diff-del-fg);\n font-weight: 600;\n}\n\n.jp-diff-layout-toggle {\n padding: 2px 8px;\n border: 1px solid var(--jp-border-color1, #bdbdbd);\n border-radius: var(--jp-agent-border-radius, 4px);\n background: var(--jp-layout-color0, #fff);\n color: var(--jp-ui-font-color1, #333);\n font-size: 11px;\n cursor: pointer;\n}\n\n.jp-diff-layout-toggle:hover {\n background: var(--jp-layout-color2, #eee);\n}\n\n.jp-diff-layout-toggle:focus-visible {\n outline: 2px solid var(--jp-brand-color1, #1976d2);\n outline-offset: 1px;\n}\n\n.jp-diff-file + .jp-diff-file {\n border-top: 1px solid var(--jp-border-color2, #e0e0e0);\n}\n\n.jp-diff-file-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 8px;\n cursor: pointer;\n font-family: var(--jp-code-font-family);\n background: var(--jp-layout-color1, #f7f7f7);\n}\n\n.jp-diff-file-path {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--jp-ui-font-color1, #333);\n}\n\n.jp-diff-unified,\n.jp-diff-split {\n overflow-x: auto;\n font-family: var(--jp-code-font-family);\n line-height: 1.5;\n}\n\n.jp-diff-view[data-layout='unified'] .jp-diff-split,\n.jp-diff-view[data-layout='split'] .jp-diff-unified {\n display: none;\n}\n\n.jp-diff-hunk-header {\n padding: 0 8px;\n background: var(--codebuff-diff-hunk-bg);\n color: var(--jp-ui-font-color2, #666);\n white-space: pre;\n}\n\n/* unified: 옛 번호 · 새 번호 · 부호 · 코드 */\n.jp-diff-line {\n display: grid;\n grid-template-columns: 3.5em 3.5em 1.5em 1fr;\n white-space: pre;\n}\n\n/* split: (번호 · 코드) × 2 */\n.jp-diff-row {\n display: grid;\n grid-template-columns: 3.5em minmax(0, 1fr) 3.5em minmax(0, 1fr);\n white-space: pre;\n}\n\n.jp-diff-ln {\n padding: 0 6px;\n text-align: right;\n color: var(--codebuff-diff-ln-fg);\n user-select: none;\n}\n\n.jp-diff-sign {\n text-align: center;\n user-select: none;\n}\n\n.jp-diff-code {\n padding-right: 8px;\n overflow: hidden;\n}\n\n.jp-diff-split .jp-diff-code {\n overflow-x: auto;\n}\n\n.jp-diff-line-add,\n.jp-diff-code-add {\n background: var(--codebuff-diff-add-bg);\n}\n\n.jp-diff-line-del,\n.jp-diff-code-del {\n background: var(--codebuff-diff-del-bg);\n}\n\n.jp-diff-line-add .jp-diff-sign {\n color: var(--codebuff-diff-add-fg);\n}\n\n.jp-diff-line-del .jp-diff-sign {\n color: var(--codebuff-diff-del-fg);\n}\n\n.jp-diff-line-note,\n.jp-diff-code-note {\n color: var(--jp-ui-font-color2, #666);\n font-style: italic;\n}\n\n.jp-diff-empty {\n background: var(--jp-layout-color2, #eee);\n}\n\n/* codex 진행 이력의 파일 변경 — 터미널 블록과 같은 들여쓰기 */\n.jp-terminal-diff {\n margin: 2px 0 4px 18px;\n}\n\n.jp-terminal-diff .jp-diff-view {\n margin-top: 2px;\n}\n\n/* 입력창 위 세션 변경 스트립 — 이번 대화에서 바뀐 파일 */\n.jp-agent-session-diff {\n margin: 0 0 6px;\n}\n\n.jp-agent-session-diff-toggle {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 2px 8px;\n border: 1px solid var(--jp-border-color2, #e0e0e0);\n border-radius: var(--jp-agent-border-radius, 4px);\n background: var(--jp-layout-color1, #f7f7f7);\n color: var(--jp-ui-font-color1, #333);\n font-size: 11px;\n cursor: pointer;\n}\n\n.jp-agent-session-diff-toggle:hover {\n background: var(--jp-layout-color2, #eee);\n}\n\n.jp-agent-session-diff-toggle:focus-visible {\n outline: 2px solid var(--jp-brand-color1, #1976d2);\n outline-offset: 1px;\n}\n\n.jp-agent-session-diff-body {\n max-height: 40vh;\n overflow-y: auto;\n}\n\n/* `셀에 적용` 미리보기 다이얼로그 */\n.jp-agent-apply-diff-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--jp-dialog-background, rgba(0, 0, 0, 0.25));\n}\n\n.jp-agent-apply-diff-dialog {\n width: min(900px, 92vw);\n max-height: 80vh;\n overflow-y: auto;\n padding: 16px;\n border: 1px solid var(--jp-border-color2, #e0e0e0);\n border-radius: var(--jp-agent-border-radius, 4px);\n background: var(--jp-layout-color1, #fff);\n color: var(--jp-ui-font-color1, #333);\n box-shadow: var(--jp-elevation-z8, 0 2px 8px rgba(0, 0, 0, 0.2));\n}\n\n.jp-agent-apply-diff-title {\n margin: 0 0 8px;\n font-size: 14px;\n font-weight: 500;\n}\n\n.jp-agent-apply-diff-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 12px;\n}\n\n.jp-agent-apply-diff-actions button {\n padding: 4px 14px;\n border: 1px solid var(--jp-border-color1, #bdbdbd);\n border-radius: var(--jp-agent-border-radius, 4px);\n background: var(--jp-layout-color0, #fff);\n color: var(--jp-ui-font-color1, #333);\n cursor: pointer;\n}\n\n.jp-agent-apply-diff-actions .jp-agent-apply-diff-confirm {\n border-color: var(--jp-brand-color1, #1976d2);\n background: var(--jp-brand-color1, #1976d2);\n color: var(--jp-ui-inverse-font-color1, #fff);\n}\n\n.jp-agent-apply-diff-actions button:focus-visible {\n outline: 2px solid var(--jp-brand-color1, #1976d2);\n outline-offset: 1px;\n}\n",""]);const p=i;e.d(o,["A",0,p])},2735(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a)()(t());i.push([n.id,"/* 파일 우클릭 → git 이력 diff 탭 (이슈 #153). diff 본문은 diff-view.css 가 그린다 */\n\n.jp-codebuff-git-history {\n display: flex;\n flex-direction: column;\n gap: var(--jp-agent-spacing-md, 8px);\n padding: var(--jp-agent-spacing-lg, 16px);\n overflow: auto;\n background: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n font-size: var(--jp-ui-font-size1);\n}\n\n.jp-codebuff-git-history-dates {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--jp-agent-spacing-md, 8px);\n}\n\n.jp-codebuff-git-history-date {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.jp-codebuff-git-history-date input {\n background: var(--jp-input-background);\n color: var(--jp-ui-font-color1);\n border: var(--jp-border-width) solid var(--jp-border-color1);\n border-radius: var(--jp-agent-border-radius, 4px);\n padding: 2px 4px;\n color-scheme: light dark;\n}\n\n.jp-codebuff-git-history-commits {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--jp-agent-spacing-sm, 4px);\n}\n\n.jp-codebuff-git-history-commits table {\n display: block;\n max-height: 220px;\n overflow: auto;\n border: var(--jp-border-width) solid var(--jp-border-color2);\n border-collapse: collapse;\n}\n\n.jp-codebuff-git-history-commits th {\n position: sticky;\n top: 0;\n background: var(--jp-layout-color2);\n padding: 2px 8px;\n text-align: left;\n}\n\n.jp-codebuff-git-history-commits td {\n padding: 1px 8px;\n border-top: var(--jp-border-width) solid var(--jp-border-color3);\n}\n\n.jp-codebuff-git-history-label {\n font-family: var(--jp-code-font-family);\n white-space: nowrap;\n}\n\n.jp-codebuff-git-history-status,\n.jp-codebuff-git-history-target {\n color: var(--jp-ui-font-color2);\n}\n\n.jp-codebuff-git-history-status:empty,\n.jp-codebuff-git-history-target:empty {\n display: none;\n}\n",""]);const p=i;e.d(o,["A",0,p])},4040(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a),p=e(3414),l=e(562),d=e(9922),c=e(8376),s=e(1474),g=e(4289),b=e(324),f=e(4065),x=e(8065),u=e(2735),m=i()(t());m.i(p.A),m.i(l.A),m.i(d.A),m.i(c.A),m.i(s.A),m.i(g.A),m.i(b.A),m.i(f.A),m.i(x.A),m.i(u.A),m.push([n.id,'/**\n * Main Stylesheet for Jupyter Agent Extension\n * Imports all component styles\n */\n\n/* Global Variables */\n:root {\n --jp-agent-spacing-sm: 4px;\n --jp-agent-spacing-md: 8px;\n --jp-agent-spacing-lg: 16px;\n --jp-agent-border-radius: 4px;\n --jp-agent-transition: all 0.2s ease;\n}\n\n/* Extension Root */\n.jp-agent-root {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n/* RAG 패널 팔레트(rag-shared.tsx `colors`)의 다크 테마 값.\n 라이트는 이 변수가 없어 코드의 기본값을 그대로 쓴다. 강조색(primary·danger·success)은 그대로 둔다. */\nbody[data-jp-theme-light="false"] {\n --codebuff-rag-white: var(--jp-layout-color1);\n --codebuff-rag-bg: var(--jp-layout-color0);\n --codebuff-rag-gray-50: #262626;\n --codebuff-rag-gray-100: #2e2e2e;\n --codebuff-rag-gray-200: #3a3a3a;\n --codebuff-rag-gray-300: #4a4a4a;\n --codebuff-rag-gray-400: #8a8a8a;\n --codebuff-rag-gray-500: #a0a0a0;\n --codebuff-rag-gray-600: #b8b8b8;\n --codebuff-rag-gray-700: #d0d0d0;\n --codebuff-rag-gray-800: #e6e6e6;\n --codebuff-rag-primary-light: #1e3a5f;\n --codebuff-rag-danger-light: #3b1d1d;\n --codebuff-rag-success-light: #16301f;\n --codebuff-rag-warn-light: #3a2a0f;\n --codebuff-rag-primary-border: #2b5486;\n}\n\n/* Codebuff 확인 다이얼로그(`notebook-toolbar-plugin.ts`·`cell-buttons-plugin.ts`)의 다크 테마 값 (이슈 #256).\n 다이얼로그는 인라인 스타일이라 CSS 규칙이 닿지 않는다 — 변수로만 바꾼다.\n 라이트는 이 변수가 없어 코드의 기본값을 그대로 쓴다. 확인 버튼의 파란색은 그대로 둔다. */\nbody[data-jp-theme-light="false"] {\n --codebuff-dialog-bg: var(--jp-layout-color1);\n --codebuff-dialog-border: var(--jp-border-color1);\n --codebuff-dialog-title: var(--jp-ui-font-color0);\n --codebuff-dialog-text: var(--jp-ui-font-color1);\n --codebuff-dialog-muted: var(--jp-ui-font-color2);\n --codebuff-dialog-hover: var(--jp-layout-color2);\n --codebuff-dialog-input-bg: var(--jp-layout-color0);\n --codebuff-dialog-input-border: var(--jp-border-color1);\n --codebuff-dialog-input-border-hover: var(--jp-border-color0);\n}\n',""]);const j=m;e.d(o,["A",0,j])},1474(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a)()(t());i.push([n.id,'/**\n * Launcher Icon Styles\n * Override default launcher icon styles for Codebuff\n */\n\n/* Target Codebuff launcher card icon specifically */\n.jp-LauncherCard[data-category="Notebook"][title="Codebuff"] .jp-LauncherCard-icon {\n background-color: white !important;\n border-radius: 8px;\n padding: 8px;\n}\n\n/* If the above doesn\'t work, try targeting by the icon class */\n.jp-icon-codebuff\\:codebuff-icon {\n background-color: white !important;\n border-radius: 8px;\n padding: 4px;\n}\n\n/* Override any svg fill colors within the Codebuff icon */\n.jp-LauncherCard[data-category="Notebook"][title="Codebuff"] .jp-LauncherCard-icon svg rect[fill="#1976d2"] {\n fill: white !important;\n}\n\n.jp-LauncherCard[data-category="Notebook"][title="Codebuff"] .jp-LauncherCard-icon svg path {\n stroke: #6b7280 !important;\n}\n',""]);const p=i;e.d(o,["A",0,p])},8376(n,o,e){var r=e(1601),t=e.n(r),a=e(6314),i=e.n(a)()(t());i.push([n.id,"/**\n * Settings Panel Styles\n */\n\n/* Overlay */\n.jp-agent-settings-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10000;\n}\n\n/* Dialog */\n.jp-agent-settings-dialog {\n background-color: var(--jp-layout-color1);\n border-radius: 8px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n width: 90%;\n max-width: 500px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n}\n\n/* Header */\n.jp-agent-settings-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--jp-border-color1);\n}\n\n.jp-agent-settings-header h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-settings-close {\n background: none;\n border: none;\n font-size: 24px;\n color: var(--jp-ui-font-color2);\n cursor: pointer;\n padding: 0;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: background-color 0.2s;\n}\n\n.jp-agent-settings-close:hover {\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color1);\n}\n\n/* Content */\n.jp-agent-settings-content {\n padding: 20px;\n overflow-y: auto;\n overflow-x: hidden;\n flex: 1;\n}\n\n.jp-agent-settings-group {\n margin-bottom: 16px;\n}\n\n.jp-agent-settings-label {\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-settings-input,\n.jp-agent-settings-select {\n width: 100%;\n padding: 8px 12px;\n font-size: 13px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n background-color: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n font-family: var(--jp-ui-font-family);\n}\n\n.jp-agent-settings-textarea {\n width: -webkit-fill-available;\n min-height: 140px;\n resize: vertical;\n font-family: var(--jp-code-font-family);\n line-height: 1.4;\n}\n\n.jp-agent-settings-input:focus,\n.jp-agent-settings-select:focus {\n outline: none;\n border-color: var(--jp-brand-color1);\n box-shadow: 0 0 0 1px var(--jp-brand-color1);\n}\n\n.jp-agent-settings-input::placeholder {\n color: var(--jp-ui-font-color3);\n}\n\n.jp-agent-settings-provider {\n margin-top: 20px;\n}\n\n.jp-agent-settings-provider h3 {\n margin: 0 0 16px 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-settings-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-settings-checkbox input {\n width: 14px;\n height: 14px;\n cursor: pointer;\n}\n\n/* Test Result */\n.jp-agent-settings-test-result {\n margin: 16px 20px 0;\n padding: 12px;\n border-radius: 4px;\n font-size: 13px;\n background-color: var(--jp-layout-color2);\n border: 1px solid var(--jp-border-color2);\n color: var(--jp-ui-font-color1);\n font-family: var(--jp-code-font-family);\n}\n\n/* Footer */\n.jp-agent-settings-footer {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--jp-border-color1);\n}\n\n.jp-agent-settings-button {\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 500;\n border-radius: 4px;\n border: none;\n cursor: pointer;\n transition: all 0.2s;\n font-family: var(--jp-ui-font-family);\n}\n\n.jp-agent-settings-button-secondary {\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-settings-button-secondary:hover {\n background-color: var(--jp-layout-color3);\n}\n\n.jp-agent-settings-inline-actions {\n display: flex;\n justify-content: flex-end;\n margin-top: 6px;\n}\n\n.jp-agent-settings-button-compact {\n padding: 6px 10px;\n font-size: 12px;\n}\n\n.jp-agent-settings-button-test {\n background-color: var(--jp-warn-color1);\n color: white;\n}\n\n.jp-agent-settings-button-test:hover:not(:disabled) {\n background-color: var(--jp-warn-color0);\n}\n\n.jp-agent-settings-button-test:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.jp-agent-settings-button-primary {\n background-color: var(--jp-brand-color1);\n color: white;\n}\n\n.jp-agent-settings-button-primary:hover {\n background-color: var(--jp-brand-color0);\n}\n\n.jp-agent-settings-button:active {\n transform: translateY(1px);\n}\n\n.jp-agent-settings-button-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Small Button Variant */\n.jp-agent-settings-button-small {\n padding: 4px 10px;\n font-size: 11px;\n}\n\n/* Danger Button (Delete) */\n.jp-agent-settings-button-danger {\n background-color: var(--jp-error-color1);\n color: white;\n}\n\n.jp-agent-settings-button-danger:hover:not(:disabled) {\n background-color: var(--jp-error-color0);\n}\n\n.jp-agent-settings-button-danger:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* Outline Button (Inactive state) */\n.jp-agent-settings-button-outline {\n background-color: transparent;\n border: 1px solid var(--jp-brand-color1);\n color: var(--jp-brand-color1);\n}\n\n.jp-agent-settings-button-outline:hover {\n background-color: var(--jp-brand-color3);\n}\n\n/* ========== API Keys Panel Styles ========== */\n\n.jp-agent-keys-panel {\n margin-top: 20px;\n padding: 16px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n background-color: var(--jp-layout-color0);\n}\n\n.jp-agent-keys-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.jp-agent-keys-header h4 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--jp-ui-font-color1);\n}\n\n.jp-agent-keys-count {\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n background-color: var(--jp-layout-color2);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.jp-agent-keys-error {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n margin-bottom: 12px;\n background-color: var(--jp-error-color3);\n border-radius: 4px;\n color: var(--jp-error-color1);\n font-size: 13px;\n}\n\n.jp-agent-keys-error button {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 16px;\n color: var(--jp-error-color1);\n padding: 0 4px;\n}\n\n.jp-agent-keys-error button:hover {\n opacity: 0.8;\n}\n\n.jp-agent-keys-list {\n max-height: 200px;\n overflow-y: auto;\n margin-bottom: 12px;\n}\n\n.jp-agent-keys-empty {\n padding: 24px 20px;\n text-align: center;\n color: var(--jp-ui-font-color2);\n font-size: 13px;\n background-color: var(--jp-layout-color1);\n border-radius: 4px;\n border: 1px dashed var(--jp-border-color2);\n}\n\n.jp-agent-key-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 12px;\n margin-bottom: 6px;\n border-radius: 4px;\n background-color: var(--jp-layout-color1);\n border: 1px solid var(--jp-border-color2);\n transition: border-color 0.2s, background-color 0.2s;\n}\n\n.jp-agent-key-item:last-child {\n margin-bottom: 0;\n}\n\n.jp-agent-key-item:hover {\n border-color: var(--jp-border-color1);\n}\n\n.jp-agent-key-item-active {\n border-color: var(--jp-brand-color1);\n background-color: var(--jp-brand-color3);\n}\n\n.jp-agent-key-info {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.jp-agent-key-masked {\n font-family: var(--jp-code-font-family);\n font-size: 12px;\n color: var(--jp-ui-font-color1);\n background-color: var(--jp-layout-color2);\n padding: 2px 6px;\n border-radius: 3px;\n}\n\n.jp-agent-key-status {\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.jp-agent-key-status-active {\n background-color: var(--jp-success-color3);\n color: var(--jp-success-color1);\n}\n\n.jp-agent-key-status-cooldown {\n background-color: var(--jp-warn-color3);\n color: var(--jp-warn-color1);\n}\n\n.jp-agent-key-status-disabled {\n background-color: var(--jp-layout-color2);\n color: var(--jp-ui-font-color2);\n}\n\n.jp-agent-key-current {\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n background-color: var(--jp-brand-color1);\n color: white;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.jp-agent-key-actions {\n display: flex;\n gap: 6px;\n}\n\n.jp-agent-keys-add {\n display: flex;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.jp-agent-keys-add input {\n flex: 1;\n min-width: 0;\n}\n\n.jp-agent-keys-add button {\n flex-shrink: 0;\n white-space: nowrap;\n}\n\n.jp-agent-keys-info-text {\n color: var(--jp-ui-font-color2);\n font-size: 11px;\n text-align: center;\n line-height: 1.5;\n padding-top: 8px;\n border-top: 1px solid var(--jp-border-color2);\n}\n\n/* ========== Summarization LLM Settings ========== */\n\n.jp-agent-settings-summarization {\n margin-top: 8px;\n padding: 16px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 6px;\n background-color: var(--jp-layout-color0);\n}\n\n.jp-agent-settings-summarization-header {\n display: flex;\n align-items: baseline;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.jp-agent-settings-summarization-header small {\n font-weight: normal;\n font-size: 11px;\n color: var(--jp-ui-font-color2);\n}\n\n.jp-agent-settings-summarization-content {\n margin-top: 12px;\n padding-left: 20px;\n border-left: 2px solid var(--jp-border-color2);\n}\n\n.jp-agent-settings-summarization-content .jp-agent-settings-group {\n margin-bottom: 12px;\n}\n\n.jp-agent-settings-summarization-content .jp-agent-settings-group:last-child {\n margin-bottom: 0;\n}\n\n.jp-agent-settings-summarization-hint {\n color: var(--jp-ui-font-color2);\n font-size: 11px;\n display: block;\n margin-top: 4px;\n}\n\n.jp-agent-settings-summarization-default-model {\n padding: 8px 12px;\n background-color: var(--jp-layout-color2);\n border-radius: 4px;\n font-size: 13px;\n color: var(--jp-ui-font-color1);\n}\n\n/* ========== Admin 공용 (RAG 관리 등) ========== */\n\n/* Row */\n.jp-admin-row-inline {\n display: flex;\n gap: 16px;\n}\n\n.jp-admin-inline-field {\n flex: 1;\n}\n\n/* Label */\n.jp-admin-label {\n display: block;\n margin-bottom: 6px;\n font-size: 13px;\n font-weight: 500;\n color: var(--jp-ui-font-color1);\n}\n\n/* Select */\n.jp-admin-select {\n width: 100%;\n padding: 8px 12px;\n font-size: 13px;\n border: 1px solid var(--jp-border-color2);\n border-radius: 4px;\n background-color: var(--jp-layout-color1);\n color: var(--jp-ui-font-color1);\n font-family: var(--jp-ui-font-family);\n box-sizing: border-box;\n cursor: pointer;\n}\n\n.jp-admin-select:focus {\n outline: none;\n border-color: var(--jp-brand-color1);\n box-shadow: 0 0 0 1px var(--jp-brand-color1);\n}\n\n/* Keys Container */\n.jp-admin-keys-container {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.jp-admin-key-row {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.jp-admin-key-index {\n font-size: 12px;\n color: var(--jp-ui-font-color2);\n min-width: 20px;\n}\n\n.jp-admin-key-row .jp-admin-input {\n flex: 1;\n}\n\n.jp-admin-btn-add {\n padding: 6px 12px;\n font-size: 12px;\n color: var(--jp-brand-color1);\n background: transparent;\n border: 1px dashed var(--jp-brand-color1);\n border-radius: 4px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.jp-admin-btn-add:hover {\n background-color: var(--jp-brand-color3);\n}\n\n.jp-admin-btn-remove {\n padding: 4px 8px;\n font-size: 16px;\n color: var(--jp-ui-font-color2);\n background: transparent;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: color 0.15s, background-color 0.15s;\n}\n\n.jp-admin-btn-remove:hover {\n color: var(--jp-error-color1);\n background-color: var(--jp-error-color3);\n}\n\n/* Error */\n.jp-agent-settings-error {\n padding: 12px;\n margin-bottom: 16px;\n background-color: var(--jp-error-color3);\n border-radius: 4px;\n color: var(--jp-error-color1);\n font-size: 13px;\n}\n\n/* ─── User Settings: Sections ─── */\n.jp-user-settings-section {\n margin-bottom: 30px;\n}\n.jp-user-settings-section:last-child {\n margin-bottom: 0;\n}\n.jp-user-settings-section-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--jp-ui-font-color0, #1f2937);\n margin: 0 0 12px;\n padding-bottom: 6px;\n border-bottom: 1px solid var(--jp-border-color1, #e5e7eb);\n}\n.jp-user-settings-hint {\n display: block;\n font-size: 11px;\n color: var(--jp-ui-font-color2, #94a3b8);\n margin-top: 4px;\n line-height: 1.5;\n}\n.jp-user-settings-hint-muted { color: #9ca3af; }\n.jp-user-settings-hint-warn { color: #f59e0b; }\n.jp-user-settings-status {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n}\n.jp-user-settings-status-dot { font-size: 14px; line-height: 1; }\n.jp-user-settings-status-ok { color: #16a34a; }\n.jp-user-settings-status-warn { color: #f59e0b; }\n.jp-user-settings-status-off { color: var(--jp-ui-font-color3); }\n/* 연결 상태·받은 설정 (이슈 #183 PR-B) */\n.jp-user-settings-status-row { margin-bottom: 6px; }\n.jp-user-settings-status-name { min-width: 120px; font-weight: 500; }\n.jp-user-settings-values summary { cursor: pointer; }\n.jp-user-settings-values-table { width: 100%; border-collapse: collapse; font-size: 12px; margin-top: 6px; }\n.jp-user-settings-values-table td { padding: 3px 6px; border-bottom: 1px solid var(--jp-border-color2); vertical-align: top; word-break: break-all; }\n\n.jp-user-settings-section .jp-user-settings-hint {\n word-break: break-all;\n}\n\n.jp-user-settings-dialog {\n max-width: 560px;\n}\n\n/* Label with inline tip icon */\n.jp-user-settings-label-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n/* Input box-sizing fix */\n.jp-agent-settings-input {\n box-sizing: border-box;\n}\n\n/* ─── User Settings: 포털/로컬 배지 (이슈 #171) ─── */\n.jp-user-settings-field-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n}\n.jp-user-settings-sync-badge {\n flex-shrink: 0;\n font-size: 10px;\n line-height: 1;\n padding: 2px 6px;\n border-radius: 8px;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n color: var(--jp-ui-font-color2, #94a3b8);\n margin-bottom: 6px;\n}\n.jp-user-settings-sync-badge-portal {\n border-color: var(--jp-brand-color1, #2563eb);\n color: var(--jp-brand-color1, #2563eb);\n}\n\n/* ─── 프로젝트 디렉터리 자동완성 (이슈 #171) ─── */\n.jp-dir-autocomplete {\n position: relative;\n}\n.jp-dir-autocomplete-list {\n position: absolute;\n z-index: 10;\n left: 0;\n right: 0;\n top: 100%;\n max-height: 220px;\n overflow-y: auto;\n margin: 2px 0 0;\n padding: 2px 0;\n list-style: none;\n background: var(--jp-layout-color1, #1f2937);\n border: 1px solid var(--jp-border-color1, #d1d5db);\n border-radius: 4px;\n box-shadow: var(--jp-elevation-z4, 0 2px 8px rgba(0, 0, 0, 0.2));\n}\n.jp-dir-autocomplete-option {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n font-size: 12px;\n cursor: pointer;\n}\n.jp-dir-autocomplete-option-active {\n background: var(--jp-layout-color2, #374151);\n}\n.jp-dir-autocomplete-path {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.jp-dir-autocomplete-badge {\n font-size: 10px;\n padding: 1px 4px;\n border-radius: 3px;\n border: 1px solid var(--jp-border-color1, #d1d5db);\n color: var(--jp-ui-font-color2, #94a3b8);\n}\n\n/* ─── 커스텀 스킬 목록 창 (이슈 #234) ─── */\n.jp-user-settings-link {\n background: none;\n border: none;\n padding: 0;\n font: inherit;\n color: var(--jp-brand-color1, #2563eb);\n text-decoration: underline;\n cursor: pointer;\n}\n.jp-skills-list-overlay {\n position: fixed;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.35);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10001;\n}\n.jp-skills-list-dialog {\n background-color: var(--jp-layout-color1);\n border-radius: 8px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);\n width: 90%;\n max-width: 520px;\n max-height: 70vh;\n display: flex;\n flex-direction: column;\n}\n.jp-skills-list-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--jp-border-color1);\n color: var(--jp-ui-font-color1);\n}\n.jp-skills-list-close {\n background: none;\n border: none;\n font-size: 20px;\n color: var(--jp-ui-font-color2);\n cursor: pointer;\n}\n.jp-skills-list-body {\n list-style: none;\n margin: 0;\n padding: 8px 16px;\n overflow-y: auto;\n}\n.jp-skills-list-item {\n padding: 6px 0;\n border-bottom: 1px solid var(--jp-border-color2);\n font-size: 12px;\n color: var(--jp-ui-font-color1);\n}\n.jp-skills-list-item-head { display: flex; align-items: center; gap: 6px; }\n.jp-skills-list-source { font-size: 11px; padding: 0 6px; border-radius: 8px; }\n.jp-skills-list-source-local { background: var(--jp-layout-color2); color: var(--jp-ui-font-color1); }\n.jp-skills-list-source-centri { background: var(--jp-layout-color3); color: var(--jp-brand-color1); }\n.jp-skills-list-scope { font-size: 11px; color: var(--jp-ui-font-color2); }\n.jp-skills-list-desc { margin-top: 2px; color: var(--jp-ui-font-color2); }\n.jp-skills-list-dir { margin-top: 2px; font-size: 11px; color: #9ca3af; word-break: break-all; }\n",""]);const p=i;e.d(o,["A",0,p])},6314(n){n.exports=function(n){var o=[];return o.toString=function(){return this.map(function(o){var e="",r=void 0!==o[5];return o[4]&&(e+="@supports (".concat(o[4],") {")),o[2]&&(e+="@media ".concat(o[2]," {")),r&&(e+="@layer".concat(o[5].length>0?" ".concat(o[5]):""," {")),e+=n(o),r&&(e+="}"),o[2]&&(e+="}"),o[4]&&(e+="}"),e}).join("")},o.i=function(n,e,r,t,a){"string"==typeof n&&(n=[[null,n,void 0]]);var i={};if(r)for(var p=0;p<this.length;p++){var l=this[p][0];null!=l&&(i[l]=!0)}for(var d=0;d<n.length;d++){var c=[].concat(n[d]);r&&i[c[0]]||(void 0!==a&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=a),e&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=e):c[2]=e),t&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=t):c[4]="".concat(t)),o.push(c))}},o}},4417(n){n.exports=function(n,o){return o||(o={}),n?(n=String(n.__esModule?n.default:n),/^['"].*['"]$/.test(n)&&(n=n.slice(1,-1)),o.hash&&(n+=o.hash),/["'() \t\n]|(%20)/.test(n)||o.needQuotes?'"'.concat(n.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):n):n}},1601(n){n.exports=function(n){return n[1]}},2921(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27%232196f3%27%3E%3Cpath d=%27M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z%27/%3E%3C/svg%3E"},8660(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27%232196f3%27%3E%3Cpath d=%27M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 17h-2v-2h2v2zm2.07-7.75l-.9.92C13.45 12.9 13 13.5 13 15h-2v-.5c0-1.1.45-2.1 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41 0-1.1-.9-2-2-2s-2 .9-2 2H8c0-2.21 1.79-4 4-4s4 1.79 4 4c0 .88-.36 1.68-.93 2.25z%27/%3E%3C/svg%3E"},668(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27%232196f3%27%3E%3Cpath d=%27M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z%27/%3E%3C/svg%3E"},8378(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27%232196f3%27%3E%3Cpath d=%27M6 2c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6H6zm7 7V3.5L18.5 9H13z%27/%3E%3C/svg%3E"},7086(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27%234caf50%27%3E%3Cpath d=%27M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z%27/%3E%3C/svg%3E"},5129(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27%239e9e9e%27%3E%3Cpath d=%27M6 18l8.5-6L6 6v12zM16 6v12h2V6h-2z%27/%3E%3C/svg%3E"},8380(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27%23f44336%27%3E%3Cpath d=%27M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z%27/%3E%3C/svg%3E"},7063(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27%23ff9800%27%3E%3Cpath d=%27M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z%27/%3E%3C/svg%3E"},5043(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27%23ff9800%27%3E%3Cpath d=%27M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z%27/%3E%3C/svg%3E"},2368(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27%23ffc107%27%3E%3Cpath d=%27M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z%27/%3E%3C/svg%3E"},5549(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2712%27 height=%2712%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23666%27 stroke-width=%272%27%3E%3Cpath d=%27M6 9l6 6 6-6%27/%3E%3C/svg%3E"},854(n){n.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2712%27 height=%2712%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27%23999%27 stroke-width=%272%27%3E%3Cpath d=%27M6 9l6 6 6-6%27/%3E%3C/svg%3E"},9862(n){n.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cGF0aCBkPSJNOCAyQzQuNjkgMiAyIDQuNjkgMiA4czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02em0wIDEwLjVjLTIuNDggMC00LjUtMi4wMi00LjUtNC41czIuMDItNC41IDQuNS00LjUgNC41IDIuMDIgNC41IDQuNS0yLjAyIDQuNS00LjUgNC41eiIgZmlsbD0iY3VycmVudENvbG9yIi8+CiAgPGNpcmNsZSBjeD0iNiIgY3k9IjciIHI9IjEiIGZpbGw9ImN1cnJlbnRDb2xvciIvPgogIDxjaXJjbGUgY3g9IjEwIiBjeT0iNyIgcj0iMSIgZmlsbD0iY3VycmVudENvbG9yIi8+CiAgPHBhdGggZD0iTTUuNSAxMGMwLjUtMC44IDEuNS0xLjMgMi41LTEuMyAxIDAgMiAwLjUgMi41IDEuMyIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+Cjwvc3ZnPg=="}}]);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! For license information please see 58.eb7cc679f7535cc8a2f1.js.LICENSE.txt */
|
|
2
|
+
"use strict";(self.webpackChunkcodebuff=self.webpackChunkcodebuff||[]).push([[58,439],{7677(e,t,r){r.r(t),r.d(t,{CacheProvider:()=>p,ClassNames:()=>F,Global:()=>O,ThemeContext:()=>h,ThemeProvider:()=>S,__unsafe_useEmotionCache:()=>d,createElement:()=>_,css:()=>T,jsx:()=>_,keyframes:()=>A,useTheme:()=>g,withEmotionCache:()=>v,withTheme:()=>$});var n=r.cw(function(e,t){var r=o(),n={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},s={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},c={};function i(e){return r.isMemo(e)?s:c[e.$$typeof]||n}c[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},c[r.Memo]=s;var u=Object.defineProperty,f=Object.getOwnPropertyNames,l=Object.getOwnPropertySymbols,y=Object.getOwnPropertyDescriptor,m=Object.getPrototypeOf,p=Object.prototype;e.exports=function e(t,r,n){if("string"!=typeof r){if(p){var o=m(r);o&&o!==p&&e(t,o,n)}var s=f(r);l&&(s=s.concat(l(r)));for(var c=i(t),d=i(r),v=0;v<s.length;++v){var h=s[v];if(!(a[h]||n&&n[h]||d&&d[h]||c&&c[h])){var g=y(r,h);try{u(t,h,g)}catch(e){}}}}return t}}),o=()=>r(4363),a=r(3345),s=r(666),c=r(5285),i=function(e){var t=new WeakMap;return function(r){if(t.has(r))return t.get(r);var n=e(r);return t.set(r,n),n}};function u(){return u.c||(u.c=r.n(n()))}n();var f=r(41),l=r(4615),y=r(1287),m=a.createContext("undefined"!=typeof HTMLElement?(0,s.A)({key:"css"}):null),p=m.Provider,d=function(){return(0,a.useContext)(m)},v=function(e){return(0,a.forwardRef)(function(t,r){var n=(0,a.useContext)(m);return e(t,n,r)})},h=a.createContext({}),g=function(){return a.useContext(h)},b=i(function(e){return i(function(t){return function(e,t){return"function"==typeof t?t(e):(0,c.A)({},e,t)}(e,t)})}),S=function(e){var t=a.useContext(h);return e.theme!==t&&(t=b(t)(e.theme)),a.createElement(h.Provider,{value:t},e.children)};function $(e){var t,r,n=e.displayName||e.name||"Component",o=a.forwardRef(function(t,r){var n=a.useContext(h);return a.createElement(e,(0,c.A)({theme:n,ref:r},t))});return o.displayName="WithTheme("+n+")",t=o,r=e,u()()(t,r)}var E,x,C={}.hasOwnProperty,w="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",k=function(e){var t=e.cache,r=e.serialized,n=e.isStringTag;return(0,f.SF)(t,r,n),(0,y.s)(function(){return(0,f.sk)(t,r,n)}),null},P=v(function(e,t,r){var n=e.css;"string"==typeof n&&void 0!==t.registered[n]&&(n=t.registered[n]);var o=e[w],s=[n],c="";"string"==typeof e.className?c=(0,f.Rk)(t.registered,s,e.className):null!=e.className&&(c=e.className+" ");var i=(0,l.J)(s,void 0,a.useContext(h));c+=t.key+"-"+i.name;var u={};for(var y in e)C.call(e,y)&&"css"!==y&&y!==w&&(u[y]=e[y]);return u.className=c,r&&(u.ref=r),a.createElement(a.Fragment,null,a.createElement(k,{cache:t,serialized:i,isStringTag:"string"==typeof o}),a.createElement(o,u))}),_=function(e,t){var r=arguments;if(null==t||!C.call(t,"css"))return a.createElement.apply(void 0,r);var n=r.length,o=new Array(n);o[0]=P,o[1]=function(e,t){var r={};for(var n in t)C.call(t,n)&&(r[n]=t[n]);return r[w]=e,r}(e,t);for(var s=2;s<n;s++)o[s]=r[s];return a.createElement.apply(null,o)};E=_||(_={}),x||(x=E.JSX||(E.JSX={}));var O=v(function(e,t){var r=e.styles,n=(0,l.J)([r],void 0,a.useContext(h)),o=a.useRef();return(0,y.i)(function(){var e=t.key+"-global",r=new t.sheet.constructor({key:e,nonce:t.sheet.nonce,container:t.sheet.container,speedy:t.sheet.isSpeedy}),a=!1,s=document.querySelector('style[data-emotion="'+e+" "+n.name+'"]');return t.sheet.tags.length&&(r.before=t.sheet.tags[0]),null!==s&&(a=!0,s.setAttribute("data-emotion",e),r.hydrate([s])),o.current=[r,a],function(){r.flush()}},[t]),(0,y.i)(function(){var e=o.current,r=e[0];if(e[1])e[1]=!1;else{if(void 0!==n.next&&(0,f.sk)(t,n.next,!0),r.tags.length){var a=r.tags[r.tags.length-1].nextElementSibling;r.before=a,r.flush()}t.insert("",n,r,!1)}},[t,n.name]),null});function T(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,l.J)(t)}function A(){var e=T.apply(void 0,arguments),t="animation-"+e.name;return{name:t,styles:"@keyframes "+t+"{"+e.styles+"}",anim:1,toString:function(){return"_EMO_"+this.name+"_"+this.styles+"_EMO_"}}}var M=function e(t){for(var r=t.length,n=0,o="";n<r;n++){var a=t[n];if(null!=a){var s=void 0;switch(typeof a){case"boolean":break;case"object":if(Array.isArray(a))s=e(a);else for(var c in s="",a)a[c]&&c&&(s&&(s+=" "),s+=c);break;default:s=a}s&&(o&&(o+=" "),o+=s)}}return o},N=function(e){var t=e.cache,r=e.serializedArr;return(0,y.s)(function(){for(var e=0;e<r.length;e++)(0,f.sk)(t,r[e],!1)}),null},F=v(function(e,t){var r=[],n=function(){for(var e=arguments.length,n=new Array(e),o=0;o<e;o++)n[o]=arguments[o];var a=(0,l.J)(n,t.registered);return r.push(a),(0,f.SF)(t,a,!1),t.key+"-"+a.name},o={css:n,cx:function(){for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];return function(e,t,r){var n=[],o=(0,f.Rk)(e,n,r);return n.length<2?r:o+t(n)}(t.registered,n,M(r))},theme:a.useContext(h)},s=e.children(o);return a.createElement(a.Fragment,null,a.createElement(N,{cache:t,serializedArr:r}),s)})},1287(e,t,r){r.d(t,{i:()=>s,s:()=>a});var n=r(3345),o=!!n.useInsertionEffect&&n.useInsertionEffect,a=o||function(e){return e()},s=o||n.useLayoutEffect},41(e,t,r){function n(e,t,r){var n="";return r.split(" ").forEach(function(r){void 0!==e[r]?t.push(e[r]+";"):r&&(n+=r+" ")}),n}r.d(t,{Rk:()=>n,SF:()=>o,sk:()=>a});var o=function(e,t,r){var n=e.key+"-"+t.name;!1===r&&void 0===e.registered[n]&&(e.registered[n]=t.styles)},a=function(e,t,r){o(e,t,r);var n=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+n:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}},2799(e,t){var r="function"==typeof Symbol&&Symbol.for,n=r?Symbol.for("react.element"):60103,o=r?Symbol.for("react.portal"):60106,a=r?Symbol.for("react.fragment"):60107,s=r?Symbol.for("react.strict_mode"):60108,c=r?Symbol.for("react.profiler"):60114,i=r?Symbol.for("react.provider"):60109,u=r?Symbol.for("react.context"):60110,f=r?Symbol.for("react.async_mode"):60111,l=r?Symbol.for("react.concurrent_mode"):60111,y=r?Symbol.for("react.forward_ref"):60112,m=r?Symbol.for("react.suspense"):60113,p=r?Symbol.for("react.suspense_list"):60120,d=r?Symbol.for("react.memo"):60115,v=r?Symbol.for("react.lazy"):60116,h=r?Symbol.for("react.block"):60121,g=r?Symbol.for("react.fundamental"):60117,b=r?Symbol.for("react.responder"):60118,S=r?Symbol.for("react.scope"):60119;function $(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case f:case l:case a:case c:case s:case m:return e;default:switch(e=e&&e.$$typeof){case u:case y:case v:case d:case i:return e;default:return t}}case o:return t}}}function E(e){return $(e)===l}t.AsyncMode=f,t.ConcurrentMode=l,t.ContextConsumer=u,t.ContextProvider=i,t.Element=n,t.ForwardRef=y,t.Fragment=a,t.Lazy=v,t.Memo=d,t.Portal=o,t.Profiler=c,t.StrictMode=s,t.Suspense=m,t.isAsyncMode=function(e){return E(e)||$(e)===f},t.isConcurrentMode=E,t.isContextConsumer=function(e){return $(e)===u},t.isContextProvider=function(e){return $(e)===i},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===n},t.isForwardRef=function(e){return $(e)===y},t.isFragment=function(e){return $(e)===a},t.isLazy=function(e){return $(e)===v},t.isMemo=function(e){return $(e)===d},t.isPortal=function(e){return $(e)===o},t.isProfiler=function(e){return $(e)===c},t.isStrictMode=function(e){return $(e)===s},t.isSuspense=function(e){return $(e)===m},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===l||e===c||e===s||e===m||e===p||"object"==typeof e&&null!==e&&(e.$$typeof===v||e.$$typeof===d||e.$$typeof===i||e.$$typeof===u||e.$$typeof===y||e.$$typeof===g||e.$$typeof===b||e.$$typeof===S||e.$$typeof===h)},t.typeOf=$},4363(e,t,r){e.exports=r(2799)}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunkcodebuff=self.webpackChunkcodebuff||[]).push([[666],{666(e,t,r){r.d(t,{A:()=>ne});var n=function(){function e(e){var t=this;this._insertTag=function(e){var r;r=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,r),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var r=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{r.insertRule(e,r.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach(function(e){var t;return null==(t=e.parentNode)?void 0:t.removeChild(e)}),this.tags=[],this.ctr=0},e}(),a=Math.abs,c=String.fromCharCode,s=Object.assign;function i(e){return e.trim()}function u(e,t,r){return e.replace(t,r)}function o(e,t){return e.indexOf(t)}function l(e,t){return 0|e.charCodeAt(t)}function f(e,t,r){return e.slice(t,r)}function h(e){return e.length}function p(e){return e.length}function d(e,t){return t.push(e),e}var b=1,g=1,v=0,y=0,k=0,m="";function w(e,t,r,n,a,c,s){return{value:e,root:t,parent:r,type:n,props:a,children:c,line:b,column:g,length:s,return:""}}function $(e,t){return s(w("",null,null,"",null,null,0),e,{length:-e.length},t)}function x(){return k=y>0?l(m,--y):0,g--,10===k&&(g=1,b--),k}function A(){return k=y<v?l(m,y++):0,g++,10===k&&(g=1,b++),k}function C(){return l(m,y)}function S(){return y}function P(e,t){return f(m,e,t)}function z(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function E(e){return b=g=1,v=h(m=e),y=0,[]}function T(e){return m="",e}function j(e){return i(P(y-1,_(91===e?e+2:40===e?e+1:e)))}function N(e){for(;(k=C())&&k<33;)A();return z(e)>2||z(k)>3?"":" "}function O(e,t){for(;--t&&A()&&!(k<48||k>102||k>57&&k<65||k>70&&k<97););return P(e,S()+(t<6&&32==C()&&32==A()))}function _(e){for(;A();)switch(k){case e:return y;case 34:case 39:34!==e&&39!==e&&_(k);break;case 40:41===e&&_(e);break;case 92:A()}return y}function q(e,t){for(;A()&&e+k!==57&&(e+k!==84||47!==C()););return"/*"+P(t,y-1)+"*"+c(47===e?e:A())}function M(e){for(;!z(C());)A();return P(e,y)}var R="-ms-",B="-moz-",W="-webkit-",D="comm",F="rule",G="decl",H="@keyframes";function I(e,t){for(var r="",n=p(e),a=0;a<n;a++)r+=t(e[a],a,e,t)||"";return r}function J(e,t,r,n){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case G:return e.return=e.return||e.value;case D:return"";case H:return e.return=e.value+"{"+I(e.children,n)+"}";case F:e.value=e.props.join(",")}return h(r=I(e.children,n))?e.return=e.value+"{"+r+"}":""}function K(e){return T(L("",null,null,null,[""],e=E(e),0,[0],e))}function L(e,t,r,n,a,s,i,f,p){for(var b=0,g=0,v=i,y=0,k=0,m=0,w=1,$=1,P=1,z=0,E="",T=a,_=s,R=n,B=E;$;)switch(m=z,z=A()){case 40:if(108!=m&&58==l(B,v-1)){-1!=o(B+=u(j(z),"&","&\f"),"&\f")&&(P=-1);break}case 34:case 39:case 91:B+=j(z);break;case 9:case 10:case 13:case 32:B+=N(m);break;case 92:B+=O(S()-1,7);continue;case 47:switch(C()){case 42:case 47:d(U(q(A(),S()),t,r),p);break;default:B+="/"}break;case 123*w:f[b++]=h(B)*P;case 125*w:case 59:case 0:switch(z){case 0:case 125:$=0;case 59+g:-1==P&&(B=u(B,/\f/g,"")),k>0&&h(B)-v&&d(k>32?V(B+";",n,r,v-1):V(u(B," ","")+";",n,r,v-2),p);break;case 59:B+=";";default:if(d(R=Q(B,t,r,b,g,a,f,E,T=[],_=[],v),s),123===z)if(0===g)L(B,t,R,R,T,s,v,f,_);else switch(99===y&&110===l(B,3)?100:y){case 100:case 108:case 109:case 115:L(e,R,R,n&&d(Q(e,R,R,0,0,a,f,E,a,T=[],v),_),a,_,v,f,n?T:_);break;default:L(B,R,R,R,[""],_,0,f,_)}}b=g=k=0,w=P=1,E=B="",v=i;break;case 58:v=1+h(B),k=m;default:if(w<1)if(123==z)--w;else if(125==z&&0==w++&&125==x())continue;switch(B+=c(z),z*w){case 38:P=g>0?1:(B+="\f",-1);break;case 44:f[b++]=(h(B)-1)*P,P=1;break;case 64:45===C()&&(B+=j(A())),y=C(),g=v=h(E=B+=M(S())),z++;break;case 45:45===m&&2==h(B)&&(w=0)}}return s}function Q(e,t,r,n,c,s,o,l,h,d,b){for(var g=c-1,v=0===c?s:[""],y=p(v),k=0,m=0,$=0;k<n;++k)for(var x=0,A=f(e,g+1,g=a(m=o[k])),C=e;x<y;++x)(C=i(m>0?v[x]+" "+A:u(A,/&\f/g,v[x])))&&(h[$++]=C);return w(e,t,r,0===c?F:l,h,d,b)}function U(e,t,r){return w(e,t,r,D,c(k),f(e,2,-2),0)}function V(e,t,r,n){return w(e,t,r,G,f(e,0,n),f(e,n+1,-1),n)}var X=function(e,t,r){for(var n=0,a=0;n=a,a=C(),38===n&&12===a&&(t[r]=1),!z(a);)A();return P(e,y)},Y=new WeakMap,Z=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,r=e.parent,n=e.column===r.column&&e.line===r.line;"rule"!==r.type;)if(!(r=r.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Y.get(r))&&!n){Y.set(e,!0);for(var a=[],s=function(e,t){return T(function(e,t){var r=-1,n=44;do{switch(z(n)){case 0:38===n&&12===C()&&(t[r]=1),e[r]+=X(y-1,t,r);break;case 2:e[r]+=j(n);break;case 4:if(44===n){e[++r]=58===C()?"&\f":"",t[r]=e[r].length;break}default:e[r]+=c(n)}}while(n=A());return e}(E(e),t))}(t,a),i=r.props,u=0,o=0;u<s.length;u++)for(var l=0;l<i.length;l++,o++)e.props[o]=a[u]?s[u].replace(/&\f/g,i[l]):i[l]+" "+s[u]}}},ee=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function te(e,t){switch(function(e,t){return 45^l(e,0)?(((t<<2^l(e,0))<<2^l(e,1))<<2^l(e,2))<<2^l(e,3):0}(e,t)){case 5103:return W+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return W+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return W+e+B+e+R+e+e;case 6828:case 4268:return W+e+R+e+e;case 6165:return W+e+R+"flex-"+e+e;case 5187:return W+e+u(e,/(\w+).+(:[^]+)/,W+"box-$1$2"+R+"flex-$1$2")+e;case 5443:return W+e+R+"flex-item-"+u(e,/flex-|-self/,"")+e;case 4675:return W+e+R+"flex-line-pack"+u(e,/align-content|flex-|-self/,"")+e;case 5548:return W+e+R+u(e,"shrink","negative")+e;case 5292:return W+e+R+u(e,"basis","preferred-size")+e;case 6060:return W+"box-"+u(e,"-grow","")+W+e+R+u(e,"grow","positive")+e;case 4554:return W+u(e,/([^-])(transform)/g,"$1"+W+"$2")+e;case 6187:return u(u(u(e,/(zoom-|grab)/,W+"$1"),/(image-set)/,W+"$1"),e,"")+e;case 5495:case 3959:return u(e,/(image-set\([^]*)/,W+"$1$`$1");case 4968:return u(u(e,/(.+:)(flex-)?(.*)/,W+"box-pack:$3"+R+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+W+e+e;case 4095:case 3583:case 4068:case 2532:return u(e,/(.+)-inline(.+)/,W+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(h(e)-1-t>6)switch(l(e,t+1)){case 109:if(45!==l(e,t+4))break;case 102:return u(e,/(.+:)(.+)-([^]+)/,"$1"+W+"$2-$3$1"+B+(108==l(e,t+3)?"$3":"$2-$3"))+e;case 115:return~o(e,"stretch")?te(u(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==l(e,t+1))break;case 6444:switch(l(e,h(e)-3-(~o(e,"!important")&&10))){case 107:return u(e,":",":"+W)+e;case 101:return u(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+W+(45===l(e,14)?"inline-":"")+"box$3$1"+W+"$2$3$1"+R+"$2box$3")+e}break;case 5936:switch(l(e,t+11)){case 114:return W+e+R+u(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return W+e+R+u(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return W+e+R+u(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return W+e+R+e+e}return e}var re=[function(e,t,r,n){if(e.length>-1&&!e.return)switch(e.type){case G:e.return=te(e.value,e.length);break;case H:return I([$(e,{value:u(e.value,"@","@"+W)})],n);case F:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,function(t){switch(function(e){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(t)){case":read-only":case":read-write":return I([$(e,{props:[u(t,/:(read-\w+)/,":-moz-$1")]})],n);case"::placeholder":return I([$(e,{props:[u(t,/:(plac\w+)/,":"+W+"input-$1")]}),$(e,{props:[u(t,/:(plac\w+)/,":-moz-$1")]}),$(e,{props:[u(t,/:(plac\w+)/,R+"input-$1")]})],n)}return""})}}],ne=function(e){var t=e.key;if("css"===t){var r=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(r,function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))})}var a,c,s=e.stylisPlugins||re,i={},u=[];a=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),function(e){for(var t=e.getAttribute("data-emotion").split(" "),r=1;r<t.length;r++)i[t[r]]=!0;u.push(e)});var o,l,f,h,d=[J,(h=function(e){o.insert(e)},function(e){e.root||(e=e.return)&&h(e)})],b=(l=[Z,ee].concat(s,d),f=p(l),function(e,t,r,n){for(var a="",c=0;c<f;c++)a+=l[c](e,t,r,n)||"";return a});c=function(e,t,r,n){o=r,I(K(e?e+"{"+t.styles+"}":t.styles),b),n&&(g.inserted[t.name]=!0)};var g={key:t,sheet:new n({key:t,container:a,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:i,registered:{},insert:c};return g.sheet.hydrate(u),g}}}]);
|