From cd671cfc0fa794f97dccf7ab286a119a5ac83350 Mon Sep 17 00:00:00 2001 From: Taiji Uchida <63937957+uchi-ta@users.noreply.github.com> Date: Fri, 22 Sep 2023 11:03:48 +0900 Subject: [PATCH] Added new features / Bug fixed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ・CSVをインポートするAPIを追加。 ・モバイル環境のユーザビリティの向上。 ・APIによるレコード作成時に添付ファイルのサイズチェックが行われない問題を解消。 ・ファイルアップロード時に拡張機能のサイトIDの指定が機能しない問題を解消。 ・ファイルアップロード時にサーバスクリプトのサイト設定の読み込み時が動作しない問題を解消。 --- Implem.CodeDefiner/Implem.CodeDefiner.csproj | 6 +- Implem.DefinitionAccessor/Def.cs | 3 + .../Implem.DefinitionAccessor.csproj | 6 +- .../Implem.DisplayAccessor.csproj | 6 +- Implem.Factory/Implem.Factory.csproj | 6 +- Implem.Libraries/Implem.Libraries.csproj | 6 +- .../Implem.ParameterAccessor.csproj | 6 +- .../Definition_Code/Model_Body.txt | 1 + .../Definition_Code/Model_ImportByApi.json | 5 + .../Model_ImportByApi_Body.txt | 39 + .../Model_Utilities_Import_Body.txt | 336 ++++- .../Controllers/Api/ItemsController.cs | 23 + Implem.Pleasanter/Dockerfile | 6 +- Implem.Pleasanter/Implem.Pleasanter.csproj | 11 +- .../Libraries/Requests/Context.cs | 62 +- .../Libraries/Requests/ImportApi.cs | 12 + .../Libraries/Settings/ImportUtilities.cs | 30 + Implem.Pleasanter/Libraries/Web/Mime.cs | 6 +- .../Models/Binaries/BinaryUtilities.cs | 5 +- .../Models/Binaries/BinaryValidators.cs | 7 + .../Models/Issues/IssueUtilities.cs | 336 ++++- Implem.Pleasanter/Models/Items/ItemModel.cs | 40 + .../Models/Results/ResultUtilities.cs | 336 ++++- .../wwwroot/content/responsive.css | 1152 +++++++++++++++-- .../wwwroot/content/responsive.min.css | 2 +- .../wwwroot/scripts/responsive.js | 101 +- .../wwwroot/scripts/sitepackage.js | 6 + Implem.Pleasanter/wwwroot/scripts/template.js | 3 + Implem.Pleasanter/wwwroot/scripts/viewmode.js | 3 + .../wwwroot/styles/responsive.css | 1152 +++++++++++++++-- .../implem.TestAutomation.csproj | 6 +- Rds/Implem.IRds/Implem.IRds.csproj | 6 +- .../Implem.PostgreSql.csproj | 6 +- Rds/Implem.SqlServer/Implem.SqlServer.csproj | 6 +- 34 files changed, 3472 insertions(+), 265 deletions(-) create mode 100644 Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_ImportByApi.json create mode 100644 Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_ImportByApi_Body.txt create mode 100644 Implem.Pleasanter/Libraries/Requests/ImportApi.cs diff --git a/Implem.CodeDefiner/Implem.CodeDefiner.csproj b/Implem.CodeDefiner/Implem.CodeDefiner.csproj index 80b547049..7e935a492 100644 --- a/Implem.CodeDefiner/Implem.CodeDefiner.csproj +++ b/Implem.CodeDefiner/Implem.CodeDefiner.csproj @@ -5,9 +5,9 @@ net6.0 Copyright © Implem Inc 2014 - 2023 This program does the automatic code creation and merging of existing code based on the definition. Also it will make the configuration change of sql server database. - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 Linux diff --git a/Implem.DefinitionAccessor/Def.cs b/Implem.DefinitionAccessor/Def.cs index f0bacb61b..d92bdead4 100644 --- a/Implem.DefinitionAccessor/Def.cs +++ b/Implem.DefinitionAccessor/Def.cs @@ -478,6 +478,7 @@ public static void SetCodeDefinition() case "Model_ImageLibCases": Code.Model_ImageLibCases = definitionRow[1].ToString().NoSpace(definitionRow["NoSpace"].ToBool()); SetCodeTable(CodeTable.Model_ImageLibCases, definitionRow, CodeXls); break; case "Model_ImageLibJsonCases": Code.Model_ImageLibJsonCases = definitionRow[1].ToString().NoSpace(definitionRow["NoSpace"].ToBool()); SetCodeTable(CodeTable.Model_ImageLibJsonCases, definitionRow, CodeXls); break; case "Model_ImageLibNextCases": Code.Model_ImageLibNextCases = definitionRow[1].ToString().NoSpace(definitionRow["NoSpace"].ToBool()); SetCodeTable(CodeTable.Model_ImageLibNextCases, definitionRow, CodeXls); break; + case "Model_ImportByApi": Code.Model_ImportByApi = definitionRow[1].ToString().NoSpace(definitionRow["NoSpace"].ToBool()); SetCodeTable(CodeTable.Model_ImportByApi, definitionRow, CodeXls); break; case "Model_ImportCases": Code.Model_ImportCases = definitionRow[1].ToString().NoSpace(definitionRow["NoSpace"].ToBool()); SetCodeTable(CodeTable.Model_ImportCases, definitionRow, CodeXls); break; case "Model_IndexCases": Code.Model_IndexCases = definitionRow[1].ToString().NoSpace(definitionRow["NoSpace"].ToBool()); SetCodeTable(CodeTable.Model_IndexCases, definitionRow, CodeXls); break; case "Model_IndexJsonCases": Code.Model_IndexJsonCases = definitionRow[1].ToString().NoSpace(definitionRow["NoSpace"].ToBool()); SetCodeTable(CodeTable.Model_IndexJsonCases, definitionRow, CodeXls); break; @@ -6924,6 +6925,7 @@ public class CodeColumn2nd public string Model_ImageLibCases; public string Model_ImageLibJsonCases; public string Model_ImageLibNextCases; + public string Model_ImportByApi; public string Model_ImportCases; public string Model_IndexCases; public string Model_IndexJsonCases; @@ -7721,6 +7723,7 @@ public class CodeTable public CodeDefinition Model_ImageLibCases = new CodeDefinition(); public CodeDefinition Model_ImageLibJsonCases = new CodeDefinition(); public CodeDefinition Model_ImageLibNextCases = new CodeDefinition(); + public CodeDefinition Model_ImportByApi = new CodeDefinition(); public CodeDefinition Model_ImportCases = new CodeDefinition(); public CodeDefinition Model_IndexCases = new CodeDefinition(); public CodeDefinition Model_IndexJsonCases = new CodeDefinition(); diff --git a/Implem.DefinitionAccessor/Implem.DefinitionAccessor.csproj b/Implem.DefinitionAccessor/Implem.DefinitionAccessor.csproj index 3810a42c5..668826221 100644 --- a/Implem.DefinitionAccessor/Implem.DefinitionAccessor.csproj +++ b/Implem.DefinitionAccessor/Implem.DefinitionAccessor.csproj @@ -3,9 +3,9 @@ net6.0 Copyright © Implem Inc 2014 - 2023 - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 disable diff --git a/Implem.DisplayAccessor/Implem.DisplayAccessor.csproj b/Implem.DisplayAccessor/Implem.DisplayAccessor.csproj index 378a29b06..868e0ea86 100644 --- a/Implem.DisplayAccessor/Implem.DisplayAccessor.csproj +++ b/Implem.DisplayAccessor/Implem.DisplayAccessor.csproj @@ -3,9 +3,9 @@ net6.0 Copyright © Implem Inc 2014 - 2023 - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 disable diff --git a/Implem.Factory/Implem.Factory.csproj b/Implem.Factory/Implem.Factory.csproj index 318e9c6af..9ca7077a5 100644 --- a/Implem.Factory/Implem.Factory.csproj +++ b/Implem.Factory/Implem.Factory.csproj @@ -3,9 +3,9 @@ net6.0 Copyright © Implem Inc 2014 - 2023 - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 disable diff --git a/Implem.Libraries/Implem.Libraries.csproj b/Implem.Libraries/Implem.Libraries.csproj index 219eec2e4..b875590f5 100644 --- a/Implem.Libraries/Implem.Libraries.csproj +++ b/Implem.Libraries/Implem.Libraries.csproj @@ -3,9 +3,9 @@ net6.0 Copyright © Implem Inc 2014 - 2023 - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 disable diff --git a/Implem.ParameterAccessor/Implem.ParameterAccessor.csproj b/Implem.ParameterAccessor/Implem.ParameterAccessor.csproj index 4960ea457..2f062727e 100644 --- a/Implem.ParameterAccessor/Implem.ParameterAccessor.csproj +++ b/Implem.ParameterAccessor/Implem.ParameterAccessor.csproj @@ -3,9 +3,9 @@ net6.0 Copyright © Implem Inc 2014 - 2023 - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 disable diff --git a/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Body.txt b/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Body.txt index 7fc8b641b..8370fe7d2 100644 --- a/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Body.txt +++ b/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Body.txt @@ -93,6 +93,7 @@ namespace Implem.Pleasanter.Models + diff --git a/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_ImportByApi.json b/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_ImportByApi.json new file mode 100644 index 000000000..9579e2d77 --- /dev/null +++ b/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_ImportByApi.json @@ -0,0 +1,5 @@ +{ + "Id": "Model_ImportByApi", + "Indent": "2", + "Include": "Items" +} \ No newline at end of file diff --git a/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_ImportByApi_Body.txt b/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_ImportByApi_Body.txt new file mode 100644 index 000000000..9e7a7e700 --- /dev/null +++ b/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_ImportByApi_Body.txt @@ -0,0 +1,39 @@ +public ContentResultInheritance ImportByApi(Context context) +{ + SetSite( + context: context, + initSiteSettings: true, + setSiteIntegration: true, + setAllChoices: true); + if (!Site.WithinApiLimits(context: context)) + { + return ApiResults.Get(ApiResponses.OverLimitApi( + context: context, + siteId: Site.SiteId, + limitPerSite: context.ContractSettings.ApiLimit())); + } + switch (Site.ReferenceType) + { + case "Issues": + if (SiteId == ReferenceId) + { + return IssueUtilities.ImportByApi( + context: context, + ss: Site.SiteSettings, + siteModel: Site); + } + break; + case "Results": + if (SiteId == ReferenceId) + { + return ResultUtilities.ImportByApi( + context: context, + ss: Site.SiteSettings, + siteModel: Site); + } + break; + default: + return ApiResults.Get(ApiResponses.BadRequest(context: context)); + } + return ApiResults.Get(ApiResponses.BadRequest(context: context)); +} \ No newline at end of file diff --git a/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Utilities_Import_Body.txt b/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Utilities_Import_Body.txt index 27a47a2f7..465532292 100644 --- a/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Utilities_Import_Body.txt +++ b/Implem.Pleasanter/App_Data/Definitions/Definition_Code/Model_Utilities_Import_Body.txt @@ -60,14 +60,7 @@ } var invalidColumn = Imports.ColumnValidate(context, ss, columnHash.Values.Select(o => o.Column.ColumnName)); if (invalidColumn != null) return invalidColumn; - Repository.ExecuteNonQuery( - context: context, - transactional: true, - statements: new List() - .OnImportingExtendedSqls( - context: context, - siteId: ss.SiteId) - .ToArray()); + ImportUtilities.SetOnImportingExtendedSqls(context, ss); var #modelName#Hash = new Dictionary(); var importKeyColumnName = context.Forms.Data("Key"); var importKeyColumn = columnHash @@ -217,14 +210,7 @@ insertCount++; } } - Repository.ExecuteNonQuery( - context: context, - transactional: true, - statements: new List() - .OnImportedExtendedSqls( - context: context, - siteId: ss.SiteId) - .ToArray()); + ImportUtilities.SetOnImportedExtendedSqls(context, ss); ss.Notifications.ForEach(notification => { var body = new System.Text.StringBuilder(); @@ -267,4 +253,322 @@ { return Messages.ResponseFileNotFound(context: context).ToJson(); } +} + +public static ContentResultInheritance ImportByApi( + Context context, + SiteSettings ss, + SiteModel siteModel) +{ + if (!Mime.ValidateOnApi(contentType: context.ContentType, multipart: true)) + { + return ApiResults.BadRequest(context: context); + } + if (context.ContractSettings.Import == false) + { + return null; + } + var invalid = #ModelName#Validators.OnImporting( + context: context, + ss: ss, + api: true); + switch (invalid.Type) + { + case Error.Types.None: break; + default:return ApiResults.Error( + context: context, + errorData: invalid); + } + var api = context.RequestDataString.Deserialize(); + var updatableImport = api.UpdatableImport; + var encoding = api.Encoding; + var key = api.Key; + Csv csv; + try + { + csv = new Csv( + csv: context.PostedFiles.FirstOrDefault().Byte(), + encoding: encoding); + } + catch + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.FailedReadFile(context: context).Text)); + } + var count = csv.Rows.Count(); + if (Parameters.General.ImportMax > 0 && Parameters.General.ImportMax < count) + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Error.Types.ImportMax.Message( + context: context, + data: Parameters.General.ImportMax.ToString()).Text)); + } + if (context.ContractSettings.ItemsLimit( + context: context, + siteId: ss.SiteId, + number: count)) + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Error.Types.ItemsLimit.Message(context: context).Text)); + } + if (csv != null && count > 0) + { + var columnHash = ImportUtilities.GetColumnHash(ss, csv); + var idColumn = columnHash + .Where(o => o.Value.Column.ColumnName == "#ModelName#Id") + .Select(o => new { Id = o.Key }) + .FirstOrDefault()?.Id ?? -1; + if (updatableImport && idColumn > -1) + { + var exists = ExistsLockedRecord( + context: context, + ss: ss, + targets: csv.Rows.Select(o => o[idColumn].ToLong()).ToList()); + switch (exists.Type) + { + case Error.Types.None: break; + default: return ApiResults.Error( + context: context, + errorData: exists); + } + } + var invalidColumn = Imports.ColumnValidate(context, ss, columnHash.Values.Select(o => o.Column.ColumnName)); + if (invalidColumn != null) return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: invalidColumn)); + ImportUtilities.SetOnImportingExtendedSqls(context, ss); + var #modelName#Hash = new Dictionary(); + var importKeyColumnName = key; + var importKeyColumn = columnHash + .FirstOrDefault(column => column.Value.Column.ColumnName == importKeyColumnName); + if (updatableImport && importKeyColumn.Value == null) + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.NotContainKeyColumn(context: context).Text)); + } + var csvRows = csv.Rows + .Select((o, i) => new { Index = i, Row = o }) + .ToDictionary(o => o.Index, o => o.Row); + foreach (var data in csvRows) + { + var #modelName#Model = new #ModelName#Model( + context: context, + ss: ss); + if (updatableImport + && !data.Value[importKeyColumn.Key].IsNullOrEmpty()) + { + var view = new View(); + view.AddColumnFilterHash( + context: context, + ss: ss, + column: importKeyColumn.Value.Column, + objectValue: data.Value[importKeyColumn.Key]); + view.AddColumnFilterSearchTypes( + columnName: importKeyColumnName, + searchType: Column.SearchTypes.ExactMatch); + var model = new #ModelName#Model( + context: context, + ss: ss, + #modelName#Id: 0, + view: view); + if (model.AccessStatus == Databases.AccessStatuses.Selected) + { + #modelName#Model = model; + } + else if (model.AccessStatus == Databases.AccessStatuses.Overlap) + { + return ApiResults.Error( + context: context, + errorData: new ErrorData( + type: Error.Types.OverlapCsvImport, + data: new string[] { + (data.Key + 1).ToString(), + importKeyColumn.Value.Column.GridLabelText, + data.Value[importKeyColumn.Key]})); + } + } + #modelName#Model.SetByCsvRow( + context: context, + ss: ss, + columnHash: columnHash, + row: data.Value); + #modelName#Hash.Add(data.Key, #modelName#Model); + } + var inputErrorData = #ModelName#Validators.OnInputValidating( + context: context, + ss: ss, + #modelName#Hash: #modelName#Hash).FirstOrDefault(); + switch (inputErrorData.Type) + { + case Error.Types.None: break; + default: return ApiResults.Error( + context: context, + errorData: inputErrorData); + } + var insertCount = 0; + var updateCount = 0; + foreach (var data in #modelName#Hash) + { + var #modelName#Model = data.Value; + if (#modelName#Model.AccessStatus == Databases.AccessStatuses.Selected) + { + ErrorData errorData = null; + while (errorData?.Type != Error.Types.None) + { + switch (errorData?.Type) + { + case Error.Types.Duplicated: + var duplicatedColumn = ss.GetColumn( + context: context, + columnName: errorData.ColumnName); + return ApiResults.Duplicated( + context: context, + message: duplicatedColumn?.MessageWhenDuplicated.IsNullOrEmpty() != false + ? Displays.Duplicated( + context: context, + data: duplicatedColumn?.LabelText) + : duplicatedColumn?.MessageWhenDuplicated); + case null: + case Error.Types.UpdateConflicts: + #modelName#Model = new #ModelName#Model( + context: context, + ss: ss, + #modelName#Id: #modelName#Model.#ModelName#Id); + var previousTitle = #modelName#Model.Title.DisplayValue; + #modelName#Model.SetByCsvRow( + context: context, + ss: ss, + columnHash: columnHash, + row: csvRows.Get(data.Key)); + switch (#modelName#Model.AccessStatus) + { + case Databases.AccessStatuses.Selected: + if (#modelName#Model.Updated(context: context)) + { + #modelName#Model.VerUp = Versions.MustVerUp( + context: context, + ss: ss, + baseModel: #modelName#Model); + errorData = #modelName#Model.Update( + context: context, + ss: ss, + extendedSqls: false, + previousTitle: previousTitle, + get: false); + updateCount++; + } + else + { + errorData = new ErrorData(type: Error.Types.None); + } + break; + case Databases.AccessStatuses.NotFound: + #modelName#Model.#ModelName#Id = 0; + #modelName#Model.Ver = 1; + errorData = #modelName#Model.Create( + context: context, + ss: ss, + extendedSqls: false); + insertCount++; + break; + default: + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.UpdateConflicts(context: context).Text)); + } + break; + default: + return ApiResults.Error( + context: context, + errorData: errorData); + } + } + } + else + { + #modelName#Model.#ModelName#Id = 0; + #modelName#Model.Ver = 1; + var errorData = #modelName#Model.Create( + context: context, + ss: ss, + extendedSqls: false); + switch (errorData.Type) + { + case Error.Types.None: + break; + case Error.Types.Duplicated: + var duplicatedColumn = ss.GetColumn( + context: context, + columnName: errorData.ColumnName); + return ApiResults.Duplicated( + context: context, + message: duplicatedColumn?.MessageWhenDuplicated.IsNullOrEmpty() != false + ? Displays.Duplicated( + context: context, + data: duplicatedColumn?.LabelText) + : duplicatedColumn?.MessageWhenDuplicated); + default: + return ApiResults.Error( + context: context, + errorData: errorData); + } + insertCount++; + } + } + ImportUtilities.SetOnImportedExtendedSqls(context, ss); + ss.Notifications.ForEach(notification => + { + var body = new System.Text.StringBuilder(); + body.Append(Locations.ItemIndexAbsoluteUri( + context: context, + ss.SiteId) + "\n"); + body.Append( + $"{Displays.#TableName#_Updator(context: context)}: ", + $"{context.User.Name}\n"); + if (notification.AfterImport != false) + { + notification.Send( + context: context, + ss: ss, + title: Displays.Imported( + context: context, + data: new string[] + { + ss.Title, + insertCount.ToString(), + updateCount.ToString() + }), + body: body.ToString()); + } + }); + return ApiResults.Success( + id: context.Id, + limitPerDate: context.ContractSettings.ApiLimit(), + limitRemaining: context.ContractSettings.ApiLimit() - ss.ApiCount, + message: Messages.Imported( + context: context, + data: new string[] + { + ss.Title, + insertCount.ToString(), + updateCount.ToString() + }).Text); + } + else + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.FileNotFound(context: context).Text)); + } } \ No newline at end of file diff --git a/Implem.Pleasanter/Controllers/Api/ItemsController.cs b/Implem.Pleasanter/Controllers/Api/ItemsController.cs index e9e533dee..b0736e71d 100644 --- a/Implem.Pleasanter/Controllers/Api/ItemsController.cs +++ b/Implem.Pleasanter/Controllers/Api/ItemsController.cs @@ -1,11 +1,16 @@ using Implem.Libraries.Utilities; using Implem.Pleasanter.Libraries.Requests; using Implem.Pleasanter.Libraries.Responses; +using Implem.Pleasanter.Libraries.Web; using Implem.Pleasanter.Models; using Implem.PleasanterFilters; using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; using System.IO; +using System.Linq; + namespace Implem.Pleasanter.Controllers.Api { [CheckApiContextAttributes] @@ -128,6 +133,24 @@ public ContentResult BulkDelete(long id) return result.ToHttpResponse(request: Request); } + [HttpPost("{id}/Import")] + public ContentResult Import(long id) + { + var body = Request.Form["parameters"]; + var contentType = Request.ContentType.Split(';')[0].Trim(); + var context = new Context( + apiRequestBody: body, + files: Request.Form.Files.ToList(), + contentType: contentType, + api: true); + var log = new SysLogModel(context: context); + var result = context.Authenticated + ? new ItemModel(context: context, referenceId: id).ImportByApi(context: context) + : ApiResults.Unauthorized(context: context); + log.Finish(context: context, responseSize: result.Content.Length); + return result.ToHttpResponse(request: Request); + } + [HttpPost("{id}/Export")] public ContentResult Export(long id) { diff --git a/Implem.Pleasanter/Dockerfile b/Implem.Pleasanter/Dockerfile index 15b2d185a..a1f6677e7 100644 --- a/Implem.Pleasanter/Dockerfile +++ b/Implem.Pleasanter/Dockerfile @@ -1,7 +1,7 @@ #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base -RUN apt-get update && apt-get install -y libgdiplus +RUN apt-get update && apt-get install -y libgdiplus curl WORKDIR /app EXPOSE 80 @@ -24,9 +24,9 @@ WORKDIR "/src/Implem.Pleasanter" RUN dotnet build "Implem.Pleasanter.csproj" -c Release -o /app/build FROM build AS publish -RUN apt-get update && apt-get install -y jq RUN dotnet publish "Implem.Pleasanter.csproj" -c Release -o /app/publish -RUN cat App_Data/Parameters/Rds.json \ +RUN curl -o /usr/bin/jq -L https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 && chmod +x /usr/bin/jq && \ + cat App_Data/Parameters/Rds.json \ | jq '.Dbms|="PostgreSQL" | .SaConnectionString|=null | .OwnerConnectionString|=null | .UserConnectionString|=null' \ > /app/publish/App_Data/Parameters/Rds.json diff --git a/Implem.Pleasanter/Implem.Pleasanter.csproj b/Implem.Pleasanter/Implem.Pleasanter.csproj index 1c786b9be..cbb0c0539 100644 --- a/Implem.Pleasanter/Implem.Pleasanter.csproj +++ b/Implem.Pleasanter/Implem.Pleasanter.csproj @@ -1,13 +1,13 @@ - + net6.0 Copyright © Implem Inc 2014 - 2023 Business application platform Implem.Pleasanter - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 disable Linux ..\docker-compose.dcproj @@ -64,7 +64,7 @@ - + @@ -94,6 +94,7 @@ + diff --git a/Implem.Pleasanter/Libraries/Requests/Context.cs b/Implem.Pleasanter/Libraries/Requests/Context.cs index e6e3790d3..b6b830974 100644 --- a/Implem.Pleasanter/Libraries/Requests/Context.cs +++ b/Implem.Pleasanter/Libraries/Requests/Context.cs @@ -192,9 +192,9 @@ public Context( SetTenantCaches(); } - public Context(ICollection files, string apiRequestBody = null, bool api = false) + public Context(ICollection files, string apiRequestBody = null, string contentType = null, bool api = false) { - Set(apiRequestBody: apiRequestBody); + Set(apiRequestBody: apiRequestBody, contentType: contentType); SetPostedFiles(files: files); Api = api; } @@ -318,36 +318,40 @@ public void SetItemProperties() { switch (Controller) { + case "binaries": case "items": case "publishes": - Repository.ExecuteTable( - context: this, - statements: Rds.SelectItems( - column: Rds.ItemsColumn() - .SiteId() - .ReferenceId() - .Title(), - where: Rds.ItemsWhere() - .Add(or: Rds.ItemsWhere() - .ReferenceId(Id) - .ReferenceId(sub: Rds.SelectItems( - column: Rds.ItemsColumn().SiteId(), - where: Rds.ItemsWhere().ReferenceId(Id)))), - distinct: true)) - .AsEnumerable() - .ForEach(dataRow => - { - if (dataRow.Long("SiteId") == dataRow.Long("ReferenceId")) - { - SiteId = dataRow.Long("ReferenceId"); - SiteTitle = dataRow.String("Title"); - } - else + if (Id > 0) + { + Repository.ExecuteTable( + context: this, + statements: Rds.SelectItems( + column: Rds.ItemsColumn() + .SiteId() + .ReferenceId() + .Title(), + where: Rds.ItemsWhere() + .Add(or: Rds.ItemsWhere() + .ReferenceId(Id) + .ReferenceId(sub: Rds.SelectItems( + column: Rds.ItemsColumn().SiteId(), + where: Rds.ItemsWhere().ReferenceId(Id)))), + distinct: true)) + .AsEnumerable() + .ForEach(dataRow => { - RecordTitle = dataRow.String("Title"); - } - TargetTenantId = dataRow.Int("TenantId"); - }); + if (dataRow.Long("SiteId") == dataRow.Long("ReferenceId")) + { + SiteId = dataRow.Long("ReferenceId"); + SiteTitle = dataRow.String("Title"); + } + else + { + RecordTitle = dataRow.String("Title"); + } + TargetTenantId = dataRow.Int("TenantId"); + }); + } Page = Controller + "/" + SiteId + (TrashboxActions() diff --git a/Implem.Pleasanter/Libraries/Requests/ImportApi.cs b/Implem.Pleasanter/Libraries/Requests/ImportApi.cs new file mode 100644 index 000000000..3e22594cf --- /dev/null +++ b/Implem.Pleasanter/Libraries/Requests/ImportApi.cs @@ -0,0 +1,12 @@ +using Implem.Pleasanter.Libraries.Settings; +using System; +namespace Implem.Pleasanter.Libraries.Requests +{ + [Serializable] + public class ImportApi : Api + { + public bool UpdatableImport { get; set; } + public string Encoding { get; set; } + public string Key {get; set;} + } +} \ No newline at end of file diff --git a/Implem.Pleasanter/Libraries/Settings/ImportUtilities.cs b/Implem.Pleasanter/Libraries/Settings/ImportUtilities.cs index 681cb4858..3dcaaf4a0 100644 --- a/Implem.Pleasanter/Libraries/Settings/ImportUtilities.cs +++ b/Implem.Pleasanter/Libraries/Settings/ImportUtilities.cs @@ -1,5 +1,9 @@ using Implem.Libraries.Classes; +using Implem.Libraries.DataSources.SqlServer; using Implem.Libraries.Utilities; +using Implem.Pleasanter.Libraries.DataSources; +using Implem.Pleasanter.Libraries.General; +using Implem.Pleasanter.Libraries.Requests; using System.Collections.Generic; using System.Linq; namespace Implem.Pleasanter.Libraries.Settings @@ -88,5 +92,31 @@ public static string RecordingData( : string.Empty; } } + + public static int SetOnImportingExtendedSqls(Context context, SiteSettings ss) + { + return Repository.ExecuteNonQuery( + context: context, + transactional: true, + statements: new List() + .OnImportingExtendedSqls( + context: context, + siteId: ss.SiteId) + .ToArray()); + } + + public static int SetOnImportedExtendedSqls(Context context, SiteSettings ss) + { + return Repository.ExecuteNonQuery( + context: context, + transactional: true, + statements: new List() + .OnImportedExtendedSqls( + context: context, + siteId: ss.SiteId) + .ToArray()); + } + + } } diff --git a/Implem.Pleasanter/Libraries/Web/Mime.cs b/Implem.Pleasanter/Libraries/Web/Mime.cs index 83431451f..f6e657ea0 100644 --- a/Implem.Pleasanter/Libraries/Web/Mime.cs +++ b/Implem.Pleasanter/Libraries/Web/Mime.cs @@ -8,14 +8,16 @@ public static string Type(string fileDownloadName) return MimeKit.MimeTypes.GetMimeType(fileDownloadName); } - public static bool ValidateOnApi(string contentType) + public static bool ValidateOnApi(string contentType, bool multipart = false) { if (Parameters.Security.MimeTypeCheckOnApi) { switch (contentType?.ToLower()) { case "application/json": - return true; + return !multipart; + case "multipart/form-data": + return multipart; default: return false; } diff --git a/Implem.Pleasanter/Models/Binaries/BinaryUtilities.cs b/Implem.Pleasanter/Models/Binaries/BinaryUtilities.cs index 9806abb74..6fdb104ad 100644 --- a/Implem.Pleasanter/Models/Binaries/BinaryUtilities.cs +++ b/Implem.Pleasanter/Models/Binaries/BinaryUtilities.cs @@ -730,7 +730,10 @@ public static string UploadFile( System.Net.Http.Headers.ContentRangeHeaderValue contentRange ) { var itemModel = new ItemModel(context, id); - var ss = itemModel.GetSite(context, initSiteSettings: true).SiteSettings; + itemModel.SetSite( + context: context, + initSiteSettings: true); + var ss = itemModel.Site.SiteSettings; var column = ss.GetColumn(context, TrimIdSuffix(context.Forms.Get("ColumnName"))); var attachments = context.Forms.Get("AttachmentsData").Deserialize(); var fileHash = context.Forms.Get("FileHash"); diff --git a/Implem.Pleasanter/Models/Binaries/BinaryValidators.cs b/Implem.Pleasanter/Models/Binaries/BinaryValidators.cs index 935eace68..7eb01e99f 100644 --- a/Implem.Pleasanter/Models/Binaries/BinaryValidators.cs +++ b/Implem.Pleasanter/Models/Binaries/BinaryValidators.cs @@ -254,6 +254,13 @@ public static Error.Types OnUploading( { return Error.Types.OverLimitQuantity; } + var errorType = OverLimitSize( + attachments: attachments, + column: column); + if (errorType != Error.Types.None) + { + return errorType; + } switch (BinaryUtilities.BinaryStorageProvider(column)) { case "LocalFolder": diff --git a/Implem.Pleasanter/Models/Issues/IssueUtilities.cs b/Implem.Pleasanter/Models/Issues/IssueUtilities.cs index 4f0122f5e..0bbefff4a 100644 --- a/Implem.Pleasanter/Models/Issues/IssueUtilities.cs +++ b/Implem.Pleasanter/Models/Issues/IssueUtilities.cs @@ -6454,14 +6454,7 @@ public static string Import(Context context, SiteModel siteModel) } var invalidColumn = Imports.ColumnValidate(context, ss, columnHash.Values.Select(o => o.Column.ColumnName), "CompletionTime"); if (invalidColumn != null) return invalidColumn; - Repository.ExecuteNonQuery( - context: context, - transactional: true, - statements: new List() - .OnImportingExtendedSqls( - context: context, - siteId: ss.SiteId) - .ToArray()); + ImportUtilities.SetOnImportingExtendedSqls(context, ss); var issueHash = new Dictionary(); var importKeyColumnName = context.Forms.Data("Key"); var importKeyColumn = columnHash @@ -6662,14 +6655,7 @@ public static string Import(Context context, SiteModel siteModel) insertCount++; } } - Repository.ExecuteNonQuery( - context: context, - transactional: true, - statements: new List() - .OnImportedExtendedSqls( - context: context, - siteId: ss.SiteId) - .ToArray()); + ImportUtilities.SetOnImportedExtendedSqls(context, ss); ss.Notifications.ForEach(notification => { var body = new System.Text.StringBuilder(); @@ -6714,6 +6700,324 @@ public static string Import(Context context, SiteModel siteModel) } } + public static ContentResultInheritance ImportByApi( + Context context, + SiteSettings ss, + SiteModel siteModel) + { + if (!Mime.ValidateOnApi(contentType: context.ContentType, multipart: true)) + { + return ApiResults.BadRequest(context: context); + } + if (context.ContractSettings.Import == false) + { + return null; + } + var invalid = IssueValidators.OnImporting( + context: context, + ss: ss, + api: true); + switch (invalid.Type) + { + case Error.Types.None: break; + default:return ApiResults.Error( + context: context, + errorData: invalid); + } + var api = context.RequestDataString.Deserialize(); + var updatableImport = api.UpdatableImport; + var encoding = api.Encoding; + var key = api.Key; + Csv csv; + try + { + csv = new Csv( + csv: context.PostedFiles.FirstOrDefault().Byte(), + encoding: encoding); + } + catch + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.FailedReadFile(context: context).Text)); + } + var count = csv.Rows.Count(); + if (Parameters.General.ImportMax > 0 && Parameters.General.ImportMax < count) + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Error.Types.ImportMax.Message( + context: context, + data: Parameters.General.ImportMax.ToString()).Text)); + } + if (context.ContractSettings.ItemsLimit( + context: context, + siteId: ss.SiteId, + number: count)) + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Error.Types.ItemsLimit.Message(context: context).Text)); + } + if (csv != null && count > 0) + { + var columnHash = ImportUtilities.GetColumnHash(ss, csv); + var idColumn = columnHash + .Where(o => o.Value.Column.ColumnName == "IssueId") + .Select(o => new { Id = o.Key }) + .FirstOrDefault()?.Id ?? -1; + if (updatableImport && idColumn > -1) + { + var exists = ExistsLockedRecord( + context: context, + ss: ss, + targets: csv.Rows.Select(o => o[idColumn].ToLong()).ToList()); + switch (exists.Type) + { + case Error.Types.None: break; + default: return ApiResults.Error( + context: context, + errorData: exists); + } + } + var invalidColumn = Imports.ColumnValidate(context, ss, columnHash.Values.Select(o => o.Column.ColumnName), "CompletionTime"); + if (invalidColumn != null) return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: invalidColumn)); + ImportUtilities.SetOnImportingExtendedSqls(context, ss); + var issueHash = new Dictionary(); + var importKeyColumnName = key; + var importKeyColumn = columnHash + .FirstOrDefault(column => column.Value.Column.ColumnName == importKeyColumnName); + if (updatableImport && importKeyColumn.Value == null) + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.NotContainKeyColumn(context: context).Text)); + } + var csvRows = csv.Rows + .Select((o, i) => new { Index = i, Row = o }) + .ToDictionary(o => o.Index, o => o.Row); + foreach (var data in csvRows) + { + var issueModel = new IssueModel( + context: context, + ss: ss); + if (updatableImport + && !data.Value[importKeyColumn.Key].IsNullOrEmpty()) + { + var view = new View(); + view.AddColumnFilterHash( + context: context, + ss: ss, + column: importKeyColumn.Value.Column, + objectValue: data.Value[importKeyColumn.Key]); + view.AddColumnFilterSearchTypes( + columnName: importKeyColumnName, + searchType: Column.SearchTypes.ExactMatch); + var model = new IssueModel( + context: context, + ss: ss, + issueId: 0, + view: view); + if (model.AccessStatus == Databases.AccessStatuses.Selected) + { + issueModel = model; + } + else if (model.AccessStatus == Databases.AccessStatuses.Overlap) + { + return ApiResults.Error( + context: context, + errorData: new ErrorData( + type: Error.Types.OverlapCsvImport, + data: new string[] { + (data.Key + 1).ToString(), + importKeyColumn.Value.Column.GridLabelText, + data.Value[importKeyColumn.Key]})); + } + } + issueModel.SetByCsvRow( + context: context, + ss: ss, + columnHash: columnHash, + row: data.Value); + issueHash.Add(data.Key, issueModel); + } + var inputErrorData = IssueValidators.OnInputValidating( + context: context, + ss: ss, + issueHash: issueHash).FirstOrDefault(); + switch (inputErrorData.Type) + { + case Error.Types.None: break; + default: return ApiResults.Error( + context: context, + errorData: inputErrorData); + } + var insertCount = 0; + var updateCount = 0; + foreach (var data in issueHash) + { + var issueModel = data.Value; + if (issueModel.AccessStatus == Databases.AccessStatuses.Selected) + { + ErrorData errorData = null; + while (errorData?.Type != Error.Types.None) + { + switch (errorData?.Type) + { + case Error.Types.Duplicated: + var duplicatedColumn = ss.GetColumn( + context: context, + columnName: errorData.ColumnName); + return ApiResults.Duplicated( + context: context, + message: duplicatedColumn?.MessageWhenDuplicated.IsNullOrEmpty() != false + ? Displays.Duplicated( + context: context, + data: duplicatedColumn?.LabelText) + : duplicatedColumn?.MessageWhenDuplicated); + case null: + case Error.Types.UpdateConflicts: + issueModel = new IssueModel( + context: context, + ss: ss, + issueId: issueModel.IssueId); + var previousTitle = issueModel.Title.DisplayValue; + issueModel.SetByCsvRow( + context: context, + ss: ss, + columnHash: columnHash, + row: csvRows.Get(data.Key)); + switch (issueModel.AccessStatus) + { + case Databases.AccessStatuses.Selected: + if (issueModel.Updated(context: context)) + { + issueModel.VerUp = Versions.MustVerUp( + context: context, + ss: ss, + baseModel: issueModel); + errorData = issueModel.Update( + context: context, + ss: ss, + extendedSqls: false, + previousTitle: previousTitle, + get: false); + updateCount++; + } + else + { + errorData = new ErrorData(type: Error.Types.None); + } + break; + case Databases.AccessStatuses.NotFound: + issueModel.IssueId = 0; + issueModel.Ver = 1; + errorData = issueModel.Create( + context: context, + ss: ss, + extendedSqls: false); + insertCount++; + break; + default: + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.UpdateConflicts(context: context).Text)); + } + break; + default: + return ApiResults.Error( + context: context, + errorData: errorData); + } + } + } + else + { + issueModel.IssueId = 0; + issueModel.Ver = 1; + var errorData = issueModel.Create( + context: context, + ss: ss, + extendedSqls: false); + switch (errorData.Type) + { + case Error.Types.None: + break; + case Error.Types.Duplicated: + var duplicatedColumn = ss.GetColumn( + context: context, + columnName: errorData.ColumnName); + return ApiResults.Duplicated( + context: context, + message: duplicatedColumn?.MessageWhenDuplicated.IsNullOrEmpty() != false + ? Displays.Duplicated( + context: context, + data: duplicatedColumn?.LabelText) + : duplicatedColumn?.MessageWhenDuplicated); + default: + return ApiResults.Error( + context: context, + errorData: errorData); + } + insertCount++; + } + } + ImportUtilities.SetOnImportedExtendedSqls(context, ss); + ss.Notifications.ForEach(notification => + { + var body = new System.Text.StringBuilder(); + body.Append(Locations.ItemIndexAbsoluteUri( + context: context, + ss.SiteId) + "\n"); + body.Append( + $"{Displays.Issues_Updator(context: context)}: ", + $"{context.User.Name}\n"); + if (notification.AfterImport != false) + { + notification.Send( + context: context, + ss: ss, + title: Displays.Imported( + context: context, + data: new string[] + { + ss.Title, + insertCount.ToString(), + updateCount.ToString() + }), + body: body.ToString()); + } + }); + return ApiResults.Success( + id: context.Id, + limitPerDate: context.ContractSettings.ApiLimit(), + limitRemaining: context.ContractSettings.ApiLimit() - ss.ApiCount, + message: Messages.Imported( + context: context, + data: new string[] + { + ss.Title, + insertCount.ToString(), + updateCount.ToString() + }).Text); + } + else + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.FileNotFound(context: context).Text)); + } + } + public static string OpenExportSelectorDialog( Context context, SiteSettings ss, SiteModel siteModel) { diff --git a/Implem.Pleasanter/Models/Items/ItemModel.cs b/Implem.Pleasanter/Models/Items/ItemModel.cs index 67308d3c3..ffcb32065 100644 --- a/Implem.Pleasanter/Models/Items/ItemModel.cs +++ b/Implem.Pleasanter/Models/Items/ItemModel.cs @@ -211,6 +211,46 @@ public ContentResultInheritance ExportByApi(Context context) return ApiResults.Get(ApiResponses.BadRequest(context: context)); } + public ContentResultInheritance ImportByApi(Context context) + { + SetSite( + context: context, + initSiteSettings: true, + setSiteIntegration: true, + setAllChoices: true); + if (!Site.WithinApiLimits(context: context)) + { + return ApiResults.Get(ApiResponses.OverLimitApi( + context: context, + siteId: Site.SiteId, + limitPerSite: context.ContractSettings.ApiLimit())); + } + switch (Site.ReferenceType) + { + case "Issues": + if (SiteId == ReferenceId) + { + return IssueUtilities.ImportByApi( + context: context, + ss: Site.SiteSettings, + siteModel: Site); + } + break; + case "Results": + if (SiteId == ReferenceId) + { + return ResultUtilities.ImportByApi( + context: context, + ss: Site.SiteSettings, + siteModel: Site); + } + break; + default: + return ApiResults.Get(ApiResponses.BadRequest(context: context)); + } + return ApiResults.Get(ApiResponses.BadRequest(context: context)); + } + public string Index(Context context) { if (ReferenceId == 0) diff --git a/Implem.Pleasanter/Models/Results/ResultUtilities.cs b/Implem.Pleasanter/Models/Results/ResultUtilities.cs index c549b3c23..8b7757d80 100644 --- a/Implem.Pleasanter/Models/Results/ResultUtilities.cs +++ b/Implem.Pleasanter/Models/Results/ResultUtilities.cs @@ -6121,14 +6121,7 @@ public static string Import(Context context, SiteModel siteModel) } var invalidColumn = Imports.ColumnValidate(context, ss, columnHash.Values.Select(o => o.Column.ColumnName)); if (invalidColumn != null) return invalidColumn; - Repository.ExecuteNonQuery( - context: context, - transactional: true, - statements: new List() - .OnImportingExtendedSqls( - context: context, - siteId: ss.SiteId) - .ToArray()); + ImportUtilities.SetOnImportingExtendedSqls(context, ss); var resultHash = new Dictionary(); var importKeyColumnName = context.Forms.Data("Key"); var importKeyColumn = columnHash @@ -6322,14 +6315,7 @@ public static string Import(Context context, SiteModel siteModel) insertCount++; } } - Repository.ExecuteNonQuery( - context: context, - transactional: true, - statements: new List() - .OnImportedExtendedSqls( - context: context, - siteId: ss.SiteId) - .ToArray()); + ImportUtilities.SetOnImportedExtendedSqls(context, ss); ss.Notifications.ForEach(notification => { var body = new System.Text.StringBuilder(); @@ -6374,6 +6360,324 @@ public static string Import(Context context, SiteModel siteModel) } } + public static ContentResultInheritance ImportByApi( + Context context, + SiteSettings ss, + SiteModel siteModel) + { + if (!Mime.ValidateOnApi(contentType: context.ContentType, multipart: true)) + { + return ApiResults.BadRequest(context: context); + } + if (context.ContractSettings.Import == false) + { + return null; + } + var invalid = ResultValidators.OnImporting( + context: context, + ss: ss, + api: true); + switch (invalid.Type) + { + case Error.Types.None: break; + default:return ApiResults.Error( + context: context, + errorData: invalid); + } + var api = context.RequestDataString.Deserialize(); + var updatableImport = api.UpdatableImport; + var encoding = api.Encoding; + var key = api.Key; + Csv csv; + try + { + csv = new Csv( + csv: context.PostedFiles.FirstOrDefault().Byte(), + encoding: encoding); + } + catch + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.FailedReadFile(context: context).Text)); + } + var count = csv.Rows.Count(); + if (Parameters.General.ImportMax > 0 && Parameters.General.ImportMax < count) + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Error.Types.ImportMax.Message( + context: context, + data: Parameters.General.ImportMax.ToString()).Text)); + } + if (context.ContractSettings.ItemsLimit( + context: context, + siteId: ss.SiteId, + number: count)) + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Error.Types.ItemsLimit.Message(context: context).Text)); + } + if (csv != null && count > 0) + { + var columnHash = ImportUtilities.GetColumnHash(ss, csv); + var idColumn = columnHash + .Where(o => o.Value.Column.ColumnName == "ResultId") + .Select(o => new { Id = o.Key }) + .FirstOrDefault()?.Id ?? -1; + if (updatableImport && idColumn > -1) + { + var exists = ExistsLockedRecord( + context: context, + ss: ss, + targets: csv.Rows.Select(o => o[idColumn].ToLong()).ToList()); + switch (exists.Type) + { + case Error.Types.None: break; + default: return ApiResults.Error( + context: context, + errorData: exists); + } + } + var invalidColumn = Imports.ColumnValidate(context, ss, columnHash.Values.Select(o => o.Column.ColumnName)); + if (invalidColumn != null) return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: invalidColumn)); + ImportUtilities.SetOnImportingExtendedSqls(context, ss); + var resultHash = new Dictionary(); + var importKeyColumnName = key; + var importKeyColumn = columnHash + .FirstOrDefault(column => column.Value.Column.ColumnName == importKeyColumnName); + if (updatableImport && importKeyColumn.Value == null) + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.NotContainKeyColumn(context: context).Text)); + } + var csvRows = csv.Rows + .Select((o, i) => new { Index = i, Row = o }) + .ToDictionary(o => o.Index, o => o.Row); + foreach (var data in csvRows) + { + var resultModel = new ResultModel( + context: context, + ss: ss); + if (updatableImport + && !data.Value[importKeyColumn.Key].IsNullOrEmpty()) + { + var view = new View(); + view.AddColumnFilterHash( + context: context, + ss: ss, + column: importKeyColumn.Value.Column, + objectValue: data.Value[importKeyColumn.Key]); + view.AddColumnFilterSearchTypes( + columnName: importKeyColumnName, + searchType: Column.SearchTypes.ExactMatch); + var model = new ResultModel( + context: context, + ss: ss, + resultId: 0, + view: view); + if (model.AccessStatus == Databases.AccessStatuses.Selected) + { + resultModel = model; + } + else if (model.AccessStatus == Databases.AccessStatuses.Overlap) + { + return ApiResults.Error( + context: context, + errorData: new ErrorData( + type: Error.Types.OverlapCsvImport, + data: new string[] { + (data.Key + 1).ToString(), + importKeyColumn.Value.Column.GridLabelText, + data.Value[importKeyColumn.Key]})); + } + } + resultModel.SetByCsvRow( + context: context, + ss: ss, + columnHash: columnHash, + row: data.Value); + resultHash.Add(data.Key, resultModel); + } + var inputErrorData = ResultValidators.OnInputValidating( + context: context, + ss: ss, + resultHash: resultHash).FirstOrDefault(); + switch (inputErrorData.Type) + { + case Error.Types.None: break; + default: return ApiResults.Error( + context: context, + errorData: inputErrorData); + } + var insertCount = 0; + var updateCount = 0; + foreach (var data in resultHash) + { + var resultModel = data.Value; + if (resultModel.AccessStatus == Databases.AccessStatuses.Selected) + { + ErrorData errorData = null; + while (errorData?.Type != Error.Types.None) + { + switch (errorData?.Type) + { + case Error.Types.Duplicated: + var duplicatedColumn = ss.GetColumn( + context: context, + columnName: errorData.ColumnName); + return ApiResults.Duplicated( + context: context, + message: duplicatedColumn?.MessageWhenDuplicated.IsNullOrEmpty() != false + ? Displays.Duplicated( + context: context, + data: duplicatedColumn?.LabelText) + : duplicatedColumn?.MessageWhenDuplicated); + case null: + case Error.Types.UpdateConflicts: + resultModel = new ResultModel( + context: context, + ss: ss, + resultId: resultModel.ResultId); + var previousTitle = resultModel.Title.DisplayValue; + resultModel.SetByCsvRow( + context: context, + ss: ss, + columnHash: columnHash, + row: csvRows.Get(data.Key)); + switch (resultModel.AccessStatus) + { + case Databases.AccessStatuses.Selected: + if (resultModel.Updated(context: context)) + { + resultModel.VerUp = Versions.MustVerUp( + context: context, + ss: ss, + baseModel: resultModel); + errorData = resultModel.Update( + context: context, + ss: ss, + extendedSqls: false, + previousTitle: previousTitle, + get: false); + updateCount++; + } + else + { + errorData = new ErrorData(type: Error.Types.None); + } + break; + case Databases.AccessStatuses.NotFound: + resultModel.ResultId = 0; + resultModel.Ver = 1; + errorData = resultModel.Create( + context: context, + ss: ss, + extendedSqls: false); + insertCount++; + break; + default: + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.UpdateConflicts(context: context).Text)); + } + break; + default: + return ApiResults.Error( + context: context, + errorData: errorData); + } + } + } + else + { + resultModel.ResultId = 0; + resultModel.Ver = 1; + var errorData = resultModel.Create( + context: context, + ss: ss, + extendedSqls: false); + switch (errorData.Type) + { + case Error.Types.None: + break; + case Error.Types.Duplicated: + var duplicatedColumn = ss.GetColumn( + context: context, + columnName: errorData.ColumnName); + return ApiResults.Duplicated( + context: context, + message: duplicatedColumn?.MessageWhenDuplicated.IsNullOrEmpty() != false + ? Displays.Duplicated( + context: context, + data: duplicatedColumn?.LabelText) + : duplicatedColumn?.MessageWhenDuplicated); + default: + return ApiResults.Error( + context: context, + errorData: errorData); + } + insertCount++; + } + } + ImportUtilities.SetOnImportedExtendedSqls(context, ss); + ss.Notifications.ForEach(notification => + { + var body = new System.Text.StringBuilder(); + body.Append(Locations.ItemIndexAbsoluteUri( + context: context, + ss.SiteId) + "\n"); + body.Append( + $"{Displays.Results_Updator(context: context)}: ", + $"{context.User.Name}\n"); + if (notification.AfterImport != false) + { + notification.Send( + context: context, + ss: ss, + title: Displays.Imported( + context: context, + data: new string[] + { + ss.Title, + insertCount.ToString(), + updateCount.ToString() + }), + body: body.ToString()); + } + }); + return ApiResults.Success( + id: context.Id, + limitPerDate: context.ContractSettings.ApiLimit(), + limitRemaining: context.ContractSettings.ApiLimit() - ss.ApiCount, + message: Messages.Imported( + context: context, + data: new string[] + { + ss.Title, + insertCount.ToString(), + updateCount.ToString() + }).Text); + } + else + { + return ApiResults.Get(new ApiResponse( + id: context.Id, + statusCode: 500, + message: Messages.FileNotFound(context: context).Text)); + } + } + public static string OpenExportSelectorDialog( Context context, SiteSettings ss, SiteModel siteModel) { diff --git a/Implem.Pleasanter/wwwroot/content/responsive.css b/Implem.Pleasanter/wwwroot/content/responsive.css index 18b46e9cb..5b1d8e0fd 100644 --- a/Implem.Pleasanter/wwwroot/content/responsive.css +++ b/Implem.Pleasanter/wwwroot/content/responsive.css @@ -62,11 +62,6 @@ margin: 10px 0px; float: left; } - @media screen and (max-width: 600px) and (min-width: 0px) { - #LoginFieldSet .field-wide { - min-height: 10vw !important; - } - } #StartGuide { display: none; } @@ -74,7 +69,7 @@ word-break: break-all; } div[role="dialog"] { - width: 100% !important; + width: 98% !important; z-index: 999; } #EnterPriseBanner, #SupportBanner, #CasesBanner { @@ -113,7 +108,10 @@ #ViewFilters>.field-auto-thin>.field-control { width: 100%;} #ViewFilters>.field-auto-thin>.field-label { width: 30%; text-align: left;} #ViewFilters>.field-auto-thin>.field-label+.field-control { width: 70%; } - .ui-multiselect { width: 98%!important; height: 6vw; } + .ui-multiselect { + width: 100% !important; + height: 6vw; + } .field-auto-thin input[type="checkbox"], .field-auto-thin input[type="radio"] { height: 2.6vw; width: 2.6vw; margin-right: 1vw; } @@ -156,8 +154,9 @@ .field-normal .control-text{ width: 100%; height: auto; padding: 1%; line-height: 1; } .control-textbox { height: auto; } -.ui-widget.ui-widget-content { background: #fff; font-size: 2.6vw; } - +.ui-widget.ui-widget-content { + font-size: 2.6vw; +} #Guide { font-size: 2.6vw; } .alert-success, @@ -171,14 +170,12 @@ .ui-tabs .ui-tabs-nav li { margin-bottom: 1%; padding-bottom: 0; -border:1px solid #111; -border-radius: 4px; + border-radius: 4px; } .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 1%; padding-bottom: 0; -border:1px solid #111; -border-radius: 4px; + border-radius: 4px; } .message { bottom: 140px; } } @@ -188,7 +185,6 @@ border-radius: 4px; body { min-width: 320px!important; } #Header { height: auto; position: relative; } - #Header #Logo { padding-bottom: 2%; } #CorpLogo { float: none; width: 30%;} #MainContainer { min-height: 100vh; } @@ -239,16 +235,6 @@ transition: .5s; background: none; } -#Header .ui-widget-header{ -background: #f3f3f3; -color:#111; -} - -.ui-widget-header{ -background: #817865; -color:#fff; -} - #NavigationMenu { float: none; margin-right: 0; @@ -261,32 +247,28 @@ color:#fff; color: #000; } -#NavigationMenu>li { -width: 100%; -height: auto; -display: block; -float: none; -position: relative; -color:#333; -} - -#NavigationMenu>li>div { -height: auto; -text-align: left; -line-height: 7vw; -color: #333; -font-weight: bold; -} - -#NavigationMenu>li>div:hover { background:none;} - -#NavigationMenu>li>div>a { -height: auto; -display: block; -color: #333; -text-decoration: none; -font-weight: bold; -} + #NavigationMenu > li { + width: 100%; + height: auto; + display: block; + float: none; + position: relative; + } + #NavigationMenu > li > div { + height: auto; + text-align: left; + line-height: 7vw; + font-weight: bold; + } + #NavigationMenu > li > div:hover { + background: none; + } + #NavigationMenu > li > div > a { + height: auto; + display: block; + text-decoration: none; + font-weight: bold; + } #NavigationMenu .menu { width: 100%; @@ -306,13 +288,6 @@ font-weight: normal; text-decoration: none; } -.ui-widget.ui-widget-content { -} - -.ui-widget-content { -color: #333; -} - .ui-menu .ui-menu-item { border-top: 1px solid #d19405; } @@ -332,8 +307,6 @@ border: 1px solid #d19405; width: 20vw; height: 20vw; text-align: center; -background-color: white; -border: solid 2px silver; border-radius: 0.5vw; float: none; margin: 6%; @@ -350,7 +323,6 @@ margin: 6%; width: 20vw!important; height: 20vw!important; background: #fff; -border: solid 2px #ffa500; border-radius: 5px;} @@ -358,8 +330,6 @@ border-radius: 5px;} width: 8vw; height: 3vw; top: -3vw; -background-color: #f8da4c; -border: solid 2px #ffa500; } #SiteMenu .nav-site.sites.to-parent{ @@ -615,18 +585,1056 @@ overflow: hidden; #KambanBody .grid>tbody td { min-width: 10vw; white-space: nowrap; } } -@media screen and (min-width: 981px) { +@media screen and (max-width: 980px) and (min-width: 0px) { + #Header { + padding: 0 calc(5vw); + } + #Header a#navtgl { + right: 5vw; + } + #Application, + #Footer { + padding-left: 5vw; + padding-right: 5vw; + } + #SiteMenu .nav-site { + margin: 5%; + } + :not(td) > div.field-control .container-normal { + margin-left: 0; + } + * { + line-height: 1.4; + } + .field-normal .control-textbox, + .field-normal .control-dropdown, + .field-normal .control-text, .field-control .control-textbox, + .field-control .control-dropdown, + .field-control .control-text, .container-normal .control-textbox, + .container-normal .control-dropdown, + .container-normal .control-text { + min-height: unset; + height: 6vw; + line-height: 6vw; + padding-top: 0; + padding-bottom: 0; + } + body { + font-size: 16px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #HeaderTitle { + font-size: 16px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + .command-center { + padding: 0; + } + .ui-dialog .ui-dialog-titlebar-close { + top: 0; + bottom: 0; + width: 5vw; + height: 5vw; + margin: auto 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewSelector { + font-size: 2.6vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Logo a { + align-items: center; + display: flex; + } + #Logo #ProductLogo { + font-size: 18px; + padding-left: 8px; + } + #CorpLogo { + float: none; + height: calc(8vw + 10px); + width: unset; + margin-top: 0; + } +} -.grid>thead>tr:first-child>th:first-child {width: 20px;} -#CrosstabBody .grid>thead>tr:first-child>th:first-child, -#KambanBody .grid>thead>tr:first-child>th:first-child {width: auto;} +@media screen and (max-width: 980px) and (min-width: 0px) { + #Editor .field-control .container-normal { + width: calc(100% - 20px); + } + #Editor .field-control .ui-icon.ui-icon-clock.current-time { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjEycHgiIGZpbGw9IiMwMDAwMDAiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48Zz48Zz48cGF0aCBkPSJNMTIsMkM2LjUsMiwyLDYuNSwyLDEyczQuNSwxMCwxMCwxMHMxMC00LjUsMTAtMTBTMTcuNSwyLDEyLDJ6IE0xNi4yLDE2LjJMMTEsMTNWN2gxLjV2NS4ybDQuNSwyLjdMMTYuMiwxNi4yeiIvPjwvZz48L2c+PC9nPjwvc3ZnPg=="); + background-position: center; + width: 12px; + height: 12px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + top: calc(3vw - 3.5px); + right: -16px; + } + #Editor .field-control .ui-icon.ui-icon-person.current-user { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiAxMmMyLjIxIDAgNC0xLjc5IDQtNHMtMS43OS00LTQtNC00IDEuNzktNCA0IDEuNzkgNCA0IDR6bTAgMmMtMi42NyAwLTggMS4zNC04IDR2MmgxNnYtMmMwLTIuNjYtNS4zMy00LTgtNHoiLz48L3N2Zz4="); + background-position: center; + width: 12px; + height: 12px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + top: calc(3vw - 3.5px); + right: -16px; + } +} -.grid>thead>tr:first-child>th:not(:first-child) { white-space: nowrap; } -#CrosstabBody .grid>thead>tr:first-child>th:not(:first-child), -#KambanBody .grid>thead>tr:first-child>th:not(:first-child) { white-space: inherit; } +@media screen and (max-width: 980px) and (min-width: 0px) { + #FieldSetAddressBook #OutgoingMailDestinationForm .container-left { + width: 38vw; + } + #FieldSetAddressBook #OutgoingMailDestinationForm .container-right .command-left { + float: unset; + padding: 0; + } + #FieldSetAddressBook #OutgoingMailDestinationForm .container-right .command-left button { + margin: 2px; + } + #FieldSetAddressBook #OutgoingMailDestinationForm .container-right .container-selectable .wrapper { + height: 40vw; + } + #FieldSetAddressBook #OutgoingMailDestinationForm .container-right > * { + margin-left: 40vw; + } +} -.grid>tbody>tr td:not(:first-child) {white-space: nowrap; min-width: 40px;} -#CrosstabBody .grid>tbody>tr td:not(:first-child), -#KambanBody .grid>tbody>tr td:not(:first-child) { white-space: inherit; min-width:auto; } +@media screen and (max-width: 980px) and (min-width: 0px) { + #Issues_WorkValue { + width: 100px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + body::before { + content: ''; + position: fixed; + width: 5vw; + height: 50vh; + top: 0; + left: 0; + background: white; + z-index: 200; + } + body::after { + content: ''; + position: fixed; + width: 5vw; + height: 50vh; + top: 0; + right: 0; + background: white; + z-index: 700; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Users_LoginId, + #Users_Password { + height: 40px; + } + #LoginMessage span { + font-size: 3.5vw; + } + #PortalLink { + font-size: 3.5vw; + top: 3vw; + } + #LoginFieldSet { + margin: 65px auto 20px auto; + } + #LoginFieldSet input[type=checkbox] { + margin: auto 0; + margin-left: 1.2vw; + } + #LoginFieldSet button { + margin-top: 0; + } + #LoginFieldSet .field-wide, + #LoginFieldSet .field-normal { + margin: 0px 0px; + } + #LoginFieldSet .field-normal .control-checkbox + label { + margin: auto 0; + margin-left: 4vw; + padding: 0; + } + #Logins .field-label { + width: 100%; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Editor .field-markdown > .field-label > label { + font-weight: bold; + } + #Editor .field-control .unit { + font-size: 2.6vw; + padding-top: calc((18px - 1.4em) / 2); + } + #Editor .ui-spinner .control-spinner { + height: 100%; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #GridCheckAll { + margin-top: 0; + } + label[for="GridCheckAll"] { + margin: 0; + } + #Footer { + font-size: 2.8vw; + height: auto; + } + #MainCommandsContainer { + bottom: calc(2.8vw * 1.4 + 10px); + } + body > thead > tr { + font-size: 0.75em; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #SiteImageSettingsEditor .field-auto-thin, #GridSettingsEditor .field-auto-thin, #FiltersSettingsEditor .field-auto-thin, #EditorSettingsEditor .field-auto-thin, + #LinksSettingsEditor .field-auto-thin, #HistoriesSettingsEditor .field-auto-thin, #FormulasSettingsEditor .field-auto-thin, #ViewsSettingsEditor .field-auto-thin, + #ImportsSettingsEditor .field-auto-thin, #ExportsSettingsEditor .field-auto-thin, #CalendarSettingsEditor .field-auto-thin, #CrosstabSettingsEditor .field-auto-thin, + #GanttSettingsEditor .field-auto-thin, #BurnDownSettingsEditor .field-auto-thin, #TimeSeriesSettingsEditor .field-auto-thin, #KambanSettingsEditor .field-auto-thin, + #ImageLibSettingsEditor .field-auto-thin, #SearchSettingsEditor .field-auto-thin, #StylesSettingsEditor .field-auto-thin, #ScriptsSettingsEditor .field-auto-thin, + #PublishSettingsEditor .field-auto-thin, #FieldSetSiteAccessControl .field-auto-thin { + padding-right: 0; + height: auto; + display: flex; + align-items: center; + clear: both; + } + #SiteImageSettingsEditor .field-auto-thin .container-normal, #GridSettingsEditor .field-auto-thin .container-normal, #FiltersSettingsEditor .field-auto-thin .container-normal, #EditorSettingsEditor .field-auto-thin .container-normal, + #LinksSettingsEditor .field-auto-thin .container-normal, #HistoriesSettingsEditor .field-auto-thin .container-normal, #FormulasSettingsEditor .field-auto-thin .container-normal, #ViewsSettingsEditor .field-auto-thin .container-normal, + #ImportsSettingsEditor .field-auto-thin .container-normal, #ExportsSettingsEditor .field-auto-thin .container-normal, #CalendarSettingsEditor .field-auto-thin .container-normal, #CrosstabSettingsEditor .field-auto-thin .container-normal, + #GanttSettingsEditor .field-auto-thin .container-normal, #BurnDownSettingsEditor .field-auto-thin .container-normal, #TimeSeriesSettingsEditor .field-auto-thin .container-normal, #KambanSettingsEditor .field-auto-thin .container-normal, + #ImageLibSettingsEditor .field-auto-thin .container-normal, #SearchSettingsEditor .field-auto-thin .container-normal, #StylesSettingsEditor .field-auto-thin .container-normal, #ScriptsSettingsEditor .field-auto-thin .container-normal, + #PublishSettingsEditor .field-auto-thin .container-normal, #FieldSetSiteAccessControl .field-auto-thin .container-normal { + width: 100%; + } + #SiteImageSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #GridSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #FiltersSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #EditorSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, + #LinksSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #HistoriesSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #FormulasSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #ViewsSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, + #ImportsSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #ExportsSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #CalendarSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #CrosstabSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, + #GanttSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #BurnDownSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #TimeSeriesSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #KambanSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, + #ImageLibSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #SearchSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #StylesSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #ScriptsSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, + #PublishSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #FieldSetSiteAccessControl .field-auto-thin .container-normal .control-checkbox ~ label { + display: unset; + float: unset; + width: auto; + } + #SiteImageSettingsEditor .field-auto-thin .field-label ~ .field-control, #GridSettingsEditor .field-auto-thin .field-label ~ .field-control, #FiltersSettingsEditor .field-auto-thin .field-label ~ .field-control, #EditorSettingsEditor .field-auto-thin .field-label ~ .field-control, + #LinksSettingsEditor .field-auto-thin .field-label ~ .field-control, #HistoriesSettingsEditor .field-auto-thin .field-label ~ .field-control, #FormulasSettingsEditor .field-auto-thin .field-label ~ .field-control, #ViewsSettingsEditor .field-auto-thin .field-label ~ .field-control, + #ImportsSettingsEditor .field-auto-thin .field-label ~ .field-control, #ExportsSettingsEditor .field-auto-thin .field-label ~ .field-control, #CalendarSettingsEditor .field-auto-thin .field-label ~ .field-control, #CrosstabSettingsEditor .field-auto-thin .field-label ~ .field-control, + #GanttSettingsEditor .field-auto-thin .field-label ~ .field-control, #BurnDownSettingsEditor .field-auto-thin .field-label ~ .field-control, #TimeSeriesSettingsEditor .field-auto-thin .field-label ~ .field-control, #KambanSettingsEditor .field-auto-thin .field-label ~ .field-control, + #ImageLibSettingsEditor .field-auto-thin .field-label ~ .field-control, #SearchSettingsEditor .field-auto-thin .field-label ~ .field-control, #StylesSettingsEditor .field-auto-thin .field-label ~ .field-control, #ScriptsSettingsEditor .field-auto-thin .field-label ~ .field-control, + #PublishSettingsEditor .field-auto-thin .field-label ~ .field-control, #FieldSetSiteAccessControl .field-auto-thin .field-label ~ .field-control { + margin-left: 10px; + } + #SiteImageSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #GridSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #FiltersSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #EditorSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, + #LinksSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #HistoriesSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #FormulasSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #ViewsSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, + #ImportsSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #ExportsSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #CalendarSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #CrosstabSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, + #GanttSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #BurnDownSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #TimeSeriesSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #KambanSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, + #ImageLibSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #SearchSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #StylesSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #ScriptsSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, + #PublishSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #FieldSetSiteAccessControl .field-auto-thin .field-label ~ .field-control .container-normal { + width: 100%; + } + #FieldSetGeneral .field-control .container-normal .control-checkbox ~ label { + width: auto; + } + #GridSettingsEditor #GridEditorType { + max-width: unset; + } + #SiteImageSettingsEditor #SiteImage { + width: 100%; + height: 7vw; + } + #SiteImageSettingsEditor #SetSiteImage { + margin-right: 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Aggregations { + display: flex; + flex-wrap: wrap; + row-gap: 5px; + justify-content: flex-start; + align-items: center; + } + #Aggregations span.label { + flex: 1 0 auto; + margin: 0; + text-align: center; + align-self: stretch; + display: flex; + align-items: center; + justify-content: flex-start; + } + #Aggregations span.data { + flex: 1 0 auto; + margin: 0; + align-self: stretch; + display: flex; + align-items: center; + justify-content: flex-start; + height: auto; + } + #Aggregations span.data.no-choice { + flex-basis: auto; + align-self: stretch; + } + #Aggregations span.data.link span { + font-weight: bold; + } + #Aggregations #ReduceAggregations { + width: 100%; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer .grid { + vertical-align: middle; + } + #ViewModeContainer .grid tr td:first-child { + padding: 6px; + } + input[type='checkbox'], .field-auto-thin input[type='checkbox'] { + width: 3vw; + height: 3vw; + } + .field-auto-thin input[type='checkbox'] + label { + padding-top: 2px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #SearchField #Search { + font-size: 3vw; + width: 100%; + } + #SearchField #Search::placeholder { + font-size: 3vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewFilters #ViewFilters_Reset { + margin-left: auto; + margin-right: 0; + } + #ViewFilters .field-auto-thin { + width: 50%; + } + #ViewFilters .field-auto-thin .field-control .container-normal { + display: flex; + align-items: center; + } + #ViewFilters .field-auto-thin .field-control .container-normal input[type='checkbox'] { + margin-right: 4px; + margin-top: 1px; + } + #ViewFilters .field-auto-thin .field-control .container-normal .ui-widget.ui-state-default.ui-multiselect, #ViewFilters .field-auto-thin .field-control .container-normal .control-textbox { + height: 6vw; + font-size: 2.6vw; + } + #ViewFilters #ViewFilters_SearchField { + width: 100%; + } + #ViewFilters #ViewFilters_SearchField p.field-label { + width: 17%; + } + #ViewFilters #ViewFilters_SearchField .field-control { + width: 100%; + } + #ViewFilters > .field-auto-thin:nth-child(odd) { + padding-right: 2px; + } + #ViewFilters > .field-auto-thin:nth-child(even) { + padding-left: 2px; + } + .ui-multiselect-menu .ui-helper-reset { + position: relative; + } + .ui-multiselect-menu .ui-helper-reset li { + width: 100%; + } + .ui-multiselect-menu .ui-helper-reset li > label span { + position: relative; + top: -4px; + } + .ui-multiselect-menu .ui-helper-reset li .ui-multiselect-all, + .ui-multiselect-menu .ui-helper-reset li .ui-multiselect-none { + width: 100%; + display: flex; + align-items: center; + } + .ui-multiselect-menu .ui-helper-reset li .ui-multiselect-all span:last-child, + .ui-multiselect-menu .ui-helper-reset li .ui-multiselect-none span:last-child { + padding-left: 10px; + } + .ui-multiselect-menu .ui-helper-reset li .ui-multiselect-close { + position: absolute; + top: 8px; + right: 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #EditorTabsContainer .legend.applied { + display: flex; + align-items: center; + font-weight: bold; + } + #EditorTabsContainer #PermissionEditor .field-vertical:first-child > .field-control { + border-bottom: 1px solid #d19405; + padding-bottom: 2vw; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left { + display: flex; + align-items: center; + flex-wrap: wrap; + width: 100%; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left #SearchPermissionElements { + margin: 2px 1vw 2px 6vw; + height: 7vw; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left button { + align-self: stretch; + display: flex; + align-items: center; + justify-content: center; + white-space: nowrap; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left button .ui-icon { + position: relative; + top: 0.5vw; + width: 18px; + height: 18px; + margin-right: 0px; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left #OpenPermissionsDialog, + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left #DeletePermissions { + line-height: 1.5; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable #CurrentPermissionsWrapper { + min-height: 15vw; + } +} +@media screen and (max-width: 980px) and (min-width: 0px) { + thead > tr.ui-widget-header th div > span { + font-size: 2.8vw; + white-space: nowrap; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #EditorTabsContainer .field-control .container-normal .ui-icon.ui-icon-pencil.button-edit-markdown { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+"); + background-position: center; + width: 12px; + height: 12px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + top: 8px; + right: 4px; + } + #EditorTabsContainer .field-control .container-normal .ui-icon.ui-icon-image.button-upload-image { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiIvPjwvc3ZnPg=="); + background-position: center; + width: 12px; + height: 12px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + position: relative; + left: -1px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #EditorTabsContainer { + overflow: auto; + } + #EditorComments { + padding: 0; + margin: 0; + } + #EditorComments #CommentField .control-textarea { + height: 15vw; + } + #EditorComments #CommentField .control-textarea::placeholder { + font-size: 2.6vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + .is-showMenu { + overflow: hidden; + } + .is-showMenu body { + position: fixed; + overflow: hidden; + } + .bg-overlay { + background: rgba(0, 0, 0, 0.5); + position: fixed; + top: 0; + left: 0; + z-index: 301; + width: 100%; + height: 100%; + display: none; + } + #MainContainer { + overflow: hidden; + } + header#Header { + position: fixed; + top: 0; + z-index: 1000; + background-color: #fff; + transition: all 0.5s ease; + } + header#Header a#navtgl { + top: 8px; + z-index: 1000; + transition: all 0.5s ease; + } + header#Header a#navtgl::after { + transition: all 0.5s ease; + } + header#Header a#navtgl.on { + transition: all 0.5s ease; + position: fixed; + } + header#Header a#navtgl.on::before { + transition: all 0.5s ease; + border-top: none; + transform: translate(12.5%, 50%) rotate(50deg); + } + header#Header a#navtgl.on::after { + transition: all 0.5s ease; + transform: translate(12.5%, 0%) rotate(126deg); + } + #Navigations { + transition: all 0.5s ease; + max-height: 100vh; + height: 100vh; + position: absolute; + top: 0; + right: -1000px; + z-index: 999; + padding: 5%; + width: 70%; + padding-top: 112px; + opacity: 0; + } + #Navigations.open { + opacity: 1; + padding-top: 112px; + right: 0; + height: 100vh; + margin: 0; + position: fixed; + top: 0; + z-index: 1000; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #OutgoingMailsForm { + width: 100%; + font-size: 2.6vw; + } + #OutgoingMailsForm .item h3.title-header { + height: auto; + } + #OutgoingMailsForm .item .content { + padding: 0.2em; + margin: 0; + } + #OutgoingMailsForm .item .content .field-auto, + #OutgoingMailsForm .item .content .field-auto-thin { + width: 100%; + margin-right: 0; + padding-right: 0; + padding-bottom: 0; + display: flex; + flex-direction: column; + height: auto; + } + #OutgoingMailsForm .item .content .field-auto .field-label, + #OutgoingMailsForm .item .content .field-auto-thin .field-label { + float: none; + padding: 7px 7px 7px 0; + width: 100%; + text-align: left; + display: block; + } + #OutgoingMailsForm .item .content .field-auto .field-label label, + #OutgoingMailsForm .item .content .field-auto-thin .field-label label { + font-weight: bold; + } + #OutgoingMailsForm .item .content .field-auto .field-control, + #OutgoingMailsForm .item .content .field-auto-thin .field-control { + float: none; + width: 100%; + } + #OutgoingMailsForm .item .content .field-auto .field-control .container-normal, + #OutgoingMailsForm .item .content .field-auto-thin .field-control .container-normal { + margin-right: 0; + width: 100%; + } + #OutgoingMailsForm .item .content .field-auto .field-control .container-normal .control-text, + #OutgoingMailsForm .item .content .field-auto-thin .field-control .container-normal .control-text { + min-height: 0; + height: auto; + } + #OutgoingMailsForm .item .content .field-auto-thin { + margin-left: 0; + } + #OutgoingMailsForm .item .content .field-wide { + display: flex; + flex-direction: column; + padding: 0; + } + #OutgoingMailsForm .item .content .field-wide .field-label { + padding: 7px 0; + } + #OutgoingMailsForm .item .content .field-wide .field-control .container-normal { + margin-right: 0; + width: 100%; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #SiteMenu li.ui-sortable-handle { + touch-action: unset; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + .message .close { + top: unset; + bottom: calc(50% - 8px); + margin: auto; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #EditorComments #CommentField .ui-icon.ui-icon-image.button-upload-image { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiIvPjwvc3ZnPg=="); + background-position: center; + width: 12px; + height: 12px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + position: relative; + left: 0px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Navigations.open { + overflow-y: scroll; + } + #Navigations #NavigationMenu #NewMenuContainer { + background: unset; + border: none; + } + #Navigations #NavigationMenu #NewMenuContainer a { + line-height: 7vw; + } + #Navigations #NavigationMenu li.sub-menu .ui-menu-item .ui-menu-item-wrapper { + font-size: 3vw; + padding-left: 6vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Editor .field-normal .field-control .container-normal input[type='checkbox'].control-checkbox { + position: relative; + margin-right: 6px; + margin-top: .3vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Editor #EditorTabsContainer .field-normal, #Editor #EditorTabsContainer .field-wide, #Editor #EditorTabsContainer .field-markdown { + display: inline-block; + margin-top: 8px; + padding-bottom: 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer #Calendar.both select { + font-size: 2.6vw; + } + #ViewModeContainer #Calendar.both .field-label { + min-width: 30%; + margin-right: 15px; + } + #ViewModeContainer #Calendar.both .field-auto-thin .field-control .container-normal { + display: flex; + align-items: center; + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(3) { + flex: 0 1 calc(64%); + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(3) .field-label { + min-width: 22%; + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(3) .field-control { + width: 74%; + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(4) { + flex: 0 1 calc(33% + 1px); + padding-top: 2%; + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(4) .field-control .container-normal { + justify-content: flex-end; + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(4) .field-control .container-normal #CalendarDate { + margin-right: 0; + width: 98%; + font-size: 2.6vw; + } + #ViewModeContainer #Calendar.both button { + flex: 1 0 calc((100% / 3) - 32px); + margin: 2% 10px 2% 10px; + } + #ViewModeContainer .grid.fixed { + width: 100%; + } + #ViewModeContainer .grid.fixed tbody tr td.container .item { + touch-action: auto; + min-height: 50px; + } + #ViewModeContainer .grid.fixed tbody tr td.container .item .title .ui-icon.ui-icon-pencil { + margin-right: 5px; + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMzBweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMzBweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+"); + background-position: center; + width: 36px; + height: 36px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + } + #ViewModeContainer .grid.fixed tbody tr td.container .item .connection { + min-height: 50px; + } + #ViewModeContainer .grid.fixed tbody tr td.container .dummy { + height: 50px; + } + #ViewModeContainer .grid.fixed tbody tr td.container:first-child .item { + margin-top: 0; + margin-bottom: 5px; + } + #ViewModeContainer .grid.fixed tbody tr td.container:not(:first-child) .item { + margin-top: 5px; + } + thead th.calendar-header { + overflow-x: hidden; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer .both { + column-gap: 16px; + } + #ViewModeContainer .both .field-auto-thin:first-child, #ViewModeContainer .both .field-auto-thin:nth-child(2) { + flex: 0 1 calc(50% - 8px); + } + #ViewModeContainer .both .field-auto-thin:first-child .field-control, #ViewModeContainer .both .field-auto-thin:nth-child(2) .field-control { + flex: 1; + } + #ViewModeContainer .both .field-auto-thin:first-child .field-control select, #ViewModeContainer .both .field-auto-thin:nth-child(2) .field-control select { + max-width: 100%; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) { + row-gap: 12px; + flex-wrap: wrap; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) .field-label { + min-width: 15%; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) .field-auto-thin { + display: flex; + align-items: center; + flex: 1 0 100%; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) .field-auto-thin #GanttStartDate { + width: 100%; + font-size: 2.6vw; + margin-right: 0; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) button { + flex: 1; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) button:last-child { + margin-right: 8px; + } + #ViewModeContainer .both .field-auto-thin:nth-child(4) { + width: 100%; + padding-top: 12px; + } + #ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control { + width: 100%; + } + #ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control .container-normal { + width: 100%; + display: flex; + align-items: center; + column-gap: 32px; + } + #ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control .container-normal #GanttPeriod\,ui { + width: 99%; + margin-top: 0; + } + #ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control .container-normal #GanttPeriod { + margin: 0; + } + #GanttBody { + max-height: 70vh; + } + #GanttBody text { + font-size: 2.6vw; + } + #GanttBody .title text.summary { + font-size: 3vw; + } + #GanttBody #GanttAxis { + left: auto; + position: sticky; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer #Kamban.both .field-auto-thin select { + font-size: 2.6vw; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(1), #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(2), #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3), #ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField { + width: 100%; + flex: 0 1 calc(50% - 8px); + flex-wrap: wrap; + display: flex; + row-gap: 0; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(1) .field-label, #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(2) .field-label, #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3) .field-label, #ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField .field-label { + width: 100%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(1) select, #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(2) select, #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3) select, #ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField select { + max-width: 100%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3) { + padding-top: 4%; + } + #ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField { + padding-top: 4%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(5) { + display: block; + width: 100%; + padding-top: 4%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(5) .field-label { + min-width: 50%; + margin-right: 10px; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(5) select { + max-width: 100%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(6), #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(7) { + width: calc(50% - 8px); + padding-top: 4%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(6) .container-normal, #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(7) .container-normal { + display: flex; + align-items: center; + } + #ViewModeContainer #Kamban.both #KambanBody #Grid tbody .kamban-row .kamban-container .kamban-item { + overflow: hidden; + padding: 6px 30px 6px 5px; + white-space: pre-line; + touch-action: auto; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + #ViewModeContainer #Kamban.both #KambanBody #Grid tbody .kamban-row .kamban-container .kamban-item .ui-icon.ui-icon-pencil { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTMgMTcuNDZ2My4wNGMwIC4yOC4yMi41LjUuNWgzLjA0Yy4xMyAwIC4yNi0uMDUuMzUtLjE1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzLjE1IDE3LjFjLS4xLjEtLjE1LjIyLS4xNS4zNnpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz48L3N2Zz4="); + background-position: center; + width: 36px; + height: 36px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + margin-right: 0; + top: -7px; + right: -11px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #RecordSwitchers { + display: flex; + align-items: center; + } + #RecordSwitchers #CurrentIndex { + height: 7.5vw; + display: flex; + align-items: center; + } +} + +@media screen and (max-width: 980px) and (min-width: 0) { + #Editor #RecordHeader .user { + display: flex; + align-items: center; + } + #Editor #RecordHeader .user .ui-icon-person { + margin-right: 0.6vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #OutgoingMailDialog .field-wide { + padding-bottom: 5px; + } + #OutgoingMailDialog .field-wide .field-label { + width: auto; + } + #OutgoingMailDialog .field-wide .field-control { + float: none; + } + #OutgoingMailDialog .field-wide .control-basket, + #OutgoingMailDialog .field-wide .container-normal { + margin-left: 15vw; + } + #OutgoingMailDialog textarea { + height: 20vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + .show-password { + top: calc(50% - 10px); + right: 10px; + } + #LoginFieldSet input[type=checkbox] { + transform: scale(1.2); + } + #LoginFieldSet input, + #LoginFieldSet select { + font-size: 4vw; + } + #Users_RememberMeField .container-normal { + display: flex; + align-items: center; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Navigations.open { + padding-top: 18vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer .field-auto-thin > .field-label { + padding: 7px 2vw 7px 0; + } + #CrosstabValueField .field-control { + width: 70%; + } + #Crosstab .field-auto-thin p { + margin-right: 0%; + } + #ViewModeContainer #Crosstab .field-auto-thin { + width: 100%; + flex: 0 1 calc(100%); + padding-top: 1vw; + } + #ViewModeContainer #Crosstab .field-auto-thin .field-label { + width: 30%; + } + #ViewModeContainer #Crosstab .field-auto-thin .field-control { + width: 70%; + } + #ViewModeContainer #Crosstab .field-auto-thin .field-control input[type='checkbox'], + #ViewModeContainer #Crosstab .field-auto-thin .field-control .field-auto-thin input[type='checkbox'] { + width: 4vw; + height: 4vw; + margin-left: 2px; + } + #CrosstabBody .grid > thead > tr:first-child > th:not(:first-child), + #KambanBody .grid > thead > tr:first-child > th:not(:first-child) { + white-space: nowrap; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ImportSettingsDialog .control-checkbox + label { + margin: 1.8vw 0 0 1vw; + } + #ImportSettingsDialog .control-checkbox { + margin: 2vw 0 2vw 2px; + } + #ImportSettingsDialog .control-textbox { + height: 7vw; + line-height: 6.5vw; + } + #ImportSettingsDialog .command-center { + padding: 2vw 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ExportSelectorDialog .command-center { + padding: 2vw 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer #Grid .datepicker { + width: 35vw; + font-size: 4vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer .both #TimeSeriesValueField, + #ViewModeContainer .both #TimeSeriesChartTypeField, + #ViewModeContainer .both #TimeSeriesHorizontalAxisField { + width: 100%; + } + #ViewModeContainer .both #TimeSeriesValueField .field-label, + #ViewModeContainer .both #TimeSeriesChartTypeField .field-label, + #ViewModeContainer .both #TimeSeriesHorizontalAxisField .field-label { + min-width: 30%; + } + #ViewModeContainer .both .field-auto-thin:first-child, + #ViewModeContainer .both .field-auto-thin:nth-child(2) { + flex: 0 1 calc(100%); + } + #ViewModeContainer .both .field-auto-thin:first-child .field-label, + #ViewModeContainer .both .field-auto-thin:nth-child(2) .field-label { + min-width: 30%; + } + #ViewModeContainer .both .field-auto-thin select { + max-width: 100%; + } + #ViewModeContainer .both .field-auto-thin > .field-control { + min-width: 68%; + } } \ No newline at end of file diff --git a/Implem.Pleasanter/wwwroot/content/responsive.min.css b/Implem.Pleasanter/wwwroot/content/responsive.min.css index 7376014e9..88f929d1f 100644 --- a/Implem.Pleasanter/wwwroot/content/responsive.min.css +++ b/Implem.Pleasanter/wwwroot/content/responsive.min.css @@ -1 +1 @@ -@media screen and (max-width:980px) and (min-width:0){#LoginFieldSet{width:100%;padding:10px;font-size:4vw}#LoginFieldSet input,#LoginFieldSet select{font-size:5vw;padding:10px}#LoginFieldSet input[type=checkbox]{transform:scale(2);margin:20px 0 0 10px}#LoginFieldSet button{font-size:4vw}#LoginFieldSet .container-normal{margin-left:0}#LoginFieldSet .field-wide,#LoginFieldSet .field-normal{width:100%;margin:10px 0;float:left}#LoginFieldSet .field-normal .control-checkbox+label{width:auto;margin:0 0 0 30px}#Logins .field-label{width:auto;padding:4px}#LoginMessage{width:100%}#Demo{width:100%;padding:10px;font-size:4vw}#DemoFields .field-label{width:auto;padding:4px}#DemoFields input{font-size:5vw;padding:10px}#DemoFields button{font-size:4vw;float:right;margin-top:10px}#DemoFields .container-normal{margin-left:0}#DemoFields .field-normal{width:100%;margin:10px 0;float:left}@media screen and (max-width:600px) and (min-width:0){#LoginFieldSet .field-wide{min-height:10vw !important}}#StartGuide{display:none}.container-normal>#ApiKey{word-break:break-all}div[role="dialog"]{width:100% !important;z-index:999}#EnterPriseBanner,#SupportBanner,#CasesBanner{display:none}#EditorTabsContainer>fieldset{display:contents}#EditorTabsContainer>fieldset>fieldset{display:contents}#TenantImage{width:100%}#Search{width:auto;height:auto}#Breadcrumb{display:none}#CopyToClipboards{display:none}#ViewSelectorField{position:relative;margin-bottom:5px;font-size:2.8vw}#HeaderTitleContainer{margin-bottom:3%}#ViewFilters{font-size:2.6vw;padding-bottom:2%}#Aggregations{font-size:2.6vw}#ViewFilters_Reset{float:none}#ViewFilters.reduced,#Aggregations.reduced{border-bottom:1px solid #aaa;margin-bottom:2%;padding:2%}#Aggregations .label{height:auto}#ViewFilters>.field-auto-thin{height:6vw;padding:0;margin:2% 0 0 0;line-height:1;width:49%;display:flex;justify-content:start;align-items:center}#ViewFilters>.field-auto-thin>.field-control{width:100%}#ViewFilters>.field-auto-thin>.field-label{width:30%;text-align:left}#ViewFilters>.field-auto-thin>.field-label+.field-control{width:70%}.ui-multiselect{width:98%!important;height:6vw}.field-auto-thin input[type="checkbox"],.field-auto-thin input[type="radio"]{height:2.6vw;width:2.6vw;margin-right:1vw}.control-checkbox{margin:0}.control-checkbox+label{margin:0}.field-auto-thin>.field-label{padding:0}#RecordInfo div{clear:both;margin-right:0}#RecordInfo div p{font-size:2.6vw}#Application{padding-bottom:15%}#MainForm{display:flex;flex-direction:column}#RecordInfo{margin-bottom:2%}#RecordSwitchers{font-size:2.6vw;width:100%}.ui-button,#RecordSwitchers .current{height:auto;padding:2%!important;line-height:1;margin-right:2%}#EditorComments{width:100%;order:3;font-size:2.6vw}#EditorTabsContainer{width:100%}.fieldset.ui-tabs-panel.ui-widget-content{font-size:2.6vw}.ui-tabs .ui-tabs-panel{padding:1%}.field-wide,.field-markdown{width:100%;min-height:5vw;float:none;padding:0 0 3% 0;clear:both}.field-normal{width:100%;height:auto;padding:0}.field-normal.right-align{text-align:left}.field-markdown>.field-label,.field-normal>.field-label,.field-wide>.field-label{width:100%;clear:both;margin-left:0;padding:1%;font-weight:bold;text-align:left;text-align-last:left}.field-normal>.field-label label,.field-wide>.field-label label{font-weight:bold}.field-normal .container-normal,.field-control .container-normal{margin-left:0}.control-dropdown{height:auto}.ui-spinner a.ui-spinner-button{height:50%}.field-normal .control-text{width:100%;height:auto;padding:1%;line-height:1}.control-textbox{height:auto}.ui-widget.ui-widget-content{background:#fff;font-size:2.6vw}#Guide{font-size:2.6vw}.alert-success,.alert-warning,.alert-error{height:auto;font-size:2.6vw}#MainCommandsContainer{height:auto;padding:2vw 0;font-size:2.6vw;z-index:200}#Footer{z-index:102}.ui-tabs .ui-tabs-nav{padding:1%;font-size:2.6vw}.ui-tabs .ui-tabs-nav li{margin-bottom:1%;padding-bottom:0;border:1px solid #111;border-radius:4px}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:1%;padding-bottom:0;border:1px solid #111;border-radius:4px}.message{bottom:140px}}@media screen and (max-width:980px) and (min-width:0){body{min-width:320px!important}#Header{height:auto;position:relative}#Header #Logo{padding-bottom:2%}#CorpLogo{float:none;width:30%}#MainContainer{min-height:100vh}#Header a#navtgl{position:absolute;display:block;padding:1.6vw 1.4vw;border:.4vw solid #d19405;border-radius:1vw;top:1.4vw;right:4vw;height:8vw;width:8vw;z-index:101;background:#fece2f}#Header a#navtgl::before{content:'';display:block;height:1.3vw;border-top:.4vw solid #333;border-bottom:.4vw solid #333}#Header a#navtgl::after{content:'';display:block;height:1.4vw;border-bottom:.4vw solid #333}* #Navigations{box-sizing:border-box}#Navigations{width:100%;max-height:0;overflow:hidden;margin:0;padding:0 5%;border:none;position:relative;top:0;right:0;border-radius:0;z-index:100;font-size:3.2vw;line-height:7vw;transition:.5s}#Navigations.open{max-height:none;height:auto;overflow:visible;margin-top:2%;margin-bottom:5%;padding:5%;transition:.5s}#NavigationMenu>li.sub-menu>div.hover{background:none}#Header .ui-widget-header{background:#f3f3f3;color:#111}.ui-widget-header{background:#817865;color:#fff}#NavigationMenu{float:none;margin-right:0;margin-bottom:3%}#SearchField{float:none;margin:0;color:#000}#NavigationMenu>li{width:100%;height:auto;display:block;float:none;position:relative;color:#333}#NavigationMenu>li>div{height:auto;text-align:left;line-height:7vw;color:#333;font-weight:bold}#NavigationMenu>li>div:hover{background:none}#NavigationMenu>li>div>a{height:auto;display:block;color:#333;text-decoration:none;font-weight:bold}#NavigationMenu .menu{width:100%;border-top:none !important;position:relative;top:0;right:0;border-radius:0;z-index:3}.pc-dn{display:block!important}#NavigationMenu .menu>li>a.ui-state-active{font-weight:normal;text-decoration:none}.ui-widget-content{color:#333}.ui-menu .ui-menu-item{border-top:1px solid #d19405}#NewMenuContainer{border:1px solid #d19405;background:#fff}}@media screen and (max-width:980px) and (min-width:0){#SiteMenu .nav-site{width:20vw;height:20vw;text-align:center;background-color:#fff;border:solid 2px #c0c0c0;border-radius:.5vw;float:none;margin:6%}#SiteMenu .sortable{display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap}#SiteMenu .nav-site.sites{width:20vw!important;height:20vw!important;background:#fff;border:solid 2px #ffa500;border-radius:5px}#SiteMenu .nav-site .heading{width:8vw;height:3vw;top:-3vw;background-color:#f8da4c;border:solid 2px #ffa500}#SiteMenu .nav-site.sites.to-parent{height:auto!important;box-shadow:none;margin-top:3%;margin-bottom:0}#SiteMenu .nav-site.sites.to-parent span.title{position:relative;top:0;text-align:left;width:100%;margin-left:0}#SiteMenu .nav-site.sites.to-parent .heading{display:none}#SiteMenu .nav-site a{padding:0;overflow:inherit}#SiteMenu .nav-site .site-image-thumbnail{position:relative;top:inherit;left:inherit;max-width:inherit;border-radius:unset;width:90%;z-index:1;margin:0 auto;display:block}#SiteMenu .nav-site span.title::before{content:'';display:block;height:0}#SiteMenu .nav-site span.title{margin-left:0;font-size:14px}#SiteMenu .nav-site.has-image a{padding:1vw 0 0}#SiteMenu .nav-site .conditions{position:absolute;top:-2.4vw;right:-2.4vw;z-index:2}#SiteMenu .nav-site .conditions .elapsed-time{display:none}#SiteMenu .nav-site .conditions .count{display:none}#SiteMenu .nav-site .conditions .overdue{height:6vw;min-width:6vw;line-height:6vw;font-size:2.6vw;border-radius:3vw;font-weight:bold;padding:0}#SiteMenu .nav-site[data-type="Wikis"]{border-radius:2px;position:relative;width:20vw;border:2px solid #ccc}#SiteMenu .nav-site[data-type="Wikis"] a::before,#SiteMenu .nav-site[data-type="Wikis"] a::after{content:'';display:block;position:absolute;height:20%;width:80%;left:10%;border-top:2px solid #ccc;border-bottom:2px solid #ccc}#SiteMenu .nav-site[data-type="Wikis"] a::before{top:20%}#SiteMenu .nav-site[data-type="Wikis"] a::after{top:60%}#SiteMenu .nav-site[data-type="Wikis"] a img{margin-top:15%}#SiteMenu .nav-site.sites.to-parent{height:auto!important;border:none;background:none;text-align:left}#SiteMenu .nav-site.to-parent .ui-icon{display:none}#SiteMenu .nav-site.to-parent a{position:relative;display:inline-block;padding:0 0 0 16px;color:#000;vertical-align:middle;text-decoration:none;font-size:15px}#SiteMenu .nav-site.to-parent a::before,#SiteMenu .nav-site.to-parent a::after{position:absolute;top:0;bottom:0;left:0;margin:auto;content:"";vertical-align:middle}#SiteMenu .nav-site.to-parent a::before{left:5px;width:7px;height:3px;background:#7a0}#SiteMenu .nav-site.to-parent a::after{left:2px;width:6px;height:6px;border-bottom:3px solid #7a0;border-left:3px solid #7a0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#SiteMenu .nav-site span.title{margin-left:0;font-size:2.6vw;top:22vw;position:absolute;display:block;text-align:center;width:140%;margin-left:-20%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#SiteMenu .nav-site .stacking1{width:20vw;height:20vw;border-bottom:solid 1px #c0c0c0;border-right:solid 1px #c0c0c0;position:absolute;top:1px;left:1px;border-radius:5px}#SiteMenu .nav-site .stacking2{width:20vw;height:20vw;border-bottom:solid 1px #c0c0c0;border-right:solid 1px #c0c0c0;position:absolute;top:4px;left:4px;border-radius:5px}#SiteMenu .nav-sites .to-parent a img{display:none}#SiteMenu .nav-site.to-parent.has-image a{padding:0 0 0 15px}}@media screen and (max-width:980px) and (min-width:0){#FieldSetStandard{display:flex;flex-direction:column}.legend{order:2}#StandardTemplatesViewer{order:3}.template-selectable{order:1;float:none}.template-viewer-container{float:none;margin:0}.template-viewer{margin:0}.template-selectable{width:100%}.template-tab-container{min-height:10px}.field-vertical{width:100%;float:none;padding:0 0 20px 0}.container-selectable .wrapper{min-height:auto}.h350{height:auto}#EditInDialogBody{padding-bottom:15%}.links{overflow:auto}@media screen and (max-width:980px) and (min-width:0){#FieldSetHistories{overflow:auto;width:100%}#ViewModeContainer{overflow:auto;width:100%;padding-top:1%}#CrosstabBody{overflow:auto;width:100%}#GanttBody{overflow:auto;width:100%;padding-top:5%}.grid{font-size:2.8vw;width:98%}.grid>thead th{min-width:10vw;white-space:nowrap}.grid>tbody td{min-width:10vw;white-space:nowrap}.grid>thead th:nth-child(1),.grid>tbody td:nth-child(1){min-width:1vw}.grid>tbody td p{white-space:nowrap}#Calendar{font-size:2.6vw}#Calendar button{margin-bottom:2%}#CalendarBody #Grid thead{background:#fff}#CalendarMonth{display:block}#Calendar .field-auto-thin{display:flex;align-items:center;width:33%;margin:0;padding:0;margin-bottom:2%!important}#Calendar .field-auto-thin p{margin-right:1%}#Calendar .field-auto-thin select{max-width:none}#CalendarTimePeriod,#CalendarFromTo,#CalendarMonth{height:auto}#CalendarMonth{margin-bottom:2%}.w100{width:auto}#CrosstabBody{margin-top:3%}#CrosstabBody #Grid{table-layout:auto}#CrosstabBody .grid>thead>tr>th,#CrosstabBody .grid>tbody>tr>th{white-space:nowrap}#CrosstabBody .grid>thead th{min-width:10vw;white-space:nowrap}#CrosstabBody .grid>tbody td{min-width:10vw;white-space:nowrap}#Crosstab{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}#Crosstab .field-auto-thin{display:flex;align-items:center;width:48%;margin:0;padding:0;font-size:2.6vw}#Crosstab .field-auto-thin#CrosstabTimePeriodField{width:48%}#Crosstab .field-auto-thin p{width:100%;margin-right:2%;white-space:nowrap}#Crosstab .field-auto-thin select{max-width:none}#Crosstab #CrosstabMonth{width:48%;margin-top:2%;margin-right:0;font-size:2.6vw}#Crosstab button{font-size:2.6vw;margin-top:1%}.svg-crosstab{display:block}#ViewModeContainer .both{display:flex;align-items:center;flex-wrap:wrap}#ViewModeContainer .both .field-auto-thin{display:flex;align-items:center;width:48%;margin:0;padding:0;font-size:2.6vw;height:auto;padding-top:2%}#ViewModeContainer .both .field-auto-thin .field-auto-thin{width:30%}#ViewModeContainer .both .field-auto-thin:nth-child(3){width:100%}#ViewModeContainer .both .field-auto-thin:nth-child(3) .field-auto-thin{width:48%;display:block}#ViewModeContainer .field-auto-thin p{margin-right:2%;white-space:nowrap;text-align:left}#GanttAxis{width:1500px;position:relative;left:0;bottom:0}#Gantt{width:1500px}#BurnDown{width:1500px}#TimeSeriesBody{padding-top:5%;margin-left:-5%;width:1500px}#TimeSeries{width:1500px}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3){width:48%}#ViewModeContainer #Kamban.both .field-auto-thin .field-control{width:100%}#KambanBody{margin-top:3%}#KambanBody #Grid{table-layout:auto}#KambanBody .grid>thead>tr>th,#KambanBody .grid>tbody>tr>th{white-space:nowrap}#KambanBody .grid>thead th{min-width:10vw;white-space:nowrap}#KambanBody .grid>tbody td{min-width:10vw;white-space:nowrap}}@media screen and (min-width:981px){.grid>thead>tr:first-child>th:first-child{width:20px}#CrosstabBody .grid>thead>tr:first-child>th:first-child,#KambanBody .grid>thead>tr:first-child>th:first-child{width:auto}.grid>thead>tr:first-child>th:not(:first-child){white-space:nowrap}#CrosstabBody .grid>thead>tr:first-child>th:not(:first-child),#KambanBody .grid>thead>tr:first-child>th:not(:first-child){white-space:inherit}.grid>tbody>tr td:not(:first-child){white-space:nowrap;min-width:40px}#CrosstabBody .grid>tbody>tr td:not(:first-child),#KambanBody .grid>tbody>tr td:not(:first-child){white-space:inherit;min-width:auto}} \ No newline at end of file +@media screen and (max-width:980px) and (min-width:0){#LoginFieldSet{width:100%;padding:10px;font-size:4vw}#LoginFieldSet input,#LoginFieldSet select{font-size:5vw;padding:10px}#LoginFieldSet input[type=checkbox]{transform:scale(2);margin:20px 0 0 10px}#LoginFieldSet button{font-size:4vw}#LoginFieldSet .container-normal{margin-left:0}#LoginFieldSet .field-wide,#LoginFieldSet .field-normal{width:100%;margin:10px 0;float:left}#LoginFieldSet .field-normal .control-checkbox+label{width:auto;margin:0 0 0 30px}#Logins .field-label{width:auto;padding:4px}#LoginMessage{width:100%}#Demo{width:100%;padding:10px;font-size:4vw}#DemoFields .field-label{width:auto;padding:4px}#DemoFields input{font-size:5vw;padding:10px}#DemoFields button{font-size:4vw;float:right;margin-top:10px}#DemoFields .container-normal{margin-left:0}#DemoFields .field-normal{width:100%;margin:10px 0;float:left}#StartGuide{display:none}.container-normal>#ApiKey{word-break:break-all}div[role="dialog"]{width:98% !important;z-index:999}#EnterPriseBanner,#SupportBanner,#CasesBanner{display:none}#EditorTabsContainer>fieldset{display:contents}#EditorTabsContainer>fieldset>fieldset{display:contents}#TenantImage{width:100%}#Search{width:auto;height:auto}#Breadcrumb{display:none}#CopyToClipboards{display:none}#ViewSelectorField{position:relative;margin-bottom:5px;font-size:2.8vw}#HeaderTitleContainer{margin-bottom:3%}#ViewFilters{font-size:2.6vw;padding-bottom:2%}#Aggregations{font-size:2.6vw}#ViewFilters_Reset{float:none}#ViewFilters.reduced,#Aggregations.reduced{border-bottom:1px solid #aaa;margin-bottom:2%;padding:2%}#Aggregations .label{height:auto}#ViewFilters>.field-auto-thin{height:6vw;padding:0;margin:2% 0 0 0;line-height:1;width:49%;display:flex;justify-content:start;align-items:center}#ViewFilters>.field-auto-thin>.field-control{width:100%}#ViewFilters>.field-auto-thin>.field-label{width:30%;text-align:left}#ViewFilters>.field-auto-thin>.field-label+.field-control{width:70%}.ui-multiselect{width:100% !important;height:6vw}.field-auto-thin input[type="checkbox"],.field-auto-thin input[type="radio"]{height:2.6vw;width:2.6vw;margin-right:1vw}.control-checkbox{margin:0}.control-checkbox+label{margin:0}.field-auto-thin>.field-label{padding:0}#RecordInfo div{clear:both;margin-right:0}#RecordInfo div p{font-size:2.6vw}#Application{padding-bottom:15%}#MainForm{display:flex;flex-direction:column}#RecordInfo{margin-bottom:2%}#RecordSwitchers{font-size:2.6vw;width:100%}.ui-button,#RecordSwitchers .current{height:auto;padding:2%!important;line-height:1;margin-right:2%}#EditorComments{width:100%;order:3;font-size:2.6vw}#EditorTabsContainer{width:100%}.fieldset.ui-tabs-panel.ui-widget-content{font-size:2.6vw}.ui-tabs .ui-tabs-panel{padding:1%}.field-wide,.field-markdown{width:100%;min-height:5vw;float:none;padding:0 0 3% 0;clear:both}.field-normal{width:100%;height:auto;padding:0}.field-normal.right-align{text-align:left}.field-markdown>.field-label,.field-normal>.field-label,.field-wide>.field-label{width:100%;clear:both;margin-left:0;padding:1%;font-weight:bold;text-align:left;text-align-last:left}.field-normal>.field-label label,.field-wide>.field-label label{font-weight:bold}.field-normal .container-normal,.field-control .container-normal{margin-left:0}.control-dropdown{height:auto}.ui-spinner a.ui-spinner-button{height:50%}.field-normal .control-text{width:100%;height:auto;padding:1%;line-height:1}.control-textbox{height:auto}.ui-widget.ui-widget-content{font-size:2.6vw}#Guide{font-size:2.6vw}.alert-success,.alert-warning,.alert-error{height:auto;font-size:2.6vw}#MainCommandsContainer{height:auto;padding:2vw 0;font-size:2.6vw;z-index:200}#Footer{z-index:102}.ui-tabs .ui-tabs-nav{padding:1%;font-size:2.6vw}.ui-tabs .ui-tabs-nav li{margin-bottom:1%;padding-bottom:0;border-radius:4px}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:1%;padding-bottom:0;border-radius:4px}.message{bottom:140px}}@media screen and (max-width:980px) and (min-width:0){body{min-width:320px!important}#Header{height:auto;position:relative}#CorpLogo{float:none;width:30%}#MainContainer{min-height:100vh}#Header a#navtgl{position:absolute;display:block;padding:1.6vw 1.4vw;border:.4vw solid #d19405;border-radius:1vw;top:1.4vw;right:4vw;height:8vw;width:8vw;z-index:101;background:#fece2f}#Header a#navtgl::before{content:'';display:block;height:1.3vw;border-top:.4vw solid #333;border-bottom:.4vw solid #333}#Header a#navtgl::after{content:'';display:block;height:1.4vw;border-bottom:.4vw solid #333}* #Navigations{box-sizing:border-box}#Navigations{width:100%;max-height:0;overflow:hidden;margin:0;padding:0 5%;border:none;position:relative;top:0;right:0;border-radius:0;z-index:100;font-size:3.2vw;line-height:7vw;transition:.5s}#Navigations.open{max-height:none;height:auto;overflow:visible;margin-top:2%;margin-bottom:5%;padding:5%;transition:.5s}#NavigationMenu>li.sub-menu>div.hover{background:none}#NavigationMenu{float:none;margin-right:0;margin-bottom:3%}#SearchField{float:none;margin:0;color:#000}#NavigationMenu>li{width:100%;height:auto;display:block;float:none;position:relative}#NavigationMenu>li>div{height:auto;text-align:left;line-height:7vw;font-weight:bold}#NavigationMenu>li>div:hover{background:none}#NavigationMenu>li>div>a{height:auto;display:block;text-decoration:none;font-weight:bold}#NavigationMenu .menu{width:100%;border-top:none !important;position:relative;top:0;right:0;border-radius:0;z-index:3}.pc-dn{display:block!important}#NavigationMenu .menu>li>a.ui-state-active{font-weight:normal;text-decoration:none}.ui-menu .ui-menu-item{border-top:1px solid #d19405}#NewMenuContainer{border:1px solid #d19405;background:#fff}}@media screen and (max-width:980px) and (min-width:0){#SiteMenu .nav-site{width:20vw;height:20vw;text-align:center;border-radius:.5vw;float:none;margin:6%}#SiteMenu .sortable{display:flex;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap}#SiteMenu .nav-site.sites{width:20vw!important;height:20vw!important;background:#fff;border-radius:5px}#SiteMenu .nav-site .heading{width:8vw;height:3vw;top:-3vw}#SiteMenu .nav-site.sites.to-parent{height:auto!important;box-shadow:none;margin-top:3%;margin-bottom:0}#SiteMenu .nav-site.sites.to-parent span.title{position:relative;top:0;text-align:left;width:100%;margin-left:0}#SiteMenu .nav-site.sites.to-parent .heading{display:none}#SiteMenu .nav-site a{padding:0;overflow:inherit}#SiteMenu .nav-site .site-image-thumbnail{position:relative;top:inherit;left:inherit;max-width:inherit;border-radius:unset;width:90%;z-index:1;margin:0 auto;display:block}#SiteMenu .nav-site span.title::before{content:'';display:block;height:0}#SiteMenu .nav-site span.title{margin-left:0;font-size:14px}#SiteMenu .nav-site.has-image a{padding:1vw 0 0}#SiteMenu .nav-site .conditions{position:absolute;top:-2.4vw;right:-2.4vw;z-index:2}#SiteMenu .nav-site .conditions .elapsed-time{display:none}#SiteMenu .nav-site .conditions .count{display:none}#SiteMenu .nav-site .conditions .overdue{height:6vw;min-width:6vw;line-height:6vw;font-size:2.6vw;border-radius:3vw;font-weight:bold;padding:0}#SiteMenu .nav-site[data-type="Wikis"]{border-radius:2px;position:relative;width:20vw;border:2px solid #ccc}#SiteMenu .nav-site[data-type="Wikis"] a::before,#SiteMenu .nav-site[data-type="Wikis"] a::after{content:'';display:block;position:absolute;height:20%;width:80%;left:10%;border-top:2px solid #ccc;border-bottom:2px solid #ccc}#SiteMenu .nav-site[data-type="Wikis"] a::before{top:20%}#SiteMenu .nav-site[data-type="Wikis"] a::after{top:60%}#SiteMenu .nav-site[data-type="Wikis"] a img{margin-top:15%}#SiteMenu .nav-site.sites.to-parent{height:auto!important;border:none;background:none;text-align:left}#SiteMenu .nav-site.to-parent .ui-icon{display:none}#SiteMenu .nav-site.to-parent a{position:relative;display:inline-block;padding:0 0 0 16px;color:#000;vertical-align:middle;text-decoration:none;font-size:15px}#SiteMenu .nav-site.to-parent a::before,#SiteMenu .nav-site.to-parent a::after{position:absolute;top:0;bottom:0;left:0;margin:auto;content:"";vertical-align:middle}#SiteMenu .nav-site.to-parent a::before{left:5px;width:7px;height:3px;background:#7a0}#SiteMenu .nav-site.to-parent a::after{left:2px;width:6px;height:6px;border-bottom:3px solid #7a0;border-left:3px solid #7a0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#SiteMenu .nav-site span.title{margin-left:0;font-size:2.6vw;top:22vw;position:absolute;display:block;text-align:center;width:140%;margin-left:-20%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#SiteMenu .nav-site .stacking1{width:20vw;height:20vw;border-bottom:solid 1px #c0c0c0;border-right:solid 1px #c0c0c0;position:absolute;top:1px;left:1px;border-radius:5px}#SiteMenu .nav-site .stacking2{width:20vw;height:20vw;border-bottom:solid 1px #c0c0c0;border-right:solid 1px #c0c0c0;position:absolute;top:4px;left:4px;border-radius:5px}#SiteMenu .nav-sites .to-parent a img{display:none}#SiteMenu .nav-site.to-parent.has-image a{padding:0 0 0 15px}}@media screen and (max-width:980px) and (min-width:0){#FieldSetStandard{display:flex;flex-direction:column}.legend{order:2}#StandardTemplatesViewer{order:3}.template-selectable{order:1;float:none}.template-viewer-container{float:none;margin:0}.template-viewer{margin:0}.template-selectable{width:100%}.template-tab-container{min-height:10px}.field-vertical{width:100%;float:none;padding:0 0 20px 0}.container-selectable .wrapper{min-height:auto}.h350{height:auto}#EditInDialogBody{padding-bottom:15%}.links{overflow:auto}@media screen and (max-width:980px) and (min-width:0){#FieldSetHistories{overflow:auto;width:100%}#ViewModeContainer{overflow:auto;width:100%;padding-top:1%}#CrosstabBody{overflow:auto;width:100%}#GanttBody{overflow:auto;width:100%;padding-top:5%}.grid{font-size:2.8vw;width:98%}.grid>thead th{min-width:10vw;white-space:nowrap}.grid>tbody td{min-width:10vw;white-space:nowrap}.grid>thead th:nth-child(1),.grid>tbody td:nth-child(1){min-width:1vw}.grid>tbody td p{white-space:nowrap}#Calendar{font-size:2.6vw}#Calendar button{margin-bottom:2%}#CalendarBody #Grid thead{background:#fff}#CalendarMonth{display:block}#Calendar .field-auto-thin{display:flex;align-items:center;width:33%;margin:0;padding:0;margin-bottom:2%!important}#Calendar .field-auto-thin p{margin-right:1%}#Calendar .field-auto-thin select{max-width:none}#CalendarTimePeriod,#CalendarFromTo,#CalendarMonth{height:auto}#CalendarMonth{margin-bottom:2%}.w100{width:auto}#CrosstabBody{margin-top:3%}#CrosstabBody #Grid{table-layout:auto}#CrosstabBody .grid>thead>tr>th,#CrosstabBody .grid>tbody>tr>th{white-space:nowrap}#CrosstabBody .grid>thead th{min-width:10vw;white-space:nowrap}#CrosstabBody .grid>tbody td{min-width:10vw;white-space:nowrap}#Crosstab{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}#Crosstab .field-auto-thin{display:flex;align-items:center;width:48%;margin:0;padding:0;font-size:2.6vw}#Crosstab .field-auto-thin#CrosstabTimePeriodField{width:48%}#Crosstab .field-auto-thin p{width:100%;margin-right:2%;white-space:nowrap}#Crosstab .field-auto-thin select{max-width:none}#Crosstab #CrosstabMonth{width:48%;margin-top:2%;margin-right:0;font-size:2.6vw}#Crosstab button{font-size:2.6vw;margin-top:1%}.svg-crosstab{display:block}#ViewModeContainer .both{display:flex;align-items:center;flex-wrap:wrap}#ViewModeContainer .both .field-auto-thin{display:flex;align-items:center;width:48%;margin:0;padding:0;font-size:2.6vw;height:auto;padding-top:2%}#ViewModeContainer .both .field-auto-thin .field-auto-thin{width:30%}#ViewModeContainer .both .field-auto-thin:nth-child(3){width:100%}#ViewModeContainer .both .field-auto-thin:nth-child(3) .field-auto-thin{width:48%;display:block}#ViewModeContainer .field-auto-thin p{margin-right:2%;white-space:nowrap;text-align:left}#GanttAxis{width:1500px;position:relative;left:0;bottom:0}#Gantt{width:1500px}#BurnDown{width:1500px}#TimeSeriesBody{padding-top:5%;margin-left:-5%;width:1500px}#TimeSeries{width:1500px}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3){width:48%}#ViewModeContainer #Kamban.both .field-auto-thin .field-control{width:100%}#KambanBody{margin-top:3%}#KambanBody #Grid{table-layout:auto}#KambanBody .grid>thead>tr>th,#KambanBody .grid>tbody>tr>th{white-space:nowrap}#KambanBody .grid>thead th{min-width:10vw;white-space:nowrap}#KambanBody .grid>tbody td{min-width:10vw;white-space:nowrap}}@media screen and (max-width:980px) and (min-width:0){#Header{padding:0 calc(5vw)}#Header a#navtgl{right:5vw}#Application,#Footer{padding-left:5vw;padding-right:5vw}#SiteMenu .nav-site{margin:5%}:not(td)>div.field-control .container-normal{margin-left:0}*{line-height:1.4}.field-normal .control-textbox,.field-normal .control-dropdown,.field-normal .control-text,.field-control .control-textbox,.field-control .control-dropdown,.field-control .control-text,.container-normal .control-textbox,.container-normal .control-dropdown,.container-normal .control-text{min-height:unset;height:6vw;line-height:6vw;padding-top:0;padding-bottom:0}body{font-size:16px}}@media screen and (max-width:980px) and (min-width:0){#HeaderTitle{font-size:16px}}@media screen and (max-width:980px) and (min-width:0){.command-center{padding:0}.ui-dialog .ui-dialog-titlebar-close{top:0;bottom:0;width:5vw;height:5vw;margin:auto 0}}@media screen and (max-width:980px) and (min-width:0){#ViewSelector{font-size:2.6vw}}@media screen and (max-width:980px) and (min-width:0){#Logo a{align-items:center;display:flex}#Logo #ProductLogo{font-size:18px;padding-left:8px}#CorpLogo{float:none;height:calc(8vw + 10px);width:unset;margin-top:0}}@media screen and (max-width:980px) and (min-width:0){#Editor .field-control .container-normal{width:calc(100% - 20px)}#Editor .field-control .ui-icon.ui-icon-clock.current-time{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjEycHgiIGZpbGw9IiMwMDAwMDAiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48Zz48Zz48cGF0aCBkPSJNMTIsMkM2LjUsMiwyLDYuNSwyLDEyczQuNSwxMCwxMCwxMHMxMC00LjUsMTAtMTBTMTcuNSwyLDEyLDJ6IE0xNi4yLDE2LjJMMTEsMTNWN2gxLjV2NS4ybDQuNSwyLjdMMTYuMiwxNi4yeiIvPjwvZz48L2c+PC9nPjwvc3ZnPg==");background-position:center;width:12px;height:12px;filter:invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%);top:calc(3vw - 3.5px);right:-16px}#Editor .field-control .ui-icon.ui-icon-person.current-user{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiAxMmMyLjIxIDAgNC0xLjc5IDQtNHMtMS43OS00LTQtNC00IDEuNzktNCA0IDEuNzkgNCA0IDR6bTAgMmMtMi42NyAwLTggMS4zNC04IDR2MmgxNnYtMmMwLTIuNjYtNS4zMy00LTgtNHoiLz48L3N2Zz4=");background-position:center;width:12px;height:12px;filter:invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%);top:calc(3vw - 3.5px);right:-16px}}@media screen and (max-width:980px) and (min-width:0){#FieldSetAddressBook #OutgoingMailDestinationForm .container-left{width:38vw}#FieldSetAddressBook #OutgoingMailDestinationForm .container-right .command-left{float:unset;padding:0}#FieldSetAddressBook #OutgoingMailDestinationForm .container-right .command-left button{margin:2px}#FieldSetAddressBook #OutgoingMailDestinationForm .container-right .container-selectable .wrapper{height:40vw}#FieldSetAddressBook #OutgoingMailDestinationForm .container-right>*{margin-left:40vw}}@media screen and (max-width:980px) and (min-width:0){#Issues_WorkValue{width:100px}}@media screen and (max-width:980px) and (min-width:0){body::before{content:'';position:fixed;width:5vw;height:50vh;top:0;left:0;background:#fff;z-index:200}body::after{content:'';position:fixed;width:5vw;height:50vh;top:0;right:0;background:#fff;z-index:700}}@media screen and (max-width:980px) and (min-width:0){#Users_LoginId,#Users_Password{height:40px}#LoginMessage span{font-size:3.5vw}#PortalLink{font-size:3.5vw;top:3vw}#LoginFieldSet{margin:65px auto 20px auto}#LoginFieldSet input[type=checkbox]{margin:auto 0;margin-left:1.2vw}#LoginFieldSet button{margin-top:0}#LoginFieldSet .field-wide,#LoginFieldSet .field-normal{margin:0 0}#LoginFieldSet .field-normal .control-checkbox+label{margin:auto 0;margin-left:4vw;padding:0}#Logins .field-label{width:100%}}@media screen and (max-width:980px) and (min-width:0){#Editor .field-markdown>.field-label>label{font-weight:bold}#Editor .field-control .unit{font-size:2.6vw;padding-top:calc((18px - 1.4em)/2)}#Editor .ui-spinner .control-spinner{height:100%}}@media screen and (max-width:980px) and (min-width:0){#GridCheckAll{margin-top:0}label[for="GridCheckAll"]{margin:0}#Footer{font-size:2.8vw;height:auto}#MainCommandsContainer{bottom:calc(2.8vw*1.4 + 10px)}body>thead>tr{font-size:.75em}}@media screen and (max-width:980px) and (min-width:0){#SiteImageSettingsEditor .field-auto-thin,#GridSettingsEditor .field-auto-thin,#FiltersSettingsEditor .field-auto-thin,#EditorSettingsEditor .field-auto-thin,#LinksSettingsEditor .field-auto-thin,#HistoriesSettingsEditor .field-auto-thin,#FormulasSettingsEditor .field-auto-thin,#ViewsSettingsEditor .field-auto-thin,#ImportsSettingsEditor .field-auto-thin,#ExportsSettingsEditor .field-auto-thin,#CalendarSettingsEditor .field-auto-thin,#CrosstabSettingsEditor .field-auto-thin,#GanttSettingsEditor .field-auto-thin,#BurnDownSettingsEditor .field-auto-thin,#TimeSeriesSettingsEditor .field-auto-thin,#KambanSettingsEditor .field-auto-thin,#ImageLibSettingsEditor .field-auto-thin,#SearchSettingsEditor .field-auto-thin,#StylesSettingsEditor .field-auto-thin,#ScriptsSettingsEditor .field-auto-thin,#PublishSettingsEditor .field-auto-thin,#FieldSetSiteAccessControl .field-auto-thin{padding-right:0;height:auto;display:flex;align-items:center;clear:both}#SiteImageSettingsEditor .field-auto-thin .container-normal,#GridSettingsEditor .field-auto-thin .container-normal,#FiltersSettingsEditor .field-auto-thin .container-normal,#EditorSettingsEditor .field-auto-thin .container-normal,#LinksSettingsEditor .field-auto-thin .container-normal,#HistoriesSettingsEditor .field-auto-thin .container-normal,#FormulasSettingsEditor .field-auto-thin .container-normal,#ViewsSettingsEditor .field-auto-thin .container-normal,#ImportsSettingsEditor .field-auto-thin .container-normal,#ExportsSettingsEditor .field-auto-thin .container-normal,#CalendarSettingsEditor .field-auto-thin .container-normal,#CrosstabSettingsEditor .field-auto-thin .container-normal,#GanttSettingsEditor .field-auto-thin .container-normal,#BurnDownSettingsEditor .field-auto-thin .container-normal,#TimeSeriesSettingsEditor .field-auto-thin .container-normal,#KambanSettingsEditor .field-auto-thin .container-normal,#ImageLibSettingsEditor .field-auto-thin .container-normal,#SearchSettingsEditor .field-auto-thin .container-normal,#StylesSettingsEditor .field-auto-thin .container-normal,#ScriptsSettingsEditor .field-auto-thin .container-normal,#PublishSettingsEditor .field-auto-thin .container-normal,#FieldSetSiteAccessControl .field-auto-thin .container-normal{width:100%}#SiteImageSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#GridSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#FiltersSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#EditorSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#LinksSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#HistoriesSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#FormulasSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#ViewsSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#ImportsSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#ExportsSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#CalendarSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#CrosstabSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#GanttSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#BurnDownSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#TimeSeriesSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#KambanSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#ImageLibSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#SearchSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#StylesSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#ScriptsSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#PublishSettingsEditor .field-auto-thin .container-normal .control-checkbox~label,#FieldSetSiteAccessControl .field-auto-thin .container-normal .control-checkbox~label{display:unset;float:unset;width:auto}#SiteImageSettingsEditor .field-auto-thin .field-label~.field-control,#GridSettingsEditor .field-auto-thin .field-label~.field-control,#FiltersSettingsEditor .field-auto-thin .field-label~.field-control,#EditorSettingsEditor .field-auto-thin .field-label~.field-control,#LinksSettingsEditor .field-auto-thin .field-label~.field-control,#HistoriesSettingsEditor .field-auto-thin .field-label~.field-control,#FormulasSettingsEditor .field-auto-thin .field-label~.field-control,#ViewsSettingsEditor .field-auto-thin .field-label~.field-control,#ImportsSettingsEditor .field-auto-thin .field-label~.field-control,#ExportsSettingsEditor .field-auto-thin .field-label~.field-control,#CalendarSettingsEditor .field-auto-thin .field-label~.field-control,#CrosstabSettingsEditor .field-auto-thin .field-label~.field-control,#GanttSettingsEditor .field-auto-thin .field-label~.field-control,#BurnDownSettingsEditor .field-auto-thin .field-label~.field-control,#TimeSeriesSettingsEditor .field-auto-thin .field-label~.field-control,#KambanSettingsEditor .field-auto-thin .field-label~.field-control,#ImageLibSettingsEditor .field-auto-thin .field-label~.field-control,#SearchSettingsEditor .field-auto-thin .field-label~.field-control,#StylesSettingsEditor .field-auto-thin .field-label~.field-control,#ScriptsSettingsEditor .field-auto-thin .field-label~.field-control,#PublishSettingsEditor .field-auto-thin .field-label~.field-control,#FieldSetSiteAccessControl .field-auto-thin .field-label~.field-control{margin-left:10px}#SiteImageSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#GridSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#FiltersSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#EditorSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#LinksSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#HistoriesSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#FormulasSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#ViewsSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#ImportsSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#ExportsSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#CalendarSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#CrosstabSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#GanttSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#BurnDownSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#TimeSeriesSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#KambanSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#ImageLibSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#SearchSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#StylesSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#ScriptsSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#PublishSettingsEditor .field-auto-thin .field-label~.field-control .container-normal,#FieldSetSiteAccessControl .field-auto-thin .field-label~.field-control .container-normal{width:100%}#FieldSetGeneral .field-control .container-normal .control-checkbox~label{width:auto}#GridSettingsEditor #GridEditorType{max-width:unset}#SiteImageSettingsEditor #SiteImage{width:100%;height:7vw}#SiteImageSettingsEditor #SetSiteImage{margin-right:0}}@media screen and (max-width:980px) and (min-width:0){#Aggregations{display:flex;flex-wrap:wrap;row-gap:5px;justify-content:flex-start;align-items:center}#Aggregations span.label{flex:1 0 auto;margin:0;text-align:center;align-self:stretch;display:flex;align-items:center;justify-content:flex-start}#Aggregations span.data{flex:1 0 auto;margin:0;align-self:stretch;display:flex;align-items:center;justify-content:flex-start;height:auto}#Aggregations span.data.no-choice{flex-basis:auto;align-self:stretch}#Aggregations span.data.link span{font-weight:bold}#Aggregations #ReduceAggregations{width:100%}}@media screen and (max-width:980px) and (min-width:0){#ViewModeContainer .grid{vertical-align:middle}#ViewModeContainer .grid tr td:first-child{padding:6px}input[type='checkbox'],.field-auto-thin input[type='checkbox']{width:3vw;height:3vw}.field-auto-thin input[type='checkbox']+label{padding-top:2px}}@media screen and (max-width:980px) and (min-width:0){#SearchField #Search{font-size:3vw;width:100%}#SearchField #Search::placeholder{font-size:3vw}}@media screen and (max-width:980px) and (min-width:0){#ViewFilters #ViewFilters_Reset{margin-left:auto;margin-right:0}#ViewFilters .field-auto-thin{width:50%}#ViewFilters .field-auto-thin .field-control .container-normal{display:flex;align-items:center}#ViewFilters .field-auto-thin .field-control .container-normal input[type='checkbox']{margin-right:4px;margin-top:1px}#ViewFilters .field-auto-thin .field-control .container-normal .ui-widget.ui-state-default.ui-multiselect,#ViewFilters .field-auto-thin .field-control .container-normal .control-textbox{height:6vw;font-size:2.6vw}#ViewFilters #ViewFilters_SearchField{width:100%}#ViewFilters #ViewFilters_SearchField p.field-label{width:17%}#ViewFilters #ViewFilters_SearchField .field-control{width:100%}#ViewFilters>.field-auto-thin:nth-child(odd){padding-right:2px}#ViewFilters>.field-auto-thin:nth-child(even){padding-left:2px}.ui-multiselect-menu .ui-helper-reset{position:relative}.ui-multiselect-menu .ui-helper-reset li{width:100%}.ui-multiselect-menu .ui-helper-reset li>label span{position:relative;top:-4px}.ui-multiselect-menu .ui-helper-reset li .ui-multiselect-all,.ui-multiselect-menu .ui-helper-reset li .ui-multiselect-none{width:100%;display:flex;align-items:center}.ui-multiselect-menu .ui-helper-reset li .ui-multiselect-all span:last-child,.ui-multiselect-menu .ui-helper-reset li .ui-multiselect-none span:last-child{padding-left:10px}.ui-multiselect-menu .ui-helper-reset li .ui-multiselect-close{position:absolute;top:8px;right:0}}@media screen and (max-width:980px) and (min-width:0){#EditorTabsContainer .legend.applied{display:flex;align-items:center;font-weight:bold}#EditorTabsContainer #PermissionEditor .field-vertical:first-child>.field-control{border-bottom:1px solid #d19405;padding-bottom:2vw}#EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left{display:flex;align-items:center;flex-wrap:wrap;width:100%}#EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left #SearchPermissionElements{margin:2px 1vw 2px 6vw;height:7vw}#EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left button{align-self:stretch;display:flex;align-items:center;justify-content:center;white-space:nowrap}#EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left button .ui-icon{position:relative;top:.5vw;width:18px;height:18px;margin-right:0}#EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left #OpenPermissionsDialog,#EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left #DeletePermissions{line-height:1.5}#EditorTabsContainer #PermissionEditor .field-control .container-selectable #CurrentPermissionsWrapper{min-height:15vw}}@media screen and (max-width:980px) and (min-width:0){thead>tr.ui-widget-header th div>span{font-size:2.8vw;white-space:nowrap}}@media screen and (max-width:980px) and (min-width:0){#EditorTabsContainer .field-control .container-normal .ui-icon.ui-icon-pencil.button-edit-markdown{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+");background-position:center;width:12px;height:12px;filter:invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%);top:8px;right:4px}#EditorTabsContainer .field-control .container-normal .ui-icon.ui-icon-image.button-upload-image{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiIvPjwvc3ZnPg==");background-position:center;width:12px;height:12px;filter:invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%);position:relative;left:-1px}}@media screen and (max-width:980px) and (min-width:0){#EditorTabsContainer{overflow:auto}#EditorComments{padding:0;margin:0}#EditorComments #CommentField .control-textarea{height:15vw}#EditorComments #CommentField .control-textarea::placeholder{font-size:2.6vw}}@media screen and (max-width:980px) and (min-width:0){.is-showMenu{overflow:hidden}.is-showMenu body{position:fixed;overflow:hidden}.bg-overlay{background:rgba(0,0,0,.5);position:fixed;top:0;left:0;z-index:301;width:100%;height:100%;display:none}#MainContainer{overflow:hidden}header#Header{position:fixed;top:0;z-index:1000;background-color:#fff;transition:all .5s ease}header#Header a#navtgl{top:8px;z-index:1000;transition:all .5s ease}header#Header a#navtgl::after{transition:all .5s ease}header#Header a#navtgl.on{transition:all .5s ease;position:fixed}header#Header a#navtgl.on::before{transition:all .5s ease;border-top:none;transform:translate(12.5%,50%) rotate(50deg)}header#Header a#navtgl.on::after{transition:all .5s ease;transform:translate(12.5%,0%) rotate(126deg)}#Navigations{transition:all .5s ease;max-height:100vh;height:100vh;position:absolute;top:0;right:-1000px;z-index:999;padding:5%;width:70%;padding-top:112px;opacity:0}#Navigations.open{opacity:1;padding-top:112px;right:0;height:100vh;margin:0;position:fixed;top:0;z-index:1000}}@media screen and (max-width:980px) and (min-width:0){#OutgoingMailsForm{width:100%;font-size:2.6vw}#OutgoingMailsForm .item h3.title-header{height:auto}#OutgoingMailsForm .item .content{padding:.2em;margin:0}#OutgoingMailsForm .item .content .field-auto,#OutgoingMailsForm .item .content .field-auto-thin{width:100%;margin-right:0;padding-right:0;padding-bottom:0;display:flex;flex-direction:column;height:auto}#OutgoingMailsForm .item .content .field-auto .field-label,#OutgoingMailsForm .item .content .field-auto-thin .field-label{float:none;padding:7px 7px 7px 0;width:100%;text-align:left;display:block}#OutgoingMailsForm .item .content .field-auto .field-label label,#OutgoingMailsForm .item .content .field-auto-thin .field-label label{font-weight:bold}#OutgoingMailsForm .item .content .field-auto .field-control,#OutgoingMailsForm .item .content .field-auto-thin .field-control{float:none;width:100%}#OutgoingMailsForm .item .content .field-auto .field-control .container-normal,#OutgoingMailsForm .item .content .field-auto-thin .field-control .container-normal{margin-right:0;width:100%}#OutgoingMailsForm .item .content .field-auto .field-control .container-normal .control-text,#OutgoingMailsForm .item .content .field-auto-thin .field-control .container-normal .control-text{min-height:0;height:auto}#OutgoingMailsForm .item .content .field-auto-thin{margin-left:0}#OutgoingMailsForm .item .content .field-wide{display:flex;flex-direction:column;padding:0}#OutgoingMailsForm .item .content .field-wide .field-label{padding:7px 0}#OutgoingMailsForm .item .content .field-wide .field-control .container-normal{margin-right:0;width:100%}}@media screen and (max-width:980px) and (min-width:0){#SiteMenu li.ui-sortable-handle{touch-action:unset}}@media screen and (max-width:980px) and (min-width:0){.message .close{top:unset;bottom:calc(50% - 8px);margin:auto}}@media screen and (max-width:980px) and (min-width:0){#EditorComments #CommentField .ui-icon.ui-icon-image.button-upload-image{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiIvPjwvc3ZnPg==");background-position:center;width:12px;height:12px;filter:invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%);position:relative;left:0}}@media screen and (max-width:980px) and (min-width:0){#Navigations.open{overflow-y:scroll}#Navigations #NavigationMenu #NewMenuContainer{background:unset;border:none}#Navigations #NavigationMenu #NewMenuContainer a{line-height:7vw}#Navigations #NavigationMenu li.sub-menu .ui-menu-item .ui-menu-item-wrapper{font-size:3vw;padding-left:6vw}}@media screen and (max-width:980px) and (min-width:0){#Editor .field-normal .field-control .container-normal input[type='checkbox'].control-checkbox{position:relative;margin-right:6px;margin-top:.3vw}}@media screen and (max-width:980px) and (min-width:0){#Editor #EditorTabsContainer .field-normal,#Editor #EditorTabsContainer .field-wide,#Editor #EditorTabsContainer .field-markdown{display:inline-block;margin-top:8px;padding-bottom:0}}@media screen and (max-width:980px) and (min-width:0){#ViewModeContainer #Calendar.both select{font-size:2.6vw}#ViewModeContainer #Calendar.both .field-label{min-width:30%;margin-right:15px}#ViewModeContainer #Calendar.both .field-auto-thin .field-control .container-normal{display:flex;align-items:center}#ViewModeContainer #Calendar.both .field-auto-thin:nth-child(3){flex:0 1 calc(64%)}#ViewModeContainer #Calendar.both .field-auto-thin:nth-child(3) .field-label{min-width:22%}#ViewModeContainer #Calendar.both .field-auto-thin:nth-child(3) .field-control{width:74%}#ViewModeContainer #Calendar.both .field-auto-thin:nth-child(4){flex:0 1 calc(33% + 1px);padding-top:2%}#ViewModeContainer #Calendar.both .field-auto-thin:nth-child(4) .field-control .container-normal{justify-content:flex-end}#ViewModeContainer #Calendar.both .field-auto-thin:nth-child(4) .field-control .container-normal #CalendarDate{margin-right:0;width:98%;font-size:2.6vw}#ViewModeContainer #Calendar.both button{flex:1 0 calc((100%/3) - 32px);margin:2% 10px 2% 10px}#ViewModeContainer .grid.fixed{width:100%}#ViewModeContainer .grid.fixed tbody tr td.container .item{touch-action:auto;min-height:50px}#ViewModeContainer .grid.fixed tbody tr td.container .item .title .ui-icon.ui-icon-pencil{margin-right:5px;background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMzBweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMzBweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+");background-position:center;width:36px;height:36px;filter:invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%)}#ViewModeContainer .grid.fixed tbody tr td.container .item .connection{min-height:50px}#ViewModeContainer .grid.fixed tbody tr td.container .dummy{height:50px}#ViewModeContainer .grid.fixed tbody tr td.container:first-child .item{margin-top:0;margin-bottom:5px}#ViewModeContainer .grid.fixed tbody tr td.container:not(:first-child) .item{margin-top:5px}thead th.calendar-header{overflow-x:hidden}}@media screen and (max-width:980px) and (min-width:0){#ViewModeContainer .both{column-gap:16px}#ViewModeContainer .both .field-auto-thin:first-child,#ViewModeContainer .both .field-auto-thin:nth-child(2){flex:0 1 calc(50% - 8px)}#ViewModeContainer .both .field-auto-thin:first-child .field-control,#ViewModeContainer .both .field-auto-thin:nth-child(2) .field-control{flex:1}#ViewModeContainer .both .field-auto-thin:first-child .field-control select,#ViewModeContainer .both .field-auto-thin:nth-child(2) .field-control select{max-width:100%}#ViewModeContainer .both .field-auto-thin:nth-child(3){row-gap:12px;flex-wrap:wrap}#ViewModeContainer .both .field-auto-thin:nth-child(3) .field-label{min-width:15%}#ViewModeContainer .both .field-auto-thin:nth-child(3) .field-auto-thin{display:flex;align-items:center;flex:1 0 100%}#ViewModeContainer .both .field-auto-thin:nth-child(3) .field-auto-thin #GanttStartDate{width:100%;font-size:2.6vw;margin-right:0}#ViewModeContainer .both .field-auto-thin:nth-child(3) button{flex:1}#ViewModeContainer .both .field-auto-thin:nth-child(3) button:last-child{margin-right:8px}#ViewModeContainer .both .field-auto-thin:nth-child(4){width:100%;padding-top:12px}#ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control{width:100%}#ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control .container-normal{width:100%;display:flex;align-items:center;column-gap:32px}#ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control .container-normal #GanttPeriod\,ui{width:99%;margin-top:0}#ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control .container-normal #GanttPeriod{margin:0}#GanttBody{max-height:70vh}#GanttBody text{font-size:2.6vw}#GanttBody .title text.summary{font-size:3vw}#GanttBody #GanttAxis{left:auto;position:sticky}}@media screen and (max-width:980px) and (min-width:0){#ViewModeContainer #Kamban.both .field-auto-thin select{font-size:2.6vw}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(1),#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(2),#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3),#ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField{width:100%;flex:0 1 calc(50% - 8px);flex-wrap:wrap;display:flex;row-gap:0}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(1) .field-label,#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(2) .field-label,#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3) .field-label,#ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField .field-label{width:100%}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(1) select,#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(2) select,#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3) select,#ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField select{max-width:100%}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3){padding-top:4%}#ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField{padding-top:4%}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(5){display:block;width:100%;padding-top:4%}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(5) .field-label{min-width:50%;margin-right:10px}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(5) select{max-width:100%}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(6),#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(7){width:calc(50% - 8px);padding-top:4%}#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(6) .container-normal,#ViewModeContainer #Kamban.both .field-auto-thin:nth-child(7) .container-normal{display:flex;align-items:center}#ViewModeContainer #Kamban.both #KambanBody #Grid tbody .kamban-row .kamban-container .kamban-item{overflow:hidden;padding:6px 30px 6px 5px;white-space:pre-line;touch-action:auto;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}#ViewModeContainer #Kamban.both #KambanBody #Grid tbody .kamban-row .kamban-container .kamban-item .ui-icon.ui-icon-pencil{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTMgMTcuNDZ2My4wNGMwIC4yOC4yMi41LjUuNWgzLjA0Yy4xMyAwIC4yNi0uMDUuMzUtLjE1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzLjE1IDE3LjFjLS4xLjEtLjE1LjIyLS4xNS4zNnpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz48L3N2Zz4=");background-position:center;width:36px;height:36px;filter:invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%);margin-right:0;top:-7px;right:-11px}}@media screen and (max-width:980px) and (min-width:0){#RecordSwitchers{display:flex;align-items:center}#RecordSwitchers #CurrentIndex{height:7.5vw;display:flex;align-items:center}}@media screen and (max-width:980px) and (min-width:0){#Editor #RecordHeader .user{display:flex;align-items:center}#Editor #RecordHeader .user .ui-icon-person{margin-right:.6vw}}@media screen and (max-width:980px) and (min-width:0){#OutgoingMailDialog .field-wide{padding-bottom:5px}#OutgoingMailDialog .field-wide .field-label{width:auto}#OutgoingMailDialog .field-wide .field-control{float:none}#OutgoingMailDialog .field-wide .control-basket,#OutgoingMailDialog .field-wide .container-normal{margin-left:15vw}#OutgoingMailDialog textarea{height:20vw}}@media screen and (max-width:980px) and (min-width:0){.show-password{top:calc(50% - 10px);right:10px}#LoginFieldSet input[type=checkbox]{transform:scale(1.2)}#LoginFieldSet input,#LoginFieldSet select{font-size:4vw}#Users_RememberMeField .container-normal{display:flex;align-items:center}}@media screen and (max-width:980px) and (min-width:0){#Navigations.open{padding-top:18vw}}@media screen and (max-width:980px) and (min-width:0){#ViewModeContainer .field-auto-thin>.field-label{padding:7px 2vw 7px 0}#CrosstabValueField .field-control{width:70%}#Crosstab .field-auto-thin p{margin-right:0%}#ViewModeContainer #Crosstab .field-auto-thin{width:100%;flex:0 1 calc(100%);padding-top:1vw}#ViewModeContainer #Crosstab .field-auto-thin .field-label{width:30%}#ViewModeContainer #Crosstab .field-auto-thin .field-control{width:70%}#ViewModeContainer #Crosstab .field-auto-thin .field-control input[type='checkbox'],#ViewModeContainer #Crosstab .field-auto-thin .field-control .field-auto-thin input[type='checkbox']{width:4vw;height:4vw;margin-left:2px}#CrosstabBody .grid>thead>tr:first-child>th:not(:first-child),#KambanBody .grid>thead>tr:first-child>th:not(:first-child){white-space:nowrap}}@media screen and (max-width:980px) and (min-width:0){#ImportSettingsDialog .control-checkbox+label{margin:1.8vw 0 0 1vw}#ImportSettingsDialog .control-checkbox{margin:2vw 0 2vw 2px}#ImportSettingsDialog .control-textbox{height:7vw;line-height:6.5vw}#ImportSettingsDialog .command-center{padding:2vw 0}}@media screen and (max-width:980px) and (min-width:0){#ExportSelectorDialog .command-center{padding:2vw 0}}@media screen and (max-width:980px) and (min-width:0){#ViewModeContainer #Grid .datepicker{width:35vw;font-size:4vw}}@media screen and (max-width:980px) and (min-width:0){#ViewModeContainer .both #TimeSeriesValueField,#ViewModeContainer .both #TimeSeriesChartTypeField,#ViewModeContainer .both #TimeSeriesHorizontalAxisField{width:100%}#ViewModeContainer .both #TimeSeriesValueField .field-label,#ViewModeContainer .both #TimeSeriesChartTypeField .field-label,#ViewModeContainer .both #TimeSeriesHorizontalAxisField .field-label{min-width:30%}#ViewModeContainer .both .field-auto-thin:first-child,#ViewModeContainer .both .field-auto-thin:nth-child(2){flex:0 1 calc(100%)}#ViewModeContainer .both .field-auto-thin:first-child .field-label,#ViewModeContainer .both .field-auto-thin:nth-child(2) .field-label{min-width:30%}#ViewModeContainer .both .field-auto-thin select{max-width:100%}#ViewModeContainer .both .field-auto-thin>.field-control{min-width:68%}} \ No newline at end of file diff --git a/Implem.Pleasanter/wwwroot/scripts/responsive.js b/Implem.Pleasanter/wwwroot/scripts/responsive.js index e265ca479..35b9a3ac7 100644 --- a/Implem.Pleasanter/wwwroot/scripts/responsive.js +++ b/Implem.Pleasanter/wwwroot/scripts/responsive.js @@ -1,16 +1,73 @@ - -$p.openResponsiveMenu = function () { +$p.openResponsiveMenu = function () { var t = document.getElementById('Navigations'); var t2 = document.getElementById('navtgl'); + const $body = $('body'); + const $header = $('#Header'); if (t.classList.contains('open') == true) { t.classList.remove('open'); t2.classList.remove('on'); + $body.removeClass('is-showMenu'); + if ($('.bg-overlay').length) { + $('.bg-overlay').remove(); + } } else { t.classList.add('open'); t2.classList.add('on'); + $body.addClass('is-showMenu'); + if (!$('.bg-overlay').length) { + $header.append(`
`); + } + $('.bg-overlay').css({ + 'display': 'block' + }); + if ($('.bg-overlay').length) { + $('.bg-overlay').on('click', function () { + $p.openResponsiveMenu(); + }); + } } } +$(document).ready(function () { + if ($p.responsive() && screen.width < 981) { + const heightHeader = $('#Header').length > 0 ? $('#Header').height() : 100; + $('#Application').css({ + 'padding-top': `${heightHeader}px` + }); + $(window).scroll(function () { + const scrollPosition = $(this).scrollTop(); + if (scrollPosition === 0) { + $('#Header').css({ + 'box-shadow': 'unset' + }); + } else if (scrollPosition > heightHeader) { + const $headerDummyIndex = $('body thead .ui-widget-header'); + $('#Header').css({ + 'box-shadow': 'rgba(0, 0, 0, 0.19) 0px 10px 20px, rgba(0, 0, 0, 0.23) 0px 6px 6px' + }); + if (window.location.pathname.includes('index')) { + $('body thead').css({ + 'top': `${heightHeader}px` + }); + $(document).ajaxComplete(function () { + if ($headerDummyIndex.length > 1) { + $($headerDummyIndex[1]).css({ + 'top': '0px', + 'display': 'none' + }); + } else { + $($headerDummyIndex[0]).css({ + 'top': '0px', + 'display': 'none' + }); + } + }); + } + } + }); + } +}); + $p.switchResponsive = function ($control) { var redirect = 1; var data = {}; @@ -44,4 +101,44 @@ if (screen.width < 981) { $p.send($('#ReduceAggregations')); } +$(document).ready(function () { + function handleSMobileViewport() { + if ($('#MainCommandsContainer').length > 0) { + if ($('#Message').length > 0) { + let $heightMainCommand = $('#MainCommandsContainer').outerHeight(); + let $heightFooter = $('#Footer').outerHeight(); + $(document).ajaxComplete(function () { + setTimeout(function () { + $heightMainCommand = $('#MainCommandsContainer').outerHeight(); + $heightFooter = $('#Footer').outerHeight(); + $('#Message').css( + 'bottom', parseInt($heightMainCommand + $heightFooter) + ); + }, 1); + }); + $('#Message').css( + 'bottom', parseInt($heightMainCommand + $heightFooter) + ); + } + } + } + if ($p.responsive() && screen.width < 981) { + handleSMobileViewport(); + } + window.addEventListener('resize', function () { + if ($p.responsive() && screen.width < 981) { + handleSMobileViewport(); + } + }); +}); +if ($p.responsive() && screen.width < 981) { + $('#ViewModeContainer').on('scroll', function () { + let scrollLeft = $(this).scrollLeft(); + if ($(this).scrollLeft() > 0) { + $('body > thead').css({ + 'left': `calc(5vw - ${scrollLeft}px)` + }); + } + }); +} diff --git a/Implem.Pleasanter/wwwroot/scripts/sitepackage.js b/Implem.Pleasanter/wwwroot/scripts/sitepackage.js index 9d1a2e41d..6d35419c3 100644 --- a/Implem.Pleasanter/wwwroot/scripts/sitepackage.js +++ b/Implem.Pleasanter/wwwroot/scripts/sitepackage.js @@ -6,6 +6,9 @@ width: '520px' }); } + if ($p.responsive() && screen.width < 981) { + $p.openResponsiveMenu(); + } } $p.importSitePackage = function ($control) { @@ -44,6 +47,9 @@ $p.openExportSitePackageDialog = function ($control) { } }); } + if ($p.responsive() && screen.width < 981) { + $p.openResponsiveMenu(); + } } $p.exportSitePackage = function () { diff --git a/Implem.Pleasanter/wwwroot/scripts/template.js b/Implem.Pleasanter/wwwroot/scripts/template.js index 1f69f36b2..e0479fd32 100644 --- a/Implem.Pleasanter/wwwroot/scripts/template.js +++ b/Implem.Pleasanter/wwwroot/scripts/template.js @@ -1,5 +1,8 @@ $p.templates = function ($control) { $p.send($control, 'MainForm'); + if ($p.responsive() && screen.width < 981) { + $p.openResponsiveMenu(); + } } $p.setTemplate = function () { diff --git a/Implem.Pleasanter/wwwroot/scripts/viewmode.js b/Implem.Pleasanter/wwwroot/scripts/viewmode.js index 797bc956c..dcff850ea 100644 --- a/Implem.Pleasanter/wwwroot/scripts/viewmode.js +++ b/Implem.Pleasanter/wwwroot/scripts/viewmode.js @@ -3,6 +3,9 @@ .replace('_action_', $control.attr('data-action').toLowerCase()); $p.ajax(url, 'post', $p.getData($control), $control); history.pushState(null, null, url); + if ($p.responsive() && screen.width < 981) { + $p.openResponsiveMenu(); + } } $p.changeViewSelector = function ($control) { diff --git a/Implem.Pleasanter/wwwroot/styles/responsive.css b/Implem.Pleasanter/wwwroot/styles/responsive.css index df66ede63..b1ad0bd02 100644 --- a/Implem.Pleasanter/wwwroot/styles/responsive.css +++ b/Implem.Pleasanter/wwwroot/styles/responsive.css @@ -62,11 +62,6 @@ margin: 10px 0px; float: left; } - @media screen and (max-width: 600px) and (min-width: 0px) { - #LoginFieldSet .field-wide { - min-height: 10vw !important; - } - } #StartGuide { display: none; } @@ -74,7 +69,7 @@ word-break: break-all; } div[role="dialog"] { - width: 100% !important; + width: 98% !important; z-index: 999; } #EnterPriseBanner, #SupportBanner, #CasesBanner { @@ -113,7 +108,10 @@ #ViewFilters>.field-auto-thin>.field-control { width: 100%;} #ViewFilters>.field-auto-thin>.field-label { width: 30%; text-align: left;} #ViewFilters>.field-auto-thin>.field-label+.field-control { width: 70%; } - .ui-multiselect { width: 98%!important; height: 6vw; } + .ui-multiselect { + width: 100% !important; + height: 6vw; + } .field-auto-thin input[type="checkbox"], .field-auto-thin input[type="radio"] { height: 2.6vw; width: 2.6vw; margin-right: 1vw; } @@ -156,8 +154,9 @@ .field-normal .control-text{ width: 100%; height: auto; padding: 1%; line-height: 1; } .control-textbox { height: auto; } -.ui-widget.ui-widget-content { background: #fff; font-size: 2.6vw; } - +.ui-widget.ui-widget-content { + font-size: 2.6vw; +} #Guide { font-size: 2.6vw; } .alert-success, @@ -171,14 +170,12 @@ .ui-tabs .ui-tabs-nav li { margin-bottom: 1%; padding-bottom: 0; -border:1px solid #111; -border-radius: 4px; + border-radius: 4px; } .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 1%; padding-bottom: 0; -border:1px solid #111; -border-radius: 4px; + border-radius: 4px; } .message { bottom: 140px; } } @@ -188,7 +185,6 @@ border-radius: 4px; body { min-width: 320px!important; } #Header { height: auto; position: relative; } - #Header #Logo { padding-bottom: 2%; } #CorpLogo { float: none; width: 30%;} #MainContainer { min-height: 100vh; } @@ -239,16 +235,6 @@ transition: .5s; background: none; } -#Header .ui-widget-header{ -background: #f3f3f3; -color:#111; -} - -.ui-widget-header{ -background: #817865; -color:#fff; -} - #NavigationMenu { float: none; margin-right: 0; @@ -261,32 +247,28 @@ color:#fff; color: #000; } -#NavigationMenu>li { -width: 100%; -height: auto; -display: block; -float: none; -position: relative; -color:#333; -} - -#NavigationMenu>li>div { -height: auto; -text-align: left; -line-height: 7vw; -color: #333; -font-weight: bold; -} - -#NavigationMenu>li>div:hover { background:none;} - -#NavigationMenu>li>div>a { -height: auto; -display: block; -color: #333; -text-decoration: none; -font-weight: bold; -} + #NavigationMenu > li { + width: 100%; + height: auto; + display: block; + float: none; + position: relative; + } + #NavigationMenu > li > div { + height: auto; + text-align: left; + line-height: 7vw; + font-weight: bold; + } + #NavigationMenu > li > div:hover { + background: none; + } + #NavigationMenu > li > div > a { + height: auto; + display: block; + text-decoration: none; + font-weight: bold; + } #NavigationMenu .menu { width: 100%; @@ -306,13 +288,6 @@ font-weight: normal; text-decoration: none; } -.ui-widget.ui-widget-content { -} - -.ui-widget-content { -color: #333; -} - .ui-menu .ui-menu-item { border-top: 1px solid #d19405; } @@ -332,8 +307,6 @@ border: 1px solid #d19405; width: 20vw; height: 20vw; text-align: center; -background-color: white; -border: solid 2px silver; border-radius: 0.5vw; float: none; margin: 6%; @@ -350,7 +323,6 @@ margin: 6%; width: 20vw!important; height: 20vw!important; background: #fff; -border: solid 2px #ffa500; border-radius: 5px;} @@ -358,8 +330,6 @@ border-radius: 5px;} width: 8vw; height: 3vw; top: -3vw; -background-color: #f8da4c; -border: solid 2px #ffa500; } #SiteMenu .nav-site.sites.to-parent{ @@ -615,18 +585,1056 @@ overflow: hidden; #KambanBody .grid>tbody td { min-width: 10vw; white-space: nowrap; } } -@media screen and (min-width: 981px) { +@media screen and (max-width: 980px) and (min-width: 0px) { + #Header { + padding: 0 calc(5vw); + } + #Header a#navtgl { + right: 5vw; + } + #Application, + #Footer { + padding-left: 5vw; + padding-right: 5vw; + } + #SiteMenu .nav-site { + margin: 5%; + } + :not(td) > div.field-control .container-normal { + margin-left: 0; + } + * { + line-height: 1.4; + } + .field-normal .control-textbox, + .field-normal .control-dropdown, + .field-normal .control-text, .field-control .control-textbox, + .field-control .control-dropdown, + .field-control .control-text, .container-normal .control-textbox, + .container-normal .control-dropdown, + .container-normal .control-text { + min-height: unset; + height: 6vw; + line-height: 6vw; + padding-top: 0; + padding-bottom: 0; + } + body { + font-size: 16px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #HeaderTitle { + font-size: 16px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + .command-center { + padding: 0; + } + .ui-dialog .ui-dialog-titlebar-close { + top: 0; + bottom: 0; + width: 5vw; + height: 5vw; + margin: auto 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewSelector { + font-size: 2.6vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Logo a { + align-items: center; + display: flex; + } + #Logo #ProductLogo { + font-size: 18px; + padding-left: 8px; + } + #CorpLogo { + float: none; + height: calc(8vw + 10px); + width: unset; + margin-top: 0; + } +} -.grid>thead>tr:first-child>th:first-child {width: 20px;} -#CrosstabBody .grid>thead>tr:first-child>th:first-child, -#KambanBody .grid>thead>tr:first-child>th:first-child {width: auto;} +@media screen and (max-width: 980px) and (min-width: 0px) { + #Editor .field-control .container-normal { + width: calc(100% - 20px); + } + #Editor .field-control .ui-icon.ui-icon-clock.current-time { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjEycHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjEycHgiIGZpbGw9IiMwMDAwMDAiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48Zz48Zz48cGF0aCBkPSJNMTIsMkM2LjUsMiwyLDYuNSwyLDEyczQuNSwxMCwxMCwxMHMxMC00LjUsMTAtMTBTMTcuNSwyLDEyLDJ6IE0xNi4yLDE2LjJMMTEsMTNWN2gxLjV2NS4ybDQuNSwyLjdMMTYuMiwxNi4yeiIvPjwvZz48L2c+PC9nPjwvc3ZnPg=="); + background-position: center; + width: 12px; + height: 12px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + top: calc(3vw - 3.5px); + right: -16px; + } + #Editor .field-control .ui-icon.ui-icon-person.current-user { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiAxMmMyLjIxIDAgNC0xLjc5IDQtNHMtMS43OS00LTQtNC00IDEuNzktNCA0IDEuNzkgNCA0IDR6bTAgMmMtMi42NyAwLTggMS4zNC04IDR2MmgxNnYtMmMwLTIuNjYtNS4zMy00LTgtNHoiLz48L3N2Zz4="); + background-position: center; + width: 12px; + height: 12px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + top: calc(3vw - 3.5px); + right: -16px; + } +} -.grid>thead>tr:first-child>th:not(:first-child) { white-space: nowrap; } -#CrosstabBody .grid>thead>tr:first-child>th:not(:first-child), -#KambanBody .grid>thead>tr:first-child>th:not(:first-child) { white-space: inherit; } +@media screen and (max-width: 980px) and (min-width: 0px) { + #FieldSetAddressBook #OutgoingMailDestinationForm .container-left { + width: 38vw; + } + #FieldSetAddressBook #OutgoingMailDestinationForm .container-right .command-left { + float: unset; + padding: 0; + } + #FieldSetAddressBook #OutgoingMailDestinationForm .container-right .command-left button { + margin: 2px; + } + #FieldSetAddressBook #OutgoingMailDestinationForm .container-right .container-selectable .wrapper { + height: 40vw; + } + #FieldSetAddressBook #OutgoingMailDestinationForm .container-right > * { + margin-left: 40vw; + } +} -.grid>tbody>tr td:not(:first-child) {white-space: nowrap; min-width: 40px;} -#CrosstabBody .grid>tbody>tr td:not(:first-child), -#KambanBody .grid>tbody>tr td:not(:first-child) { white-space: inherit; min-width:auto; } +@media screen and (max-width: 980px) and (min-width: 0px) { + #Issues_WorkValue { + width: 100px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + body::before { + content: ''; + position: fixed; + width: 5vw; + height: 50vh; + top: 0; + left: 0; + background: white; + z-index: 200; + } + body::after { + content: ''; + position: fixed; + width: 5vw; + height: 50vh; + top: 0; + right: 0; + background: white; + z-index: 700; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Users_LoginId, + #Users_Password { + height: 40px; + } + #LoginMessage span { + font-size: 3.5vw; + } + #PortalLink { + font-size: 3.5vw; + top: 3vw; + } + #LoginFieldSet { + margin: 65px auto 20px auto; + } + #LoginFieldSet input[type=checkbox] { + margin: auto 0; + margin-left: 1.2vw; + } + #LoginFieldSet button { + margin-top: 0; + } + #LoginFieldSet .field-wide, + #LoginFieldSet .field-normal { + margin: 0px 0px; + } + #LoginFieldSet .field-normal .control-checkbox + label { + margin: auto 0; + margin-left: 4vw; + padding: 0; + } + #Logins .field-label { + width: 100%; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Editor .field-markdown > .field-label > label { + font-weight: bold; + } + #Editor .field-control .unit { + font-size: 2.6vw; + padding-top: calc((18px - 1.4em) / 2); + } + #Editor .ui-spinner .control-spinner { + height: 100%; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #GridCheckAll { + margin-top: 0; + } + label[for="GridCheckAll"] { + margin: 0; + } + #Footer { + font-size: 2.8vw; + height: auto; + } + #MainCommandsContainer { + bottom: calc(2.8vw * 1.4 + 10px); + } + body > thead > tr { + font-size: 0.75em; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #SiteImageSettingsEditor .field-auto-thin, #GridSettingsEditor .field-auto-thin, #FiltersSettingsEditor .field-auto-thin, #EditorSettingsEditor .field-auto-thin, + #LinksSettingsEditor .field-auto-thin, #HistoriesSettingsEditor .field-auto-thin, #FormulasSettingsEditor .field-auto-thin, #ViewsSettingsEditor .field-auto-thin, + #ImportsSettingsEditor .field-auto-thin, #ExportsSettingsEditor .field-auto-thin, #CalendarSettingsEditor .field-auto-thin, #CrosstabSettingsEditor .field-auto-thin, + #GanttSettingsEditor .field-auto-thin, #BurnDownSettingsEditor .field-auto-thin, #TimeSeriesSettingsEditor .field-auto-thin, #KambanSettingsEditor .field-auto-thin, + #ImageLibSettingsEditor .field-auto-thin, #SearchSettingsEditor .field-auto-thin, #StylesSettingsEditor .field-auto-thin, #ScriptsSettingsEditor .field-auto-thin, + #PublishSettingsEditor .field-auto-thin, #FieldSetSiteAccessControl .field-auto-thin { + padding-right: 0; + height: auto; + display: flex; + align-items: center; + clear: both; + } + #SiteImageSettingsEditor .field-auto-thin .container-normal, #GridSettingsEditor .field-auto-thin .container-normal, #FiltersSettingsEditor .field-auto-thin .container-normal, #EditorSettingsEditor .field-auto-thin .container-normal, + #LinksSettingsEditor .field-auto-thin .container-normal, #HistoriesSettingsEditor .field-auto-thin .container-normal, #FormulasSettingsEditor .field-auto-thin .container-normal, #ViewsSettingsEditor .field-auto-thin .container-normal, + #ImportsSettingsEditor .field-auto-thin .container-normal, #ExportsSettingsEditor .field-auto-thin .container-normal, #CalendarSettingsEditor .field-auto-thin .container-normal, #CrosstabSettingsEditor .field-auto-thin .container-normal, + #GanttSettingsEditor .field-auto-thin .container-normal, #BurnDownSettingsEditor .field-auto-thin .container-normal, #TimeSeriesSettingsEditor .field-auto-thin .container-normal, #KambanSettingsEditor .field-auto-thin .container-normal, + #ImageLibSettingsEditor .field-auto-thin .container-normal, #SearchSettingsEditor .field-auto-thin .container-normal, #StylesSettingsEditor .field-auto-thin .container-normal, #ScriptsSettingsEditor .field-auto-thin .container-normal, + #PublishSettingsEditor .field-auto-thin .container-normal, #FieldSetSiteAccessControl .field-auto-thin .container-normal { + width: 100%; + } + #SiteImageSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #GridSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #FiltersSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #EditorSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, + #LinksSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #HistoriesSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #FormulasSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #ViewsSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, + #ImportsSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #ExportsSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #CalendarSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #CrosstabSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, + #GanttSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #BurnDownSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #TimeSeriesSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #KambanSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, + #ImageLibSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #SearchSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #StylesSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #ScriptsSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, + #PublishSettingsEditor .field-auto-thin .container-normal .control-checkbox ~ label, #FieldSetSiteAccessControl .field-auto-thin .container-normal .control-checkbox ~ label { + display: unset; + float: unset; + width: auto; + } + #SiteImageSettingsEditor .field-auto-thin .field-label ~ .field-control, #GridSettingsEditor .field-auto-thin .field-label ~ .field-control, #FiltersSettingsEditor .field-auto-thin .field-label ~ .field-control, #EditorSettingsEditor .field-auto-thin .field-label ~ .field-control, + #LinksSettingsEditor .field-auto-thin .field-label ~ .field-control, #HistoriesSettingsEditor .field-auto-thin .field-label ~ .field-control, #FormulasSettingsEditor .field-auto-thin .field-label ~ .field-control, #ViewsSettingsEditor .field-auto-thin .field-label ~ .field-control, + #ImportsSettingsEditor .field-auto-thin .field-label ~ .field-control, #ExportsSettingsEditor .field-auto-thin .field-label ~ .field-control, #CalendarSettingsEditor .field-auto-thin .field-label ~ .field-control, #CrosstabSettingsEditor .field-auto-thin .field-label ~ .field-control, + #GanttSettingsEditor .field-auto-thin .field-label ~ .field-control, #BurnDownSettingsEditor .field-auto-thin .field-label ~ .field-control, #TimeSeriesSettingsEditor .field-auto-thin .field-label ~ .field-control, #KambanSettingsEditor .field-auto-thin .field-label ~ .field-control, + #ImageLibSettingsEditor .field-auto-thin .field-label ~ .field-control, #SearchSettingsEditor .field-auto-thin .field-label ~ .field-control, #StylesSettingsEditor .field-auto-thin .field-label ~ .field-control, #ScriptsSettingsEditor .field-auto-thin .field-label ~ .field-control, + #PublishSettingsEditor .field-auto-thin .field-label ~ .field-control, #FieldSetSiteAccessControl .field-auto-thin .field-label ~ .field-control { + margin-left: 10px; + } + #SiteImageSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #GridSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #FiltersSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #EditorSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, + #LinksSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #HistoriesSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #FormulasSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #ViewsSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, + #ImportsSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #ExportsSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #CalendarSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #CrosstabSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, + #GanttSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #BurnDownSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #TimeSeriesSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #KambanSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, + #ImageLibSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #SearchSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #StylesSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #ScriptsSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, + #PublishSettingsEditor .field-auto-thin .field-label ~ .field-control .container-normal, #FieldSetSiteAccessControl .field-auto-thin .field-label ~ .field-control .container-normal { + width: 100%; + } + #FieldSetGeneral .field-control .container-normal .control-checkbox ~ label { + width: auto; + } + #GridSettingsEditor #GridEditorType { + max-width: unset; + } + #SiteImageSettingsEditor #SiteImage { + width: 100%; + height: 7vw; + } + #SiteImageSettingsEditor #SetSiteImage { + margin-right: 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Aggregations { + display: flex; + flex-wrap: wrap; + row-gap: 5px; + justify-content: flex-start; + align-items: center; + } + #Aggregations span.label { + flex: 1 0 auto; + margin: 0; + text-align: center; + align-self: stretch; + display: flex; + align-items: center; + justify-content: flex-start; + } + #Aggregations span.data { + flex: 1 0 auto; + margin: 0; + align-self: stretch; + display: flex; + align-items: center; + justify-content: flex-start; + height: auto; + } + #Aggregations span.data.no-choice { + flex-basis: auto; + align-self: stretch; + } + #Aggregations span.data.link span { + font-weight: bold; + } + #Aggregations #ReduceAggregations { + width: 100%; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer .grid { + vertical-align: middle; + } + #ViewModeContainer .grid tr td:first-child { + padding: 6px; + } + input[type='checkbox'], .field-auto-thin input[type='checkbox'] { + width: 3vw; + height: 3vw; + } + .field-auto-thin input[type='checkbox'] + label { + padding-top: 2px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #SearchField #Search { + font-size: 3vw; + width: 100%; + } + #SearchField #Search::placeholder { + font-size: 3vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewFilters #ViewFilters_Reset { + margin-left: auto; + margin-right: 0; + } + #ViewFilters .field-auto-thin { + width: 50%; + } + #ViewFilters .field-auto-thin .field-control .container-normal { + display: flex; + align-items: center; + } + #ViewFilters .field-auto-thin .field-control .container-normal input[type='checkbox'] { + margin-right: 4px; + margin-top: 1px; + } + #ViewFilters .field-auto-thin .field-control .container-normal .ui-widget.ui-state-default.ui-multiselect, #ViewFilters .field-auto-thin .field-control .container-normal .control-textbox { + height: 6vw; + font-size: 2.6vw; + } + #ViewFilters #ViewFilters_SearchField { + width: 100%; + } + #ViewFilters #ViewFilters_SearchField p.field-label { + width: 17%; + } + #ViewFilters #ViewFilters_SearchField .field-control { + width: 100%; + } + #ViewFilters > .field-auto-thin:nth-child(odd) { + padding-right: 2px; + } + #ViewFilters > .field-auto-thin:nth-child(even) { + padding-left: 2px; + } + .ui-multiselect-menu .ui-helper-reset { + position: relative; + } + .ui-multiselect-menu .ui-helper-reset li { + width: 100%; + } + .ui-multiselect-menu .ui-helper-reset li > label span { + position: relative; + top: -4px; + } + .ui-multiselect-menu .ui-helper-reset li .ui-multiselect-all, + .ui-multiselect-menu .ui-helper-reset li .ui-multiselect-none { + width: 100%; + display: flex; + align-items: center; + } + .ui-multiselect-menu .ui-helper-reset li .ui-multiselect-all span:last-child, + .ui-multiselect-menu .ui-helper-reset li .ui-multiselect-none span:last-child { + padding-left: 10px; + } + .ui-multiselect-menu .ui-helper-reset li .ui-multiselect-close { + position: absolute; + top: 8px; + right: 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #EditorTabsContainer .legend.applied { + display: flex; + align-items: center; + font-weight: bold; + } + #EditorTabsContainer #PermissionEditor .field-vertical:first-child > .field-control { + border-bottom: 1px solid #d19405; + padding-bottom: 2vw; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left { + display: flex; + align-items: center; + flex-wrap: wrap; + width: 100%; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left #SearchPermissionElements { + margin: 2px 1vw 2px 6vw; + height: 7vw; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left button { + align-self: stretch; + display: flex; + align-items: center; + justify-content: center; + white-space: nowrap; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left button .ui-icon { + position: relative; + top: 0.5vw; + width: 18px; + height: 18px; + margin-right: 0px; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left #OpenPermissionsDialog, + #EditorTabsContainer #PermissionEditor .field-control .container-selectable .command-left #DeletePermissions { + line-height: 1.5; + } + #EditorTabsContainer #PermissionEditor .field-control .container-selectable #CurrentPermissionsWrapper { + min-height: 15vw; + } +} +@media screen and (max-width: 980px) and (min-width: 0px) { + thead > tr.ui-widget-header th div > span { + font-size: 2.8vw; + white-space: nowrap; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #EditorTabsContainer .field-control .container-normal .ui-icon.ui-icon-pencil.button-edit-markdown { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+"); + background-position: center; + width: 12px; + height: 12px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + top: 8px; + right: 4px; + } + #EditorTabsContainer .field-control .container-normal .ui-icon.ui-icon-image.button-upload-image { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiIvPjwvc3ZnPg=="); + background-position: center; + width: 12px; + height: 12px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + position: relative; + left: -1px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #EditorTabsContainer { + overflow: auto; + } + #EditorComments { + padding: 0; + margin: 0; + } + #EditorComments #CommentField .control-textarea { + height: 15vw; + } + #EditorComments #CommentField .control-textarea::placeholder { + font-size: 2.6vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + .is-showMenu { + overflow: hidden; + } + .is-showMenu body { + position: fixed; + overflow: hidden; + } + .bg-overlay { + background: rgba(0, 0, 0, 0.5); + position: fixed; + top: 0; + left: 0; + z-index: 301; + width: 100%; + height: 100%; + display: none; + } + #MainContainer { + overflow: hidden; + } + header#Header { + position: fixed; + top: 0; + z-index: 1000; + background-color: #fff; + transition: all 0.5s ease; + } + header#Header a#navtgl { + top: 8px; + z-index: 1000; + transition: all 0.5s ease; + } + header#Header a#navtgl::after { + transition: all 0.5s ease; + } + header#Header a#navtgl.on { + transition: all 0.5s ease; + position: fixed; + } + header#Header a#navtgl.on::before { + transition: all 0.5s ease; + border-top: none; + transform: translate(12.5%, 50%) rotate(50deg); + } + header#Header a#navtgl.on::after { + transition: all 0.5s ease; + transform: translate(12.5%, 0%) rotate(126deg); + } + #Navigations { + transition: all 0.5s ease; + max-height: 100vh; + height: 100vh; + position: absolute; + top: 0; + right: -1000px; + z-index: 999; + padding: 5%; + width: 70%; + padding-top: 112px; + opacity: 0; + } + #Navigations.open { + opacity: 1; + padding-top: 112px; + right: 0; + height: 100vh; + margin: 0; + position: fixed; + top: 0; + z-index: 1000; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #OutgoingMailsForm { + width: 100%; + font-size: 2.6vw; + } + #OutgoingMailsForm .item h3.title-header { + height: auto; + } + #OutgoingMailsForm .item .content { + padding: 0.2em; + margin: 0; + } + #OutgoingMailsForm .item .content .field-auto, + #OutgoingMailsForm .item .content .field-auto-thin { + width: 100%; + margin-right: 0; + padding-right: 0; + padding-bottom: 0; + display: flex; + flex-direction: column; + height: auto; + } + #OutgoingMailsForm .item .content .field-auto .field-label, + #OutgoingMailsForm .item .content .field-auto-thin .field-label { + float: none; + padding: 7px 7px 7px 0; + width: 100%; + text-align: left; + display: block; + } + #OutgoingMailsForm .item .content .field-auto .field-label label, + #OutgoingMailsForm .item .content .field-auto-thin .field-label label { + font-weight: bold; + } + #OutgoingMailsForm .item .content .field-auto .field-control, + #OutgoingMailsForm .item .content .field-auto-thin .field-control { + float: none; + width: 100%; + } + #OutgoingMailsForm .item .content .field-auto .field-control .container-normal, + #OutgoingMailsForm .item .content .field-auto-thin .field-control .container-normal { + margin-right: 0; + width: 100%; + } + #OutgoingMailsForm .item .content .field-auto .field-control .container-normal .control-text, + #OutgoingMailsForm .item .content .field-auto-thin .field-control .container-normal .control-text { + min-height: 0; + height: auto; + } + #OutgoingMailsForm .item .content .field-auto-thin { + margin-left: 0; + } + #OutgoingMailsForm .item .content .field-wide { + display: flex; + flex-direction: column; + padding: 0; + } + #OutgoingMailsForm .item .content .field-wide .field-label { + padding: 7px 0; + } + #OutgoingMailsForm .item .content .field-wide .field-control .container-normal { + margin-right: 0; + width: 100%; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #SiteMenu li.ui-sortable-handle { + touch-action: unset; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + .message .close { + top: unset; + bottom: calc(50% - 8px); + margin: auto; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #EditorComments #CommentField .ui-icon.ui-icon-image.button-upload-image { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMSAxOVY1YzAtMS4xLS45LTItMi0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUtNC41eiIvPjwvc3ZnPg=="); + background-position: center; + width: 12px; + height: 12px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + position: relative; + left: 0px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Navigations.open { + overflow-y: scroll; + } + #Navigations #NavigationMenu #NewMenuContainer { + background: unset; + border: none; + } + #Navigations #NavigationMenu #NewMenuContainer a { + line-height: 7vw; + } + #Navigations #NavigationMenu li.sub-menu .ui-menu-item .ui-menu-item-wrapper { + font-size: 3vw; + padding-left: 6vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Editor .field-normal .field-control .container-normal input[type='checkbox'].control-checkbox { + position: relative; + margin-right: 6px; + margin-top: .3vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Editor #EditorTabsContainer .field-normal, #Editor #EditorTabsContainer .field-wide, #Editor #EditorTabsContainer .field-markdown { + display: inline-block; + margin-top: 8px; + padding-bottom: 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer #Calendar.both select { + font-size: 2.6vw; + } + #ViewModeContainer #Calendar.both .field-label { + min-width: 30%; + margin-right: 15px; + } + #ViewModeContainer #Calendar.both .field-auto-thin .field-control .container-normal { + display: flex; + align-items: center; + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(3) { + flex: 0 1 calc(64%); + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(3) .field-label { + min-width: 22%; + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(3) .field-control { + width: 74%; + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(4) { + flex: 0 1 calc(33% + 1px); + padding-top: 2%; + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(4) .field-control .container-normal { + justify-content: flex-end; + } + #ViewModeContainer #Calendar.both .field-auto-thin:nth-child(4) .field-control .container-normal #CalendarDate { + margin-right: 0; + width: 98%; + font-size: 2.6vw; + } + #ViewModeContainer #Calendar.both button { + flex: 1 0 calc((100% / 3) - 32px); + margin: 2% 10px 2% 10px; + } + #ViewModeContainer .grid.fixed { + width: 100%; + } + #ViewModeContainer .grid.fixed tbody tr td.container .item { + touch-action: auto; + min-height: 50px; + } + #ViewModeContainer .grid.fixed tbody tr td.container .item .title .ui-icon.ui-icon-pencil { + margin-right: 5px; + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMzBweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMzBweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+"); + background-position: center; + width: 36px; + height: 36px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + } + #ViewModeContainer .grid.fixed tbody tr td.container .item .connection { + min-height: 50px; + } + #ViewModeContainer .grid.fixed tbody tr td.container .dummy { + height: 50px; + } + #ViewModeContainer .grid.fixed tbody tr td.container:first-child .item { + margin-top: 0; + margin-bottom: 5px; + } + #ViewModeContainer .grid.fixed tbody tr td.container:not(:first-child) .item { + margin-top: 5px; + } + thead th.calendar-header { + overflow-x: hidden; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer .both { + column-gap: 16px; + } + #ViewModeContainer .both .field-auto-thin:first-child, #ViewModeContainer .both .field-auto-thin:nth-child(2) { + flex: 0 1 calc(50% - 8px); + } + #ViewModeContainer .both .field-auto-thin:first-child .field-control, #ViewModeContainer .both .field-auto-thin:nth-child(2) .field-control { + flex: 1; + } + #ViewModeContainer .both .field-auto-thin:first-child .field-control select, #ViewModeContainer .both .field-auto-thin:nth-child(2) .field-control select { + max-width: 100%; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) { + row-gap: 12px; + flex-wrap: wrap; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) .field-label { + min-width: 15%; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) .field-auto-thin { + display: flex; + align-items: center; + flex: 1 0 100%; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) .field-auto-thin #GanttStartDate { + width: 100%; + font-size: 2.6vw; + margin-right: 0; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) button { + flex: 1; + } + #ViewModeContainer .both .field-auto-thin:nth-child(3) button:last-child { + margin-right: 8px; + } + #ViewModeContainer .both .field-auto-thin:nth-child(4) { + width: 100%; + padding-top: 12px; + } + #ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control { + width: 100%; + } + #ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control .container-normal { + width: 100%; + display: flex; + align-items: center; + column-gap: 32px; + } + #ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control .container-normal #GanttPeriod\,ui { + width: 99%; + margin-top: 0; + } + #ViewModeContainer .both .field-auto-thin:nth-child(4) .field-control .container-normal #GanttPeriod { + margin: 0; + } + #GanttBody { + max-height: 70vh; + } + #GanttBody text { + font-size: 2.6vw; + } + #GanttBody .title text.summary { + font-size: 3vw; + } + #GanttBody #GanttAxis { + left: auto; + position: sticky; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer #Kamban.both .field-auto-thin select { + font-size: 2.6vw; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(1), #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(2), #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3), #ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField { + width: 100%; + flex: 0 1 calc(50% - 8px); + flex-wrap: wrap; + display: flex; + row-gap: 0; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(1) .field-label, #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(2) .field-label, #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3) .field-label, #ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField .field-label { + width: 100%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(1) select, #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(2) select, #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3) select, #ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField select { + max-width: 100%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(3) { + padding-top: 4%; + } + #ViewModeContainer #Kamban.both .field-auto-thin#KambanValueField { + padding-top: 4%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(5) { + display: block; + width: 100%; + padding-top: 4%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(5) .field-label { + min-width: 50%; + margin-right: 10px; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(5) select { + max-width: 100%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(6), #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(7) { + width: calc(50% - 8px); + padding-top: 4%; + } + #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(6) .container-normal, #ViewModeContainer #Kamban.both .field-auto-thin:nth-child(7) .container-normal { + display: flex; + align-items: center; + } + #ViewModeContainer #Kamban.both #KambanBody #Grid tbody .kamban-row .kamban-container .kamban-item { + overflow: hidden; + padding: 6px 30px 6px 5px; + white-space: pre-line; + touch-action: auto; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + } + #ViewModeContainer #Kamban.both #KambanBody #Grid tbody .kamban-row .kamban-container .kamban-item .ui-icon.ui-icon-pencil { + background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTJweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTJweCIgZmlsbD0iIzAwMDAwMCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTMgMTcuNDZ2My4wNGMwIC4yOC4yMi41LjUuNWgzLjA0Yy4xMyAwIC4yNi0uMDUuMzUtLjE1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzLjE1IDE3LjFjLS4xLjEtLjE1LjIyLS4xNS4zNnpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz48L3N2Zz4="); + background-position: center; + width: 36px; + height: 36px; + filter: invert(69%) sepia(77%) saturate(3818%) hue-rotate(12deg) brightness(97%) contrast(96%); + margin-right: 0; + top: -7px; + right: -11px; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #RecordSwitchers { + display: flex; + align-items: center; + } + #RecordSwitchers #CurrentIndex { + height: 7.5vw; + display: flex; + align-items: center; + } +} + +@media screen and (max-width: 980px) and (min-width: 0) { + #Editor #RecordHeader .user { + display: flex; + align-items: center; + } + #Editor #RecordHeader .user .ui-icon-person { + margin-right: 0.6vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #OutgoingMailDialog .field-wide { + padding-bottom: 5px; + } + #OutgoingMailDialog .field-wide .field-label { + width: auto; + } + #OutgoingMailDialog .field-wide .field-control { + float: none; + } + #OutgoingMailDialog .field-wide .control-basket, + #OutgoingMailDialog .field-wide .container-normal { + margin-left: 15vw; + } + #OutgoingMailDialog textarea { + height: 20vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + .show-password { + top: calc(50% - 10px); + right: 10px; + } + #LoginFieldSet input[type=checkbox] { + transform: scale(1.2); + } + #LoginFieldSet input, + #LoginFieldSet select { + font-size: 4vw; + } + #Users_RememberMeField .container-normal { + display: flex; + align-items: center; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #Navigations.open { + padding-top: 18vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer .field-auto-thin > .field-label { + padding: 7px 2vw 7px 0; + } + #CrosstabValueField .field-control { + width: 70%; + } + #Crosstab .field-auto-thin p { + margin-right: 0%; + } + #ViewModeContainer #Crosstab .field-auto-thin { + width: 100%; + flex: 0 1 calc(100%); + padding-top: 1vw; + } + #ViewModeContainer #Crosstab .field-auto-thin .field-label { + width: 30%; + } + #ViewModeContainer #Crosstab .field-auto-thin .field-control { + width: 70%; + } + #ViewModeContainer #Crosstab .field-auto-thin .field-control input[type='checkbox'], + #ViewModeContainer #Crosstab .field-auto-thin .field-control .field-auto-thin input[type='checkbox'] { + width: 4vw; + height: 4vw; + margin-left: 2px; + } + #CrosstabBody .grid > thead > tr:first-child > th:not(:first-child), + #KambanBody .grid > thead > tr:first-child > th:not(:first-child) { + white-space: nowrap; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ImportSettingsDialog .control-checkbox + label { + margin: 1.8vw 0 0 1vw; + } + #ImportSettingsDialog .control-checkbox { + margin: 2vw 0 2vw 2px; + } + #ImportSettingsDialog .control-textbox { + height: 7vw; + line-height: 6.5vw; + } + #ImportSettingsDialog .command-center { + padding: 2vw 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ExportSelectorDialog .command-center { + padding: 2vw 0; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer #Grid .datepicker { + width: 35vw; + font-size: 4vw; + } +} + +@media screen and (max-width: 980px) and (min-width: 0px) { + #ViewModeContainer .both #TimeSeriesValueField, + #ViewModeContainer .both #TimeSeriesChartTypeField, + #ViewModeContainer .both #TimeSeriesHorizontalAxisField { + width: 100%; + } + #ViewModeContainer .both #TimeSeriesValueField .field-label, + #ViewModeContainer .both #TimeSeriesChartTypeField .field-label, + #ViewModeContainer .both #TimeSeriesHorizontalAxisField .field-label { + min-width: 30%; + } + #ViewModeContainer .both .field-auto-thin:first-child, + #ViewModeContainer .both .field-auto-thin:nth-child(2) { + flex: 0 1 calc(100%); + } + #ViewModeContainer .both .field-auto-thin:first-child .field-label, + #ViewModeContainer .both .field-auto-thin:nth-child(2) .field-label { + min-width: 30%; + } + #ViewModeContainer .both .field-auto-thin select { + max-width: 100%; + } + #ViewModeContainer .both .field-auto-thin > .field-control { + min-width: 68%; + } } \ No newline at end of file diff --git a/Implem.TestAutomation/implem.TestAutomation.csproj b/Implem.TestAutomation/implem.TestAutomation.csproj index 5c81a3fcf..8629e360a 100644 --- a/Implem.TestAutomation/implem.TestAutomation.csproj +++ b/Implem.TestAutomation/implem.TestAutomation.csproj @@ -4,9 +4,9 @@ Exe net6.0 Copyright © Implem Inc 2014 - 2023 - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 Linux
diff --git a/Rds/Implem.IRds/Implem.IRds.csproj b/Rds/Implem.IRds/Implem.IRds.csproj index 378a29b06..868e0ea86 100644 --- a/Rds/Implem.IRds/Implem.IRds.csproj +++ b/Rds/Implem.IRds/Implem.IRds.csproj @@ -3,9 +3,9 @@ net6.0 Copyright © Implem Inc 2014 - 2023 - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 disable diff --git a/Rds/Implem.PostgreSql/Implem.PostgreSql.csproj b/Rds/Implem.PostgreSql/Implem.PostgreSql.csproj index cd6a0c9ef..a0ecc9983 100644 --- a/Rds/Implem.PostgreSql/Implem.PostgreSql.csproj +++ b/Rds/Implem.PostgreSql/Implem.PostgreSql.csproj @@ -3,9 +3,9 @@ net6.0 Copyright © Implem Inc 2014 - 2023 - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 disable diff --git a/Rds/Implem.SqlServer/Implem.SqlServer.csproj b/Rds/Implem.SqlServer/Implem.SqlServer.csproj index 315a343ba..b7880a036 100644 --- a/Rds/Implem.SqlServer/Implem.SqlServer.csproj +++ b/Rds/Implem.SqlServer/Implem.SqlServer.csproj @@ -3,9 +3,9 @@ net6.0 Copyright © Implem Inc 2014 - 2023 - 1.3.46.1 - 1.3.46.1 - 1.3.46.1 + 1.3.47.0 + 1.3.47.0 + 1.3.47.0 disable