| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211 |
- /*
- ArozOS File Manager css file
- This file is used to overwrite the default css
- on segmentic ui (or formantic if it is later upgraded)
- */
- /*
- Color definations
- */
- :root{
- --dark_theme_toggle: #333333;
- --dark_theme_toggle_text: rgb(218, 218, 218);
- --white_theme_toggle: #dadada;
- --white_theme_toggle_text: rgb(27, 27, 27);
- }
- body.whiteTheme {
- --fileopr_btnTxt: rgb(226, 226, 226);
- --fileopr_oprtxt: rgb(56, 52, 52);
- --fileopr_btnhover: #f0f0f0;
- --divider: #f0f0f0;
- --navi_bgcolor: var(--body_background_secondary, #fcfcfc);
- --navi_theme: var(--theme_color, #92cfe7);
- --navi_theme_multiselect: #6c06ba;
- --navi_txt: rgb(114, 114, 114);
- --dropdown_bg: white;
- --dropdown_txt: black;
-
- --vroot_active_bg: #dadada;
- --dir_item_color: rgb(78, 78, 78);
- --text_active: #23cc28;
- --dir_bg: #f5f5f5;
- --dir_txt: rgb(44, 44, 44);
- --dir_border: rgba(219, 226, 241, 0.7);
- --dir_hover_text: #a3a3a3;
- --dir_hover_background: #f3f3f3;
- --dir_hover_active: #c9e7f1;
- --normal_object_txt: #303030;
- --hex_folder_txt: #2b9447;
- --um_file_txt: #69aaff;
- --folder_view_background: #ffffff;
- --folder_view_share: #24cc29;
- --fileobject_background_hover: #f2f2f2;
- --fileobject_background_selected: #d2f2f7;
- --fileobject_text_selected: black;
- --address_text_border:#cfcfcf;
- --address_text_background: white;
- --popup_bg: white;
- --popup_border: rgb(226, 226, 226);
- --popup_header_bg: #171719;
- --popup_header_txt: white;
- --popup_header_bottom: #34b7eb;
- --popup_btn_border: #dedede;
- --popup_btn_hover: rgba(238, 238, 238, 0.932);
- --popup_btn_primary_bg: #51aded;
- --popup_btn_primary_txt: white;
- --popup_btn_primary_bg_hover: #76c0f5;
- --popup_btn_negative_bg: #ed5151;
- --popup_btn_negative_txt: white;
- --popup_btn_negative_bg_hover: #f57676;
- --modulelist_bg: white;
- --contextmenu_background: #ffffff;
- --contextmenu_hover: #f9f9f9;
- --contextmenu_textcolor: rgb(78, 78, 78);
- --upload_progressbar: #92cfe7;
- --upload_progresstext: rgb(255, 255, 255);
- --upload_progress_succ: #8cd68f;
- --upload_progress_failed: #d68c8c;
- --open_with_selected: #51aded;
- --open_with_selected_text: white;
- --open_with_item_hover_background:rgba(35,35,35,0.14);
- --popup_wrapper_background: rgba(27,27,27,0.5);
- --code_bg: #f7f7f9;
- --code_txt: #bd4147;
- --uploadtab_bg: #f5f5f5;
- --uploadtab_txt: rgb(78, 78, 78);
- --upload_bg: #ffffff;
- }
- body.darkTheme{
- /*
- Legacy variable set, re-sampled to match the palette in
- shared/fs-theme.css so the parts of the UI that still read these
- (popups, upload tab, context menu, file object rows) sit in the same
- colour family as everything already ported to the --fs-* tokens.
- */
- /* ao.css's own dark values are a neutral grey; pull them onto the sampled
- palette so semantic-ui widgets inside this app match the rest of it. */
- --body_background: var(--fs-bg);
- --body_text: var(--fs-text);
- --text_color: var(--fs-text);
- --text_color_secondary: var(--fs-text-dim);
- --fileopr_btnTxt: #e6e9ee;
- --fileopr_oprtxt: #c7ced7;
- --fileopr_btnhover: #2a3039;
- --divider: #272c34;
- /* Surfaces come from the sampled tokens, not ao.css's --body_background_*.
- Those resolve to a neutral grey that is lighter than the file area, which
- inverts the mockup's depth order (content darkest, chrome above it). */
- --navi_bgcolor: var(--fs-bg);
- --navi_theme: var(--theme_color, #272c34);
- --navi_theme_multiselect: #4a9eff;
- --navi_txt: #c7ced7;
- --dropdown_bg: #1c2129;
- --dropdown_txt: #e6e9ee;
- --vroot_active_bg: #262b33;
- --dir_item_color: #c7ced7;
- --text_active: #4a9eff;
- --dir_bg: #14181d;
- --dir_txt: #e6e9ee;
- --dir_border: #272c34;
- --dir_hover_text: #9aa3ae;
- --dir_hover_background: #1f242c;
- --dir_hover_active: #1e2d40;
- --normal_object_txt: #e6e9ee;
- --hex_folder_txt: #5fd48b;
- --um_file_txt: #7db8ff;
- --folder_view_background: var(--fs-content-bg);
- --folder_view_share: #3ecf6d;
- --fileobject_background_hover: #1f242c;
- --fileobject_background_selected: #17293f;
- --fileobject_text_selected: #e6e9ee;
- --address_text_border: #272c34;
- --address_text_background: #1c2129;
- --popup_bg: #1c2129;
- --popup_border: #272c34;
- --popup_header_bg: #12161b;
- --popup_header_txt: #e6e9ee;
- --popup_header_bottom: #4a9eff;
- --popup_btn_border: #323945;
- --popup_btn_hover: #2a3039;
- --popup_btn_primary_bg: #4a9eff;
- --popup_btn_primary_txt: #0d1014;
- --popup_btn_primary_bg_hover: #6bb0ff;
- --popup_btn_negative_bg: #e5484d;
- --popup_btn_negative_txt: #ffffff;
- --popup_btn_negative_bg_hover: #f06a6e;
- --modulelist_bg: transparent;
- --modulelist_hover: rgba(122, 138, 160, 0.18);
- --contextmenu_background: #1c2129;
- --contextmenu_hover: #2a3039;
- --contextmenu_textcolor: #e6e9ee;
- --upload_progressbar: #4a9eff;
- --upload_progresstext: #0d1014;
- --upload_progress_succ: #3ecf6d;
- --upload_progress_failed: #e5484d;
- --open_with_selected: #1e3450;
- --open_with_selected_text: #e6e9ee;
- --open_with_item_hover_background: rgba(122, 138, 160, 0.16);
- --popup_wrapper_background: rgba(8, 10, 13, 0.62);
- --code_bg: #12161b;
- --code_txt: #ff8f93;
- --uploadtab_bg: #16191f;
- --uploadtab_txt: #e6e9ee;
- --upload_bg: #1c2129;
- }
- body{
- color:var(--body_text);
- background-color:var(--body_background);
- height:100%;
- overflow: hidden;
- }
- h1, h2, h3, p, span, div, input, .dropdown { font-family: "Microsoft JhengHei","SimHei", "Apple LiGothic Medium", "STHeiti"}
- html{
- height:100%;
- overflow:hidden;
- }
- /* force override of semantic button rule */
- body.darkTheme .ui.icon.button{
- color: var(--text_color) !important;
- }
- /*
- Navigation Bar
- The top bar of the interface
- see subparts for more detail configs
- */
- .navibar{
- width:100%;
- padding-left:12px;
- padding-right:12px;
- padding-top:6px;
- padding-bottom:3px;
- z-index: 99;
- background-color:var(--navi_bgcolor);
- border-bottom:2px solid var(--navi_theme);
- }
- .navibar.ctrl{
- border-bottom:2px solid var(--navi_theme_multiselect);
- }
- .navibar.mobile{
- padding-top: 0;
- }
- .button.standard{
- box-shadow: 0 1px 1px 0px rgb(190, 190, 190);
- border: 0px;
- }
- .button.standard:hover{
- background-color:#82c2f0 !important;
- color:white !important;
- }
- /*
- File operation bar
- */
- .navibar .fileOprBtn{
- vertical-align: top;
- border: 1px solid transparent;
- cursor: pointer;
- background-color: transparent;
- text-align: center;
- padding-bottom: 0.4em;
- padding-top: 0.5em;
- border-radius: 0.4em;
- }
- .navibar .fileOprBtn:hover{
- border: 1px solid var(--fileopr_btnhover);
- opacity: 0.8;
- }
- .navibar .fileOprBtn .opricon{
- width: 46px;
- }
- .navibar .fileOprBtn .oprtxt{
- color:var(--fileopr_oprtxt);
- }
- .navibar .twolines.fileOprBtn{
- padding-top: 0.1em;
- padding-bottom: 0.1em;
- }
- .navibar .twolines.fileOprBtn .opricon{
- width: 40px;
- }
- .navibar .twolines.fileOprBtn .oprtxt{
- font-size: 1em;
- }
- .navibar.mobile .fileOprBtn{
- padding-bottom: 0.4em;
- padding-top: 0.2em;
- border-radius: 0.4em;
- }
- .navibar.mobile .fileOprBtn .opricon{
- width: 36px;
- }
- .navibar.mobile .twolines.fileOprBtn .opricon{
- width: 28px;
- }
- .navibar.mobile .twolines.fileOprBtn .oprtxt{
- font-size: 0.7em;
- }
- .navibar .fileoprSmallBtn{
- cursor: pointer;
- border: 1px solid transparent;
- color:var(--navi_txt);
- background-color: transparent;
- padding: 0.3em;
- width: fit-content;
- text-align: left;
- }
- .navibar .fileoprSmallBtn:hover{
- opacity: 0.8;
- border: 1px solid var(--divider);
- border-radius: 0.4em;
- }
- .navibar.mobile .fileoprSmallBtn{
- font-size: 0.9em;
- padding: 0.2em;
- }
- .navibar .fileoprGroupDivider{
- padding-right: 0.2em;
- margin-right: 0.2em;
- border-right: 1px solid var(--divider);
- height: 80px;
- }
- .navibar.mobile .fileoprGroupDivider{
- height: 64px;
- }
- .ui.selection.dropdown{
- background-color: var(--dropdown_bg) !important;
- color: var(--dropdown_txt) !important;
- min-width: 11.5em !important;
- }
- /* special case when using in mobile sidebar */
- #mobileSortDropdown .ui.selection.dropdown{
- width: 100%;
- border-radius: 0;
- padding: 1em;
- }
- .ui.selection.dropdown .menu > .item{
- border-top-color:var(--divider);
- background-color: var(--dropdown_bg) !important;
- color: var(--dropdown_txt) !important;
- }
- .ui.selection.active.dropdown .menu{
- border: 1px solid var(--divider) !important;
- }
- .ui.selection.visible.dropdown > .text:not(.default){
- color: var(--text_color_secondary) !important;
- }
- /* Mobile interface */
- .fileoprBtnMobile{
- position: relative;
- width: 100%;
- background-color: none;
- padding: 0.5em;
- padding-left: 1em;
- cursor: pointer;
- }
- #mobileNaviBar{
- height: 100vh !important;
- overflow-y: auto !important;
- }
- #mobileNaviBar .fileoprBtnMobile{
- border-bottom: 1px solid var(--divider);
- }
- .fileoprBtnMobile:hover{
- background-color: var(--popup_btn_hover) !important;
- }
- .fileoprBtnMobile .opricon{
- width: 30px;
- display: inline-block;
- vertical-align: middle;
- margin-right: 0.4em;
- }
- .fileoprBtnMobile p{
- display: inline-block;
- vertical-align: middle;
- }
- .fileoprSmallBtnMobile{
- cursor: pointer;
- border: 1px solid transparent;
- color:var(--navi_txt);
- background-color: transparent;
- padding: 0.5em;
- padding-left: 1em;
- width: 100%;
- text-align: left;
- }
- #mobileNaviBar .fileoprSmallBtnMobile{
- border-bottom: 1px solid var(--divider);
- }
- .fileoprSmallBtnMobile:hover{
- background-color: var(--popup_btn_hover) !important;
- }
- /*
- Address and search bar
- */
- .navibarBtn{
- cursor: pointer;
- border: 1px solid transparent;
- color:var(--navi_txt);
- background-color: transparent;
- padding: 0.3em;
- display: inline-block;
- border-radius: 0.4em;
- padding-right: 0.1em;
- padding-bottom: 0.4em;
- margin-left: 0.2em;
- }
- .navibarBtn:hover{
- opacity: 0.8;
- border: 1px solid var(--divider);
- }
- .navibarBtn.disabled{
- pointer-events: none;
- opacity: 0.5;
- user-select: none;
- }
- /* Special button for switching over to dark theme*/
- .navibarBtn.DarkThemeToggle.inverted{
- color:var(--dark_theme_toggle_text);
- background-color: var(--dark_theme_toggle);
- }
- .navibarBtn.DarkThemeToggle{
- color: var(--white_theme_toggle_text);
- background-color: var(--white_theme_toggle);
- }
- .navibarBtn.DarkThemeToggle:hover{
- border: 1px solid transparent;
- }
- .navibarBtn:hover{
- opacity: 0.8;
- }
- /* View mode buttons */
- .videmode.button{
- color:var(--navi_txt) !important;
- background-color: transparent;
- }
- .videmode.button:hover{
- background-color: transparent;
- opacity: 0.8;
- }
- .videmode.button:focus:not(#togglePropertiesViewBtn){
- background-color: transparent !important;
- }
- .addressBar{
- border-top: 1px solid var(--divider);
- width:100%;
- padding: 0.4em;
- padding-left: 0;
- padding-right: 0;
- padding-top: 0.6em;
- min-height: 35px;
- margin-top:0.4em;
- vertical-align: top;
- display: flex;
- position: relative;
- }
- .addressBar .divider{
- color: var(--text_color_secondary) !important;
- }
- #pathDisplayField{
- margin-left: 0.4em !important;
- }
- .addressText{
- padding:5px;
- border-radius: 0.4em;
- border: 1px solid var(--address_text_border);
- flex-grow: 1;
- background-color: var(--address_text_background);
- }
- #pathInputField{
- margin-left: 0.4em !important;
- font-size: 1rem;
- height: 27px;
- width: 100%;
- }
- #pathInputField input{
- background-color: var(--address_text_background);
- color: var(--text_color);
- }
- .selectable{
- cursor:pointer;
- }
- .viewportBtns.mobile{
- order: 2;
- margin-left: auto !important;
- height: 30px;
- border-right: none;
- margin-top: -10px;
- }
- /* Mobile file operation menus */
- .mobileFileOprMenu{
- position: fixed;
- top: 0.6em;
- right: 0.6em;
- background-color: var(--navi_bgcolor);
- border: none;
- color: var(--text_color);
- cursor: pointer;
- width: 50px;
- height: 50px;
- padding-top: 4px;
- padding-left: 10px;
- border-radius: 0.4em;
- }
- .mobileFileOprMenu:hover{
- opacity: 0.8;
- }
- .mobileFileOprMenuToggle{
- padding: 1em;
- border: 0px solid transparent;
- color: var(--text_color);
- border-bottom:2px solid var(--navi_theme);
- text-align: right;
- cursor: pointer;
- }
- .mobileFileOprMenuToggle .logo{
- position: absolute;
- top: 0.8em;
- left: 0.5em;
- width: 100px;
- opacity: 0.6;
- }
- /*
- Search bar
- */
- .searchbar{
- width:100%;
- padding: 0.4em;
- padding-left: 0;
- padding-right: 0;
- min-height: 35px;
- margin-top:0.4em;
- vertical-align: top;
- display: flex;
- align-items: center;
- }
- .searchbar .searInputBar{
- flex-grow: 1;
- }
- .searchbar .navibarBtn.active{
- color: var(--text_active);
- font-weight: bold;
-
- }
- /*
- Main Window scalling
- */
- #mainWindow{
- display: flex;
- align-items:flex-start;
- }
- /*
- Directory Sidebar
- */
- #directorySidebar{
- padding-top:1em;
- padding-bottom: 1em;
- overflow-y:auto;
- padding-bottom:20px;
- border-right:2px solid var(--dir_border);
- background-color:var(--dir_bg);
- color:var(--dir_txt);
- width: 250px;
- min-width: 250px;
- scrollbar-width: thin;
- }
- .rightmargin.icon{
- margin-right:8px !important;
- }
- .dir{
- cursor:pointer;
- }
- .dir:not(.active):hover{
- color: var(--dir_hover_text) !important;
- }
- .dir.active:hover{
- background-color:var(--dir_hover_active);
- }
- .dir.item{
- padding-top: 0.4em !important;
- padding-bottom: 0.4em !important;
- padding-left: 1.4em !important;
- padding-right: 1.4em !important;
- color:var(--dir_item_color);
- }
- .vroot.active{
- background-color: var(--vroot_active_bg);
- }
- #selectInfo{
- padding-left: 1.2em;
- padding-right: 1.2em;
- color: var(--text_color_secondary);
- }
- .mobilePathDisplayWrapper{
- width:100%;
- margin-bottom:5px;
-
- }
- #mobilePathDisplay .divider{
- color: var(--text_color_secondary) !important;
- }
- .pathDisplay{
- cursor: text;
- overflow:hidden;
- white-space: nowrap;
- text-align: left;
- }
- .measure {
- position: absolute;
- visibility: hidden;
- left: -1000px;
- top: -1000px;
- }
- /*
- Folder Viewer (Main viewer)
- */
- #folderView{
- flex-grow:1;
- padding-left:2em;
- padding-right:2em;
- padding-top:2em;
- overflow-y:auto;
- background-color: var(--folder_view_background);
- scrollbar-width: thin;
- }
- #folderList{
- margin-bottom:1em;
- }
- .fileviewList{
- position: relative;
- }
- /* Common spacing for list view and grid view */
- .fileviewList .fileObject.item,.fileviewList .fileObject.card{
- display:block !important;
- cursor:pointer;
- overflow-wrap: break-word !important;
- user-select: none;
- border: 1px solid var(--divider);
- }
- .fileviewList .fileObject.item:hover,.fileviewList .fileObject.card:hover{
- background-color: var(--fileobject_background_hover) !important;
- }
- .fileviewList .fileObject.item.selected, .fileviewList .fileObject.card.selected{
- background-color: var(--fileobject_background_selected) !important;
- color: var(--fileobject_text_selected) !important;
- }
- /* Filelist in list mode */
- .fileviewList .fileObject.item{
- padding: 0.8em;
- padding-left: 1.2em;
- padding-right: 1em;
- }
- .fileviewList .fileObject.item:first-child{
- border-top-left-radius: 0.4em;
- border-top-right-radius: 0.4em;
- }
- .fileviewList .fileObject.item:last-child{
- border-bottom-left-radius: 0.4em;
- border-bottom-right-radius: 0.4em;
- }
- .fileviewList .fileObject.item.selected.renaming{
- padding-top: 0.6em !important;
- padding-bottom: 0.6em !important;
- }
- .fileviewList .fileObject.item:not(:first-child) {
- border-top: 0;
- }
- /* Filelist in grid mode.
- Width is set by the status bar zoom slider (--fm-tile / inline style), so the
- old fixed 148px !important is gone - it silently defeated the slider. */
- .fileviewList .fileObject.card{
- border-radius: 0.4em;
- position: relative;
- margin-bottom: 1em;
- }
- /*
- Grid tiles are square at every width. aspect-ratio keeps the box square so
- the responsive breakpoint no longer has to fight fixed pixel sizes.
- Icons use contain so they are never distorted; a real thumbnail (marked by
- .hasThumbnail from thumbnail.js) uses cover so it fills the square instead
- of letterboxing.
- */
- .fileviewList .fileObject.card img{
- width: 100%;
- max-width: 148px;
- aspect-ratio: 1 / 1;
- height: auto;
- object-fit: contain;
- }
- .fileviewList .fileObject.card.hasThumbnail img{
- object-fit: cover;
- object-position: center top;
- }
- .fileviewList .fileObject.card .content{
- padding-left: 1em;
- padding-right: 1em;
- padding-top: 1em;
- padding-bottom: 0.4em;
- }
- /* Share icon overlay for card view */
- .fileviewList .fileObject.card .image{
- position: relative;
- }
- .fileviewList .fileObject.card .shareOverlay.visible{
- position: absolute;
- bottom: 0.4em;
- left: 0.4em;
- padding-top: 4px;
- background-color: var(--navi_bgcolor);
- height: 28px;
- width: 28px;
- border-radius: 0.4em;
- border: 1px solid var(--divider);
- box-shadow: 3px 1px 5px 1px rgba(158,158,158,0.2);
- opacity: 0.9;
- }
- .fileviewList .fileObject.card .content .header{
- font-size: 1.2em;
- font-weight: 500;
- color: var(--text_color);
- }
- .fileviewList .fileObject.card .content .meta{
- font-size: 0.9em;
- color: var(--text_color_secondary);
- }
- .fileviewList .fileObject.card .content .description{
- font-size: 1em;
- color: var(--text_color);
- position: absolute;
- bottom: 1em;
- left: 1em;
- }
- /* fileview in detail mode */
- .fileviewList .fileObject.details{
- cursor:pointer;
- user-select: none;
- border: 1px solid var(--divider);
- color: var(--text_color);
- }
- .fileviewList .fileObject.details:hover{
- background-color:var(--fileobject_background_hover) !important;
- }
- .fileviewList .fileObject.details.selected{
- background-color:var(--fileobject_background_selected) !important;
-
- }
- #folderView th{
- color: var(--text_color);
- }
- .fileviewList .fileObject.details.selected.renaming td:first-child{
- padding: inherit;
- }
- .fileviewList .detailTableContent tr td:first-child{
- padding-left: 1em !important;
- }
- .fileviewList .fileObject.details .light-text{
- color: var(--text_color_secondary);
- }
- /* Share button */
- .sharebtn{
- cursor: pointer;
- border: 1px solid transparent;
- background-color: transparent;
- color: var(--folder_view_share);
- margin-left: 4px;
- margin-top: 1px;
- }
- /* Handle specific Chrome bug in rendering the share icon */
- @media screen and (-webkit-min-device-pixel-ratio:0)
- and (min-resolution:.001dpcm) {
- .sharebtn{
- padding: 0 !important;
- }
- }
- .sharebtn:hover{
- opacity: 0.5;
- }
- /*
- Properties View
- */
- #propertiesView{
- width: 300px;
- min-width: 300px;
- padding: 1em;
- overflow-y: auto;
- scrollbar-width: thin;
- color: var(--text_color);
- border-left: 1px solid var(--divider);
- background-color: var(--folder_view_background);
- }
- #propertiesView td, #propertiesView span, #propertiesView div{
- color: var(--text_color);
- }
- /*
- Context Menu
- This is a complete rewrite / re-implement of the
- ts contextmenu after migration
- */
- /*
- Styled to match the .fsMenu component in shared/fs-components.css so the
- right click menu, the "..." menu and the sort menu all read as the same
- control: rounded card, inset rows that round on hover, and icons a step
- dimmer than the label text.
- */
- .contextmenu{
- position: fixed;
- display: none;
- width: 200px;
- padding: 6px;
- background-color: var(--contextmenu_background);
- border: 1px solid var(--divider);
- border-radius: 10px;
- -webkit-box-shadow: 0px 8px 28px var(--fs-shadow);
- -moz-box-shadow: 0px 8px 28px var(--fs-shadow);
- box-shadow: 0px 8px 28px var(--fs-shadow);
- z-index: 999;
- }
- .contextmenu.visible{
- display: block;
- }
- .contextmenu .item{
- display: flex;
- align-items: center;
- gap: 10px;
- padding: 7px 10px;
- border-radius: 6px;
- cursor: pointer;
- font-size: 13.5px;
- white-space: nowrap;
- color: var(--contextmenu_textcolor);
- }
- .contextmenu .item:hover{
- background-color: var(--contextmenu_hover);
- }
- /*
- The rows carry semantic-ui font icons. Their default em based width and
- right margin fight the flex gap, so pin them to a fixed box instead.
- The colour needs !important: ao.css styles every <i> and <span> under a
- themed body with a blanket rule whose :not() chain scores higher than any
- reasonable selector here, so it would otherwise repaint the icons to the
- same colour as the label and flatten the two-tone look.
- */
- .contextmenu .item > i.icon{
- width: 16px;
- min-width: 16px;
- height: auto;
- margin: 0px;
- font-size: 14px;
- text-align: center;
- color: var(--fs-icon) !important;
- opacity: 1;
- }
- /* Keyboard hint, pushed to the trailing edge */
- .contextmenu .description{
- margin-left: auto;
- padding-left: 18px;
- color: var(--fs-text-faint) !important;
- font-size: 12px;
- }
- .contextmenu .divider{
- width: auto;
- height: 1px;
- margin: 5px 4px;
- background-color: var(--fs-line-soft);
- border-bottom: 0px;
- }
- /*
- Message box and popups
- */
- .msgbox{
- position: absolute;
- bottom: 0;
- left: 3em;
- width: 20em;
- padding: 1.2em;
- padding-right: 2em;
- background-color: var(--navi_bgcolor);
- border-top-right-radius: 0.4em;
- border-top-left-radius: 0.4em;
- border: 1px solid var(--divider) !important;
- color: var(--text_color);
- }
- .closeMsgButton{
- position:absolute;
- top:8px;
- right:12px;
- }
- .closeMsgButton{
- cursor:pointer;
- }
- .popup{
- position:fixed;
- top:0;
- z-index:200;
- right:0;
- bottom:30px;
- padding-bottom:24px;
- border: 0px solid transparent !important;
- width: 30em;
- height: 100%;
- max-width: 100%;
- border: 1px solid var(--popup_border);
- background-color:var(--popup_bg);
- }
- .popup.wide{
- width: 60em;
- }
- .popupheader{
- width:100%;
- padding:3px;
- padding-left:12px;
- border-bottom:2px solid var(--popup_header_bottom);
- background-color: var(--popup_header_bg);
- color: var(--popup_header_txt);
- height:29px;
- }
- .popupcontent{
- height: calc(100% - 29px);
- overflow:auto;
- }
- .popupcloser{
- position:absolute;
- top:5px;
- right:0px;
- font-size: 120%;
- cursor:pointer;
- }
- .popupbuttons{
- cursor:pointer;
- padding:5px;
- padding-left:12px;
- margin-bottom:4px;
- border: 1px solid var(--popup_btn_border);
- border-radius: 4px;
- }
- .popupbuttons.primary{
- background-color:var(--popup_btn_primary_bg);
- border: 1px solid transparent;
- color:var(--popup_btn_primary_txt);
- }
- .popupbuttons.negative{
- background-color:var(--popup_btn_negative_bg);
- border: 1px solid transparent;
- color:var(--popup_btn_negative_txt);
- }
- .popupbuttons.disabled{
- opacity: 0.4;
- pointer-events: none;
- }
- .popupbuttons.primary.disabled{
- opacity: 0.4;
- pointer-events: none;
- }
- /* Rename dialog */
- .renameinput input{
- box-shadow: none;
- border: 1px solid var(--divider);
- padding-left: 0.4em;
- padding-right: 0.4em;
- padding-top: 0.2em;
- padding-bottom: 0.2em;
- width: 100%;
- }
- .renameinput input:focus {
- outline: none !important;
- border: 1px solid var(--navi_theme);
- }
- .allowHover:hover{
- background-color:var(--popup_btn_hover);
- }
- .allowHover.primary:hover{
- background-color:var(--popup_btn_primary_bg_hover);
- }
- .allowHover.negative:hover{
- background-color:var(--popup_btn_negative_bg_hover);
- }
- .newFileFormat{
- cursor:pointer;
- }
- .popupWrapper{
- position:fixed;
- top:0px;
- left:0px;
- width:100%;
- height:100%;
- z-index:199;
- background-color: var(--popup_wrapper_background);
- display:none;
- }
- @supports (backdrop-filter: none) {
- .popupWrapper {
- backdrop-filter: blur(5px);
- }
- }
- #openWithModuleList{
- height:50vh;
- overflow-y:auto;
- background-color: var(--modulelist_bg);
- border: 1px solid var(--divider);
- border-radius: 0;
- }
- #openWithModuleList .ui.avatar.image, #openWithModuleList .ui.avatar.image img, #openWithModuleList .ui.avatar.image svg, #openWithModuleList .ui.avatar.images .image, #openWithModuleList .ui.avatar.images img, #openWithModuleList .ui.avatar.images svg{
- border-radius: 0;
- }
- #openWithModuleList .item{
- padding:8px;
- padding-left:22px;
- border-radius: 2px;
- display: flex;
- flex-wrap: wrap;
- }
- #openWithModuleList .item:hover{
- background-color: var(--modulelist_hover) !important;
- }
- #openWithModuleList .item.selected{
- background-color: var(--open_with_selected) !important;
- color:var(--open_with_selected_text);
- }
- #openWithModuleList .item.selectable:hover{
- background-color:var(--open_with_item_hover_background);
- }
- /*
- New Item List
- */
- .newfilelist{
- border: 1px solid var(--divider);
- border-radius: 0.4em;
- margin-bottom: 0.6em;
- }
- .newfilelist .item{
- padding: 0.6em;
- }
- .newfilelist .item:not(:last-child){
- border-bottom: 1px solid var(--divider);
- }
- .newfilelist .item.selected{
- background-color: var(--open_with_selected) !important;
- color:var(--open_with_selected_text);
- }
- /*
- Upload Related
- */
- #uploadTab{
- position:fixed;
- right:0px;
- bottom: 0px;
- width:300px;
- margin-bottom:0px !important;
- padding:0px !important;
- background-color: var(--upload_bg) !important;
- overflow-x: hidden;
- }
- .statusBar{
- height:32px;
- background-color:var(--uploadtab_bg);
- padding:8px;
- }
- .statusBar{
- color:var(--uploadtab_txt);
- }
- .hideUploadButton{
- float: right;
- cursor:pointer;
- }
- .uploadList{
- margin:8px;
- padding-bottom:3px;
- margin-bottom:0px;
- max-height: 250px;
- overflow-y:auto;
- }
- .uploadTask{
- margin-top:6px;
- position: relative;
- }
- .uploadTaskRemoveIcon{
- position:absolute;
- top:0px;
- right:0px;
- cursor:pointer;
- }
- .saving {
- -moz-animation: saving 3s ease-out;
- -moz-animation-iteration-count: infinite;
- -webkit-animation: saving 3s ease-out;
- -webkit-animation-iteration-count: infinite;
- -ms-animation: saving 3s ease-out;
- -ms-animation-iteration-count: infinite;
- }
- @keyframes saving {
- 0% { opacity: 0.6; }
- 50% { opacity: 1; }
- 100% { opacity: 0.6; }
- }
- @-webkit-keyframes saving {
- 0% { opacity: 0.6; }
- 50% { opacity: 1; }
- 100% { opacity: 0.6; }
- }
- @-moz-keyframes saving {
- 0% { opacity: 0.6; }
- 50% { opacity: 1; }
- 100% { opacity: 0.6; }
- }
- @-ms-keyframes saving {
- 0% { opacity: 0.3; }
- 50% { opacity: 1; }
- 100% { opacity: 0.3; }
- }
- .clearallButton{
- padding:8px;
- cursor:pointer;
- }
- .themed.progress .bar{
- background-color: var(--upload_progressbar);
- }
- .themed.progress .percentage{
- color: var(--upload_progresstext) !important;
- }
- .success.progress .bar{
- background-color: var(--upload_progress_succ);
- }
- .error.progress .bar{
- background-color: var(--upload_progress_failed);
- }
- .ui.progress{
- margin-bottom: 1em !important;
- }
- /*
- Special message or exceptions
- */
- .ui.themed.header{
- color: var(--text_color);
- }
- .ui.themed.header .sub.header{
- color: var(--text_color_secondary);
- }
- code{
- background-color: var(--code_bg);
- color: var(--code_txt);
- line-height: 2.5;
- padding: 0.1em;
- padding-left: 0.4em;
- padding-right: 0.4em;
- border-radius: 0.2em;
- }
- /*
- Legacy supports (Deprecated)
- */
- .normal.object{
- color:var(--normal_object_txt);
- }
- .hex.foldername{
- color: var(--hex_folder_txt) !important;
- }
- .um.filename{
- color: var(--um_file_txt) !important;
- }
- /*
- Hot Search Related
- */
- i.blue{
- color: #345eeb;
- }
- .fileObject.hotSearchHighlight{
- background-color: #d2f2f7 !important;
- }
- /*
- Responsive
- */
- @media (max-width:1035px) {
- .viewportBtns{
- display: block;
- float: right;
- }
- }
- @media (max-width:840px) {
- .viewportBtns{
- float: none;
- }
-
- .tabletAndDesktopOnly{
- display:none !important;
- }
- .mobileFileOprMenu{
- display:block !important;
- }
- .navibar.mobile .fileOprBtn{
- padding-top: 0.1em;
- padding-bottom: 0em;
- }
- .navibar.mobile .twolines.fileOprBtn{
- padding-top: 0.1em;
- padding-bottom: 0em;
- }
- .navibar.mobile .twolines.fileOprBtn .opricon{
- width: 36px;
- }
- .navibar.mobile .twolines.fileOprBtn .oprtxt{
- display:none !important;
- }
- .navibar.mobile .wideScreenOnly{
- display:none;
- }
- .navibar.mobile .fileoprGroupDivider{
- height: 42px;
- }
- .mobileFileOprMenu{
- top: 0;
- right: 0.4em;
- margin-top: -0.2em;
- }
- }
- @media (max-width:620px) {
- #pathInputField{
- width: 100%;
- }
- #pathInputField input{
- margin-left: 0;
- }
- .ui.selection.dropdown{
- min-width: 8em;
- }
- /*Directory sidebar, full width */
- #directorySidebar{
- width: 100%;
- min-width: 100%;
- }
- /* grid mode preview */
- .fileviewList .fileObject.card{
- border-radius: 0.4em;
- position: relative;
- margin-bottom:1em;
- width: calc(33% - 4px) !important;
- min-width: 100px;
- max-width: 148px;
- }
-
- /* aspect-ratio above already keeps this square; only the cap needs lifting */
- .fileviewList .fileObject.card img{
- max-width: none;
- }
- /* Properties view, disable function in small display size*/
- #propertiesView{
- display:none !important;
- }
- #togglePropertiesViewBtn{
- display:none !important;
- }
- /* popups */
- .popup{
- top: 5em;
- bottom: 5em;
- width:100%;
- height: auto;
- }
- /* msgbox */
- .msgbox{
- left: 0.4em;
- border: 0px solid transparent;
- }
- }
- @media (max-width:450px) {
- .viewportBtns{
- float: right;
- }
- }
- /* ======================================================================
- Redesigned navigation row and sidebar (Phase 2.3 / 2.4)
- Colours come from shared/fs-theme.css, components from
- shared/fs-components.css. Only layout lives here.
- ====================================================================== */
- .navibar {
- padding: 0 !important;
- height: auto !important;
- }
- .fmNav {
- display: flex;
- align-items: center;
- gap: 8px;
- padding: 8px 12px;
- position: relative;
- background: var(--fs-bg);
- border-bottom: 1px solid var(--fs-line);
- }
- .fmNavBtns {
- display: flex;
- align-items: center;
- gap: 4px;
- flex-shrink: 0;
- }
- .fmNav .fsIconBtn.disabled,
- .fmNav .fsIconBtn:disabled {
- opacity: 0.35;
- pointer-events: none;
- }
- /* ---------- Breadcrumb pill ---------- */
- .fmPathbar {
- flex-grow: 1;
- min-width: 0;
- cursor: text;
- padding-left: 4px;
- }
- .fmPathHome {
- width: 26px;
- height: 26px;
- min-width: 26px;
- border: none;
- background: transparent;
- border-radius: 6px;
- padding: 4px;
- color: var(--fs-icon);
- cursor: pointer;
- flex-shrink: 0;
- }
- .fmPathHome:hover { background: var(--fs-fill); color: var(--fs-text); }
- .fmPathbar .pathDisplay {
- flex-grow: 1;
- min-width: 0;
- overflow: hidden;
- white-space: nowrap;
- font-size: 14px;
- margin: 0 !important;
- color: var(--fs-text);
- }
- .fmPathbar .pathDisplay .section {
- padding: 3px 7px;
- border-radius: 6px;
- cursor: pointer;
- }
- .fmPathbar .pathDisplay .section:hover { background: var(--fs-fill); }
- .fmPathbar .pathDisplay .divider { color: var(--fs-text-faint); }
- .fmPathInput {
- display: flex;
- align-items: center;
- gap: 6px;
- flex-grow: 1;
- min-width: 0;
- }
- .fmPathInput input {
- flex-grow: 1;
- min-width: 0;
- border: none;
- outline: none;
- background: transparent;
- font-size: 14px;
- font-family: inherit;
- color: var(--fs-text);
- padding: 4px 2px;
- }
- /* ---------- Search pill ---------- */
- .fmSearch {
- width: 240px;
- flex-shrink: 0;
- padding-right: 8px;
- }
- .fmSearch input {
- flex-grow: 1;
- min-width: 0;
- border: none;
- outline: none;
- background: transparent;
- font-size: 14px;
- font-family: inherit;
- color: var(--fs-text);
- }
- .fmSearchIcon {
- width: 17px;
- height: 17px;
- flex-shrink: 0;
- color: var(--fs-text-dim);
- }
- .fmSearchIcon svg { display: block; width: 100%; height: 100%; }
- .fmCaseBtn {
- border: none;
- background: transparent;
- color: var(--fs-text-dim);
- font-size: 12px;
- font-weight: 600;
- border-radius: 5px;
- padding: 3px 5px;
- cursor: pointer;
- flex-shrink: 0;
- }
- .fmCaseBtn:hover { background: var(--fs-fill); color: var(--fs-text); }
- .fmCaseBtn.active { background: var(--fs-accent-soft); color: var(--fs-accent-strong); }
- /* ---------- View toggle ---------- */
- .fsViewToggle {
- display: flex;
- background: var(--fs-fill);
- border-radius: 8px;
- padding: 2px;
- gap: 2px;
- flex-shrink: 0;
- }
- .fsViewToggle button {
- width: 30px;
- height: 26px;
- border: none;
- background: transparent;
- border-radius: 6px;
- padding: 5px;
- color: var(--fs-icon);
- cursor: pointer;
- }
- .fsViewToggle button:hover { background: var(--fs-fill-hover); }
- .fsViewToggle button.disabled,
- .fsViewToggle button:disabled {
- background: var(--fs-surface);
- color: var(--fs-accent);
- box-shadow: 0 1px 2px rgba(0,0,0,0.12);
- pointer-events: none;
- opacity: 1;
- }
- .fsViewToggle button svg { display: block; width: 100%; height: 100%; }
- /* ---------- Overflow menu button ---------- */
- .fsMoreBtn {
- width: 32px;
- height: 32px;
- min-width: 32px;
- border: 1px solid var(--fs-line);
- background: var(--fs-surface);
- border-radius: 8px;
- padding: 7px;
- color: var(--fs-text);
- cursor: pointer;
- flex-shrink: 0;
- }
- .fsMoreBtn:hover { background: var(--fs-fill); }
- .fsMoreBtn.active {
- background: var(--fs-accent-soft);
- color: var(--fs-accent);
- border-color: transparent;
- }
- .fsMoreBtn svg { display: block; width: 100%; height: 100%; }
- .fmMoreMenu {
- right: 12px;
- top: 46px;
- max-height: 70vh;
- overflow-y: auto;
- overflow-x: hidden;
- }
- .fmSortRow select {
- flex-grow: 1;
- border: 1px solid var(--fs-line);
- border-radius: 6px;
- background: var(--fs-surface);
- color: var(--fs-text);
- font-family: inherit;
- font-size: 13px;
- padding: 3px 6px;
- outline: none;
- }
- .fmSortRow:hover { background: transparent; }
- /* ---------- Sidebar ---------- */
- #directorySidebar {
- padding: 10px 8px 10px 10px !important;
- background: var(--fs-bg);
- border-right: 1px solid var(--fs-line);
- }
- .fsSideTitle {
- font-size: 12px;
- color: var(--fs-text-faint);
- padding: 4px 8px;
- margin-top: 4px;
- }
- .fsSideTitle:first-child { margin-top: 0; }
- .fmSideGroup { margin-bottom: 6px; }
- #directorySidebar .fsSideItem {
- display: flex !important;
- align-items: center;
- gap: 10px;
- padding: 5px 8px !important;
- border-radius: 7px;
- cursor: pointer;
- white-space: nowrap;
- overflow: hidden;
- color: var(--fs-text);
- margin: 0 !important;
- }
- #directorySidebar .fsSideItem:hover { background: var(--fs-fill); }
- #directorySidebar .fsSideItem.active {
- background: var(--fs-accent-soft);
- color: var(--fs-accent-strong);
- }
- #directorySidebar .fsSideItem .fsSideIcon {
- width: 20px;
- height: 20px;
- min-width: 20px;
- }
- #directorySidebar .fsSideItem .fsSideIcon svg { display: block; width: 100%; height: 100%; }
- #directorySidebar .fsSideItem .fsSideLabel {
- overflow: hidden;
- text-overflow: ellipsis;
- }
- #selectInfo {
- font-size: 12px;
- color: var(--fs-text-faint);
- padding: 8px;
- margin: 0;
- }
- /* ---------- Narrow windows ---------- */
- @media only screen and (max-width: 900px) {
- .fmSearch { width: 170px; }
- }
- @media only screen and (max-width: 720px) {
- .fmSearch { display: none; }
- }
- /* ======================================================================
- Redesigned file list, grid and status bar (Phase 2.5 - 2.8)
- ====================================================================== */
- /* ---------- Shared row icon ---------- */
- .fmRowIcon {
- width: 20px;
- height: 20px;
- min-width: 20px;
- display: inline-block;
- vertical-align: middle;
- flex-shrink: 0;
- }
- .fmRowIcon .fsSmallIcon { width: 100%; height: 100%; }
- /* ---------- List view (single column) ---------- */
- .fileviewList .fileObject.item {
- display: flex !important;
- align-items: center;
- gap: 9px;
- height: 38px;
- padding: 0 14px 0 16px !important;
- cursor: pointer;
- border-bottom: 1px solid var(--fs-line-soft);
- }
- .fileviewList .fileObject.item .filename {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- /* ---------- Details view: the mockup's columned list ---------- */
- #fmListHeader {
- position: sticky;
- top: 0;
- z-index: 6;
- background: var(--fs-bg);
- border-bottom: 1px solid var(--fs-line);
- }
- .detailstable {
- table-layout: fixed !important;
- width: 100% !important;
- margin: 0 !important;
- border-collapse: collapse !important;
- }
- #fmListHeader th {
- font-size: 13px !important;
- font-weight: 400 !important;
- color: var(--fs-text-dim) !important;
- padding: 6px 8px !important;
- text-align: left;
- background: transparent !important;
- border: none !important;
- white-space: nowrap;
- }
- #fmListHeader th.fmSortable { cursor: pointer; }
- #fmListHeader th.fmSortable:hover { background: var(--fs-fill) !important; }
- #fmListHeader th.sorted { color: var(--fs-text) !important; }
- .fmSortMark {
- margin-left: 5px;
- font-size: 11px;
- color: var(--fs-text-dim);
- }
- .detailstable tr.fileObject.details { cursor: pointer; }
- .detailstable tr.fileObject.details td {
- padding: 6px 8px !important;
- border: none !important;
- border-bottom: 1px solid var(--fs-line-soft) !important;
- font-size: 14px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- vertical-align: middle;
- }
- /*
- The name cell must stay a real table-cell: display:flex on a <td> drops it
- out of the table formatting context and collapses the column to zero width.
- The flex row goes on an inner wrapper instead.
- */
- .detailstable td.fmColName { color: var(--fs-text); }
- .detailstable td.fmColName .fmNameCell {
- display: flex;
- align-items: center;
- gap: 9px;
- min-width: 0;
- }
- .detailstable td.fmColName .filename {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .detailstable td.fmColDate,
- .detailstable td.fmColType,
- .detailstable td.fmColSize { color: var(--fs-text-dim); }
- /* Checkbox column, shown on hover or when the row is selected */
- .fmCheck {
- display: inline-block;
- width: 16px;
- height: 16px;
- border: 1.5px solid var(--fs-line);
- border-radius: 4px;
- background: var(--fs-surface);
- opacity: 0;
- transition: opacity 0.12s ease;
- vertical-align: middle;
- }
- /*
- Check marks belong to multi-select, not to selection: a single click only
- highlights. #folderView gains .fmMultiSelect once ctrl/shift is held, mobile
- multi-select is on, or more than one item is already picked.
- */
- .fmCheck { display: none; }
- #folderView.fmMultiSelect .fmCheck { display: inline-block; }
- #folderView.fmMultiSelect .detailstable tr.fileObject:hover .fmCheck { opacity: 1; }
- #folderView.fmMultiSelect .detailstable tr.fileObject.selected .fmCheck {
- opacity: 1;
- background: var(--fs-accent);
- border-color: var(--fs-accent);
- position: relative;
- }
- #folderView.fmMultiSelect .detailstable tr.fileObject.selected .fmCheck::after {
- content: "";
- position: absolute;
- left: 4.5px;
- top: 1px;
- width: 4px;
- height: 8px;
- border: solid var(--fs-primary-fg);
- border-width: 0 2px 2px 0;
- transform: rotate(45deg);
- }
- /* ---------- Selection highlight, all three modes ---------- */
- .fileviewList .fileObject.item:hover,
- .detailstable tr.fileObject.details:hover { background: var(--fs-row-hover); }
- .fileviewList .fileObject.item.selected,
- .detailstable tr.fileObject.details.selected {
- background: var(--fs-selected) !important;
- }
- .fileviewList .fileObject.item.selected .filename,
- .detailstable tr.fileObject.details.selected td { color: var(--fs-text) !important; }
- /* ---------- Grid view ---------- */
- #folderView { --fm-tile: 170px; }
- #folderList.fileviewList,
- #fileList.fileviewList { padding: 0 !important; }
- .fileviewList .fileObject.card {
- width: var(--fm-tile);
- display: inline-block !important;
- vertical-align: top;
- margin: 0 !important;
- padding: 8px;
- border: 1px solid transparent;
- border-radius: 10px;
- background: transparent;
- box-shadow: none !important;
- overflow: hidden;
- cursor: pointer;
- }
- .fileviewList .fileObject.card:hover { background: var(--fs-row-hover); }
- .fileviewList .fileObject.card.selected {
- background: var(--fs-selected) !important;
- border-color: var(--fs-selected-line);
- }
- .fileviewList .fileObject.card .image {
- position: relative;
- text-align: center;
- border-radius: 8px;
- overflow: hidden;
- background: var(--fs-thumb-bg);
- }
- .fileviewList .fileObject.card .content {
- padding: 7px 2px 2px 2px !important;
- border: none !important;
- }
- .fileviewList .fileObject.card .content .header {
- font-size: 13px !important;
- font-weight: 400 !important;
- color: var(--fs-text) !important;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .fileviewList .fileObject.card .content .description {
- font-size: 11px;
- color: var(--fs-text-faint);
- margin-top: 2px;
- }
- /* Selected tick badge on a tile, like the mockup */
- .fmTileCheck {
- position: absolute;
- top: 6px;
- right: 6px;
- width: 20px;
- height: 20px;
- border-radius: 50%;
- background: var(--fs-accent);
- display: none;
- }
- .fmTileCheck::after {
- content: "";
- position: absolute;
- left: 7px;
- top: 3.5px;
- width: 5px;
- height: 10px;
- border: solid var(--fs-primary-fg);
- border-width: 0 2px 2px 0;
- transform: rotate(45deg);
- }
- #folderView.fmMultiSelect .fileObject.card.selected .fmTileCheck { display: block; }
- /* Date group headers */
- .fmGroupHeader {
- font-size: 13px;
- font-weight: 600;
- color: var(--fs-text);
- padding: 14px 6px 6px 6px;
- }
- .fmGroup { display: block; }
- /* ---------- Status bar ---------- */
- #fmStatusBar {
- display: flex;
- align-items: center;
- gap: 10px;
- padding: 6px 12px;
- border-top: 1px solid var(--fs-line);
- background: var(--fs-bg);
- font-size: 12px;
- color: var(--fs-text-dim);
- flex-shrink: 0;
- }
- .fmStatusSpacer { flex-grow: 1; }
- #fmSelectionSize { color: var(--fs-text); }
- #fmZoom {
- display: flex;
- align-items: center;
- gap: 6px;
- }
- .fmZoomIcon {
- width: 14px;
- height: 14px;
- color: var(--fs-text-faint);
- }
- .fmZoomIcon svg { display: block; width: 100%; height: 100%; }
- #fmZoomSlider {
- width: 96px;
- accent-color: var(--fs-accent);
- cursor: pointer;
- }
- .fmStatusToggle button { width: 26px; height: 22px; padding: 4px; }
- .fmStatusBtn {
- width: 26px;
- height: 26px;
- border: none;
- background: transparent;
- border-radius: 6px;
- padding: 5px;
- color: var(--fs-icon);
- cursor: pointer;
- }
- .fmStatusBtn:hover { background: var(--fs-fill); }
- .fmStatusBtn svg { display: block; width: 100%; height: 100%; }
- @media only screen and (max-width: 720px) {
- /*
- updateZoomControlVisibility() shows this with an inline style, which
- outranks a plain media query - hence !important. Without it the zoom
- control rendered at full size on phones and pushed the status bar over.
- */
- /*
- Only the zoom slider is too wide for a phone. The view toggle and the
- properties button are small enough to keep, and hiding them left the
- footer with no controls at all.
- */
- #fmZoom { display: none !important; }
- .fmStatusToggle button { width: 30px; height: 26px; }
- }
- /* ---------- Details column widths + responsive column dropping ----------
- With table-layout:fixed the first row defines the columns, so these widths
- apply to the header table and both row tables identically. Hiding a cell
- collapses its column, which a <colgroup> could not do. */
- .detailstable .fmColCheck { width: 38px; }
- .detailstable .fmColDate { width: 170px; }
- .detailstable .fmColType { width: 120px; }
- .detailstable .fmColSize { width: 90px; }
- .detailstable .fmColName { width: auto; }
- /* Force identical box geometry between the header and the row tables */
- #fmListHeader table.detailstable,
- .fileviewList table.detailstable {
- border: none !important;
- box-shadow: none !important;
- background: transparent !important;
- }
- #folderView.fmNarrow .fmColType { display: none !important; }
- #folderView.fmVeryNarrow .fmColDate { display: none !important; }
- /* The legacy .fileObject.details rule put a 1px border on the <tr>, which inset
- every row cell by 1px and left the columns misaligned with the header table. */
- .detailstable tr.fileObject.details {
- border: none !important;
- }
- /* ---------- Classic file operation toolbar ---------- */
- /*
- Sits above the nav row; toggled from the overflow menu and remembered server
- side under file_explorer/oprbar.
- It must never wrap to a second row - that was the old behaviour and it ate
- vertical space the file list needs. Instead the bar collapses in stages as
- the window narrows: first the stacked text-button groups drop out (rightmost
- first, since those actions are the least used), then the big buttons lose
- their labels and become icons. Anything dropped reappears in the overflow
- menu automatically, because syncOprMenuDuplicates() checks what is actually
- visible rather than assuming.
- */
- .fileOprBar {
- display: flex;
- align-items: flex-start;
- flex-wrap: nowrap;
- gap: 2px;
- padding: 6px 12px 4px 12px;
- border-bottom: 1px solid var(--fs-line);
- background: var(--fs-bg);
- overflow: hidden;
- white-space: nowrap;
- }
- .fileOprBar .fileOprBtn {
- flex-shrink: 0;
- min-width: 0;
- }
- /*
- One line per split. The legacy .navibar .fileoprGroupDivider rule already
- draws a border-right; adding a border-left here rendered two lines side by
- side wherever two groups met.
- */
- .fileOprBar .fileoprGroupDivider {
- display: inline-block;
- vertical-align: top;
- border-left: none;
- border-right: 1px solid var(--fs-line-soft);
- margin: 0 6px 0 2px;
- padding-right: 8px;
- flex-shrink: 0;
- }
- .fileOprBar .fileOprBtn .oprtxt {
- font-size: 12px;
- margin: 2px 0 0 0;
- white-space: nowrap;
- }
- /* Stage 1: drop the stacked groups, rightmost (least used) first */
- @media only screen and (max-width: 960px) {
- .fileOprBar .fileoprGroupDivider:nth-of-type(4) { display: none; }
- }
- @media only screen and (max-width: 840px) {
- .fileOprBar .fileoprGroupDivider:nth-of-type(3) { display: none; }
- }
- @media only screen and (max-width: 600px) {
- .fileOprBar .fileoprGroupDivider { display: none; }
- }
- /* Stage 2: big buttons become icon-only */
- @media only screen and (max-width: 720px) {
- .fileOprBar .fileOprBtn .oprtxt { display: none; }
- .fileOprBar .fileOprBtn .opricon { width: 32px; }
- .fileOprBar { padding-bottom: 6px; }
- }
- /* Stage 3: below this the nav row alone is the interface */
- @media only screen and (max-width: 720px) {
- .fileOprBar { display: none !important; }
- }
- /* ---------- Grid tile corrections ---------- */
- /*
- The legacy .card .content .description rule positions the size absolutely
- against the card, which only worked while cards had a fixed 20em height.
- Cards are content-sized now, so it has to sit in the normal flow or it
- lands on top of the filename.
- */
- .fileviewList .fileObject.card .content .description {
- position: static !important;
- bottom: auto !important;
- left: auto !important;
- font-size: 11px;
- color: var(--fs-text-faint);
- margin-top: 2px;
- }
- /* Folders are drawn glyphs, not photos - the thumbnail plate behind them just
- boxes in the icon. Files keep it so real thumbnails have something to sit on. */
- .fileviewList .fileObject.card[type="folder"] .image {
- background: transparent !important;
- }
- /* ---------- Sort menu ---------- */
- /* Anchored to the sort button on the right of the nav row, like the "..." menu */
- .fmSortMenu {
- right: 52px;
- top: 46px;
- min-width: 210px;
- }
- /* Greyed section label above the options */
- .fsMenuHeader {
- padding: 4px 9px 6px 9px;
- font-size: 12px;
- color: var(--fs-text-faint);
- cursor: default;
- user-select: none;
- }
- /* The tick sits in the icon column, so the labels stay aligned whether or not
- a mode is active */
- .fmSortOption .fmSortCheck { visibility: hidden; color: var(--fs-accent); }
- .fmSortOption.active .fmSortCheck { visibility: visible; }
- .fmSortOption.active { color: var(--fs-text); }
- /* ======================================================================
- Mobile layout
- ====================================================================== */
- @media only screen and (max-width: 720px) {
- /*
- The nav row becomes two rows: controls on top, the path on its own row
- underneath. A single row cannot hold the breadcrumb and the buttons at
- phone widths without the path collapsing to nothing.
- */
- .fmNav {
- flex-wrap: wrap;
- row-gap: 6px;
- padding: 6px 8px;
- }
- .fmNavBtns { flex-shrink: 0; }
- .fmPathbar {
- order: 10;
- flex-basis: 100%;
- min-width: 0;
- }
- /*
- Push the sort and overflow buttons to the right edge. margin-left:auto on
- the first of them absorbs the free space, so both end up flush right
- regardless of how many nav buttons precede them.
- */
- .fmNav #fmSortBtn { margin-left: auto; }
- /* Menus anchor to the row above the path */
- .fmMoreMenu, .fmSortMenu {
- top: 44px;
- max-width: calc(100vw - 24px);
- }
- /* Status bar: text only, no controls to overflow */
- #fmStatusBar {
- padding: 5px 10px;
- gap: 8px;
- min-height: 0;
- }
- #fmStatusBar .fmStatusBtn { flex-shrink: 0; }
- #selectInfo, #fmSelectionSize { white-space: nowrap; }
- /* Guard: every icon in the bar stays at its intended box even if some
- future rule forgets to size the button around it */
- #fmStatusBar svg { width: 100%; height: 100%; }
- #fmStatusBar .fmStatusBtn { width: 26px; height: 26px; }
- }
- /* Menu entries that cannot act on the current selection are hidden outright
- rather than greyed - the menu is long enough already. */
- .fsMenuItem.fmOprUnusable { display: none !important; }
- /* Menu entries that only make sense on a touch device */
- .fmMobileOnly { display: none; }
|